GET /health needs a credential. For an integration that
credential is a personal access token, sent as a bearer token.
Personal access tokens
Create one in the dashboard under Organization → API Tokens. The plaintext value is shown once, at creation, and never again — store it before you close the dialog. A token is a signed string with no prefix and no expiry. Do not parse it, and do not assume a shape. Revocation is deleting the token’s row in the dashboard. The signature itself never expires, so the row is the check — which is also why revocation is immediate rather than eventual.The dashboard’s cookie session
Signing in with Google setstalqing_session, an httponly cookie on the
registrable domain, so it reaches every region’s API host. It is what the
dashboard authenticates with, it lasts 30 days, and it is stateless — there is no
way to revoke one before it expires. Pass credentials: "include" in the
TypeScript SDK to use it instead of a token. Nothing else should.
401 versus 403
401 means the credential is missing, malformed, revoked, or no longer a member of the workspace. The messages you will see arenot authenticated (no
credential at all), invalid token, invalid session, and the control plane’s
own verdict passed through, such as token revoked. A 401 is final — retrying
the same request with the same credential gets the same answer.
403 means the credential is good and the role is not high enough. Two
messages, and they tell you which:
Membership and role are re-read on every request and never cached, so a demotion
or a removal takes effect on the very next call.
A 503 with
the control plane is unreachable, so this request cannot be authorized is not an auth failure. The credential may be perfectly good and we
could not check it. Retry.Which role an operation needs
Three roles:ADMIN, EDITOR, VIEWER. Roles are per workspace and are managed
in the dashboard — see workspaces and roles.
Secrets and provider keys are ADMIN-only in both directions of writing, but their
list endpoints are readable by everyone — reads return only a name and a masked
tail, never a value.
POST /v1/calls/token needs EDITOR. The request can carry a whole agent
definition, an override or a team, which means running an arbitrary prompt on an
arbitrary model paid for with the workspace’s own provider keys. A VIEWER cannot
start a web call over the API.