Skip to main content
Access operations live under /v3/access/*. Every operation is typed and mapped to one scope. There is no raw proxy in V3.

Headers

API keys are rejected. A request with apikey or x-api-key, or without a bearer, returns 401 external_oauth_bearer_required.
Every response carries x-request-id. Include it in support requests.

Scopes

Request only the scopes you need. The user sees each scope on the consent screen. offline_access is the only non-Access scope; it controls refresh tokens. The full scope to operation table is generated from the API catalog. Each operation’s reference page shows its scope. The discovery document lists every supported scope in scopes_supported.

Environments and quotas

When the Test quota is used up, calls return 429 quota_exhausted with Retry-After set to the seconds until the UTC reset.

Rate limiting

Each authorization can make 600 requests per minute across /v3/access, /v3/vault-plus, and /v3/linked-accounts, with short bursts allowed. Responses carry RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. Above the limit, calls return 429 rate_limited with recovery.action retry. Back off until RateLimit-Reset and retry.

Media

Media URLs in responses are proxied through media.ofauth.com and are safe to embed. They expire; re-read the parent resource to get a fresh URL. See Media for formats and the Vault+ page for persistent storage.

Error handling

Every error has the shape { error, recovery: { action }, requestId }. Branch on recovery.action, not on HTTP status alone. See Errors for the full list.
Node.js