Two ways in
A key can’t be the entry point to itself. A key belongs to an application, and an application has to be created by someone already signed in. So these endpoints accept either credential:- a session, for bootstrapping before any key exists,
custral login → pick an org → create an application → mint a key - an API key holding
applications:manage, for managing applications programmatically afterwards
You can also do all of this from Settings → Applications in the dashboard, or
from an MCP client. See MCP. Key revocation is
deliberately not exposed over MCP, since it is immediate and irreversible.
The Application object
Attributes
string
Unique identifier, prefixed
app_.string
Human-readable name, shown in Settings → Applications.
string
internal for something you run yourself, workflow for an app that plugs into
workflows.string
private, unlisted, or public, who can discover the application.string
How the application is invoked,
internal or webhook.The API key object
Key metadata. The secret itself is returned exactly once, at creation, and is hashed at rest. Nothing can retrieve it afterwards. It is excluded from this shape and from the service that lists keys, so no endpoint can return it.Attributes
string
Unique identifier, prefixed
key_. This is what you pass to revoke a key.string
secret (sk_…) for server-side use, or publishable (pk_…) for the browser.string
A non-sensitive prefix for identifying the key in a list. Not usable for auth.
string[]
What the key may do. An empty array means the key can only call
/v1/me.
It authenticates but authorises nothing.string
live or test.string
active, or inactive once revoked.string | null
ISO 8601 expiry, or
null for a key that doesn’t expire.string | null
When the key last authenticated a request.
Create an application
string
required
A human-readable name. Shown in Settings → Applications.
string
required
internal for something you run yourself, workflow for an app that plugs into
workflows.string
default:"private"
private, unlisted, or public, who can discover the application.Mint a key
string
required
secret (sk_…) for server-side use, or publishable (pk_…) for the browser.string
default:"live"
live or test.integer
Auto-expire the key after N days. Omit for a key that doesn’t expire.
Verify a key
GET /v1/me is the “does this key work, and what can it do?” probe. Any valid key
may call it, no scope required. The fastest way to confirm a key you just minted
carries the scopes you meant.
Revoke a key
Revocation takes effect immediately, every integration holding the key breaks at once, and it cannot be restored. The response carries asuccess flag: true when the key was deactivated, and
false when no key matched the id. A key that was already revoked, or never
existed. A missing key is reported as success: false, not as an error.
Scopes
Grant the narrowest set that works.
applications:manage is the one to be careful
with. A key holding it can mint further keys.