The descriptions of the operations and fields are the contract’s own, in English.
/audit/v1/eventsRead one audit event with its correlation view
- Credential
- API key
- Permission
audit.read
Reads the durable C3 audit record back by tenant and event id, served alongside the eight-dimension correlation view. An unknown event is 404 (client category).
curl "https://console.us.ccsio.ai/audit/v1/events?tenant_id=<tenant_id>&event_id=<event_id>" \
-H "Authorization: Bearer $CCSIO_API_KEY"Parameters
| Name | In | Description |
|---|---|---|
X-Request-IDoptional | header | string Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form. |
tenant_idrequired | query | string The tenant identifier (C3 slug pattern). |
event_idrequired | query | string The audit event identifier (C3 slug pattern). |
Responses
- 200
The audit event and its correlation view.
Schema
AuditEventReadResponseeventobjectrequiredkindstringrequiredalways "audit"
headerobjectrequiredschema_versionstringrequiredalways "c3/v1"
event_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
tenant_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
plane_instance_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
occurred_atstringrequiredpattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
seqAuditSeqViewrequiredstream_epochstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
gate_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
run_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
policy_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
actor_refstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
agent_spec_digeststringrequiredpattern ^[a-f0-9]{64}$
operation_digeststringrequiredpattern ^[a-f0-9]{64}$
evidence_digeststringrequiredpattern ^[a-f0-9]{64}$
chain_headstringrequiredpattern ^[a-f0-9]{64}$
decided_atstringrequiredpattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
previous_chain_headstring or nullrequiredpattern ^[a-f0-9]{64}$
outcomestringrequiredAllowed values:
"approved""denied""canceled""failed""observed"
correlationobjectrequiredrequest_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
trace_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
organization_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
session_idstring or nullrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
residencystringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
regionstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
model_idstring or nullrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
deployment_idstring or nullrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
- 400
Client refusal unrelated to authentication, including malformed input, a denied or failed request.
- 401
The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:
Read more
Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled
- 402
The organization has to pay first: its standing is payment_required.
Read more
The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required
- 403
The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.
Read more
Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)
- 404
The requested resource or path was not found.
- 405
The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.
- 500
Platform failure, rendered without internal cause details.
/audit/v1/events/pageRead a page of the event chain
- Credential
- API key
- Permission
audit.read
Reads a page of the event chain for a stream scope, keyset-paginated by the opaque after cursor. An unobserved scope renders an empty page, never 404.
curl "https://console.us.ccsio.ai/audit/v1/events/page?tenant_id=<tenant_id>&stream_id=<stream_id>&stream_epoch=<stream_epoch>&limit=<limit>" \
-H "Authorization: Bearer $CCSIO_API_KEY"Parameters
| Name | In | Description |
|---|---|---|
X-Request-IDoptional | header | string Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form. |
tenant_idrequired | query | string The tenant identifier (C3 slug pattern). |
stream_idrequired | query | string The stream identifier (C3 slug pattern). |
stream_epochrequired | query | string The stream epoch identifier (C3 slug pattern). |
limitrequired | query | integer Required. A positive integer page size. A non-integer limit renders 400 invalid-request; a value outside 1..128 renders 400 invalid-filter (the read model's page bound). |
fromoptional | query | string Optional. The half-open range lower bound, [from, to): from must precede to; from-after-to renders 400 invalid-time-range, and a malformed C3 second-precision UTC form renders 400 invalid-request. |
tooptional | query | string Optional. The half-open range upper bound, [from, to): from must precede to; from-after-to renders 400 invalid-time-range, and a malformed C3 second-precision UTC form renders 400 invalid-request. |
afteroptional | query | string Optional. The opaque page cursor returned by a previous page (given at most once; a second occurrence renders 400 invalid-request). A cursor minted for the other read renders 400 invalid-cursor - never a silent restart from the genesis. |
Responses
- 200
The event chain page (an empty page for an unobserved scope).
Schema
AuditEventPageResponseeventsarray of AuditEventReadResponserequiredeventobjectrequiredkindstringrequiredalways "audit"
headerAuditHeaderViewrequiredgate_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
run_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
policy_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
actor_refstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
agent_spec_digeststringrequiredpattern ^[a-f0-9]{64}$
operation_digeststringrequiredpattern ^[a-f0-9]{64}$
evidence_digeststringrequiredpattern ^[a-f0-9]{64}$
chain_headstringrequiredpattern ^[a-f0-9]{64}$
decided_atstringrequiredpattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
previous_chain_headstring or nullrequiredpattern ^[a-f0-9]{64}$
outcomestringrequiredAllowed values:
"approved""denied""canceled""failed""observed"
correlationobjectrequiredrequest_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
trace_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
organization_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
session_idstring or nullrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
residencystringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
regionstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
model_idstring or nullrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
deployment_idstring or nullrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
nextstring or nullrequired
- 400
Client refusal unrelated to authentication, including malformed input, a denied or failed request.
- 401
The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:
Read more
Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled
- 402
The organization has to pay first: its standing is payment_required.
Read more
The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required
- 403
The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.
Read more
Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)
- 405
The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.
- 500
Platform failure, rendered without internal cause details.
/audit/v1/chain-headsRead the stream's chain head
- Credential
- API key
- Permission
audit.read
Reads the current chain head (seq and digest) for a stream scope. An unknown scope is 404 (client category).
curl "https://console.us.ccsio.ai/audit/v1/chain-heads?tenant_id=<tenant_id>&stream_id=<stream_id>&stream_epoch=<stream_epoch>" \
-H "Authorization: Bearer $CCSIO_API_KEY"Parameters
| Name | In | Description |
|---|---|---|
X-Request-IDoptional | header | string Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form. |
tenant_idrequired | query | string The tenant identifier (C3 slug pattern). |
stream_idrequired | query | string The stream identifier (C3 slug pattern). |
stream_epochrequired | query | string The stream epoch identifier (C3 slug pattern). |
Responses
- 200
The stream's chain head.
Schema
AuditChainHeadResponsetenant_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
stream_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
stream_epochstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
seq_nintegerrequired1 to 9007199254740991
chain_headstringrequiredpattern ^[a-f0-9]{64}$
- 400
Client refusal unrelated to authentication, including malformed input, a denied or failed request.
- 401
The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:
Read more
Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled
- 402
The organization has to pay first: its standing is payment_required.
Read more
The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required
- 403
The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.
Read more
Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)
- 404
The requested resource or path was not found.
- 405
The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.
- 500
Platform failure, rendered without internal cause details.
/audit/v1/streamsList a tenant's event streams
- Credential
- API key
- Permission
audit.read
Lists the event streams a tenant has recorded events on: one entry per distinct (stream_id, stream_epoch), with the stream's last chain position (seq_n) and the occurrence time of its last event, NEWEST FIRST by that time (ties broken by stream_id then stream_epoch), so the first entry is the most recently active stream.
Read more
It exists so a console can offer the streams to pick from instead of asking for their identifiers; the identifiers it returns are exactly what the chain-head read and the event chain page take. Bounded: at most the 200 most recently active streams are returned (a tenant records on a handful). A tenant that has recorded nothing renders an empty list, never 404. Same permission and tenant binding as the event chain page (audit.read at organization level; the tenant_id query parameter is the tenant binding source, a cross-organization value is 403 tenant-mismatch at the boundary). Reads are not sensitive and record nothing.
curl "https://console.us.ccsio.ai/audit/v1/streams?tenant_id=<tenant_id>" \
-H "Authorization: Bearer $CCSIO_API_KEY"Parameters
| Name | In | Description |
|---|---|---|
X-Request-IDoptional | header | string Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form. |
tenant_idrequired | query | string The tenant identifier (C3 slug pattern). |
Responses
- 200
The tenant's streams, newest first (an empty list for a tenant that recorded nothing).
Schema
AuditStreamListResponsetenant_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
streamsarray of AuditStreamSummaryrequiredThe tenant's streams, newest first by last_event_at.
at most 200 items
stream_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
stream_epochstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
seq_nintegerrequiredThe stream's last recorded chain position (the same value the chain-head read returns).
1 to 9007199254740991
last_event_atstringrequiredThe occurrence time (occurred_at) of the stream's last event, C3 second-precision UTC form.
pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
- 400
Client refusal unrelated to authentication, including malformed input, a denied or failed request.
- 401
The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:
Read more
Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled
- 402
The organization has to pay first: its standing is payment_required.
Read more
The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required
- 403
The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.
Read more
Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)
- 405
The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.
- 500
Platform failure, rendered without internal cause details.
/audit/v1/factsRead a page of support-access facts
- Credential
- API key
- Permission
audit.read
Reads a page of the support-access fact stream for an organization, keyset-paginated by the opaque after cursor. An unobserved organization renders an empty page, never 404.
curl "https://console.us.ccsio.ai/audit/v1/facts?organization=<organization>&limit=<limit>" \
-H "Authorization: Bearer $CCSIO_API_KEY"Parameters
| Name | In | Description |
|---|---|---|
X-Request-IDoptional | header | string Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form. |
organizationrequired | query | string Required. The organization identifier (C0 ref pattern); on the facts read it is the tenant binding source, so a cross-organization value is 403 tenant-mismatch at the deployment boundary. |
limitrequired | query | integer Required. A positive integer page size. A non-integer limit renders 400 invalid-request; a value outside 1..128 renders 400 invalid-filter (the read model's page bound). |
grant_idoptional | query | string Optional. The grant identifier (C0 ref pattern) the fact page is filtered to. |
fromoptional | query | string Optional. The half-open range lower bound, [from, to): from must precede to; from-after-to renders 400 invalid-time-range, and a malformed C3 second-precision UTC form renders 400 invalid-request. |
tooptional | query | string Optional. The half-open range upper bound, [from, to): from must precede to; from-after-to renders 400 invalid-time-range, and a malformed C3 second-precision UTC form renders 400 invalid-request. |
afteroptional | query | string Optional. The opaque page cursor returned by a previous page (given at most once; a second occurrence renders 400 invalid-request). A cursor minted for the other read renders 400 invalid-cursor - never a silent restart from the genesis. |
Responses
- 200
The support-access fact page (an empty page for an unobserved organization).
Schema
AuditFactPageResponsefactsarray of AuditFactrequiredfact_idstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
organization_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
project_idstring or nullrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
grant_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
revisionintegerrequiredat least 1
principal_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
resource_idstring or nullrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
actionstringrequiredAllowed values:
"created""approved""denied""expired""revoked""exercised"resultstringrequiredAllowed values:
"permitted""denied""effective"ticketstring or nullrequired1 to 240 characters
request_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
trace_idstringrequiredpattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$
residencystringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
regionstringrequiredpattern ^[a-z][a-z0-9._-]{0,127}$
recorded_atstringrequiredpattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
effective_atstring or nullrequiredpattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
nextstring or nullrequired
- 400
Client refusal unrelated to authentication, including malformed input, a denied or failed request.
- 401
The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:
Read more
Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled
- 402
The organization has to pay first: its standing is payment_required.
Read more
The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required
- 403
The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.
Read more
Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)
- 405
The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.
- 500
Platform failure, rendered without internal cause details.
Generated from the platform contracts at commit 5f833620.