RFC 9457 · Stable codes · Resolution hints
ecentic API errors.
Every failure on the ecentic API is a typed problem document, not an HTML page. The code is the contract: it is stable, machine-readable, and safe to branch on.
01
The shape of a problem
One media type, one schema, on every 4xx and 5xx the API returns.
Responses carry Content-Type: application/problem+json — deliberately not application/json, because the media type is how a generic client knows the body describes a failure rather than the resource it asked for.
type— URI naming the error, anchored in this pagecode— the stable machine-readable identifier to branch ontitle— short human summarystatus— the HTTP status, repeated in the bodydetail— what went wrong on this specific requestresolution— what to do about itinstance— the path that produced it, when known
HTTP/1.1 404 Not Found
Content-Type: application/problem+json; charset=utf-8
{
"type": "https://ecentic.ai/docs/errors#not-found",
"title": "Resource not found",
"status": 404,
"code": "not-found",
"detail": "No ecentic API endpoint at GET /api/v1/widgets.",
"resolution": "Check the path against the OpenAPI document at /openapi.json or the API catalog at /.well-known/api-catalog.",
"documentation": "https://ecentic.ai/docs/errors",
"instance": "/api/v1/widgets"
}02
Error catalogue
Codes are frozen once published. Titles and hints may be reworded; codes may not.
| Code | Status | Meaning | How to resolve |
|---|---|---|---|
| not-found | 404 | Resource not found | Check the path against the OpenAPI document at /openapi.json or the API catalog at /.well-known/api-catalog. |
| method-not-allowed | 405 | Method not allowed | Re-read the operation in /openapi.json; the `Allow` header lists the methods this path accepts. |
| unauthenticated | 401 | Authentication required | Send `Authorization: Bearer ecentic_sk_…`. Registration and key minting are documented at /auth.md. |
| 403 | Not permitted | The credential is valid but lacks the scope for this operation. Scopes are listed at /.well-known/oauth-protected-resource. | |
| payment-required | 402 | Payment required | Settle the x402 challenge in the `PAYMENT-REQUIRED` header, or use the free discovery surfaces under /.well-known and /api/v1. |
| subscription-required | 402 | Subscription required | This operation needs an active ecentic plan. Plans are listed at /api/v1/plans and purchasable at /pricing. |
| invalid-request | 400 | Invalid request | Compare the request body against the operation's request schema in /openapi.json. |
| validation-failed | 422 | Request failed validation | Fix the fields named in `errors` and retry. Field schemas live in /openapi.json. |
| conflict | 409 | Conflicting state | The resource already exists or has changed. Re-read it and retry with the current state. |
| rate-limited | 429 | Rate limit exceeded | Wait for the number of seconds in `Retry-After`, then retry. The active policy is in the `RateLimit-Policy` header and documented at /docs/rate-limits. |
| upstream-timeout | 504 | Upstream timed out | Retry with exponential backoff; the failure is transient. |
| internal-error | 500 | Internal error | Retry with exponential backoff. If it persists, report it at /support with the `instance` value from this response. |
Get picked by AI
Ready to be the product agents recommend?
Install free on Shopify or WooCommerce and see your AI score in minutes.
© 2026 ecentic. All rights reserved.
Made for merchants who refuse to be invisible to AI.
