Authorization header of every request, as Bearer followed by a space and the key. The header is the only place a key is read. There is no query-string form, so a key never ends up in a server log or a browser history by way of a URL.
Making a key
Keys are made on Workspace settings → API keys, by a workspace owner or admin. A key cannot be made with another key, so a key that leaks cannot mint its own successor. When you create one you choose:- A name. Name it after where it will live (“the nightly warehouse job”, “Claude Code on my laptop”), so you know which one to revoke.
- What it may read. Every read scope is ticked to start with. Untick the ones the job does not need.
- What it may change. The two write scopes are off unless you tick them. A key with a write scope acts as you, with your role: see Writes.
- An expiry date, if you want one. The key works through the end of that day (UTC) and stops after it.
- Which projects, if your workspace has more than one. Leave them all unticked for every project. A key limited to some projects cannot see the others at all: they are missing from the project list, and asking for one by id answers
404.
Revoking a key
Choose Revoke beside the key and confirm. It stops working on the next request. A revoked key stays in the list with the time it was revoked, so you can still tell afterwards which key it was. If a key may have leaked, revoke it and make a new one: there is no way to change a key’s secret in place.Scopes
A route checks one scope. A key without it gets403 forbidden, and the message names the scope it needs.
The API reference shows the scope each route needs.
When a key is refused
Every authentication failure gets the same answer:401 with the code unauthorized. That covers a missing header, a malformed one, a key that does not exist, a revoked or expired key, and a key whose workspace is suspended or cancelled. The answers are identical on purpose, so a guess learns nothing about how close it was.
A key that authenticates but lacks the route’s scope gets 403 forbidden, naming the scope. A project the key may not read, or that does not exist, is 404, never 403.
Signing in instead of a key
Claude, ChatGPT and Claude Code can connect to Citino’s MCP server by signing in, with no key to copy. A sign-in connection reads the MCP server only; it cannot call these/v1 routes. See Connect Claude or ChatGPT.
Related
Rate limits
How many requests a key and a workspace may make.
Writes
What a write-scoped key can change, and as whom.
Errors
The error envelope and every code.
Workspace settings
Where keys and connected apps are managed.