Orqpay

Errors

Error shape and the codes you will handle most often.

Errors share one JSON shape:

{
  "error": {
    "code": "INVALID_AMOUNT",
    "message": "Human-readable message"
  }
}

Branch on error.code. Use message for logs and support.

HTTP status

StatusTypical meaning
400Invalid input
401Missing or invalid credentials / signature
403Not allowed (for example live not approved)
404Not found
409Conflict (for example idempotency mismatch)
410Endpoint retired — use the Payments API
429Rate limited
500Unexpected server error

Common codes

Auth & signing

CodeStatusWhen
UNAUTHORIZED401Missing or invalid credentials
INVALID_API_KEY401Unknown or revoked key
SIGNATURE_REQUIRED401Missing X-Request-Signature
INVALID_SIGNATURE401Signature does not match the request
SIGNATURE_EXPIRED401Timestamp outside the allowed window
SIGNING_MISCONFIGURED401/500Signing secret missing — re-issue in the dashboard
RATE_LIMITED429Over 100 requests/minute

Payments

CodeStatusWhen
INVALID_AMOUNT400Amount must be a positive decimal string
EMAIL_REQUIRED400Missing or invalid email
INVALID_TOKEN400Token must be USDC or USDT
INVALID_NETWORK_ID400Bad or unknown networkId
INVALID_ADDRESS_MODE400addressMode must be invoice or customer
INVALID_SETTLEMENT_ADDRESSES400Settlement address list missing or malformed
TOKEN_NOT_AVAILABLE400Token not available on the selected network(s)
NETWORK_NOT_AVAILABLE400Network not enabled for this account
AMOUNT_TOO_SMALL400Below the minimum payment amount
OPEN_INVOICE_EXISTS409Payer already has an open customer-mode payment
PAYMENT_NOT_FOUND404Unknown payment id
IDEMPOTENCY_KEY_REQUIRED400Missing Idempotency-Key
IDEMPOTENCY_CONFLICT409Same key, different body
ENDPOINT_GONE410Old money endpoint — use /v1/payments
LIVE_NOT_APPROVED403Live key before go-live approval
MERCHANT_SUSPENDED403Account suspended

Webhooks (dashboard)

CodeStatusWhen
INVALID_WEBHOOK_URL400Bad URL, or live URL is not public HTTPS
INVALID_WEBHOOK_SECRET400Secret length out of range
WEBHOOK_SECRET_REQUIRED400First setup without a secret
WEBHOOK_NOT_CONFIGURED404No endpoint for that environment

Idempotency

On create calls, send a fresh Idempotency-Key per distinct attempt (a UUID is fine).

  • Same key + same body → original result
  • Same key + different bodyIDEMPOTENCY_CONFLICT (409)

Rate limits

Default: 100 requests/minute per API key. On 429, retry with backoff.

On this page