Skip to main content

Errors

The Wo returns errors using a consistent public JSON envelope.

Standard error shape

requestId identifies the HTTP request. Keep it when reporting an integration problem.

Error details

Some errors may include safe structured metadata:
The API does not expose stack traces, credentials, database errors, provider credentials, or other private implementation details through this envelope.

Public errors

400 — Invalid payload

An HTTP-valid JSON document that does not match the endpoint schema returns:
Example:
This includes unsupported context values and invalid public request shapes. Malformed JSON is represented separately:
Correct the payload before retrying.

401 — Authentication

Missing API key:
Invalid, inactive, or revoked API key:
Do not repeatedly retry an authentication error with the same invalid credential.

403 — Billable operation unavailable

This can represent an unavailable customer or active Plan relationship. It is intentionally different from quota exhaustion.

403 — Current usage unavailable for customer

Current usage visibility uses a separate access error from billable operation execution:
This can represent an unavailable active customer or Plan relationship needed to expose the supported usage operation.

403 — Product not entitled

A valid API key identifies the customer, but it does not by itself grant access to Operational Evidence. If the authenticated customer is not currently entitled to execute the evidence_report operation, the API returns:
This is a product-access decision, not quota exhaustion. Do not repeatedly retry the same request until product access changes. Internal entitlement identifiers, reasons, billing state, and subscription metadata are not exposed.

409 — Idempotency conflict or operation in progress

Reusing the same Idempotency-Key for a different normalized request returns:
A concurrent retry while the original request is still processing returns:
Do not retry idempotency_conflict with the same key and a different request. For idempotency_in_progress, wait until the original request has finished before deciding whether another retry is appropriate.

422 — Application input rejected

This represents a request that reached the application boundary but could not be represented as a valid Evidence Report operation.

422 — Remote evidence image rejected

When a submitted image URL cannot be accepted through the secure remote-resource boundary, the API returns:
This can represent a remote resource that violates the supported remote-image policy, including unsafe destinations or redirects, oversized content, invalid response metadata, or unsupported image content types. The public error intentionally does not expose blocked addresses, private DNS answers, redirect destinations, socket details, or raw network diagnostics. Correct or replace the image resource before retrying.

429 — Quota exceeded

Do not continuously retry this response. Use resetAt to understand when the next monthly quota period begins.

429 — Rate limit exceeded

Rate limiting protects API capacity and is separate from monthly quota. When the configured technical request rate is exceeded:
The numeric values above are illustrative. The response also includes:
Clients should wait for the indicated interval before retrying. Do not interpret rate_limit_exceeded as commercial quota exhaustion.

503 — Entitlement check unavailable

If The Wo cannot safely evaluate Operational Evidence product entitlement, the create operation fails closed:
A bounded retry may be appropriate because this represents temporary entitlement evaluation failure rather than a definitive product-access decision. Preserve requestId when reporting a persistent problem.

503 — Rate limiting unavailable

If the platform cannot safely evaluate the configured technical rate limit, it returns:
Internal limiter or storage diagnostics are never exposed.

502 — Generation failure

An invalid generated report:
A generation failure:
These responses do not expose raw provider errors.

503 — Idempotency unavailable

If idempotency protection cannot be established safely, the API returns:
If a completed idempotent operation exists but its original Evidence Report cannot be restored safely, the API returns:
These responses do not expose request fingerprints, MongoDB records, resource ownership information, provider details, or other internal diagnostics.

503 — Current usage unavailable

If the API cannot safely read current usage information, it returns:
The API does not replace a failed usage read with used: 0. Retry cautiously and preserve the requestId if the problem persists.

503 — Remote evidence image unavailable

When a remote image cannot currently be retrieved safely because the remote resource or retrieval dependency is temporarily unavailable, the API returns:
A bounded retry may be appropriate. Preserve requestId when reporting a persistent failure.

503 — Provider unavailable

A temporarily unavailable report generation service returns:
A 503 may also represent another required service being unavailable. Always inspect error.code; do not branch only on the HTTP status.

500 — Unexpected error

Unexpected failures use:
Internal implementation details are not returned. Preserve the requestId when reporting the problem.

Retry guidance

Do not automatically retry every failed request. A practical policy is:

Idempotency retry contract

POST /v1/evidence/reports supports safe retries through the optional Idempotency-Key header. For the same customer, product, operation, idempotency key, and normalized request, a retry returns the original successful Evidence Report result without retrieving remote images again, creating another report, invoking the provider again, or recording another usage unit. Requests without Idempotency-Key remain supported but do not receive this safe-retry guarantee. See Report contract for the complete idempotency behavior.