Endpoints and credentials
What the ckrets.ai API answers today, what is planned, and what each kind of Authorization: Bearer can do. The walk-throughs are in For agents; the full schemas in /openapi.json.
Every path in /openapi.json carries x-ckrets-stage: beta (live in 0.9), preview (live but opt-in; none yet) or planned (specified, not built: 501 not-in-v1). Today a request signed without a key is anonymous (the signed-agent tier is planned). Authorization: Bearer takes four kinds, told apart by the prefix:
- a key,
ck_live_…: everything its scopes allow (create, reveal what is addressed to it, status, revoke,/v1/me/…); - a manage token,
ckm_…: the status and revoke of the one secret it came with, nothing else; - a CI job's OIDC token (a JWT whose
audincludeshttps://ckrets.ai): create at free-key limits, and reveal what is addressed to that job; - an account session,
cka_v1.…: issued by the ckrets.ai passkey sign-in to a first-party app (Puzzlebox in v1), good for 12 hours with no refresh. It creates puzzle boxes at the account tier, lists and reads its own boxes (GET /v1/me/secrets,GET /v1/me/secrets/{id}), adopts an anonymous box (POST /v1/me/secrets/adopt), and reads the status of, revokes or tightens a box its account owns. It is not a key: it cannot mint or inspect a key, and on any other route it counts as no credential (the anonymous tier), so it reveals nothing addressed to a key. An agent never needs one.
Any other bearer is 401 invalid-credentials on every route: send no Authorization rather than a bad one.
The launch set (v1):
POST /v1/secrets: store a value under a policy (template, ttl, reveals, passphrase, audience, purpose; a puzzle policy and public metadata for the puzzle template); returns token, url, manageToken, a keyed digest with its digestKey, receipt. The digest is safe to log; keep the digestKey out of logs, since with both anyone can test guesses of the value.GET /v1/secrets/{token}: reveal once (every GET of a bearer token is the reveal: never use it to test or prefetch a token;/publicis the safe check);POSTthe same path with a proof (a passphrase, never in a GET: a query string is never read; a commitment; or a ticket with a commitment or a verifier's verdict); the recipient proves its audience; returns a signed receipt.GET /v1/secrets/{token}/public,POST /v1/secrets/{token}/attempts,PATCH /v1/secrets/{token}/policy,GET /v1/me/secrets: public metadata, counted attempt tickets, owner policy changes that never widen the gate, the caller's own secrets.GET /v1/secrets/{token}/status: the creator's view; never the value.DELETE /v1/secrets/{token}: revoke with the creator's key or the manage token, both asAuthorization: Bearer(the kind is read from the prefix:ck_live_key,ckm_manage token; a box an account owns, alsocka_v1.account session).POST /v1/keys,GET /v1/me/key,PATCH /v1/me/key,DELETE /v1/me/key: mint a free key (body optional: label, email, domain, scope, clientEncryptionRequired), inspect it (its lease, scopes and whether it requires client encryption), require client encryption from then on ({"clientEncryptionRequired": true}; it cannot be turned off), revoke it (its unrevealed secrets then answer410; revealed ones and receipts stand, and their manage tokens still read status and revoke).GET /v1/limits: tier, limits, remaining creates, reset times, stamp parameters, lease window, andstage(prodis production).POST /v1/requests,GETandDELETE /v1/requests/{requestId},GET /v1/requests/{requestId}/public,POST /v1/requests/{requestId}/answer: ask a person for a value through the page/q/{requestId}(For agents, section 7).POST /v1/report: report a token or URL with areason(required); a bearer token is frozen pending review, an audience-bound one is recorded only. Whoever holds a bearer URL can reveal it, spend its passphrase attempts or freeze it with a report; to stop all three, name an audience.POST /v1/receipts/verify: convenience; verify offline when you can.POST /v1/sessions(first-party apps only: a Turnstile-backed session ticket for anonymous puzzle creates) andPOST /v1/me/secrets/adopt(take an anonymous box into an account); the puzzle routes are on the puzzle template page.
Planned (specified, built after the beta is measured):
POST /v1/batches,GET /v1/batches/{id},DELETE /v1/batches/{id}: many secrets to many named recipients with a manifest receipt.POST /v1/me/domain,POST /v1/me/domain/verify: verify a domain for request pages and webhooks.POST /v1/me/webhooks,DELETE /v1/me/webhooks/{id}: signed events to the verified domain.POST /v1/me/key/delegate(planned): a narrower child lease for another agent, one level.