Skip to content

Error catalogue

All API errors return a JSON body:

{
"error": "order_not_found",
"message": "Human-readable description.",
"request_id": "req_01j2…"
}

Always log request_id — it maps directly to CloudWatch traces and is required for support escalations.

HTTP 400 — Bad Request

errorCauseRemediation
invalid_requestMissing required field or malformed JSONCheck the request body against the schema
invalid_scopeToken scope insufficient for the requested operationRe-mint a token with the required scope, or contact your account manager to add the scope to your client
level3_tax_mismatchtax_amount_cents does not reconcile with line-item totalsRecalculate tax; ±1 cent tolerance is allowed
level3_validation_failedA Level 3 field failed validation (description >40 chars, quantity ≤0, etc.)See the message field for the specific violation
amount_exceeds_order_totalPayment amount exceeds the remaining unpaid balanceReduce amount_cents

HTTP 401 — Unauthorized

errorCauseRemediation
missing_tokenNo Authorization headerAdd Authorization: Bearer <token>
invalid_tokenToken signature invalid, malformed JWT, or wrong issuerVerify you are using a token from the M2M pool (not the POS user pool)
token_expiredJWT exp claim has passedRe-mint a token
client_revokedThe M2M client has been revoked in the admin portalContact your partner_admin to issue a new client

HTTP 403 — Forbidden

errorCauseRemediation
insufficient_scopeToken lacks the scope required for this endpointRe-mint with the correct scope
location_out_of_scopeThe location_id does not belong to your partner subtreeUse a location returned by GET /pos/v1/locations
permission_deniedCaller does not have the required permissionVerify your client’s scopes in the admin portal

HTTP 404 — Not Found

errorCauseRemediation
order_not_foundOrder ID does not exist or is outside your partner scopeVerify the order_id
payment_not_foundPayment ID does not match the orderVerify both order_id and payment_id
location_not_foundLocation ID does not exist or is outside your partner scopeUse a location from GET /pos/v1/locations
spec_not_availableWell-known spec endpoint hit but spec file not bundledInternal — contact support

HTTP 409 — Conflict

errorCauseRemediation
order_already_paidOrder has already been fully paidNo action needed — the order is complete
order_not_openAttempting to pay a cancelled, voided, or expired orderCreate a new order
payment_already_settledAttempting to void a settled paymentIssue a refund instead
refund_window_expiredProcessor rejects refunds older than their windowContact the processor directly; this is a processor constraint
idempotency_conflictSame Idempotency-Key used with different request bodyUse the original request body, or use a new key

HTTP 422 — Unprocessable Entity

errorCauseRemediation
validation_errorRequest body is valid JSON but fails business-rule validationSee message for details

HTTP 429 — Too Many Requests

errorCauseRemediation
rate_limit_exceededPer-client rate limit exceededRespect Retry-After header; consider upgrading your tier in the admin portal

HTTP 500 — Internal Server Error

errorCauseRemediation
internal_errorUnexpected server errorRetry with exponential backoff; escalate with request_id if persistent

HTTP 503 — Service Unavailable

Returned during maintenance windows or upstream processor outages. Retry with backoff. Check status.apps.myfinterra.com for incident updates.