Developer guide
VEXPay siteAPI reference
Browse documentation

Handle errors and limitations

Design for validation failures, service availability, limits, and uncertain network outcomes.

Status codes

StatusMeaningAction
400Invalid request inputCorrect the request; do not retry unchanged.
401Missing, invalid, or inactive API keyCheck x-api-key and key rotation.
403live_mode_not_activated — live account pending VEX Pay review or suspendedUse your Test key; request go-live from the portal (see Going live). Do not retry.
403This method is not enabled on your account (advanced débito/crédito endpoints)Use a routed endpoint or ask VEXPay ops to allow the method; do not retry unchanged.
404Payment or resource not found for tenantCheck the ID and tenant scope.
422The banking network rejected the operationInspect the error code and do not retry unchanged.
422insufficient_balance — the payout is larger than your available balance; part of it may be on the 24h hold (heldVes / heldUsdt / heldCop, nextReleaseAt)Pay out at most the available amount, or retry after nextReleaseAt. See Balances, holds and payouts.
503Payment service unavailableRetry later after confirming the original payment status.
5xxGateway or banking-network failureTreat the outcome as uncertain; look up the payment.

Current limitations

  • C2P reversal is the only supported reversal flow.
  • Webhook delivery is one attempt with no automatic retry and a 10-second timeout.
  • On payments, externalRef is correlation only; use Idempotency-Key for safe retries. A C2P, VPOS or débito charge whose externalRef already has a COMPLETED payment is refused with 409 external_ref_already_paid (paymentId in the body). On merchants and payouts externalRef is required and is the resource idempotency key (max 64, unique per tenant).
  • The tenant application gathers C2P tokens; the backend does not message customers.

Recover safely

  1. Record the attempt

    Persist your order reference and any returned gateway payment ID.

  2. Resolve uncertainty

    Look up by payment ID, or externalRef when no ID was received.

  3. Retry deliberately

    Only submit another mutation after confirming the original did not complete.