Pencarian hanya dimuat saat digunakan. Jelajahi semua kategori di bawah.

Akun dan ruang kerja

Buat kunci API penerus

Buat penerus untuk kunci API (id) dengan rahasia baru yang dikembalikan sekali serta kemampuan dan batas ruang kerja yang sama; secara opsional gunakan nama atau masa berlaku baru (maksimal 365 hari, 30 untuk kunci buatan agen). Kunci asli tidak dicabut. Memerlukan izin Kelola kunci API.

POST /identity-api/api-keys/renew

Kontrak ditinjau: · sha256:563d2d581da0ad29

Ringkasan

Buat penerus untuk kunci API (id) dengan rahasia baru yang dikembalikan sekali serta kemampuan dan batas ruang kerja yang sama; secara opsional gunakan nama atau masa berlaku baru (maksimal 365 hari, 30 untuk kunci buatan agen). Kunci asli tidak dicabut. Memerlukan izin Kelola kunci API.

Respons HTTP berhasil dapat berarti permintaan diterima, bukan selesai. Untuk pekerjaan latar belakang, simpan ID yang dikembalikan dan periksa operasi yang sama sampai selesai. Postingan terjadwal atau diterima baru dipublikasikan setelah platform mengonfirmasi; timeout klien tidak membuktikan hasilnya.

Autentikasi dan izin

Jenis kredensial yang diterima
user_session, delegated_oauth
Kemampuan yang didelegasikan
agent:manage_api_keys
Peran ruang kerja minimum
Tidak ada peran ruang kerja minimum dalam kontrak ini; pemeriksaan kepemilikan dan izin tetap berlaku.
Cakupan akses
Kewenangan tingkat akun
Persetujuan seluruh ruang kerja diperlukan
Ya
Mengubah status
Ya
Saat operasi selesai
synchronous_http_response

Token hanya dapat menggunakan hak pemiliknya. Setiap permintaan memeriksa keanggotaan ruang kerja, kepemilikan sumber daya, ruang kerja terpilih, dan kemampuan yang diberikan. Profil core dan full mengubah alat yang ditampilkan; tidak memberikan akses.

Kolom permintaan

Wajib berarti wajib dalam objek induk dan cabang yang dipilih. Anak wajib tidak membuat induk opsional menjadi wajib. Aturan dan nama kolom di bawah disalin dari kontrak.

Kolom permintaan
Kolom / cabangJenis / wajibBatasan
$objectWajib dalam induk
  • additionalProperties: false
idstringWajib dalam induk
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
namestringOpsional / item
  • minLength: 1
  • maxLength: 80
lifetime_daysintegerOpsional / item

Hari sampai penerus kedaluwarsa (1-365, default 365; maksimal 30 untuk kunci buatan agen terdelegasi). Penerus mempertahankan kemampuan dan batas ruang kerja pendahulunya.

  • minimum: 1
  • maximum: 365
  • default: 365
idempotency_keystringOpsional / item

Opsional. Gunakan kunci yang sama untuk mencoba ulang dengan aman. Rahasia baru ditampilkan sekali: percobaan ulang yang menemukan penerus sudah dibuat menjawab 409 IDEMPOTENT_REPLAY (details.existing_key menyebutkannya). Cabut dan perbarui lagi dengan idempotency_key baru.

  • minLength: 8
  • maxLength: 160
  • pattern: "^[!-~]+$"
JSON Schema lengkap
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "lifetime_days": {
      "default": 365,
      "description": "Days until the successor expires (1-365, default 365; 30 at most for a key created by a delegated agent). The successor keeps the predecessor's capabilities and Workspace limit.",
      "type": "integer",
      "minimum": 1,
      "maximum": 365
    },
    "idempotency_key": {
      "description": "Optional. Reuse the same key to retry safely. The new secret is shown once: a retry that finds the successor already created answers 409 IDEMPOTENT_REPLAY (details.existing_key names it). Revoke it and renew again with a new idempotency_key.",
      "type": "string",
      "minLength": 8,
      "maxLength": 160,
      "pattern": "^[!-~]+$"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Respons dan penyelesaian

Status HTTP berhasil: 201. Saat operasi selesai: synchronous_http_response.

Respons HTTP berhasil dapat berarti permintaan diterima, bukan selesai. Untuk pekerjaan latar belakang, simpan ID yang dikembalikan dan periksa operasi yang sama sampai selesai. Postingan terjadwal atau diterima baru dipublikasikan setelah platform mengonfirmasi; timeout klien tidak membuktikan hasilnya.

Wajib berarti wajib dalam objek induk dan cabang yang dipilih. Anak wajib tidak membuat induk opsional menjadi wajib. Aturan dan nama kolom di bawah disalin dari kontrak.

Respons dan penyelesaian
Kolom / cabangJenis / wajibBatasan
$objectWajib dalam induk—
apiKeyobjectWajib dalam induk—
apiKey.idstringWajib dalam induk
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
apiKey.namestringWajib dalam induk—
apiKey.last_4stringWajib dalam induk—
apiKey.scopesarrayWajib dalam induk—
apiKey.scopes[]stringOpsional / item—
apiKey.created_atstringWajib dalam induk
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
apiKey.expires_atstring | nullWajib dalam induk—
apiKey.expires_atanyOf 1stringWajib dalam induk
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
apiKey.expires_atanyOf 2nullWajib dalam induk—
apiKey.last_used_atstring | nullWajib dalam induk—
apiKey.last_used_atanyOf 1stringWajib dalam induk
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
apiKey.last_used_atanyOf 2nullWajib dalam induk—
apiKey.revoked_atstring | nullWajib dalam induk—
apiKey.revoked_atanyOf 1stringWajib dalam induk
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
apiKey.revoked_atanyOf 2nullWajib dalam induk—
apiKey.statusstringWajib dalam induk
  • enum: ["active","expired","revoked"]
apiKey.replacesobject | nullWajib dalam induk—
apiKey.replacesanyOf 1objectWajib dalam induk—
apiKey.replaces.idanyOf 1stringWajib dalam induk
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
apiKey.replaces.nameanyOf 1stringWajib dalam induk—
apiKey.replaces.last_4anyOf 1stringWajib dalam induk—
apiKey.replaces.statusanyOf 1stringWajib dalam induk
  • enum: ["active","expired","revoked"]
apiKey.replacesanyOf 2nullWajib dalam induk—
apiKey.replaced_byarrayWajib dalam induk—
apiKey.replaced_by[]objectOpsional / item—
apiKey.replaced_by[].idstringWajib dalam induk
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
apiKey.replaced_by[].namestringWajib dalam induk—
apiKey.replaced_by[].last_4stringWajib dalam induk—
apiKey.replaced_by[].statusstringWajib dalam induk
  • enum: ["active","expired","revoked"]
apiKey.capabilitiesarrayOpsional / item—
apiKey.capabilities[]stringOpsional / item
  • enum: ["agent:operate","agent:publish","agent:engage"]
apiKey.workspace_idsarray | nullOpsional / item—
apiKey.workspace_idsanyOf 1arrayOpsional / item—
apiKey.workspace_ids[]anyOf 1stringOpsional / item
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
apiKey.workspace_idsanyOf 2nullOpsional / item—
apiKey.created_by_delegated_grant_idstring | nullOpsional / item—
apiKey.created_by_delegated_grant_idanyOf 1stringOpsional / item
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
apiKey.created_by_delegated_grant_idanyOf 2nullOpsional / item—
secretstringWajib dalam induk
  • minLength: 1
JSON Schema lengkap
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "apiKey": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "name": {
          "type": "string"
        },
        "last_4": {
          "type": "string"
        },
        "scopes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "expires_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "last_used_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "revoked_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "expired",
            "revoked"
          ]
        },
        "replaces": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "name": {
                  "type": "string"
                },
                "last_4": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "active",
                    "expired",
                    "revoked"
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "last_4",
                "status"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "replaced_by": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "last_4": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "active",
                  "expired",
                  "revoked"
                ]
              }
            },
            "required": [
              "id",
              "name",
              "last_4",
              "status"
            ]
          }
        },
        "capabilities": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "agent:operate",
              "agent:publish",
              "agent:engage"
            ]
          }
        },
        "workspace_ids": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "created_by_delegated_grant_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "name",
        "last_4",
        "scopes",
        "created_at",
        "expires_at",
        "last_used_at",
        "revoked_at",
        "status",
        "replaces",
        "replaced_by"
      ]
    },
    "secret": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "apiKey",
    "secret"
  ]
}

Kesalahan dan percobaan ulang aman

Periksa status HTTP dan isi respons. Kesalahan validasi 400 mungkin berisi ZodError; kesalahan handler menggunakan kolom error, message, dan code. Simpan request_id atau x-request-id untuk diagnosis, tanpa kredensial. Atasi kesalahan akses 401/403 sebelum mencoba lagi, dan ikuti Retry-After untuk 429. Jika penulisan belum pasti atau mengembalikan 5xx, baca hasil yang sudah ada terlebih dahulu. Gunakan kembali kunci idempotensi hanya jika didukung; perilaku percobaan ulang berbeda menurut operasi dan tidak menjamin pengiriman tepat satu kali.

Panduan pemecahan masalah

Contoh

Contoh ini menggunakan nilai fiktif yang diperiksa terhadap skema. Ganti ID dengan yang diizinkan bagi Anda, media dengan aset siap, dan tanggal dengan waktu publikasi yang dikonfirmasi. Periksa kelayakan akun sebelum mengirim penulisan. Halaman ini tidak mengirim permintaan API.

Atur SOSOAPI_ACCESS_TOKEN di server Anda ke kredensial yang diterima operasi ini, dan jauhkan dari kode browser. Untuk agen, gunakan sosoapi auth login untuk masuk melalui browser dan biarkan CLI memperbarui kredensialnya.

request.json

{
  "id": "11111111-1111-4111-8111-111111111111"
}

cURL

curl --request POST \
  "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/identity-api/api-keys/renew" \
  -H "Authorization: Bearer $SOSOAPI_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

JavaScript

// Server-side JavaScript. Do not print tokens or credential-bearing responses.
const token = process.env.SOSOAPI_ACCESS_TOKEN;
if (!token) throw new Error("Set an accepted credential for this operation");
const response = await fetch("https://gqeshlawtcexsapabaui.supabase.co/functions/v1/identity-api/api-keys/renew", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: "Bearer " + token },
  body: JSON.stringify({
  "id": "11111111-1111-4111-8111-111111111111"
})
});
const result = await response.json();
// Check response.ok, the operation-specific body and completion state before continuing.

CLI

npx sosoapi api post /identity-api/api-keys/renew < request.json

Contoh respons sintetis

{
  "apiKey": {
    "id": "11111111-1111-4111-8111-111111111111",
    "name": "example",
    "last_4": "example",
    "scopes": [],
    "created_at": "2099-01-15T09:00:00Z",
    "expires_at": null,
    "last_used_at": null,
    "revoked_at": null,
    "status": "active",
    "replaces": null,
    "replaced_by": []
  },
  "secret": "example"
}

MCP: sosoapi_renew_api_key