{"openapi":"3.1.1","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"developerz.ai API","version":"1.0.0","description":"The developerz.ai control-plane API. Every capability is addressed by a stable **capability id**, which is this document’s `operationId` and, where the capability is served there too, the MCP verb name: one id, one answer per surface (`docs/standards/surface-parity.md`).\n\n- **Errors** are RFC 9457 problem details (`application/problem+json`, the `Problem` schema) on every operation. Switch on `type`, never on `title`.\n- **Every response carries `X-Request-Id`**, the id that call was logged under, repeated as the `request_id` member of any problem body. Send your own and it is adopted; quote the one you got back when you report a problem.\n- **Collections** answer the `Page` envelope: `data`, plus a `next_cursor` you follow until it is `null`. Paging is keyset, so a `cursor` names a POSITION rather than a row count: rows inserted while you page never shift the ones you have not read, and there is no `page` parameter to skip by. Each collection publishes exactly the knobs it serves and no others — `cursor` + `per_page`, plus whichever `sort` / `filter` / `q` it allows, or no query parameters at all where the operation answers the whole collection in one page. Anything else is a 400 rather than a silently ignored parameter.\n- **Credentials** are a `dev_pat_` bearer token or the dashboard session cookie, listed as alternatives on each operation. The array beside a scheme is the scope the operation asserts.\n- **Rate limits** are per credential: 60 requests/minute read, 10/minute write. Every guarded response carries `RateLimit-Limit` / `RateLimit-Remaining` / `RateLimit-Reset` for the bucket it was charged against, so a client paces itself; a 429 additionally carries `Retry-After`, the same seconds as `RateLimit-Reset`.\n- **Operations with no `security`** are mounted ahead of the credential guard on purpose; each description names what authenticates it instead.\n- **Nothing here is retired on a timer.** There is no `Deprecation` / `Sunset` header channel and no announced sunset window: when a contract changes, the old shape is removed in the same change rather than marked and left to expire, so no operation is ever published `deprecated`. The removal is loud instead of silent — a parameter that is gone is refused by name with a 400 whose `detail` names what to send instead, and `per_page` is the one spelling of a page size on every collection that takes one."},"servers":[{"url":"https://api.developerz.ai"}],"tags":[{"name":"account"},{"name":"self"},{"name":"token"},{"name":"member"},{"name":"invitation"},{"name":"org_sso"},{"name":"project"},{"name":"issue"},{"name":"pr"},{"name":"review"},{"name":"task"},{"name":"blocker"},{"name":"plan"},{"name":"box"},{"name":"template"},{"name":"config"},{"name":"ci"},{"name":"artifact"},{"name":"session"},{"name":"audit"},{"name":"stream"},{"name":"kb"},{"name":"dashboard"},{"name":"digest"},{"name":"notification"},{"name":"push"},{"name":"email_route"},{"name":"webhook"},{"name":"integration"},{"name":"secret"},{"name":"project_secret"},{"name":"system_prompt"},{"name":"llm_route"},{"name":"billing"},{"name":"donation"},{"name":"grant"},{"name":"onboarding"},{"name":"mcp"},{"name":"service"}],"paths":{"/":{"get":{"operationId":"service.info","description":"Service card: name, status, docs URL. No bearer, and no account state.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/healthz":{"get":{"operationId":"service.health","description":"Liveness/readiness probe for the kubelet. No bearer; the DB and cache are probed with a timeout.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/v1/billing/stripe/webhook":{"post":{"operationId":"billing.stripe_webhook","description":"Stripe’s own callback. No bearer: the raw body is HMAC-verified against the endpoint secret, so nothing else can call it.","tags":["billing"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/v1/runners/enroll":{"post":{"operationId":"box.enroll","description":"The box’s own enrollment leg: a runner redeems its one-time enrollment token for durable credentials.","tags":["box"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/v1/runners/creds/reissue":{"post":{"operationId":"box.creds_reissue","description":"The box rolls its own fleet credential before it expires, authenticating with its durable runner token rather than the credential being replaced. Machine leg. A revoked box is refused, which is what bounds its remaining fleet access to the lifetime of the credential it already holds.","tags":["box"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/v1/runners/hardening":{"post":{"operationId":"box.hardening_report","description":"The box’s post-harden report (firewall state, exposed-port scan). Machine leg.","tags":["box"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/join":{"get":{"operationId":"box.join_script","description":"The one-curl join script a fresh VM runs. Its credential is the one-time enrollment token, which rides the `X-Dz-Enroll-Token` HEADER and never the query string; this leg validates the shape but does not consume it.","tags":["box"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/gh/installed":{"get":{"operationId":"project.install_landing","description":"The GitHub App Setup URL, where GitHub drops the human after an install. No bearer, and it provisions nothing: the install webhook stays the only writer of accounts and repos.","tags":["project"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/v1/public/oss/{owner}/{repo}/stats":{"get":{"operationId":"project.public_stats","description":"Public activity and backer counts for ONE enabled, public, donations-opted repo. No bearer. Cached, but the eligibility gate is re-run on every positive hit, so a repo that goes private or opts out drops out immediately.","tags":["project"],"security":[],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/v1/openapi.json":{"get":{"operationId":"service.openapi","description":"This document: the OpenAPI 3.1 description of every `/v1` capability, generated from the same catalog the routes are mounted from. No bearer, so a client can be generated before a token exists; per-IP rate limited, and cacheable.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/.well-known/oauth-protected-resource":{"get":{"operationId":"service.oauth_protected_resource","description":"OAuth 2.1 discovery (RFC 9728): names the MCP endpoint as a protected resource, which authorization server guards it, and the scope vocabulary a grant may carry. No bearer, since it is what a hosted client reads before it has one. The `/v1/mcp` suffixed twin is the URL the 401 challenge points at; both serve the same document.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/.well-known/oauth-protected-resource/v1/mcp":{"get":{"operationId":"service.oauth_protected_resource_mcp","description":"The same RFC 9728 document at the path-inserted URL the spec derives from the MCP endpoint (`/.well-known/oauth-protected-resource` + `/v1/mcp`). This is the URL named by `WWW-Authenticate` on a 401 from `POST /v1/mcp`.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/.well-known/oauth-authorization-server":{"get":{"operationId":"service.oauth_authorization_server","description":"OAuth 2.1 authorization-server metadata (RFC 8414): the authorize, token and dynamic client registration endpoints, plus the grant types and PKCE methods accepted. Authorization code with S256 only, and public clients with no secret.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/oauth/authorize":{"get":{"operationId":"service.oauth_authorize","description":"The consent screen. A browser navigation, not an API call: it resolves the dashboard session cookie, lists the exact scopes the grant would carry and the account it would be bound to, and sends a signed-out visitor to the dashboard sign-in with this request as the return target, so a finished sign-in lands back on this screen rather than on a page asking them to open a second tab. PKCE with S256 is required, and a `redirect_uri` that was not registered is refused on the page instead of redirected to.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}},"post":{"operationId":"service.oauth_consent","description":"The Authorize button's target. Takes one sealed consent ticket bound to the session that was shown the screen, re-checks the scopes against that session's live ceiling, and redirects to the registered `redirect_uri` with a single-use authorization code (or `error=access_denied` on Cancel).","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/oauth/token":{"post":{"operationId":"service.oauth_token","description":"Exchange an authorization code plus its PKCE verifier for a token. The code is single-use and short-lived, and the result is an ordinary personal access token carrying the consented scopes, so it lists and revokes on the same Account tokens screen as one minted by hand.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/oauth/register":{"post":{"operationId":"service.oauth_register","description":"Dynamic client registration (RFC 7591): hand in a client name and its redirect targets, get back a `client_id`. Anonymous by design, because a hosted connector registers before any human has proved anything, and it stores nothing: the registration is sealed into the identifier. Public clients only, so no `client_secret` is ever issued and PKCE is the whole client authentication. Requested grant and response types are narrowed to what this server implements and reported back in the response.","tags":["service"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/unsubscribe":{"get":{"operationId":"notification.unsubscribe_page","description":"The confirm page behind an email footer link, authorized by the signed token in that link. It NEVER mutates, because mail scanners and link prefetchers issue GETs.","tags":["notification"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}},"post":{"operationId":"notification.unsubscribe","description":"Perform the opt-out, on the same signed token. Serves both the confirm form and RFC 8058 one-click, and is scoped to ONE category, so escalations can never be silenced. 400 tampered, 410 expired.","tags":["notification"],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/actions/{jwt}":{"get":{"operationId":"pr.action_link_confirm","description":"Show the confirmation page for a signed approve/skip link an ask-before-acting email carries. Verifies the link and applies nothing, so a mail scanner or link prefetcher cannot spend it: 400 malformed, 410 expired.","tags":["pr"],"security":[],"parameters":[{"name":"jwt","in":"path","required":true,"description":"The signed, single-use action-link token. It is the whole credential for this call.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}},"post":{"operationId":"pr.action_link_redeem","description":"Apply the decision a signed approve/skip link carries. The signed JWT in the path is the whole credential and is also the CSRF token, and the link is single-use: 400 malformed, 410 expired, 409 already redeemed.","tags":["pr"],"security":[],"parameters":[{"name":"jwt","in":"path","required":true,"description":"The signed, single-use action-link token. It is the whole credential for this call.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/blocker-fix/{jwt}":{"get":{"operationId":"blocker.fix_link_form","description":"Show the prefilled secret form a `missing_credential` blocker hands a human: the exact env-var names the blocked work needs, ready to fill in. Verifies the signed link and stores nothing, so a mail scanner or link prefetcher cannot spend it: 400 malformed, 410 expired. Needs no login: the signed JWT in the path is the whole credential.","tags":["blocker"],"security":[],"parameters":[{"name":"jwt","in":"path","required":true,"description":"The signed, single-use action-link token. It is the whole credential for this call.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}},"post":{"operationId":"blocker.fix_link_redeem","description":"Store the supplied values into the repo’s secret vault and close the blocker, which puts the work back into triage. The signed JWT in the path is the whole credential and is also the CSRF token; the link is single-use, expires within the hour, may write into exactly one `(repo, environment)` and can never read a stored value back. 400 an incomplete form, 409 already redeemed, 410 expired.","tags":["blocker"],"security":[],"parameters":[{"name":"jwt","in":"path","required":true,"description":"The signed, single-use action-link token. It is the whole credential for this call.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}}}}},"/v1/me":{"get":{"operationId":"account.me","description":"Identity + self-check: the scopes this credential holds, plus user, memberships, active account and ToS state. `approved` is the closed-beta gate, and it is a TRI-STATE: `true` cleared it, `false` is waitlisted, `null` means this credential names no human to approve (a machine token). Absent or null is never a refusal, so read the field rather than treating \"not true\" as denied.","tags":["account"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/active-account":{"post":{"operationId":"account.active_account_switch","description":"Repoint the live user session at a member account.","tags":["account"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/accept-tos":{"post":{"operationId":"account.accept_tos","description":"Record the signed-in user's Terms of Service consent.","tags":["account"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/org/members":{"get":{"operationId":"member.list","description":"The org’s members and their roles.","tags":["member"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"member.invite","description":"Invite someone to the org by `login` (an already-registered user, added to the roster at once) or by `email` (anyone: a one-time invitation link, also mailed to them).","tags":["member"],"security":[{"bearerAuth":["write:members"]},{"sessionCookie":["write:members"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/org/members/{userId}":{"patch":{"operationId":"member.set_role","description":"Change one member’s role.","tags":["member"],"security":[{"bearerAuth":["write:members"]},{"sessionCookie":["write:members"]}],"parameters":[{"name":"userId","in":"path","required":true,"description":"User id (uuid). A user is a person, distinct from the account they act on.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"member.remove","description":"Remove a member from the org.","tags":["member"],"security":[{"bearerAuth":["write:members"]},{"sessionCookie":["write:members"]}],"parameters":[{"name":"userId","in":"path","required":true,"description":"User id (uuid). A user is a person, distinct from the account they act on.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/org/members/invitations":{"get":{"operationId":"member.list_invitations","description":"The org’s `org_member` invitations, every status, newest first.","tags":["member"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/org/members/invitations/{invitationId}":{"delete":{"operationId":"member.revoke_invitation","description":"Withdraw one PENDING invitation (idempotent). Refuses an already-accepted one; remove the member instead.","tags":["member"],"security":[{"bearerAuth":["write:members"]},{"sessionCookie":["write:members"]}],"parameters":[{"name":"invitationId","in":"path","required":true,"description":"Invitation id (`inv_…`), from `GET /v1/org/members/invitations`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/invitations/accept":{"post":{"operationId":"invitation.accept","description":"Redeem an invitation token for the signed-in identity. Grants platform access or the invited org membership, and answers a named reason when it grants nothing.","tags":["invitation"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/digests":{"get":{"operationId":"digest.list","description":"Digest header rows, newest-first.","tags":["digest"],"security":[{"bearerAuth":["read:digests"]},{"sessionCookie":["read:digests"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from the previous response’s `next_cursor`. Never parse it.","schema":{"description":"Opaque token from the previous response’s `next_cursor`. Never parse it.","type":"string","minLength":1,"maxLength":512}},{"name":"limit","in":"query","description":"How many digests to return.","schema":{"default":50,"description":"How many digests to return.","type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/digests/{id}":{"get":{"operationId":"digest.get","description":"One digest, with its rendered HTML.","tags":["digest"],"security":[{"bearerAuth":["read:digests"]},{"sessionCookie":["read:digests"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/plans":{"get":{"operationId":"plan.list","description":"The account’s plans, newest-activity-first: plan id, target repo, lead-slice title and the merged/total progress fraction.","tags":["plan"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"plan.start","description":"Start a scout planning session over one enabled repo: hand it a raw ask and a mailbox-capable box authors the plan (groups then tasks). 202 with the dispatched `task_id`; that task’s `run_id` is null until a box claims and starts it, and it is the id the mailbox steers. A fleet with no online box able to hold a live session is a **409** naming the mode a box needs, not a 404: the repo is fine.","tags":["plan"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/plans/{planId}":{"get":{"operationId":"plan.get","description":"One plan’s full projection: the group → task → PR chain.","tags":["plan"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"planId","in":"path","required":true,"description":"Plan id (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/plans/{planId}/cancel":{"post":{"operationId":"plan.cancel","description":"STOP a whole plan: every non-terminal child of its groups moves to `cancelled` and the boxes holding them are interrupted. Always 200 when the plan exists, even when nothing moved. The answer is three id lists: what was stopped, what had already finished, and the PR-review children that were **not** stopped (the same merge-gate carve-out `task.cancel` refuses on).","tags":["plan"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"planId","in":"path","required":true,"description":"Plan id (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/plans/{planId}/approve":{"post":{"operationId":"plan.approve","description":"Release a held plan stamped when `POST /v1/plans` carried `require_approval: true`. Flips every held group back to `dispatched` and mints its tasks in one transaction. Always 200 when the plan exists: `kind: \"approved\"` carries the freshly-minted task ids, `kind: \"already_approved\"` is the idempotent re-approve answer (and carries the ids the FIRST call minted). 404 when no such plan.","tags":["plan"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"planId","in":"path","required":true,"description":"Plan id (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/blockers":{"get":{"operationId":"blocker.list","description":"The answerable holds: the questions the platform is waiting on a human for. Oldest-first while open, because the oldest unanswered question is the one holding work up longest; `open=false` widens to the closed record, newest-first. A `missing_credential` row carries the env-var NAMES it needs and, when one can be minted, a signed single-use `fix_url` a human can fill in without the agent plane ever holding the value. It never carries the answer text.","tags":["blocker"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/blockers/{blockerId}/answer":{"post":{"operationId":"blocker.answer","description":"Supply what was missing. Closes the blocker and files a raw task carrying both the ask and the answer, so the answer is durable and admitted rather than lost with the stopped run. It does NOT restart that run: triage decides the raw task on the account’s own key and may schedule, drop, cross-link or escalate it. Answering twice is refused with a 409, never doubled: one blocker mints at most one raw task. Needs a credential that names a human, since the answer is attributed to the person who gave it. Send the LOCATION of a credential, never the credential itself.","tags":["blocker"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"blockerId","in":"path","required":true,"description":"Blocker id (`blk_…`), from `GET /v1/blockers`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/blockers/{blockerId}/withdraw":{"post":{"operationId":"blocker.withdraw","description":"Retire an ask that went away, closing it with no answer and minting no work. 404 when this account has no OPEN blocker with that id, which is also the answer for one that is already resolved.","tags":["blocker"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"blockerId","in":"path","required":true,"description":"Blocker id (`blk_…`), from `GET /v1/blockers`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/kb/{repoId}/pages":{"get":{"operationId":"kb.page_list","description":"One repo’s knowledge-base pages, the agent-maintained wiki.","tags":["kb"],"security":[{"bearerAuth":["read:kb"]},{"sessionCookie":["read:kb"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `slug`, `ts`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/kb/{repoId}/search":{"get":{"operationId":"kb.search","description":"Trigram-rank the repo wiki (`?q=`, `?limit=` 1..25). Each hit carries slug, score, cross-links and a preview excerpt; pull a full body with the page read.","tags":["kb"],"security":[{"bearerAuth":["read:kb"]},{"sessionCookie":["read:kb"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/kb/{repoId}/pages/{slug}":{"get":{"operationId":"kb.page_get","description":"One KB page verbatim by slug: body, cross-links, provenance.","tags":["kb"],"security":[{"bearerAuth":["read:kb"]},{"sessionCookie":["read:kb"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"description":"Knowledge-base page slug. It may contain `/`, so it matches the rest of the path.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"kb.page_upsert","description":"Create or replace one page by slug: a FULL replace, so an omitted `links` clears the page’s cross-links. Idempotent by (repo, slug). The repo must be enabled: writing into an offboarded repo’s wiki is a **409** naming the fix, not a silent no-op.","tags":["kb"],"security":[{"bearerAuth":["write:kb"]},{"sessionCookie":["write:kb"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"description":"Knowledge-base page slug. It may contain `/`, so it matches the rest of the path.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":100000,"description":"Full markdown body of the page (create-or-replace by slug)."},"links":{"default":[],"description":"Cross-link slugs to sibling pages (the wiki graph). Defaults to empty.","maxItems":200,"type":"array","items":{"type":"string","pattern":"^[a-z0-9][a-z0-9/_-]{0,199}$","description":"A sibling page slug this page cross-links to."}},"run_id":{"description":"Optional provenance — the task run performing this write-back.","type":"string","pattern":"^[A-Za-z0-9_-]{1,128}$"}},"required":["text"],"additionalProperties":false}}}},"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/sessions":{"get":{"operationId":"session.list","description":"Recent agent sessions, account-wide.","tags":["session"],"security":[{"bearerAuth":["read:sessions"]},{"sessionCookie":["read:sessions"]}],"parameters":[{"name":"limit","in":"query","description":"How many rows to return. This read has one page: `next_cursor` is always null.","schema":{"default":20,"description":"How many rows to return. This read has one page: `next_cursor` is always null.","type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last. CAVEAT: this operation serves a bounded head, so `next_cursor` is always `null` and a full page may mean more rows exist that no cursor reaches. Narrow the request instead of paging it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/approvals":{"get":{"operationId":"pr.pending_approvals","description":"The account-wide queue of outstanding ask-before-acting approvals.","tags":["pr"],"security":[{"bearerAuth":["read:prs"]},{"sessionCookie":["read:prs"]}],"parameters":[{"name":"limit","in":"query","description":"How many rows to return. This read has one page: `next_cursor` is always null.","schema":{"default":20,"description":"How many rows to return. This read has one page: `next_cursor` is always null.","type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last. CAVEAT: this operation serves a bounded head, so `next_cursor` is always `null` and a full page may mean more rows exist that no cursor reaches. Narrow the request instead of paging it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/audit/events":{"get":{"operationId":"audit.tail","description":"The account-wide audit feed, newest-first.","tags":["audit"],"security":[{"bearerAuth":["read:sessions"]},{"sessionCookie":["read:sessions"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from the previous response’s `next_cursor`. Never parse it.","schema":{"description":"Opaque token from the previous response’s `next_cursor`. Never parse it.","type":"string","minLength":1,"maxLength":512}},{"name":"per_page","in":"query","description":"How many rows to return (1..100). Values above the maximum are refused.","schema":{"description":"How many rows to return (1..100). Values above the maximum are refused.","type":"integer","minimum":1,"maximum":100}},{"name":"kind","in":"query","description":"Return only events of this audit kind.","schema":{"description":"Return only events of this audit kind.","type":"string","enum":["session.boot","model.call","model.reasoning","tool.call.pending","tool.call.ok","tool.call.err","mcp_tool.call.pending","mcp_tool.call.ok","mcp_tool.call.err","policy.gate.refused","escalation.fired","handoff.fired","email.sent","email.route_missing","account.paused","account.resumed","billing.metered","billing.key.captured","billing.key.revoked","billing.key.verified","billing.key.invalid","billing.key.transport_failed","billing.key.rotated","billing.key.kind_changed","billing.spend_cap.set","billing.checkout.started","billing.llm_pref.set","billing.llm_pref.cleared","account.seats_synced","expectation.recorded","expectation.checked","plan.scoped","dispatch.created","dispatch.escalated","triage.verdict","dispatch.queue_full","task.assigned","runner.enrolled","runner.stale_offline","runner.revoked","runner.hardening_reported","runner.creds_reissued","runner.mode_changed","runner.capabilities_updated","runner.update_published","runner.update_confirmed","runner.update_failed","runner.update_refused","runner.boot_refusal_reported","runner.log_reported","runner.update_halted","runner.update_rolled_back","runner.update_retargeted","runner.release_recorded","runner.autoroll_started","runner.release_pruned","task.reenqueued","task.failed","task.cancelled","task.narrated","stalled_replay.redriven","task.run_event","session.compacted","session.compaction_disabled","session.cost_soft_warn","session.completed","session.escalated","session.failed","janitor.run","janitor.action","mcp_provision.checked","mcp_provision.pr_opened","stacked_pr.links_written","plan_group.merged","pr.self_merged","pr.issue_linked","log_retention.pruned","gardener.sweep_started","gardener.sweep_summary","account.provisioned","installation.linked","installation.revoked","repository.enabled","repository.disabled","repository.discovered","repository.claim_conflict","repo.ai_first_marked","repo.visibility_changed","repo.requires_upgrade","raw_task.created","raw_task.triaged","raw_task.dropped","raw_task.escalated","repo.donations_enabled","repo.donations_disabled","donation.created","donation.cancelled","donation.declined","donation.model_chosen","donation.activated","donation.parked","grant.issued","grant.revoked","goal.renamed","token.created","token.revoked","token.renamed","policy.validation_failed","policy.activated","policy.deleted","policy.stale_rejected","ci.job.placed","ci.job.no_capacity","ci.permission_missing","ci.log.recorded","ci.log.upload_failed","ci.log.pruned","ci.policy.decision","internal.repo.skipped","coderabbit.snapshot.persisted","coderabbit.probe.updated","coderabbit.enqueue.decision","review.depth_unservable","review.takeover","babysit.transition","gh.issue_opened","reconciliation.expired","session.reaped","session.redriven","kb.page_upserted","kb.page_capped","kb.import.skipped","kb.import.failed","scout_backlog.drained","integration.used","byok.provider_disagreement","fleet.git_token.minted","fleet.git_token.refused","review.check_settled","fleet_alert.delivered","fleet_alert.suppressed","fleet_alert.failed"]}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/sessions":{"get":{"operationId":"session.list_by_project","description":"One repo’s sessions.","tags":["session"],"security":[{"bearerAuth":["read:sessions"]},{"sessionCookie":["read:sessions"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `started_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`, `ne`, `in`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `trigger`, `entity_kind`, `outcome`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/sessions/{id}":{"get":{"operationId":"session.get","description":"One session: repo, trigger, outcome, model.","tags":["session"],"security":[{"bearerAuth":["read:sessions"]},{"sessionCookie":["read:sessions"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/overview":{"get":{"operationId":"account.platform_overview","description":"Platform radar rollup (staff read).","tags":["account"],"security":[{"bearerAuth":["admin:read:platform"]},{"sessionCookie":["admin:read:platform"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/audit":{"get":{"operationId":"account.platform_audit","description":"Platform-wide audit feed (staff read). The account-scoped feed is `/v1/audit/events`.","tags":["account"],"security":[{"bearerAuth":["admin:read:platform"]},{"sessionCookie":["admin:read:platform"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from the previous response's `next_cursor` (a keyset over `(ts, id)`). Never parse it.","schema":{"description":"Opaque token from the previous response's `next_cursor` (a keyset over `(ts, id)`). Never parse it.","type":"string","minLength":1,"maxLength":512}},{"name":"per_page","in":"query","description":"How many rows to return (1..200). Values above the maximum are refused.","schema":{"description":"How many rows to return (1..200). Values above the maximum are refused.","type":"integer","minimum":1,"maximum":200}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/platform-audit":{"get":{"operationId":"account.platform_trail","description":"The platform-admin trail: every operator read of a tenant’s data, naming who looked, whose data, which run or account, and when. The other half of `account.platform_audit`, which records what the platform did FOR a tenant; this records what it did TO one. Keyset-paged, newest-first.","tags":["account"],"security":[{"bearerAuth":["admin:read:platform"]},{"sessionCookie":["admin:read:platform"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from the previous response's `next_cursor` (a keyset over `(ts, id)`). Never parse it.","schema":{"description":"Opaque token from the previous response's `next_cursor` (a keyset over `(ts, id)`). Never parse it.","type":"string","minLength":1,"maxLength":512}},{"name":"per_page","in":"query","description":"How many rows to return (1..200). Values above the maximum are refused.","schema":{"description":"How many rows to return (1..200). Values above the maximum are refused.","type":"integer","minimum":1,"maximum":200}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/goals":{"get":{"operationId":"account.platform_goals","description":"The platform's own goal board (staff read): every milestone and `type/epic` issue, graded from live GitHub state with a status, an item-weighted percent, and days since anything last closed. Answers 503 with a named reason rather than an empty board when it cannot be read.","tags":["account"],"security":[{"bearerAuth":["admin:read:platform"]},{"sessionCookie":["admin:read:platform"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/goals/{id}":{"patch":{"operationId":"account.platform_goal_rename","description":"Rename one goal, writing THROUGH to GitHub: the milestone or `type/epic` issue is retitled at the source, and nothing is stored here. Its own scope, so a staff radar session can read the board without being able to retitle it. 422 on an id this board never mints, 404 on one GitHub does not have, 503 when GitHub cannot be reached.","tags":["account"],"security":[{"bearerAuth":["admin:goals"]},{"sessionCookie":["admin:goals"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/accounts":{"get":{"operationId":"account.orgs_list","description":"All org accounts (staff read), newest-first. `q` searches the GitHub login.","tags":["account"],"security":[{"bearerAuth":["admin:read:orgs"]},{"sessionCookie":["admin:read:orgs"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"q","in":"query","description":"Free-text search term.","schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/accounts/{id}":{"get":{"operationId":"account.org_get","description":"One account in detail (staff read).","tags":["account"],"security":[{"bearerAuth":["admin:read:orgs"]},{"sessionCookie":["admin:read:orgs"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/users":{"get":{"operationId":"account.users_list","description":"All users (staff read), newest-first. `q` searches the login; `filter=status:approved|waitlisted` narrows by approval state, and omitting it reads the whole roster.","tags":["account"],"security":[{"bearerAuth":["admin:read:users"]},{"sessionCookie":["admin:read:users"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `status`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"q","in":"query","description":"Free-text search term.","schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/oss-verifications":{"get":{"operationId":"account.oss_verify_list","description":"The queued OSS-verified applications (staff read). Defaults to `filter=status:pending` (the queue proper); `filter=status:all` reads decided history, and an unknown value is a 400 rather than a silent fallback. Ruling on one is operator-only, over MCP.","tags":["account"],"security":[{"bearerAuth":["admin:read:orgs"]},{"sessionCookie":["admin:read:orgs"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `status`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/grants":{"get":{"operationId":"grant.list","description":"A subject’s grant history, newest-first. Revoked and expired rows are included, each with its resolved `active` (staff read).","tags":["grant"],"security":[{"bearerAuth":["admin:read:orgs"]},{"sessionCookie":["admin:read:orgs"]}],"parameters":[{"name":"subject_kind","in":"query","required":true,"description":"account (an org, `acc_…`) or user (a person, a `users.id` uuid) — decides which id `subject_id` is.","schema":{"type":"string","enum":["account","user"],"description":"account (an org, `acc_…`) or user (a person, a `users.id` uuid) — decides which id `subject_id` is."}},{"name":"subject_id","in":"query","required":true,"description":"The subject: an account id (`acc_…`) or a user id (uuid), per `subject_kind`.","schema":{"type":"string","minLength":1,"maxLength":128,"description":"The subject: an account id (`acc_…`) or a user id (uuid), per `subject_kind`."}},{"name":"cursor","in":"query","description":"Opaque token from the previous response's `next_cursor` (a keyset over `(created_at, id)`). Never parse it.","schema":{"description":"Opaque token from the previous response's `next_cursor` (a keyset over `(created_at, id)`). Never parse it.","type":"string","minLength":1,"maxLength":512}},{"name":"per_page","in":"query","description":"How many rows to return (1..100). Values above the maximum are refused.","schema":{"description":"How many rows to return (1..100). Values above the maximum are refused.","type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"grant.issue","description":"Operator only: give an account or a user free capacity, with a required reason and an optional expiry.","tags":["grant"],"security":[{"bearerAuth":["admin:grants"]},{"sessionCookie":["admin:grants"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/grants/{id}":{"delete":{"operationId":"grant.revoke","description":"Operator only: stop a grant. It PARKS the row rather than deleting it, so an already-stopped grant answers 200 `revoked: false`.","tags":["grant"],"security":[{"bearerAuth":["admin:grants"]},{"sessionCookie":["admin:grants"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/fleet/runs/{runId}":{"get":{"operationId":"account.platform_run_get","description":"One agent run’s pulse, whichever account owns it; the owning org is resolved server-side and returned. The cross-tenant debugging read: an ordinary run read is fenced to your own account, and platform staff need to diagnose a run belonging to a customer they are not a member of. Every call appends a trail row before it answers.","tags":["account"],"security":[{"bearerAuth":["admin:read:runs"]},{"sessionCookie":["admin:read:runs"]}],"parameters":[{"name":"runId","in":"path","required":true,"description":"Run id (uuid) of one task run on a fleet box.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/admin/fleet/runs/{runId}/events":{"get":{"operationId":"account.platform_run_tail","description":"SSE: one agent run’s durable event transcript, whichever account owns it. Backfill, tail, terminate, the same stream `task.run_tail` serves a tenant, with the owner resolved server-side. Not resumable: `Last-Event-ID` is refused rather than ignored. Every call appends a trail row before the first frame.","tags":["account"],"security":[{"bearerAuth":["admin:read:runs"]},{"sessionCookie":["admin:read:runs"]}],"parameters":[{"name":"runId","in":"path","required":true,"description":"Run id (uuid) of one task run on a fleet box.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"An event stream of one agent run’s timeline, whichever account owns it — the cross-tenant debugging view. Identical frames to `task.run_tail`: every event so far as a `run_event` frame, then a live tail, closing with `done` (the run ENDED) or `bye` (this connection hit its duration cap on a run that is still going, so reconnect). `retry:` rides the first frame.","content":{"text/event-stream":{"schema":{"type":"string"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos":{"get":{"operationId":"project.list","description":"The account’s repositories with enabled state; rows carry `policy_valid` and last activity.","tags":["project"],"security":[{"bearerAuth":["read:repos"]},{"sessionCookie":["read:repos"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"project.create","description":"Mint a brand-new repo under the account org from the versioned gold-standard template, then dispatch the setup session that scaffolds it. Answers the created repo, the artifact manifest and a `scaffold_task_id` which may be `null`: the repo exists either way, so a failed dispatch is reported rather than thrown. Present only where the deployment holds GitHub App credentials.","tags":["project"],"security":[{"bearerAuth":["write:repos"]},{"sessionCookie":["write:repos"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}":{"get":{"operationId":"project.get","description":"One repository by `owner/repo`.","tags":["project"],"security":[{"bearerAuth":["read:repos"]},{"sessionCookie":["read:repos"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"patch":{"operationId":"project.update","description":"Flip a repo’s two owner switches, `enabled` and `donations_enabled`. At least one is required and an absent field is untouched state. Enabling a private repo on a plan that does not cover it is a **402** naming the way out, never a 403.","tags":["project"],"security":[{"bearerAuth":["write:repos"]},{"sessionCookie":["write:repos"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/policy":{"get":{"operationId":"project.policy_get","description":"The stored `.maintainer.yml` policy snapshot for one enabled repo.","tags":["project"],"security":[{"bearerAuth":["read:repos"]},{"sessionCookie":["read:repos"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/overview":{"get":{"operationId":"project.overview","description":"Activity rollup for one enabled repo (the repo-detail Overview tab).","tags":["project"],"security":[{"bearerAuth":["read:repos"]},{"sessionCookie":["read:repos"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/settings":{"get":{"operationId":"project.settings","description":"Settings view for one enabled repo (the repo-detail Settings tab).","tags":["project"],"security":[{"bearerAuth":["read:repos"]},{"sessionCookie":["read:repos"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/policy/validate":{"post":{"operationId":"project.policy_validate","description":"Check a `.maintainer.yml` body: `{yml}` in, ok or errors out. Stores nothing.","tags":["project"],"security":[{"bearerAuth":["write:repos"]},{"sessionCookie":["write:repos"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/setup":{"post":{"operationId":"project.setup","description":"Point a box at a repo that already exists and have it audit the project and establish its base (stack detect, the one-command DX scripts, `.mcp.json`, a project brain). 202 with the dispatched `task_id`. It rides `write:tasks`, not `write:repos`: a credential that may enable a repo is not thereby allowed to spend the account’s inference budget on it.","tags":["project"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/ask":{"post":{"operationId":"project.ask","description":"Ask a question about one enabled repo, answered from grounded evidence with citations. A body of `{question}`; the answer is never uncited, so `{refused: true, reason}` at **200** is the capability working rather than a failure.","tags":["project"],"security":[{"bearerAuth":["read:repos"]},{"sessionCookie":["read:repos"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/issues":{"get":{"operationId":"issue.list","description":"One enabled repo’s tracked issues newest-first, with triage state.","tags":["issue"],"security":[{"bearerAuth":["read:issues"]},{"sessionCookie":["read:issues"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `github_number`, `created_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`, `ne`, `in`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `state`, `qualification`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"q","in":"query","description":"Free-text search term.","schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/issues/{id}":{"get":{"operationId":"issue.get","description":"One issue by id.","tags":["issue"],"security":[{"bearerAuth":["read:issues"]},{"sessionCookie":["read:issues"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/issues/{id}/handoff":{"post":{"operationId":"issue.handoff","description":"Force-fire the issue to the coding-agent webhook (queued delivery; `reason` plus an optional `webhook_ref`).","tags":["issue"],"security":[{"bearerAuth":["write:issues"]},{"sessionCookie":["write:issues"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/issues/{id}/escalate":{"post":{"operationId":"issue.escalate","description":"Force-pull a human in: `category` + `reason` → an escalation row and a notification.","tags":["issue"],"security":[{"bearerAuth":["write:issues"]},{"sessionCookie":["write:issues"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/prs":{"get":{"operationId":"pr.list","description":"One enabled repo’s PRs newest-first.","tags":["pr"],"security":[{"bearerAuth":["read:prs"]},{"sessionCookie":["read:prs"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `github_number`, `created_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`, `ne`, `in`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `state`, `ci_status`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/prs/{id}":{"get":{"operationId":"pr.get","description":"One PR by id.","tags":["pr"],"security":[{"bearerAuth":["read:prs"]},{"sessionCookie":["read:prs"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/prs/{id}/review-runs":{"get":{"operationId":"review.status","description":"The PR’s AI code-review runs, newest-first.","tags":["review"],"security":[{"bearerAuth":["read:prs"]},{"sessionCookie":["read:prs"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"review.rerun","description":"Re-run the PR’s latest code review on the same commit (a fresh push already auto-reviews). 202 with the revived task; `rerun: false` means one was already queued, which is an idempotent no-op. A PR with no review run yet is a **409**, not a 404: the PR is fine, there is simply nothing to re-run.","tags":["review"],"security":[{"bearerAuth":["write:prs"]},{"sessionCookie":["write:prs"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/prs/{id}/approve-pending":{"post":{"operationId":"pr.approve_pending","description":"Approve the PR’s outstanding ask-before-acting action.","tags":["pr"],"security":[{"bearerAuth":["write:prs"]},{"sessionCookie":["write:prs"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/prs/{id}/skip-pending":{"post":{"operationId":"pr.skip_pending","description":"Decline the PR’s outstanding ask-before-acting action.","tags":["pr"],"security":[{"bearerAuth":["write:prs"]},{"sessionCookie":["write:prs"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/sessions/{id}/events":{"get":{"operationId":"session.events","description":"SSE: one session’s audit events. Backfill, tail, terminate. Resumable: each frame’s `id:` is that row’s keyset cursor, so a reconnect carrying `Last-Event-ID` continues from it instead of replaying the session.","tags":["session"],"security":[{"bearerAuth":["read:sessions"]},{"sessionCookie":["read:sessions"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Last-Event-ID","in":"header","required":false,"description":"Resume point from a previous connection: the `id:` of the last frame received. Streams the events AFTER it instead of backfilling the session. A token this stream did not issue is a 400, never a silent restart.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"An event stream of the session’s audit trail. Every event recorded so far as an `audit` frame, then a live tail of new ones. It closes one of two ways and they mean opposite things: `done` means the session ENDED and nothing can follow, while `bye` means only that this connection hit its duration cap on a session that is still running, so reconnect. Each `audit` frame carries an `id:` — the resume token to send back as `Last-Event-ID`, never a row id — and neither closing frame carries one, so a reconnecting client re-reads the terminal frame and stops instead of parking on an empty tail, and a recycled one resumes from the last row it actually received. `retry:` rides the first frame.","content":{"text/event-stream":{"schema":{"type":"string"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/sessions/{id}/events.jsonl":{"get":{"operationId":"session.events_export","description":"The same events as a JSONL download.","tags":["session"],"security":[{"bearerAuth":["read:sessions"]},{"sessionCookie":["read:sessions"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/sessions/{id}/replay":{"post":{"operationId":"session.replay","description":"Dry-run a candidate policy against a finished session. Read-only: it changes nothing.","tags":["session"],"security":[{"bearerAuth":["read:sessions"]},{"sessionCookie":["read:sessions"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/fleet/runs/{runId}/events":{"get":{"operationId":"task.run_tail","description":"SSE: one BYOVM run’s durable event timeline (the NATS→SSE bridge). Backfill, tail, terminate. Resumable: each frame’s `id:` is the row’s `seq`, so a reconnect carrying `Last-Event-ID` continues from it instead of replaying the run.","tags":["task"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"runId","in":"path","required":true,"description":"Run id (uuid) of one task run on a fleet box.","schema":{"type":"string"}},{"name":"Last-Event-ID","in":"header","required":false,"description":"Resume point from a previous connection: the `id:` of the last frame received. Streams the events AFTER it instead of backfilling the run. A token this stream did not issue is a 400, never a silent restart.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"An event stream of one BYOVM run’s timeline. Every event recorded so far as a `run_event` frame, then a live tail of new ones. It closes one of two ways and they mean opposite things: `done` means the run ENDED, while `bye` means only that this connection hit its duration cap on a run that is still going, so reconnect. Each `run_event` frame carries an `id:` — the resume token to send back as `Last-Event-ID`, never a row id — and neither closing frame carries one. `retry:` rides the first frame. For the same timeline as a page a client polls rather than a stream it subscribes to, see `task.run_events`.","content":{"text/event-stream":{"schema":{"type":"string"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/fleet/runs/{runId}/message":{"post":{"operationId":"session.message","description":"Send a message to a LIVE interactive run (a scout or a setup session) and wait for the agent’s reply. Addressed by the fleet run id, the same id `GET /v1/fleet/runs/:runId/events` streams, not by a session id. A run that holds no live channel is a **409**; a delivered message the agent did not answer in time is a 200 carrying `delivered: true, reply: null`, because the guidance did land.","tags":["session"],"security":[{"bearerAuth":["write:sessions"]},{"sessionCookie":["write:sessions"]}],"parameters":[{"name":"runId","in":"path","required":true,"description":"Run id (uuid) of one task run on a fleet box.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/onboarding/state":{"get":{"operationId":"onboarding.state","description":"The resumable onboarding funnel state.","tags":["onboarding"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/onboarding/advance":{"post":{"operationId":"onboarding.advance","description":"Advance the funnel by one CALLER-witnessed event. A platform-witnessed one (`key_set`, `gh_app_installed`, `yml_validated`, `yml_invalid`) is 422 from every state: those are observations, and their subject does not assert them.","tags":["onboarding"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/next-steps":{"get":{"operationId":"account.next_steps","description":"What still stands between this credential and a first scout call, as an ordered ladder of rungs. Each rung carries the fact it was decided from and WHERE it clears, so a rung no verb can move is never retried. Pass `?repo=owner/repo` to ask about ONE repo: the same ladder narrowed to it, plus whether it is onboarded and whether its stored secrets sit where a lane is handed them. Every rung is reported every time, passing ones included; a rung whose fact sits behind a scope you do not hold reports `unknown` naming that scope rather than passing. The same answer the `next_steps` MCP verb serves, from the same implementation.","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/keys":{"get":{"operationId":"billing.keys_list","description":"The ORG pool of BYOK keys, masked. The caller’s personal pool is `/v1/me/keys`.","tags":["billing"],"security":[{"bearerAuth":["read:billing"]},{"sessionCookie":["read:billing"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"billing.key_add","description":"Add an org BYOK key, sealed and captured, never echoed.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/usage":{"get":{"operationId":"billing.usage","description":"Usage rollup for the current billing window, plus the agent-hours band: `used`/`cap` in HOURS and the UTC instant they reset. `null` means no ceiling applies.","tags":["billing"],"security":[{"bearerAuth":["read:billing"]},{"sessionCookie":["read:billing"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/entitlements":{"get":{"operationId":"billing.entitlements","description":"The account’s tier entitlements.","tags":["billing"],"security":[{"bearerAuth":["read:billing"]},{"sessionCookie":["read:billing"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/portal":{"post":{"operationId":"billing.portal","description":"Mint a Stripe billing-portal URL.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/checkout":{"post":{"operationId":"billing.checkout","description":"Buy seats: `{tier, quantity}` → a hosted Stripe Checkout URL. This is the FIRST subscription, which the portal cannot create; 503 when the tier’s price or Stripe is unconfigured.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/cap":{"patch":{"operationId":"billing.set_cap","description":"Set the monthly spend cap.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/keys/{id}":{"delete":{"operationId":"billing.key_delete","description":"Delete an org BYOK key.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/keys/{id}/verify":{"post":{"operationId":"billing.key_verify","description":"Verify an org key against its provider (live probe).","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/keys/{id}/rotate":{"post":{"operationId":"billing.key_rotate","description":"Replace an org key’s secret in place, keeping its id.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1}},"required":["key"]}}}},"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/keys/{id}/kind":{"patch":{"operationId":"billing.key_kind_set","description":"Re-stamp an org key’s billing nature (`subscription` ⇄ `metered`).","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/providers/models":{"post":{"operationId":"billing.provider_models","description":"List the models a provider key can address, before it is captured. The key rides in the body and is never stored; the answer is model ids, so a maintainer picks one instead of typing it.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/keys/{id}/models":{"get":{"operationId":"billing.key_models","description":"The same list for an org key already in the pool.","tags":["billing"],"security":[{"bearerAuth":["read:billing"]},{"sessionCookie":["read:billing"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/billing/log-sink":{"get":{"operationId":"billing.log_sink_get","description":"The LLM-log sink config.","tags":["billing"],"security":[{"bearerAuth":["read:billing"]},{"sessionCookie":["read:billing"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"billing.log_sink_set","description":"Set it, validated and probed and sealed before it is stored.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"billing.log_sink_clear","description":"Clear it.","tags":["billing"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/oss/verification":{"get":{"operationId":"account.oss_verification_get","description":"This account's latest OSS-verified application, or `null`.","tags":["account"],"security":[{"bearerAuth":["read:billing"]},{"sessionCookie":["read:billing"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"account.oss_verification_apply","description":"Apply for OSS-verified. Amends the open ask while `pending`, 409 once approved. It grants nothing by itself: the verdict is operator-only.","tags":["account"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/keys":{"get":{"operationId":"self.keys_list","description":"List the caller’s PERSONAL BYOK keys, masked. The org pool is `/v1/billing/keys`.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"self.key_add","description":"Add a personal BYOK key, sealed on write and never echoed back.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/keys/models":{"post":{"operationId":"self.provider_models","description":"List the models a provider key can address, before a PERSONAL key is captured. The key rides in the body and is never stored; the org pool’s door is `/v1/billing/providers/models`.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/keys/{id}/verify":{"post":{"operationId":"self.key_verify","description":"Verify a personal key against its provider (live probe).","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/keys/{id}/rotate":{"post":{"operationId":"self.key_rotate","description":"Replace a personal key’s secret in place, keeping its id.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1}},"required":["key"]}}}},"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/keys/{id}":{"delete":{"operationId":"self.key_delete","description":"Delete a personal BYOK key.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/keys/{id}/kind":{"patch":{"operationId":"self.key_kind_set","description":"Re-stamp a personal key’s billing nature (`subscription` ⇄ `metered`).","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/llm-pref":{"get":{"operationId":"self.llm_pref_get","description":"The caller’s personal model preference.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"self.llm_pref_set","description":"Set the caller’s personal model preference.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"self.llm_pref_clear","description":"Clear it, back to the account default.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/github-token":{"get":{"operationId":"self.github_token_get","description":"Whether a personal GitHub token is connected, its expiry and repo grants. Status only; the token is never echoed.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"self.github_token_set","description":"Connect a personal GitHub token, sealed on write.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"self.github_token_clear","description":"Disconnect it.","tags":["self"],"security":[{"bearerAuth":["write:self:keys"]},{"sessionCookie":["write:self:keys"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/system-prompts/org":{"get":{"operationId":"system_prompt.org_get","description":"The org-wide system prompt.","tags":["system_prompt"],"security":[{"bearerAuth":["write:prompts"]},{"sessionCookie":["write:prompts"]}],"parameters":[{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"system_prompt.org_set","description":"Set it.","tags":["system_prompt"],"security":[{"bearerAuth":["write:prompts"]},{"sessionCookie":["write:prompts"]}],"parameters":[{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"system_prompt.org_clear","description":"Clear it.","tags":["system_prompt"],"security":[{"bearerAuth":["write:prompts"]},{"sessionCookie":["write:prompts"]}],"parameters":[{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/system-prompts/repo/{repoId}":{"get":{"operationId":"system_prompt.project_get","description":"One repo’s system prompt.","tags":["system_prompt"],"security":[{"bearerAuth":["write:prompts"]},{"sessionCookie":["write:prompts"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"system_prompt.project_set","description":"Set it; the repo layer wins over the org one.","tags":["system_prompt"],"security":[{"bearerAuth":["write:prompts"]},{"sessionCookie":["write:prompts"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"system_prompt.project_clear","description":"Clear it.","tags":["system_prompt"],"security":[{"bearerAuth":["write:prompts"]},{"sessionCookie":["write:prompts"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/system-prompt":{"get":{"operationId":"self.system_prompt_get","description":"The caller’s personal system prompt.","tags":["self"],"security":[{"bearerAuth":["write:self:prompt"]},{"sessionCookie":["write:self:prompt"]}],"parameters":[{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"self.system_prompt_set","description":"Set it.","tags":["self"],"security":[{"bearerAuth":["write:self:prompt"]},{"sessionCookie":["write:self:prompt"]}],"parameters":[{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"self.system_prompt_clear","description":"Clear it.","tags":["self"],"security":[{"bearerAuth":["write:self:prompt"]},{"sessionCookie":["write:self:prompt"]}],"parameters":[{"name":"role","in":"query","description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","schema":{"description":"Which run the layer is for (architect | setup | scout | worker | reviewer | janitor | devops). Omit for prose that applies to EVERY run. A role layer does not replace its all-roles sibling — both apply, narrowest last.","anyOf":[{"type":"string","enum":["architect","setup","scout","worker","reviewer","janitor","devops"]},{"type":"string","const":""}]}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/llm-routes":{"get":{"operationId":"llm_route.list","description":"The model-routing pins: which BYOK key serves which purpose, at org and repo scope.","tags":["llm_route"],"security":[{"bearerAuth":["read:billing"]},{"sessionCookie":["read:billing"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/llm-routes/org/{purpose}":{"put":{"operationId":"llm_route.org_set","description":"Pin an org-wide key for one routing purpose.","tags":["llm_route"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"purpose","in":"path","required":true,"description":"LLM routing purpose the key is pinned for.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"llm_route.org_clear","description":"Clear the org pin for one purpose.","tags":["llm_route"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"purpose","in":"path","required":true,"description":"LLM routing purpose the key is pinned for.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/llm-routes/repo/{repoId}/{purpose}":{"put":{"operationId":"llm_route.project_set","description":"Pin a key for one purpose on one repo; the repo pin wins over the org one.","tags":["llm_route"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"purpose","in":"path","required":true,"description":"LLM routing purpose the key is pinned for.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"llm_route.project_clear","description":"Clear the repo pin for one purpose.","tags":["llm_route"],"security":[{"bearerAuth":["write:billing"]},{"sessionCookie":["write:billing"]}],"parameters":[{"name":"repoId","in":"path","required":true,"description":"Repository id (uuid). Note that the sibling `/v1/repos` routes address a repo by `owner/repo` instead.","schema":{"type":"string"}},{"name":"purpose","in":"path","required":true,"description":"LLM routing purpose the key is pinned for.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/templates":{"get":{"operationId":"template.list","description":"Every agent template on this account.","tags":["template"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/templates/{name}":{"get":{"operationId":"template.get","description":"One agent template by name.","tags":["template"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"name","in":"path","required":true,"description":"Name of the addressed row within its parent: a secret name, or an agent template name.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"template.set","description":"Create or REPLACE a template by name. A full replace: an omitted field resets to its default, and a compatible backend must carry a `base_url`.","tags":["template"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"name","in":"path","required":true,"description":"Name of the addressed row within its parent: a secret name, or an agent template name.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"template.delete","description":"Delete a template by name. Idempotent.","tags":["template"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"name","in":"path","required":true,"description":"Name of the addressed row within its parent: a secret name, or an agent template name.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/prompt-vars":{"get":{"operationId":"config.list","description":"The account prompt variables, optionally narrowed to one `scope` and `ref`.","tags":["config"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"scope","in":"query","description":"Return only vars filed under this scope: `account`, `repo` or `template`.","schema":{"description":"Return only vars filed under this scope: `account`, `repo` or `template`.","type":"string","enum":["account","repo","template"]}},{"name":"ref","in":"query","description":"The scope instance to narrow to: a repo id for `repo`, a template name for `template`. Meaningless on `account`, which admits no ref.","schema":{"description":"The scope instance to narrow to: a repo id for `repo`, a template name for `template`. Meaningless on `account`, which admits no ref.","type":"string","maxLength":200}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/prompt-vars/{scope}/{key}":{"get":{"operationId":"config.get","description":"One prompt variable at `(scope, ref, key)`. The `ref` is a repo id or template name, and only `repo`/`template` scope takes one.","tags":["config"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"scope","in":"path","required":true,"description":"Prompt-variable scope: `account`, `repo` or `template`. The latter two also take a `ref` query parameter naming the instance.","schema":{"type":"string"}},{"name":"key","in":"path","required":true,"description":"Prompt-variable key: the body of a `#{{key}}` placeholder. Letters, digits, dot, underscore, hyphen.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"config.set","description":"Set one prompt variable. Plaintext, so NEVER a credential: a secret-shaped value is refused, and sealed secrets belong in `/v1/repos/:owner/:repo/secrets`.","tags":["config"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"scope","in":"path","required":true,"description":"Prompt-variable scope: `account`, `repo` or `template`. The latter two also take a `ref` query parameter naming the instance.","schema":{"type":"string"}},{"name":"key","in":"path","required":true,"description":"Prompt-variable key: the body of a `#{{key}}` placeholder. Letters, digits, dot, underscore, hyphen.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"config.delete","description":"Clear one prompt variable. Idempotent.","tags":["config"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"scope","in":"path","required":true,"description":"Prompt-variable scope: `account`, `repo` or `template`. The latter two also take a `ref` query parameter naming the instance.","schema":{"type":"string"}},{"name":"key","in":"path","required":true,"description":"Prompt-variable key: the body of a `#{{key}}` placeholder. Letters, digits, dot, underscore, hyphen.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/integrations":{"get":{"operationId":"integration.list","description":"The account’s connected integrations. Status only; credentials never cross the boundary.","tags":["integration"],"security":[{"bearerAuth":["read:integrations"]},{"sessionCookie":["read:integrations"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"integration.connect","description":"Connect a service by pasting its credential, sealed on write and never echoed.","tags":["integration"],"security":[{"bearerAuth":["write:integrations"]},{"sessionCookie":["write:integrations"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/integrations/{kind}":{"delete":{"operationId":"integration.disconnect","description":"Disconnect a connector: drops the row and its vault secret.","tags":["integration"],"security":[{"bearerAuth":["write:integrations"]},{"sessionCookie":["write:integrations"]}],"parameters":[{"name":"kind","in":"path","required":true,"description":"Kind discriminator of the addressed row: the integration kind, or the notification kind.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/donations":{"get":{"operationId":"donation.list","description":"The caller’s own gifts, newest-first. A project gift carries `target_repo_full_name`, derived, because a donor funds repos they do not own.","tags":["donation"],"security":[{"bearerAuth":["read:donations"]},{"sessionCookie":["read:donations"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"donation.create","description":"Give `money | compute | llm`, pinned to a project or to the pool, earmarking the resource oss-only. 402 without an active `oss_donor` subscription on a compute or llm gift; an optional `models` list is the ceiling the recipient picks within.","tags":["donation"],"security":[{"bearerAuth":["write:donations"]},{"sessionCookie":["write:donations"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/donations/received":{"get":{"operationId":"donation.received","description":"The MAINTAINER’s inbox: gifts pinned to repos this account owns, each naming its giver by login (never an email) and, for an llm gift, the resolved ceiling the picker may offer.","tags":["donation"],"security":[{"bearerAuth":["read:donations"]},{"sessionCookie":["read:donations"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/donations/{id}":{"delete":{"operationId":"donation.cancel","description":"Detach a gift: parks the row and clears the earmark. The DONOR’s end.","tags":["donation"],"security":[{"bearerAuth":["write:donations"]},{"sessionCookie":["write:donations"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/donations/{id}/decline":{"post":{"operationId":"donation.decline","description":"Refuse a gift you were given: parks the row and releases the donor’s box or key. Authorized against the RECIPIENT, so the same id 404s for whichever side the caller is not.","tags":["donation"],"security":[{"bearerAuth":["write:donations"]},{"sessionCookie":["write:donations"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/donations/{id}/model":{"patch":{"operationId":"donation.set_model","description":"The maintainer’s model pick on a received llm gift, inside the donor’s ceiling (`null` clears it).","tags":["donation"],"security":[{"bearerAuth":["write:donations"]},{"sessionCookie":["write:donations"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/secrets":{"get":{"operationId":"secret.list","description":"The account’s named secrets: names and timestamps only, never a value.","tags":["secret"],"security":[{"bearerAuth":["read:secrets"]},{"sessionCookie":["read:secrets"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `name`, `created_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"secret.set","description":"Store a named secret, sealed before anything else touches the value.","tags":["secret"],"security":[{"bearerAuth":["write:secrets"]},{"sessionCookie":["write:secrets"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/secrets/{name}":{"delete":{"operationId":"secret.delete","description":"Delete one named secret. Only the `dashboard:` namespace is deletable here; an integration’s secret is refused at the edge.","tags":["secret"],"security":[{"bearerAuth":["write:secrets"]},{"sessionCookie":["write:secrets"]}],"parameters":[{"name":"name","in":"path","required":true,"description":"Name of the addressed row within its parent: a secret name, or an agent template name.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/secrets":{"get":{"operationId":"project_secret.list","description":"One repo’s stored secrets: name, exposure, environment and timestamps ONLY. A read never yields a value, because the ciphertext column is projected by exactly one query and this is not it.","tags":["project_secret"],"security":[{"bearerAuth":["read:secrets"]},{"sessionCookie":["read:secrets"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"project_secret.set","description":"Store one repo’s sealed `.env` for one environment, as a whole pasted `.env` (parsed server-side) or as explicit rows. `environment` is required and never defaulted, and a malformed line refuses the WHOLE paste naming only its line number.","tags":["project_secret"],"security":[{"bearerAuth":["write:secrets"]},{"sessionCookie":["write:secrets"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/repos/{owner}/{repo}/secrets/{name}":{"delete":{"operationId":"project_secret.delete","description":"Delete one repo secret by name, optionally scoped to one `environment`.","tags":["project_secret"],"security":[{"bearerAuth":["write:secrets"]},{"sessionCookie":["write:secrets"]}],"parameters":[{"name":"owner","in":"path","required":true,"description":"Repository owner login: the `owner` half of `owner/repo`.","schema":{"type":"string"}},{"name":"repo","in":"path","required":true,"description":"Repository name: the `repo` half of `owner/repo`.","schema":{"type":"string"}},{"name":"name","in":"path","required":true,"description":"Name of the addressed row within its parent: a secret name, or an agent template name.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/mcp":{"post":{"operationId":"mcp.rpc","description":"The MCP server itself: one JSON-RPC endpoint for the whole verb catalog. Every verb asserts its OWN scope inside the server, which is also what buckets it for rate limiting.","tags":["mcp"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"get":{"operationId":"mcp.stream_refused","description":"Answers `405` + `Allow: POST` to the GET a Streamable HTTP client opens for the server-to-client SSE leg. This server is stateless single-request JSON-RPC and pushes nothing, and the transport spec requires exactly this status to say so. The official SDK client reads `405` as \"POST-only, carry on\" and treats every other status, a `404` included, as a fatal transport error.","tags":["mcp"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/enrollments":{"post":{"operationId":"box.add","description":"Mint a one-time enrollment token. Returned exactly once.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/enrollments/ssh":{"post":{"operationId":"box.add_ssh","description":"Enroll over SSH instead: hand us the box’s coordinates and the mothership dials in and runs the join. 503 when the deployment has no platform SSH key.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners":{"get":{"operationId":"box.list","description":"The fleet boxes enrolled under this account, each with live presence.","tags":["box"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/{id}/revoke":{"post":{"operationId":"box.revoke","description":"Cut a box off: its credential stops working. The reversible half is `POST /v1/runners/:id/drain`, which evacuates a box and leaves it enrolled.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/versions":{"get":{"operationId":"box.versions","description":"The fleet’s `dz-runner` build spread right now: how many boxes run each version, live beat first and the last recorded version as fallback.","tags":["box"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/releases":{"get":{"operationId":"box.releases","description":"The `dz-runner` release ledger per build target. A tenant reads the installable builds their own boxes may be pointed at (`view: installable`); a platform operator holding `admin:releases` reads the whole ledger, halted rows and build provenance included (`view: ledger`).","tags":["box"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"channel","in":"query","description":"Return only releases published to this channel. Omitted means every channel.","schema":{"description":"Return only releases published to this channel. Omitted means every channel.","type":"string","enum":["stable","canary"]}},{"name":"halted_only","in":"query","description":"Serve only HALTED (yanked) releases. Platform-operator only (admin:releases).","schema":{"description":"Serve only HALTED (yanked) releases. Platform-operator only (admin:releases).","type":"string","enum":["true","false"]}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/releases/{channel}/{version}/unyank":{"post":{"operationId":"box.unyank","description":"Restore a halted release so it re-enters the installable read. Platform-wide, so it rides the operator scope no account role grants; reports the artifact count it actually cleared.","tags":["box"],"security":[{"bearerAuth":["admin:releases"]},{"sessionCookie":["admin:releases"]}],"parameters":[{"name":"channel","in":"path","required":true,"description":"Channel discriminator of the addressed row: a notification preference’s delivery channel (`email`, `in_app`, `push`, ...), or a `dz-runner` release channel (`canary`, `stable`).","schema":{"type":"string"}},{"name":"version","in":"path","required":true,"description":"Recorded `dz-runner` release version, spelled exactly as `GET /v1/runners/releases` reports it.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/update":{"post":{"operationId":"box.update","description":"Start a staged self-update rollout of THIS account’s fleet (canary, soak, bounded waves, halting itself on failure). Reports what it started, not an outcome. A second trigger joins the running rollout rather than racing it.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/{id}":{"get":{"operationId":"box.get","description":"One box in full: its row plus live presence (online, active sessions, reported version, telemetry). 404 when unknown or foreign.","tags":["box"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/{id}/drain":{"post":{"operationId":"box.drain","description":"Evacuate a box: flip it out of the assignable pool and re-queue its in-flight work. Reversible, and the box stays enrolled. Killing one is `POST /v1/runners/:id/revoke`.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/{id}/creds/reissue":{"post":{"operationId":"box.reissue_creds","description":"Operator-initiated credential re-issue for a healthy box (#2547): mint a fresh fleet credential on demand. Convenience, not recovery. The verb rides the NATS control plane, which is exactly what a box with a lapsed credential has lost, so a locked-out box is `systemctl restart dz-runner`. A foreign id, an unknown id, and a revoked box all answer 404 (under a MEMORY resolver, refusing the roll-forward is the mechanism that makes revocation converge, and distinguishing it would tell a caller a box exists when it does not); a deployment without a NATS account signing key answers 503, the same posture the box-initiated leg carries.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/{id}/owner":{"put":{"operationId":"box.set_owner","description":"Retarget which work a box claims: `shared` (the pool), `org` (this account) or `user` (one member, across their orgs). 422 when the target cannot own a box here.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/runners/{id}/prompt":{"put":{"operationId":"box.set_prompt","description":"Set or clear the box’s concise operator briefing (what this VPS runs, how to dispatch on it). Max 2000 characters; send `null` to clear.","tags":["box"],"security":[{"bearerAuth":["write:runners"]},{"sessionCookie":["write:runners"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/fleet/utilization":{"get":{"operationId":"box.utilization","description":"The one read the command center polls: per-box load, BYOK key pool heat, per-lane backlog depth and per-repo KB freshness, in one call. Writes nothing.","tags":["box"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tokens":{"post":{"operationId":"token.mint","description":"Mint a `dev_pat_…` PAT with scopes ⊆ `mintable_scopes`. The plaintext is returned exactly ONCE; only its hash is stored. Body-less mints the caller’s whole mintable set. `name` is an optional human label: every PAT carries the same prefix, so it is the only field that CAN tell two apart afterwards. Absent leaves the token unnamed; names need not be unique.","tags":["token"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"get":{"operationId":"token.list","description":"PATs, masked, revoked rows included, each with its `expires_iso` (null ⇒ permanent), plus `mintable_scopes`: the exact vocabulary THIS caller may mint. Empty ⇒ the caller can neither mint nor revoke.","tags":["token"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tokens/{id}":{"patch":{"operationId":"token.rename","description":"Relabel a PAT. Moves the human name and nothing else (no scope, no expiry, no revocation state), and a revoked row is renameable so a roster stays readable.","tags":["token"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"token.revoke","description":"Revoke a PAT (idempotent, account-scoped).","tags":["token"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/email-routes":{"get":{"operationId":"email_route.list","description":"The resolved notification category → address matrix.","tags":["email_route"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/email-routes/{category}":{"put":{"operationId":"email_route.set","description":"Override one category’s route.","tags":["email_route"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"category","in":"path","required":true,"description":"Notification category this email route overrides.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"email_route.delete","description":"Clear an override, back to the default.","tags":["email_route"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"category","in":"path","required":true,"description":"Notification category this email route overrides.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/notification-preferences":{"get":{"operationId":"notification.prefs_list","description":"The resolved kind × channel notification matrix.","tags":["notification"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/me/notification-preferences/{kind}/{channel}":{"put":{"operationId":"notification.pref_set","description":"Override one kind/channel pair.","tags":["notification"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"kind","in":"path","required":true,"description":"Kind discriminator of the addressed row: the integration kind, or the notification kind.","schema":{"type":"string"}},{"name":"channel","in":"path","required":true,"description":"Channel discriminator of the addressed row: a notification preference’s delivery channel (`email`, `in_app`, `push`, ...), or a `dz-runner` release channel (`canary`, `stable`).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"notification.pref_clear","description":"Clear an override, back to the default.","tags":["notification"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"kind","in":"path","required":true,"description":"Kind discriminator of the addressed row: the integration kind, or the notification kind.","schema":{"type":"string"}},{"name":"channel","in":"path","required":true,"description":"Channel discriminator of the addressed row: a notification preference’s delivery channel (`email`, `in_app`, `push`, ...), or a `dz-runner` release channel (`canary`, `stable`).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/notifications":{"get":{"operationId":"notification.inbox_list","description":"The in-app notification inbox.","tags":["notification"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/notifications/{id}/read":{"post":{"operationId":"notification.mark_read","description":"Mark one notification read.","tags":["notification"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/notifications/read-all":{"post":{"operationId":"notification.mark_all_read","description":"Mark the whole inbox read.","tags":["notification"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/webhooks":{"get":{"operationId":"webhook.list","description":"The outbound webhook subscriptions.","tags":["webhook"],"security":[{"bearerAuth":["read:webhooks"]},{"sessionCookie":["read:webhooks"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `name`, `last_delivery_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`, `ne`, `in`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `healthy`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"webhook.create","description":"Subscribe a URL to a set of events. The signing secret is minted here and returned exactly ONCE; it is sealed at rest and never re-read.","tags":["webhook"],"security":[{"bearerAuth":["write:webhooks"]},{"sessionCookie":["write:webhooks"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/webhooks/deliveries":{"get":{"operationId":"webhook.deliveries","description":"The delivery ledger: what we sent and what answered, newest first. Narrow it to one endpoint with `?filter=webhook_id:<uuid>` rather than paging the whole account.","tags":["webhook"],"security":[{"bearerAuth":["read:webhooks"]},{"sessionCookie":["read:webhooks"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `webhook_id`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/webhooks/{id}":{"delete":{"operationId":"webhook.delete","description":"Delete a subscription.","tags":["webhook"],"security":[{"bearerAuth":["write:webhooks"]},{"sessionCookie":["write:webhooks"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/webhooks/{id}/test":{"post":{"operationId":"webhook.test","description":"Send a test delivery to one subscription.","tags":["webhook"],"security":[{"bearerAuth":["write:webhooks"]},{"sessionCookie":["write:webhooks"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/org-sso":{"get":{"operationId":"org_sso.get","description":"The org’s SSO configuration.","tags":["org_sso"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"put":{"operationId":"org_sso.set","description":"Set it (OIDC or SAML). The browser login legs are separate, unversioned routes.","tags":["org_sso"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"org_sso.delete","description":"Delete it; the org falls back to platform login.","tags":["org_sso"],"security":[{"bearerAuth":["write:account"]},{"sessionCookie":["write:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tasks":{"get":{"operationId":"task.list","description":"The account’s task queue, newest-first.","tags":["task"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `created_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`, `ne`, `in`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `status`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"task.create","description":"Dispatch one scoped task to a sink (`linear | gh | direct`) → `{task_id, sink, url}`, an escalation, or `queue_full`.","tags":["task"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"repo_full_name":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9-]{0,99}\\/[A-Za-z0-9._-]{1,100}$"},"title":{"type":"string","minLength":1,"maxLength":200},"problem":{"type":"string","minLength":1,"maxLength":10000},"acceptance_criteria":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"files_touched":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":300}},"forbidden":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":300}},"confidence":{"type":"number","minimum":0,"maximum":1},"sink":{"type":"string","enum":["linear","gh","direct","queued"]},"class":{"type":"string","enum":["interactive","coding","ci","gardener"]},"requires":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":64}},"llm":{"type":"object","properties":{"provider":{"type":"string","enum":["anthropic","openai","openrouter","gemini","kimi","zai","cerebras","minimax","groq","xai","deepseek","together","fireworks","router","custom"]},"model":{"type":"string","minLength":1,"maxLength":200},"key_label":{"type":"string","minLength":1,"maxLength":64}}},"review":{"type":"object","properties":{"pr_number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"head_sha":{"type":"string","minLength":7,"maxLength":64},"base_ref":{"type":"string","minLength":1,"maxLength":255},"incremental":{"type":"boolean"},"app_authored":{"type":"boolean"},"review_mode":{"type":"string","enum":["comments","full"]},"resolved_review":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"source_issue_number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"takeover":{"type":"object","properties":{"vendor":{"type":"string","minLength":1,"maxLength":64},"signal":{"type":"string","enum":["quota_notice","silent_past_grace"]}},"required":["vendor","signal"]}},"required":["pr_number","head_sha","base_ref","incremental"]},"review_reply":{"type":"object","properties":{"pr_number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"triggered_by":{"type":"string","minLength":1,"maxLength":255},"resolved_review":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["pr_number","triggered_by"]},"babysit":{"type":"object","properties":{"pr_number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"head_sha":{"type":"string","minLength":7,"maxLength":64},"base_ref":{"type":"string","minLength":1,"maxLength":255},"head_ref":{"type":"string","minLength":1,"maxLength":255},"action":{"type":"string","enum":["fix_ci","resolve_conflict","address_comments","address_findings","reply_bot"]},"attempt":{"type":"integer","minimum":1,"maximum":3},"addressed_comment_ids":{"maxItems":200,"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"replied_comment_ids":{"maxItems":200,"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"addressed_finding_ids":{"maxItems":200,"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"required":["pr_number","head_sha","base_ref","head_ref","action","attempt"]},"issue_number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"source_ref":{"type":"string","minLength":1,"maxLength":200},"require_approval":{"type":"boolean"},"conversation_ref":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$"},"stack":{"type":"string","minLength":1,"maxLength":40},"origin":{"default":"manual","type":"string","enum":["conversation","gh_issue","sentry","linear","manual","pr_review","pr_review_reply","pr_babysit","pr_babysit_watch","scout","setup","architect","devops"]}},"required":["repo_full_name","title","problem","acceptance_criteria","files_touched","forbidden","confidence","sink"]}}}},"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/queue/status":{"get":{"operationId":"task.stalls","description":"Why is nothing moving: every reason holding a pending task, how many it holds, how long it has been true, and what clears it.","tags":["task"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tasks/{id}":{"get":{"operationId":"task.run_status","description":"One task: the queue row, its scoped-plan detail and its run pulse. 404 when unknown or foreign.","tags":["task"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tasks/{id}/attempts":{"get":{"operationId":"task.attempts","description":"Every attempt the task has burned, oldest first: one rung per run, each with its own outcome and its own re-derived failure kind. The task row records only the LATEST attempt’s classification, so this is the only surface that says what went wrong on attempts 1 and 2 of 3. 404 when the task is unknown or foreign.","tags":["task"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tasks/{id}/reassign":{"post":{"operationId":"task.reassign","description":"Pull one in-flight task off its box back to `pending` so the fleet assigner re-claims it elsewhere. Idempotent: a pending or terminal task answers `reassigned: false`.","tags":["task"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tasks/{id}/cancel":{"post":{"operationId":"task.cancel","description":"STOP one task: it moves to `cancelled` and the box holding it is interrupted. The destructive sibling of reassign, which only moves the work elsewhere. Idempotent: an already-terminal task answers `kind: \"already_terminal\"`, not an error. One kind of task is refused (**409** `not_cancellable_review`): a PR review whose pull request is still OPEN, because terminating it would release the merge gate’s review hold and let the pull request merge with no review verdict. Once that pull request is merged or closed the hold is moot and the stop is accepted; the platform also retires such reviews itself.","tags":["task"],"security":[{"bearerAuth":["write:tasks"]},{"sessionCookie":["write:tasks"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/tasks/{id}/events":{"get":{"operationId":"task.run_events","description":"The same run timeline as plain JSON, paged on `?since_seq=` for a client that cannot hold the SSE tail open. An unstarted task answers `run_id: null` and an empty page, never a 404. Send `?wait_ms=` to WATCH it: the request is held open until the first new event lands (or the wait expires), so one call covers what 25 polls would, and the wait also spans the gap before a box starts the task. An empty page after a wait is not an error, it means nothing happened in that window: re-send with the same cursor. A run that has already ended settles the wait at once, so an instant empty page means the run is over rather than idle.","tags":["task"],"security":[{"bearerAuth":["read:tasks"]},{"sessionCookie":["read:tasks"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"since_seq","in":"query","description":"Cursor: return the events with `seq` strictly greater than this. Omit for the start of the run. Feed back the previous response’s `next_since_seq`, which echoes your own cursor when the page was empty so a caught-up poller never rewinds.","schema":{"description":"Cursor: return the events with `seq` strictly greater than this. Omit for the start of the run. Feed back the previous response’s `next_since_seq`, which echoes your own cursor when the page was empty so a caught-up poller never rewinds.","type":"string","pattern":"^\\d+$"}},{"name":"per_page","in":"query","description":"How many events this page carries, 1..200. Defaults to 100.","schema":{"description":"How many events this page carries, 1..200. Defaults to 100.","type":"integer","minimum":1,"maximum":200}},{"name":"wait_ms","in":"query","description":"Long poll: hold the request open up to this many ms (0..25000) waiting for the first new event, and answer the moment one lands. Omit or 0 to answer immediately. An empty page after the wait is not an error, it means nothing happened in that window: re-send with the SAME cursor. A run that has ALREADY ENDED answers at once instead of waiting, so an instant empty page means run_status and stop, not re-send.","schema":{"description":"Long poll: hold the request open up to this many ms (0..25000) waiting for the first new event, and answer the moment one lands. Omit or 0 to answer immediately. An empty page after the wait is not an error, it means nothing happened in that window: re-send with the SAME cursor. A run that has ALREADY ENDED answers at once instead of waiting, so an instant empty page means run_status and stop, not re-send.","type":"string","pattern":"^\\d+$"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/ci/runs":{"get":{"operationId":"ci.runs","description":"Self-hosted CI runs, newest-first. Filter by `repo` and `status` through the shared list grammar (`?filter=status:failed`), not bare query params.","tags":["ci"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `created_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`, `ne`, `in`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `status`, `repo`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/ci/runs/{id}/log-url":{"get":{"operationId":"ci.log_url","description":"A short-lived presigned URL for one run’s archived log. One 404 covers unknown/foreign, log not landed, log expired (3-day retention) and storage unconfigured, none of which a caller may distinguish.","tags":["ci"],"security":[{"bearerAuth":["read:runners"]},{"sessionCookie":["read:runners"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/artifacts":{"get":{"operationId":"artifact.list","description":"Artifacts this account produced, newest-first. Narrow with `run_id`, `task_id` or `repo_id`; `per_page` caps the head (default 50, max 200) and there is no cursor, so a full page may mean more remain.","tags":["artifact"],"security":[{"bearerAuth":["read:artifacts"]},{"sessionCookie":["read:artifacts"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"artifact.put","description":"Record an artifact and mint a presigned PUT for its bytes. You upload to `upload_url` yourself; our bucket credentials never leave the control plane. Visibility is `run` or `account` only, and 503 means the deployment has no bucket to write to.","tags":["artifact"],"security":[{"bearerAuth":["write:artifacts"]},{"sessionCookie":["write:artifacts"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/artifacts/{id}/url":{"get":{"operationId":"artifact.get","description":"A short-lived presigned GET for one artifact, alongside its metadata. One 404 covers unknown/foreign, bytes that never landed and an object already reaped.","tags":["artifact"],"security":[{"bearerAuth":["read:artifacts"]},{"sessionCookie":["read:artifacts"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/artifacts/{id}/share":{"post":{"operationId":"artifact.share","description":"Flip an artifact to `public-link` and hand back a URL. Audited and outward-facing: it notifies the account, and it refuses an artifact whose bytes are missing, because a share must produce a live link.","tags":["artifact"],"security":[{"bearerAuth":["write:artifacts"]},{"sessionCookie":["write:artifacts"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/artifacts/{id}":{"delete":{"operationId":"artifact.delete","description":"Delete the object and its row. Idempotent.","tags":["artifact"],"security":[{"bearerAuth":["write:artifacts"]},{"sessionCookie":["write:artifacts"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/streams":{"get":{"operationId":"stream.subscribe","description":"ONE SSE connection multiplexing several topics (`?topics=tasks,ci,…`), each patch frame upserting or removing one row by id. Every topic is authorized in-handler, so the opening `ready` frame names which were subscribed, ignored (unknown) and unauthorized; the request 403s only when nothing survives. Not resumable: it patches derived rows rather than appending, so it issues no `id:` and a reconnect takes a fresh snapshot.","tags":["stream"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"parameters":[{"name":"topics","in":"query","required":true,"description":"Which topics this connection carries: comma-separated, at least one. A topic this deployment does not register is IGNORED rather than refused (so naming a topic that ships later is forward compatible, and the `ready` frame reports it back), but a request in which NO topic is known is a 400 — a typo never opens a silent connection. A request in which no topic survives authorization is a 403.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"A multiplexed event stream: one connection carries several topics. The first frame is `ready`, naming which of the requested topics are subscribed (registered and permitted by this credential), ignored (well formed but not registered on this deployment) and unauthorized (registered, but the credential lacks that topic’s scope) — so a client discovers the served vocabulary at runtime instead of hardcoding it. Then `patch` frames, each upserting or removing ONE row keyed by id. This is a patch collection and not an append log: there is no terminal frame and no frame carries an `id:`. The connection is recycled periodically and says so with a `bye` frame first, which is how a deliberate recycle is told apart from a dropped connection; it is not a resume point. `retry:` rides the `ready` frame; on reconnect, drop the local store and take the fresh snapshot.","content":{"text/event-stream":{"schema":{"type":"string"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/push/public-key":{"get":{"operationId":"push.public_key","description":"The VAPID public key a browser needs before it can subscribe.","tags":["push"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/push/subscriptions":{"get":{"operationId":"push.subscriptions_list","description":"The Web Push endpoints registered for this user.","tags":["push"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"post":{"operationId":"push.subscribe","description":"Register a Web Push endpoint.","tags":["push"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"push.unsubscribe","description":"Forget one Web Push endpoint.","tags":["push"],"security":[{"bearerAuth":["read:account"]},{"sessionCookie":["read:account"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/dashboards":{"post":{"operationId":"dashboard.create","description":"Create a named board (201). A name already in use is a **409** naming the board it would have destroyed; `replace: true` is the only consent to rebuild one, and a seeded built-in is never replaceable.","tags":["dashboard"],"security":[{"bearerAuth":["write:dashboards"]},{"sessionCookie":["write:dashboards"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"get":{"operationId":"dashboard.list","description":"The account-shared boards.","tags":["dashboard"],"security":[{"bearerAuth":["read:dashboards"]},{"sessionCookie":["read:dashboards"]}],"parameters":[{"name":"cursor","in":"query","description":"Opaque token from a previous response’s `next_cursor`, naming the position after that page. Send it alone: it carries the order it was minted under, so repeating `sort` is not required and changing `per_page` alongside it continues from the same row rather than rebasing. Never parse it. Sending a `sort` that conflicts with the one it carries is a 400.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"per_page","in":"query","description":"Page size. Values above the maximum are refused, never clamped.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"sort","in":"query","description":"Sort keys, repeatable and/or comma-separated; a leading `-` is descending. Sortable: `name`, `created_at`. Any other field is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"filter","in":"query","description":"Filter terms, repeatable: `field:op:value` (op is one of `eq`, `ne`, `in`; `in` takes comma-separated values). `field:value` is `eq`. Filterable: `builtin`, `scope`. Any other field or op is a 400.","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"One page of the collection. Follow `next_cursor` for the next page; `null` is the last.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/dashboards/{id}":{"get":{"operationId":"dashboard.get","description":"One board with all its widget specs.","tags":["dashboard"],"security":[{"bearerAuth":["read:dashboards"]},{"sessionCookie":["read:dashboards"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"patch":{"operationId":"dashboard.update","description":"Rename a board and/or change its layout. Widgets are untouched.","tags":["dashboard"],"security":[{"bearerAuth":["write:dashboards"]},{"sessionCookie":["write:dashboards"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}},"delete":{"operationId":"dashboard.delete","description":"Delete a board (idempotent). A seeded built-in is refused.","tags":["dashboard"],"security":[{"bearerAuth":["write:dashboards"]},{"sessionCookie":["write:dashboards"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}},"/v1/dashboards/{id}/widgets/{wid}/page":{"post":{"operationId":"dashboard.widget_page","description":"Page one widget’s data without re-running the whole board.","tags":["dashboard"],"security":[{"bearerAuth":["read:dashboards"]},{"sessionCookie":["read:dashboards"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Id of the addressed row (uuid).","schema":{"type":"string"}},{"name":"wid","in":"path","required":true,"description":"Dashboard widget id (uuid), within the board named by `id`.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A client-chosen key that makes a retry of this exact write safe. The first request with a given key runs the side effect once and caches the response; a retry with the SAME key and body replays that cached response (`X-Idempotent-Replayed: true`) instead of running it again. The key is bound to the whole call it first ran: the credential, the method, the path and the body. Reusing it for anything else is a 409, never a replay of the other call. Scoped to the token or session that sent it — two callers using the same string never alias. Optional: omit it and the call goes through unconditionally, every time.","schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","required":false,"description":"Your own correlation id for this call, echoed back on the response and written to our request log. Optional: omit it and one is minted. A value that is not printable ASCII within 200 characters is not adopted (a minted one is used instead) rather than refused, because a header stamped by a proxy you do not control must never fail the call. Read the response header to learn which id was used.","schema":{"type":"string","maxLength":200}}],"responses":{"400":{"$ref":"#/components/responses/GuardedBadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"2XX":{"description":"Success. The response body schema is not published for this operation yet; see the endpoint documentation.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A personal access token, `dev_pat_...`, in `Authorization: Bearer`. Mint one at `POST /v1/tokens` with scopes at or below your own; the plaintext is returned exactly once. The scope named on each operation is the one the token must carry."},"sessionCookie":{"type":"apiKey","in":"cookie","name":"dz_session","description":"The browser session the login legs mint. Scopes are derived from the caller’s role on the account rather than chosen at mint time. A session request MAY name the account it acts on with the `x-dz-account` header (an account id or a `github_login`); the claim only ever narrows onto an account the caller provably belongs to, and it is ignored on a bearer request."}},"schemas":{"Problem":{"type":"object","properties":{"type":{"type":"string","format":"uri","description":"Stable error slug as a URI (`https://developerz.ai/errors/<slug>`). Switch on this, never on `title`."},"title":{"type":"string","description":"Short human-readable summary of the error class."},"status":{"type":"integer","minimum":100,"maximum":599,"description":"Mirrors the HTTP status code."},"detail":{"description":"Human-readable explanation specific to THIS occurrence.","type":"string"},"instance":{"description":"The request path the error occurred on.","type":"string"},"request_id":{"description":"Extension member. The same value as this response’s `X-Request-Id` header: the id this request was logged under. Quote it in a support request.","type":"string"},"auth_reason":{"description":"Extension member, present only on a 401 the presented credential’s own state caused — today exactly one: `expired`. Its absence on a 401 means the credential was missing or unknown, which are deliberately one answer. Retrying with the same credential can never clear this one: an OAuth connector re-runs the authorization flow, a human-held token must be re-minted.","type":"string","const":"expired"},"expired_at":{"description":"Extension member, present exactly when `auth_reason` is `expired`. ISO-8601 instant the credential died — not the time of this request.","type":"string"},"required_scope":{"description":"Extension member, present only when this 403 is a missing-scope refusal. The scope (space-separated if more than one) that would have admitted the request — the same value as this response’s `WWW-Authenticate: Bearer error=\"insufficient_scope\", scope=\"…\"` header (RFC 6750 § 3.1). Absent on a 403 refused for any other reason.","type":"string"}},"required":["type","title","status"],"additionalProperties":{},"description":"RFC 9457 Problem Details. The error body of every operation on this surface."},"Page":{"type":"object","properties":{"data":{"type":"array","items":{},"description":"This page of rows, in the collection order."},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque token for the next page, or null on the last one. Send it back as `?cursor=`; never parse it."}},"required":["data","next_cursor"],"additionalProperties":{}}},"responses":{"BadRequest":{"description":"The path, query or body failed validation. `errors` carries the flattened field errors.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"GuardedBadRequest":{"description":"The path, query or body failed validation. `errors` carries the flattened field errors.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"Unauthorized":{"description":"No credential, or one this deployment cannot resolve.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"WWW-Authenticate":{"$ref":"#/components/headers/WWW-Authenticate"}}},"Forbidden":{"description":"The credential resolved but does not carry the scope this operation asserts.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"WWW-Authenticate":{"$ref":"#/components/headers/WWW-Authenticate"}}},"TooManyRequests":{"description":"Rate limit exceeded. Honour the `Retry-After` header (seconds) before retrying.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"InternalServerError":{"description":"Unhandled server error.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"DispatchFailed":{"description":"Task dispatch failed; the attempt was audited.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"QueueFull":{"description":"The account is at its max queue depth. `retry_after` (seconds, also the `Retry-After` header) is the standard back-off before retrying.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"PolicyRefused":{"description":"The repo policy does not admit `capability` for the resolved sink.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"SinkUnavailable":{"description":"`sink` is not configured on this deployment.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"ByokInvalidBaseUrl":{"description":"The BYOK key payload named a `base_url` this deployment refuses (SSRF gate).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"ByokModelsUnavailable":{"description":"The key is not in question — its provider produced no model list. The `reason` extension member says which: `not_enumerable` (this provider has no list to give, permanent), `no_base_url`, `unreachable` (retryable), `http_error` (the provider refused; its status rides as `provider_status`), `oversized_body`, `unparseable_body`, `unrecognized_body`, or `empty_list` (nothing this platform can run).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"ByokRotateRejected":{"description":"The new key failed the live provider probe; the old key is untouched and stays live.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"InvitationNotLive":{"description":"The invitation exists but can no longer be redeemed. The `reason` extension member says which — `expired` (with `expires_at`) or `revoked` (with `revoked_at`) — because both wear this one status and they are two different things to tell a person.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"BillingPortalUnavailable":{"description":"The billing portal is not configured on this deployment.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"BillingCheckoutUnavailable":{"description":"Seat checkout is not configured on this deployment, or the tier has no price.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"LogSinkUnavailable":{"description":"No log sink is configured on this deployment.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"LogSinkInvalidUrl":{"description":"The log sink URL failed validation.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}},"LogSinkUnreachable":{"description":"The log sink did not accept a live probe delivery.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}}}},"headers":{"X-Request-Id":{"description":"The id this request was logged under, and the `request_id` extension member of the problem body on any error. Quote it in a support request. If you sent this header and its value was usable, it is the value you sent; otherwise one was minted, so the response is always the authority on which id was used.","schema":{"type":"string","maxLength":200}},"RateLimit-Limit":{"description":"Requests allowed per minute in the bucket this request was charged against. Reads and writes are separate budgets, so the value depends on the operation (and on `POST /v1/mcp` on the JSON-RPC verb).","schema":{"type":"integer","minimum":0}},"RateLimit-Remaining":{"description":"Requests still allowed in that bucket AFTER this one. `0` on a 429.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Seconds until the window frees a slot. A delta, never a timestamp, and the same number `Retry-After` carries on a 429.","schema":{"type":"integer","minimum":1}},"WWW-Authenticate":{"description":"On a 401: `Bearer` — except on `POST /v1/mcp`, where a deployment with OAuth configured answers `Bearer resource_metadata=\"<url>\"` (RFC 9728) naming the protected-resource metadata document to start authorization from. On a 403 refused for a missing scope: `Bearer error=\"insufficient_scope\", scope=\"…\"`, the same scope as the body’s `required_scope` extension member. Absent on a 403 refused for any other reason.","schema":{"type":"string"}}}}}