The headers
string
required
Your Workspace ID. Accepts either form:
- the workspace slug, for example
acme-store(lowercase letters, digits and hyphens, up to 24 characters) - the workspace UUID, for example
9f1c2a44-4d0b-4f2e-9a6c-1b7d0e5a83c1
string
required
A workspace API key. Keys are issued as
sk_evt_ followed by 64 hexadecimal
characters, for example
sk_evt_4f2a9c7d1b0e63a58d4c2f9017be3a6d5c8f1e70a2b4d6c9e3f5a7b1c8d0e2f4.Getting a key
A workspace can hold as many named keys as you need, so issue one per integration rather than sharing a single key. Only an owner or admin can create one.1
Open the key screen
In the dashboard go to Settings and then API Tokens
(
/settings?section=api).2
Create a key
Choose Create key and give it a name that identifies the integration,
for example
Production app or Make connector. The name is optional and
defaults to API key; it can be up to 255 characters.3
Copy it once
The full key is shown a single time, in the dialog that appears
immediately after creation. Copy it into your secret store before closing
that dialog.
4
Find your Workspace ID
Go to Settings and then Workspace. The Workspace ID field is
the value to send as
X-Sender-Tenant.Managing keys over HTTP
These four routes are part of the dashboard API, not the public API. They authenticate with your dashboard session, not with an API key, so you cannot use one API key to mint another.POST /integrations/event-ingest-key also exists and creates an unnamed key. It predates the routes above and is kept for compatibility; prefer POST /integrations/api-keys.
Errors on the management routes:
What a key can do
The same header pair authenticates all of these:Only
POST /forms/subscribe is designed to be called from a browser; it is
the one API-key endpoint that answers cross-origin requests. Every other
endpoint listed above is server to server and will not be reachable from
arbitrary web origins.Example request
Validate a connection
GET /public/me is the cheapest way to confirm a key works. It reads nothing but workspace metadata, so it is safe to call on startup or whenever a user pastes credentials into your integration. The Make connector uses this same endpoint to render its connection status.
Rotating a key
Rotation is a create-then-revoke sequence, so there is no window where your integration is offline.1
Create the replacement
Settings and then API Tokens, then Create key. Both keys are
valid at the same time.
2
Deploy the new key
Update your secret store and restart or redeploy anything holding the old
key.
3
Confirm the old key is idle
The key list shows a Last used timestamp per key, stamped on every
successful authentication. Wait until the old key stops advancing.
4
Revoke, then delete
Revoke the old key. Requests using it stop working immediately. Once
revoked it can be permanently deleted; a key cannot be deleted while it is
still active.
Rate limits
Two independent limits are evaluated on every request, before the key is checked. A request can therefore be throttled without ever being authenticated.
Two endpoints override the first bucket with their own limit:
Rate limit headers
Any request that is not blocked carries the remaining budget. The per-key bucket uses the same header names with a-tenant suffix, so both buckets are visible at once.
A throttled response
A blocked request returns429 with a Retry-After header giving the number of seconds to wait. When it is the per-key bucket that blocked, the header is Retry-After-tenant instead.
Retry-After rather than retrying on a fixed schedule, and back off exponentially if you keep hitting the limit.
Authentication errors
Both failures return401 in the standard error envelope, with no code field.
boolean
Always
false on an error.string
A human-readable reason. Do not parse it; branch on the status code.
403 is never an authentication problem. It means the key authenticated but the action was refused, for example a transactional SMS with an insufficient credit balance. See Errors and rate limits for the full status-code table.
Debugging a 401
Check the workspace identifier first
Check the workspace identifier first
Copy the Workspace ID from Settings and then Workspace rather
than typing it. A workspace slug and a workspace name are not the same
thing, and the slug is capped at 24 characters, so a long workspace name
is not a valid identifier.
Check the key has not been revoked
Check the key has not been revoked
Open Settings and then API Tokens. A revoked key still appears in
the list with a Revoked status and will fail every request. The
Last used column tells you whether the key you think you are sending
is the one actually reaching the API.
Check the key survived transport
Check the key survived transport
A key is
sk_evt_ plus exactly 64 hex characters. Truncation, a trailing
newline from a file read, or shell quoting that drops part of the value
all produce the same Invalid API key. Compare the first 16 characters
against the prefix shown in the key list.Quote the request id when contacting support
Quote the request id when contacting support
Every response carries an
X-Request-Id header. Capture it from the
failing response and include it in a support request so the exact call can
be traced.
