Operate

Errors and rate limits

Handle Problem Details responses, correlation IDs, and request limits.

Problem details

Errors use application/problem+json (RFC 7807). Correlation is available through the optional X-Correlation-Id request header, the response header, and the correlationId response field.

Example

json
{
  "type": "about:blank",
  "title": "Unauthorized",
  "status": 401,
  "detail": "API key is missing or invalid",
  "instance": "/api/v1/payment-sessions",
  "code": "api-key.invalid",
  "correlationId": "c7ccb49d-e6bb-45f7-b834-93c4521a6857"
}

Common error codes

API key errors

NameTypeDescription
api-key.invalid401Missing, malformed, or unrecognized API key.
api-key.revoked401API key has been revoked.
api-key.expired401API key has passed its expiry.

Business account errors

NameTypeDescription
business.compliance-not-approved403KYB not approved. Complete business verification in the portal.
business.not-active403Business suspended or inactive. Contact Zippy Pay support.
business.payment-id-not-configured403No active receive payment ID. Create one under business settings before session create.

Payment session errors (merchant server)

NameTypeDescription
payment-session.not-found404Unknown sessionId or merchantReference for your business.
payment-session.id-invalid400sessionId is not UUID v4.
payment-session.redirect-url-invalid400successUrl or failureUrl must use HTTPS and match a registered allowed checkout origin or your registered business website. Credentials in URLs are not allowed.
payment-session.metadata-too-large400metadata exceeds the 4096 UTF-8 byte limit.
payment-session.reference-conflict409merchantReference is already in use for another session.
IDEMPOTENCY_CONFLICT409Idempotency-Key was reused incompatibly.
RATE_LIMIT_EXCEEDED429Rate limit exceeded; inspect Retry-After.

Checkout SDK errors (browser)

NameTypeDescription
payment-session.origin-not-allowed403Page origin is not registered. Add the domain under Integrations → Allowed browser origins in the portal.

Origin allowlisting applies to embedded checkout in the browser. Server-side session create is authenticated with your API key — never send zp_live_ from client code. Other Checkout SDK error codes are listed in Checkout SDK error handling.

Portal origin registration errors

NameTypeDescription
business.allowed-origin-invalid400Bad origin format, or localhost registered in production/staging.
business.allowed-origin-duplicate409Origin already registered for this business.
business.allowed-origin-limit400Maximum of 10 allowed origins reached.

Rate limits

NameTypeDescription
POST /api/v1/payment-sessions120 / 60sPer API key.
GET /api/v1/payment-sessions?merchantReference=120 / 60sPer API key.
GET /api/v1/payment-sessions/{sessionId}120 / 60sPer API key or client IP (composite route).
  • Exceeding the limit returns HTTP 429 and a Retry-After response header.
  • Wait for the indicated duration before retrying; use exponential backoff and jitter for concurrent workers.
  • Poll merchant GET endpoints from your backend only — never with an API key in browser code.