Base URL and authentication
config:write when you authenticate with an API key, listings included, because a list of every key on the account is a target list, not a metric. Minting needs credentials:write, which is a separate permission precisely so that a key managing your configuration cannot also issue new keys.
An AI app connected to your account cannot mint a key and cannot list your keys: it is never granted credentials:write, and the listings are refused to it outright for the same reason: a connection that cannot issue a credential should not be able to inventory them.
It can revoke a key, if the person who approved the connection is an account-wide admin: revoking needs only config:write, which a connection can carry. In practice that is bounded by the listings being closed, so it has no way to discover a key id it was not given.
Dashboard sessions are unaffected: any member can still see the account’s keys in Settings → API keys. The scope applies to keys only.
A key scoped to a single site cannot use the listings at all, because the rows name other sites.
Minting and revoking have two further rules, below.
Before you mint a key with a key
Two things apply to every request that creates or revokes a credential here. 1. A key cannot mint a key more capable than itself. Every permission you request must be one the calling key already holds. If it is not, you get403 and required_scope names the first one missing. We do not quietly issue a narrower key instead. See minting credentials with a key.
2. A key cannot mint one that outlives it. If the calling key expires, the key it creates must expire no later. Requesting a later expiry, or none at all, is 403 with error: "expiry_exceeds_parent". Otherwise a short-lived key lifted from a CI log could mint a permanent replacement of equal privilege and outlive its own revocation.
3. The person behind your key must still be an account-wide admin. We look up whoever created the calling key and check their current role. If they have been demoted or removed, the key stops working here. See who is behind a key.
When the person who created a key leaves
A key is tied to the team member who created it, and it does not outlive their place on your team.- When someone is removed from your organization, every API key they created on that account is revoked as soon as we are notified of the removal.
- When a person’s user is deleted from our authentication provider, every key they created is revoked on every account.
401. Our event-ingestion edge caches a valid key for up to a minute, so it can keep accepting events sent with a just-revoked key for about that long, and for up to 15 minutes if it cannot reach our database at that moment. If a script or CI job should survive someone leaving, have a person who is staying create its key.
GET /v1/account/api-keys
Active keys, plus a count of revoked ones.
prefix is the first 16 characters of the key. It is not a secret; it is how you tell two keys apart in a list.
site_id is null for an account-wide key. Otherwise it is the snippet key (ttid_…) when you are using an API key, and the internal UUID when the dashboard reads this same endpoint with its own session.
No listing ever returns key material. The plaintext exists in exactly one response: the one that created it.
GET /v1/account/api-keys/revoked
The same shape, for keys that have been revoked. Rows are kept as an audit record.
POST /v1/account/api-keys
Mint a key.
An account can hold 50 active keys. Expired keys do not count.
DELETE /v1/account/api-keys/{keyId}
Revoke a key. The row is kept as an audit record; only revoked_at is set.
keyId is the id from the listing, not the prefix.
A key that does not exist, belongs to another account, or is already revoked all return the same 404, so key ids cannot be discovered by guessing.
Revocation is immediate for this API. On the ingestion path it takes effect within about a minute; see security for the one exception.
Rotating a key
There is no rotate endpoint, on purpose. Rotation is three steps you control the timing of:POST /v1/account/api-keyswith the same permissions.- Deploy the new key everywhere it is used.
DELETE /v1/account/api-keys/{oldKeyId}.
Errors
Next
- Bot tokens for the crawl-report middleware
- Permissions and what each one allows

