Connect'ten gelen tek-kullanımlık code'u, sunucu-sunucu bir istekle kalıcı credential'lara çevirirsin: apiKey, webhookSecret, tenantId ve gerçekten verilen scopes. Bu credential'ları tenant başına saklarsın.
POST https://<runtime>/plugin-api/oauth/token
Content-Type: application/json
{
"grant_type": "authorization_code",
"code": "<connect ile gelen tek-kullanımlık code>",
"client_id": "<pluginId>",
"client_secret": "<portalda üretilen cs_...>"
}200 OK
{
"tokenType": "...", // token tipi
"tenantId": "...", // tenant kimliği (kurulumu bununla eşle)
"pluginId": "...", // eklenti (client) id
"version": "...", // kurulum manifest sürümü
"scopes": ["orders:read", "events:subscribe", "..."], // gerçekten verilen yetkiler
"apiKey": "...", // bu tenant için Callback API çağrılarında kullan
"webhookSecret": "..." // bu tenant'ın webhook + session token imzası
}apiKey — bu tenant için Callback API çağrılarında kullanılır.webhookSecret — webhook + hook imza doğrulaması ve session token doğrulaması.tenantId — tenant kimliği; kurulumu ve gelen event'leri bununla eşle.scopes — kurulumda fiilen verilen yetkiler (manifest'te istediğinin alt kümesi olabilir)./connect'te aldığın code + client_id + client_secret ile POST et.tenantId, apiKey, webhookSecret, scopes) tenantId başına güvenli sakla.scopes'a göre özelliklerini koşullu çalıştır (verilmeyen yetkiyi varsayma).code tek kullanımlıktır; exchange başarısız olursa kullanıcıyı yeniden Connect'e yönlendir.client_secret yalnız bu sunucu çağrısında kullanılır.