Skip to main content

Identifiers

Query order status accepts C2C’s orderId or orderReference, or your own merchantOrderRef, and works with any of your API keys, including after a key rotation. If an order-creation call timed out before you got the orderId, retry it with the same Idempotency-Key (the response contains the original orderId), or look the order up by its merchantOrderRef.

merchantOrderRef rules

  • It’s optional. When you send it, only one live order can use a reference. Creating another order with a reference already used by an order that is in progress or completed returns 409: merchantOrderRef 'INV-10045' is already used by order ORD-…. Reuse the same Idempotency-Key to retry a request, or use a new reference for a new payment.
  • You can reuse a reference whose earlier order failed (Rejected, Expired, CancelledTimeout, Cancelled, CancelledAuto), for example to retry a checkout. A lookup by reference returns the latest order with that reference.

Lifecycle stages

Every order also reports a canonical stage in the create-order response, status inquiry and webhooks. Stages are the same for deposits and withdrawals, so you can branch on them instead of on individual statuses.
With today’s processing, approval and rejection happen in the same step as completion or failure, so the current stage is normally one of the other five. The lifecycle timestamps (awaitingAt, assignedAt, sentAt, approvedAt, rejectedAt, completedAt, failedAt) still record each step, or are null if it wasn’t reached. For a withdrawal, the member’s single confirmation means sentAt, approvedAt and completedAt share one timestamp.

Statuses

Legacy orders can also show Assigned or Frozen. Treat both as in progress.

Getting the outcome reliably

Use both mechanisms:
  1. Webhooks for fast notification of every final outcome: order.completed or order.failed. See Webhooks.
  2. Status queries as the source of truth: confirm a webhook before moving money, follow orders in ManualReview (no webhook until they’re resolved), and catch deliveries that never reached you.
The Merchant API has no request rate limits, but prefer webhooks to tight polling loops and stop polling once an order is final.

Handling each outcome