Authorization: Bearer <token> on every call.
Minting one requires a paid plan. On a free account the request is refused
with 403:
Creating one
The call is authenticated by your browser session, because it is the thing that gets you your first key:string
What the key is for. Defaults to
API Token - <timestamp>.integer
default:"60"
How long it lives. Zero or less becomes the default of 60; anything above
525600 (a year) is clamped to a year. There is no unlimited option.
endpoint, rate_limit, max_concurrent_requests and usage_note are
informational strings the handler fills in, not settings you chose. endpoint
in particular is left over from an older API — the chat-completions path it
names is not served, and answers 404. The base URL to use is the one on
The API.What it can reach
Everything your account can, on both API versions:scope field reads api, and that is the only scope there is — it is not a
permission set you can narrow. A key is the account, not a subset of it. It
starts runs that spend your allowance, reads every run your account owns, and
can mint and revoke further keys. Treat it accordingly: a short life for
anything short-lived, a separate key for each thing that holds one, and revoke
rather than share.
What it is not:
- Not a provider key. Your OpenAI or Anthropic credentials live under Connections and are a separate thing entirely — see Model.
- Not a login to a machine. The agent’s own tools run inside the machine and need no key from you.
- Not scoped to one harness, one machine or one run.
Listing
id is what you revoke by; it is not the
token and it is safe to log.
Revoking
401, with no
cache to wait out. A key you no longer recognize is a key to revoke; there is no
cost to minting a fresh one.
Letting a key expire has the same end state. If you know a key is for one job,
give it a duration_minutes that covers the job and nothing more, and you never
have to remember to come back.
Authentication
Sending the key, and every shape a refusal takes.
Plans
Which plans can mint a key at all.

