Create, rotate and revoke the API keys your integration authenticates with. See Authentication.
List API keys
Returns the API keys of the current workspace, revoked ones included, newest first, with limit/cursor paging. The plaintext key is never returned; each key is identified by its key_type and last4. include=created_by names who minted each key as {id, name, email}; its display goes on 2026-11-30.
Required scope: apikey.read (Read API keys).
query Parameters
includeExtra data to add to the response: created_by. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. created_by is sent without being asked until 2026-11-30; after that date it is sent only when named here.
limitPage size (default 50, max 200).
cursorOpaque continuation token from the previous response's pagination.cursor. Omit for the first page. Cursors are stateless and do not expire, but are only valid for the list and filters that produced them.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
List API keys › Responses
OK
Create an API key
Mints a new API key and returns it as the list shows it, plus the plaintext key (sk_live_... or sk_test_...) in key. The plaintext is returned once and never stored: record it now.
Required scope: apikey.manage (Manage API keys).
query Parameters
includeExtra data to add to the response: created_by. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. created_by is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
Idempotency-KeyUnique key that makes this POST safe to retry: repeats with the same key replay the first response instead of re-executing. Replays are scoped to the retrying principal (same API key / user) and kept for 24 hours. Required on every POST.
Client-generated idempotency key (e.g. a UUID).
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Create an API key › Request Body
nameHuman-readable label for the key, shown in the dashboard list; at most 80 characters. Leading and trailing whitespace is trimmed. Name it after what uses it, e.g. "Shop backend – order sync".
access_presetA named grant, expanded against the permissions you hold — a key never carries more than its creator: READ_ONLY is every read permission you hold (the least-privilege default), FULL_ACCESS everything you hold. CUSTOM is refused: pass scopes instead. Exactly one of access_preset and scopes is required.
allowed_ipsIP addresses or CIDR blocks permitted to present this key. Omit or pass an empty list to leave the key unrestricted.
expires_atMoment the key stops authenticating; must be in the future. Omit for a non-expiring key.
key_typeKey environment: "sk_live" or "sk_test". Omit it: the workspace's mode decides (sandbox workspaces mint sk_test, live workspaces mint sk_live). A value that disagrees with the workspace's mode is refused (400, field code KEY_TYPE_MODE_MISMATCH).
scopesExplicit permissions, e.g. "customer.read"; each must be one you hold. GET /v1/permissions returns the catalog. An empty list is not all-access. Exactly one of access_preset and scopes is required.
Create an API key › Responses
Created
Get an API key
Returns one API key of the current workspace as the list shows it, revoked or not. The plaintext key is never returned. A key of another workspace is a 404.
Required scope: apikey.read (Read API keys).
path Parameters
idAPI key ID (UUID)
query Parameters
includeExtra data to add to the response: created_by. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. created_by is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Get an API key › Responses
OK
Revoke an API key
Revokes an API key and returns it with status revoked. Requests presenting the key then fail with 401.
Required scope: apikey.manage (Manage API keys).
path Parameters
idAPI key ID (UUID)
query Parameters
includeExtra data to add to the response: created_by. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. created_by is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
Idempotency-KeyUnique key that makes this POST safe to retry: repeats with the same key replay the first response instead of re-executing. Replays are scoped to the retrying principal (same API key / user) and kept for 24 hours. Required on every POST.
Client-generated idempotency key (e.g. a UUID).
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Revoke an API key › Responses
OK
Rotate an API key
Rotates one key: mints a new key with exactly that key's name, scopes, IP allow-list and expiry, and puts that key alone on a 24-hour grace expiry. Returns the new key as the list shows it (its replaces_id names the rotated key), plus its plaintext in key, returned once. Every scope the key carries must be held by the caller (403 otherwise), as when minting. A key already expiring within the grace window is a 409.
Required scope: apikey.manage (Manage API keys).
path Parameters
idAPI key ID (UUID)
query Parameters
includeExtra data to add to the response: created_by. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. created_by is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
Idempotency-KeyUnique key that makes this POST safe to retry: repeats with the same key replay the first response instead of re-executing. Replays are scoped to the retrying principal (same API key / user) and kept for 24 hours. Required on every POST.
Client-generated idempotency key (e.g. a UUID).
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Rotate an API key › Responses
Created