Skip to main content
HTTP status codes tell you what class of problem occurred. This catalog covers frequent **detail** messages and field validation patterns so you can fix requests without opening a support ticket. For step-by-step fixes, see the Knowledge Base. For retry logic and idempotency rules, see Error Handling.
TopicKnowledge Base article
401 credentialsInvalid credentials
403 forbiddenForbidden / unverified
422 validationValidation errors
IdempotencyDuplicate reference_id
SessionsSession expired
MoMo delaysPROCESSING status
429 rate limitRate limit
5xx serverServer errors

Authentication & authorization

SymptomTypical HTTPWhat it meansWhat to do
Could not validate credentials401Missing, malformed, or expired Bearer token401 guide — refresh token before expires_in elapses
Token works on one endpoint but 403 on another403Account not verified or feature gated403 guide
Not authenticated401No Authorization headerSend Authorization: Bearer <access_token> on every call

Validation (HTTP 422)

Inspect the detail array. Each item has loc, msg, and type.
Field / patternExample msgCauseFix
body.currencyfield requiredCurrency omittedISO 4217 uppercase, e.g. USD
body.phoneinvalid phone / length errorsNot E.164 without +Use digits only, e.g. 231771234567
body.reference_idinvalid uuidNot UUID v4Generate with uuid4() once per execution attempt
body.reference_idduplicate / already existsReused idempotency key for a different paymentQuery status with the same reference_id first
body.amountless than minimumBelow 0.01 or integer rulesIncrease amount or use predictions endpoint
body.session_idsession not found / expiredSession timed out or wrong IDCreate a new session; do not reuse stale IDs
body.payment_account_idnot foundAccount not registered for partyPOST /v1/payment-accounts/create?operation_type=COLLECTION
body.method / body.providerinvalid combinationMismatched MoMo operatorCall MMO provider prediction
body.source_type / body.source_kindinvalid enumWrong document type constantUse INVOICE or ORDER for checkout sources (see Checkouts)
body.counterparty_idrequiredInvoice/order without counterpartyCreate Counterparty first in document-first flows

Resource state errors

SymptomHTTPCauseFix
Invoice not publishable422 / 404Still IDLE or wrong IDPUT /v1/invoices/publish/{id} when ready
Execution rejected — session422Session not ACTIVE or wrong operation typeMatch session type to execution (checkoutcollection)
Source CANCELED422Invoice/order canceledCreate a new source; do not execute against canceled IDs
Party / counterparty mismatch422IDs from another merchantUse IDs returned under your authenticated merchant

Execution & status

SymptomHTTPCauseFix
Status stays PROCESSING200 on status pollMoMo carrier delay (normal)PROCESSING guidedo not retry with a new reference_id
Status FAILED200Payer declined, insufficient funds, or operator errorShow failure to user; optional new session + new reference_id for a new attempt
Lost HTTP response after executeNetwork timeoutPoll status with stored reference_id before retrying execute
429 Too Many Requests429Rate limitHonor Retry-After; exponential backoff

Server errors (5xx)

SymptomAction
500 / 502 / 503Retry with backoff; if persistent, contact support with reference_id and timestamp
Intermittent timeouts on executeTreat as ambiguous: status poll first, then retry only if status shows no COMPLETED/PROCESSING

Support payload checklist

When escalating to Support or dev@heydollr.app, include:
  1. reference_id (if execution-related)
  2. Request URL, method, and redacted body
  3. Full response status + JSON body
  4. Merchant ID / environment (test vs live)
  5. Payment method, provider, and market

Last modified on May 22, 2026