MolnPayDocs
Concepts

Errors

One envelope for every failure, and which codes to retry.

{ "error": "insufficient_funds",
  "code": "insufficient_funds",
  "type": "invalid_request_error",
  "message": "available 1200000, requested 5000000",
  "param": "amount",
  "request_id": "req_01J8…" }

Branch on code. Quote request_id when reporting a problem.

HTTPtypeMeaningRetryable?
400invalid_request_errormalformed / failed validationno — fix the request
401authentication_errormissing, malformed, expired or revoked keyno
402invalid_request_errorinsufficient_fundsyes, after a deposit
403authentication_errorwrong_key_kind, missing_scope, IP allowlist, or signing_disabled — in that orderno
404invalid_request_errornot found — also returned for another tenant's resource, so a 404 never confirms existenceno
409idempotency_erroridempotency conflict or illegal state transitionsee §5
422invalid_request_errorvalid JSON, rejected by the chain (bad address, chain_not_enabled)no
429rate_limit_errorrate limit or quotayes, after Retry-After
503api_errora dependency is downyes, with backoff

Notable codes: decimals_mismatch, chain_not_enabled, unknown_asset, asset_disabled, invalid_address, self_payout_forbidden, destination_not_allowlisted, quota_exceeded, too_many_pending_payouts, payout_not_cancelable, signing_disabled.

Availability codes, all 422, all about a new address or payout (§4.2): account_kind_disabled, chain_not_live_yet, chain_deposits_disabled, asset_deposits_disabled, asset_payouts_disabled, chain_unavailable.