Skip to main content
API keys authenticate every REST call (Authorization: Bearer gork_live_...). Raw key material is never stored — only a SHA-256 hash — so the secret returned at creation is shown exactly once and can never be retrieved again.

Create a key

POST /v1/keys mints a new key. Requires the keys:write scope.
string
required
Human-readable label, 1–64 characters (e.g. "billing-agent prod").
string[]
Scopes to grant. Defaults to ["*"] (full access). Supports exact scopes (messages:send) and resource wildcards (messages:*).
string
Bind the key to a single inbox (inb_...), which must belong to your organization and be active. A bound key is confined to mail-only scopes — inboxes:read, messages:read, messages:send, threads:read — and every call is restricted to that inbox. When scopes is omitted the bound key receives all four; when provided, the list is intersected with the allowlist and rejected with 400 invalid_scopes if nothing remains.

List keys

GET /v1/keys returns every key in your organization, newest first. Requires the keys:read scope. Only the key prefix is returned — never the hash, never the raw secret.
object[]
cURL

Revoke a key

DELETE /v1/keys/{id} revokes a key. Requires the keys:write scope. Revocation is a soft revoke — the row is marked inactive (isActive: false) rather than deleted, so past audit references stay intact. Revoked keys immediately receive 401 invalid_api_key.