Auth
Exchange an OIDC token from GitHub Actions or an agent sandbox for a one-hour cell token.
Get the sign-in config
Where a person signs in: issuer, device grant endpoints, public client id.
Response
client_iddevice_authorization_endpointissuerscopes- what the cli asks for; empty for authkit, whose device grant takes no scope
token_endpointverification_domains- domains the issuer serves its device page under besides its own hosts (authkit's
<org>.authkit.app), named by the identity adapter, so the cli's browser opener needs no vendor's name
curl "$CIRESK_API/v1/ci/auth/config"Exchange an OIDC token
An oidc token for a short-lived cix_ token.
Request body
repo- uuidv7 rendered as
repo_<32 hex> requested_scopestoken
Response
expires_atprincipalPrincipal: what the cli shows; never the tokenprincipal.credential- prefix only, for example
csk_live_eu_abcd principal.jurisdiction- the cell a tenant is pinned to. mirrors
ciresk_std_api::Regionso the api converts a principal's jurisdiction without a second vocabulary.One ofeu,us principal.kind- One of
user,api_key,service principal.org_idprincipal.scopestokentrust- tiers, with no order on purpose (amendment 2026-10-27):
trusted_ciis protected-branch automation and the cache writer every tier reads,trusted_interactivea person's own work, and neither is "below" the other, so every rule over tiers names the tiers it meansOne ofuntrusted,trusted_ci,trusted_interactive
curl -X POST "$CIRESK_API/v1/ci/auth/exchange" \
-H "Content-Type: application/json" \
-d '{
"repo": "repo_0129354d7b6b4146ad16c315d960365b",
"requested_scopes": [
"ci:jobs.run",
"ci:jobs.read"
],
"token": "eyJ8BmvruZ26jFCCEvEwbA7pXZKEDVe4ws3AZNJGBhxAMyGPGFnOE75jGkGAbeU"
}'Get the caller's principal
The bearer's principal and the organisations it may sign in to.
Response
orgsorgs[].idorgs[].jurisdiction- the cell a tenant is pinned to. mirrors
ciresk_std_api::Regionso the api converts a principal's jurisdiction without a second vocabulary.One ofeu,us orgs[].nameorgs[].products- the products the organisation enabled;
cimust be among them for a token to work here principalPrincipal: what the cli shows; never the tokenprincipal.credential- prefix only, for example
csk_live_eu_abcd principal.jurisdiction- the cell a tenant is pinned to. mirrors
ciresk_std_api::Regionso the api converts a principal's jurisdiction without a second vocabulary.One ofeu,us principal.kind- One of
user,api_key,service principal.org_idprincipal.scopessubjectuser:<id>,key:<id>orservice:<name>
curl "$CIRESK_API/v1/ci/auth/whoami" \
-H "Authorization: Bearer $CIRESK_KEY"