Bearer tokens
All API requests require anAuthorization header:
Key format
inf_1hR9xTPZqK4mVLc2nJ7fY5wB8dA3sE6gH
Scope
Each key is scoped to one workspace. The key itself resolves to a workspaceId on every request — you don’t pass it in the URL or body.Quotas on a key
A key inherits quotas from (in cascade):- Platform defaults
- Your subscription plan
- Your member preset (the person who created the key)
- Key-specific preset (optional override)
Scope-limited keys
You can attach a preset to limit:allowedModels— e.g.['gpt-4o', 'claude-opus-4-6']maxRequestsPerMinute— e.g. 30 for a staging keymaxBudgetMonthlyCredits— e.g. 2 000 for a CI runner
Revoking a key
Settings → API Keys → key row → Revoke. Takes effect within 5 seconds. Requests made with the revoked key return:Rotating
Create the new key, update your app, then revoke the old one. We don’t support automatic rotation — keys are explicit to make audit trails clean.Key health
Each key row shows:- Last used — timestamp and IP of the last successful request
- Status — active / expired / revoked
- Expires at — if you set an expiry at creation
- Quota preset — the attached preset, if any
Internal service tokens
Our control plane (apps/api) talks to the gateway with a special internal token prefixedinf_internal_. You cannot create or use these from client code — they’re server-to-server only.
