Skip to content
Registry StackDocsDevelopment (unreleased)

Evidence Gateway errors and problems reference

View as Markdown

Evidence Gateway returns RFC 9457 problem details as application/problem+json. The frozen source contract is products/evidence/contracts/problem-contract.yaml. The generated schema and OpenAPI documents are reproduced from the runtime and must not be edited by hand.

Every problem body has exactly these six members: type, title, status, detail, code, and traceId. detail is static and value-free. It never includes a selector, token, source value, audit operation, or internal failure category. type always begins with https://id.registrystack.org/problems/registry-evidence/.

{
"type": "https://id.registrystack.org/problems/registry-evidence/evidence/unavailable",
"title": "Evidence could not be produced",
"status": 422,
"detail": "evidence could not be produced for this request",
"code": "evidence.unavailable",
"traceId": "4bf92f3577b34da6a3ce929d0e0e4736"
}

Every response carries a W3C traceparent header. For a problem response, its trace identifier is the same value as traceId. Evidence Gateway accepts a valid inbound trace identifier for correlation or mints one, but does not echo tracestate. The trace identifier is not the internal server-minted audit operation identifier. All responses use Cache-Control: no-store.

CodeStatusTitleDetailRecovery
evidence.invalid_request400Evidence request is invalidthe Evidence request is invalidCorrect the request body or headers.
request.selector_invalid400Selector is invalidselector does not match an available request profileFetch authenticated definitions and use an available selector profile. A value the deployment places in a source request path must also fit one path segment: not empty, not . or .., and free of /, \, %, and control characters. This code is returned before any source is contacted, never as source.unavailable.
auth.invalid_credential401Bearer access token is invalidbearer access token validation failedSupply one valid Bearer access token. The response also carries WWW-Authenticate: Bearer realm="registry-evidence".
evidence.denied403Evidence request is not permittedthe Evidence request is not permittedObtain an appropriate entitlement. The response does not identify the failed authorization condition.
resource.not_found404Requested resource was not foundthe requested resource was not foundCheck the route and HTTP method. Unknown paths and unsupported methods use this code.
format.unsupported406Requested format is not supportedthe requested format is not supportedSend one exact supported Accept value.
evidence.unavailable422Evidence could not be producedevidence could not be produced for this requestDo not infer the cause or retry blindly. Retry after request inputs or authoritative source state may have changed, or follow operator guidance. The service does not disclose the unavailable class.
evidence.rate_limited429Evidence request rate is exhaustedthe Evidence request rate is exhaustedWait one second, as stated in Retry-After: 1, then retry.
source.unavailable503Authoritative source is unavailablethe authoritative source is unavailableRetry with backoff or contact the source operator.
service.unavailable503Service is unavailablethe request could not be servedRetry with backoff or contact the Evidence Gateway operator.

Retry-After is present only on 429 responses.

POST /v1/evidence/batch uses the same outer problem contract for any failure that aborts the batch. Its successful envelope keeps the item discriminator evidence_not_available unchanged for the closed unavailable outcome. It is not the outer evidence.unavailable problem code.

The code, status, title, detail, headers, and batch semantics are transcribed from products/evidence/contracts/problem-contract.yaml and the generated runtime artifacts. The Recovery column is operational guidance. The complete generated route mapping is in products/evidence/generated/registry-evidence.openapi.json.