(Connected machines authenticate with their own daemon tokens, minted in the connect flow and valid only on daemon routes.)
Treat bearer tokens as opaque: store and send the complete value without
parsing its prefix, version, or checksum.
Using an API key
Send either key as a bearer token. This example uses a personal key because/me is a user-only endpoint:
401 with code unauthorized. A valid token used on something your roles don’t permit returns 403 — or 404 if you can’t even see the resource. Details in Errors.
Creating personal keys
Tokens are minted where a human can approve them — creating one is deliberately not possible with another API key:- Dashboard — with All projects selected in the project switcher, open API Tokens and click New token. The full token is shown once.
- Device login — for CLIs and dev tools, below.
Org API keys for services
Services shouldn’t run as a person — when that person leaves or their access changes, the integration breaks. An org API key is its own principal: it holds an org role (admin or member) and per-project roles, granted exactly like a member’s.
Create one in the dashboard: with All projects selected in the project switcher, open API Tokens, switch to the Organization tab, and under Organization API tokens click New token. Pick a name and org role; the omnara_org_v1_… token is shown once. Then grant the key project roles from its detail panel — a member-role key sees nothing until you do, same as a human member.
Key management stays human-gated: creating, renaming, changing roles, and revoking all require a dashboard session, so one API key can never mint or escalate another. Listing and reading key metadata work with regular API auth (List org API keys). Revocation is permanent and drops the key’s org and project roles (Revoke).
Device login for CLIs
Omnara supports the OAuth 2.0 Device Authorization Grant. The returned access token is a regular Omnara personal access token. Start by discovering the endpoints for the Omnara installation:client_id must be omnara-cli; other public clients are not currently registered. token_name is an optional Omnara extension for naming the resulting PAT; it uses the 64-character resource-name policy and defaults to Device login.
verification_uri_complete (or show user_code and point them at verification_uri). They sign in and approve — or deny — on the dashboard’s Approve device login page.
3. Poll for the token every interval seconds with the private device_code:
400:
slow_down, add five seconds to the interval for this and later requests. On approval, 200 returns the PAT:
400 with "access_denied" or "expired_token". The PAT does not expire automatically; it appears in the approving user’s token list, where it can be revoked, and is used as a bearer token for subsequent API calls.
Connecting MCP clients
The Omnara API is also exposed as an MCP server athttps://app.omnara.com/mcp. MCP clients that support the MCP authorization spec discover the OAuth endpoints themselves and sign you in through the browser, so no token needs to be pasted into the client.
Add the server to your client’s mcp.json:
Managing tokens
The API Tokens page — or List personal access tokens — shows your tokens with creation and last-used times, metadata only: the secret is never shown again.last_used_at tells you which tokens are actually alive; prune the rest, and revoke immediately if a token leaks — revocation is permanent.