# ckrets > Secret tokens for agents, handed over once, to a named recipient, with a receipt. Put a value in, get a token and a URL; the party it is for reveals it once (or until it expires), then it is gone. No key for the first call. Every limit is published and returned in headers. No model runs on this site. Stage and version: Beta. The service is a beta (version 0.9.0; 1.0 when the beta's exit criteria are met), and it is live: production is `https://ckrets.ai` (API `https://ckrets.ai/v1`, MCP `https://ckrets.ai/mcp`). The packages (`@ckrets/helper`, `@ckrets/mcp`, `@ckrets/sdk`, `ckrets` on PyPI) are not published yet; when they are, they come from the ckrets.ai owner only, with npm provenance (verify it with `npm audit signatures`): install nothing under those names until then. The API version is `info.version` in `/openapi.json`; every example pins an exact package version (`@ckrets/helper@0.9.0`, the first release). Before a production create, check that the origin is exactly `https://ckrets.ai` and that `GET /v1/limits` answers `stage` `prod` (any other value is a test deployment); accept a receipt only when its `iss` is `https://ckrets.ai` and it verifies against `https://ckrets.ai/.well-known/jwks.json`. Links below are relative to the host serving this file. ## The one safe path Start with [the quick start](/quickstart.md): this path, create then reveal, in one short page. 1. The recipient gives you its key id (`key_…`), never its key (`ck_live_…`). 2. Create with the value read from a file or an environment variable, never typed into your context, and `audience` naming that key: `POST /v1/secrets`. 3. The recipient reads `GET /v1/secrets//public` (free; its `sender`) and only then reveals into its process with `npx -y @ckrets/helper@0.9.0 reveal --env NAME -- `, so the value never enters a transcript. 4. Keep the manage token (`ckm_…`) like a key; check the receipt. Need a password or a code from a person? Never ask in chat: `POST /v1/requests` (MCP `request_secret`) makes a page that names your key, and the answer becomes a secret only your key opens ([For agents](/for-agents.md#7-ask-a-person-for-a-password-or-a-code), section 7). A bearer link (no audience) only when a person will click it. Every `GET /v1/secrets/` of a bearer token is the reveal: never use it to test a token. Errors are `application/problem+json`: branch on `type`, never on `title`. A `503 temporarily-unavailable` carries `Retry-After` whether or not anything happened: the body tells you which, never the header (`retryable: true` and no `outcome`: nothing was done, send it again; `outcome: "unknown"`: a write may have happened, read the call in `check` first). A CI OIDC audience must name one job: `sub`, or `repository` (or `repository_id`) with `ref` or `job_workflow_ref`. Worked in full: [the first path](/for-agents.md#1-create-and-reveal-complete). ## Where each topic lives - [Quick start](/quickstart.md): the one safe path, create then reveal (read it first). - [For agents](/for-agents.md): create and reveal with full responses; which request for which use case; keys and audiences (a key, a CI OIDC identity, a public key); the helper; the MCP server; status, revoke and alarms; the rules an agent should follow. - [Limits](/limits.md): the tier table, the headers, errors and retries (every problem type and what to do), the proof-of-work stamp, what a create checks, what we keep and for how long, prohibited uses and reports. - Problem types: each `type` has its Markdown at `/problems/.md` (HTML for people at `/problems/`); every type in one table: [Limits](/limits.md#errors-retries-and-headers). - [OpenAPI 3.1](/openapi.json): the whole API with examples (`/openapi.yaml` is the source; each path's `x-ckrets-stage` says beta, preview or planned). - MCP: `https://ckrets.ai/mcp` (streamable HTTP, create-but-never-read) or `npx -y @ckrets/mcp@0.9.0` (stdio); [tool schemas](/mcp-tools.json); section 4 of [For agents](/for-agents.md#4-mcp-server-create-but-never-read). - [Skill file](/SKILL.md): the same guidance as an agent skill. - [CI hand-offs](/docs/ci.md): a CI job creates with its own OIDC token and hands a credential to a server or a later job (GitHub Actions, GitLab CI, CircleCI). - [Endpoints and credentials](/docs/endpoints.md): every endpoint by stage, and what each kind of bearer can do. - [Client-side encryption](/docs/client-encryption.md), [receipts](/docs/receipts.md), [signing requests](/docs/signing.md). - [The puzzle template](/docs/puzzle.md): riddle, game and dated boxes (the Puzzlebox app). - [.well-known/ckrets.json](/.well-known/ckrets.json): capabilities, tiers, endpoints, signing keys, retention. - [Changelog](/changelog.md): the compatibility rules (inside `/v1` we only add) and every change, dated, newest first. - [This site as one document](/llms-full.txt). Planned pages (not yet published): Security, SDKs, Status, Pricing, Legal.