Skip to content
Last updated

Order Statuses

For the complete documentation index, see llms.txt. Append .md to any page URL for its markdown version.

Every Banxa order moves through a sequence of statuses from creation to completion. The order response from POST /v2/buy, POST /v2/sell, and GET /v2/orders all include an order status field.

You may want to group or map these statuses into something more meaningful for the experience you present to your customers.


Status reference

StatusApplies toDefinition
pendingPaymentBuy (mainly)Order has been created and the customer has submitted KYC information. Waiting for customer payment. Can appear briefly on sell orders.
waitingPaymentBuy, SellBuy: customer has submitted payment information; waiting for final confirmation from external payment systems. Sell: waiting for the customer to send crypto to the provided wallet address. This webhook signals that cryptocurrency is ready to be sent to Banxa.
paymentReceivedBuy, SellPayment confirmed. Buy: fiat payment received. Sell: crypto deposit received; the fiat payout is in progress.
inProgressBuy, SellPayment information has been received by external payment systems. The order is in final verification and processing. Also shown while an order is on hold.
cryptoTransferredBuyCryptocurrency transaction has been submitted to the blockchain.
fiatTransferredSellWebhook only; not returned by order lookup. The fiat payout has been sent. Sent for some payout methods, such as card payouts and ACH, before complete.
completeBuy, SellOrder completed. Buy: deemed complete after 2 blockchain confirmations. Sell: deemed complete when fiat has been successfully sent to the customer.
cancelledBuy, SellOrder cancelled by Banxa due to internal risk and compliance alerts, or because the IP Binding check blocked checkout.
declinedBuy, SellOrder declined by external payment systems.
expiredBuy, SellOrder created but payment not received within the expiry window. Expiry times vary by payment method. Buy: expired orders can become active again — if payment is received after expiry, the order will automatically continue through the normal processing stages. Sell: see Expiry and incorrect deposits.
refundedBuy, SellOrder refunded by Banxa customer support at the customer's request.
extraVerificationBuyOrder held for additional verification (e.g., ID or address verification). Banxa customer support will contact the customer to resolve the order.

Typical on-ramp (buy) flow

pendingPayment

pendingPayment

cancelled / declined

timeout

paymentReceived

inProgress

cryptoTransferred

complete

inProgress

resolved

timeout

Order created

KYC

Payment

cancelled / declined

expired

Order
execution

Verified?

Crypto sent
to wallet

complete

Manual
review

pendingPayment

pendingPayment

cancelled / declined

timeout

paymentReceived

inProgress

cryptoTransferred

complete

inProgress

resolved

timeout

Order created

KYC

Payment

cancelled / declined

expired

Order
execution

Verified?

Crypto sent
to wallet

complete

Manual
review

For instant payment methods (card, Apple Pay), waitingPayment may be bypassed.

Typical off-ramp (sell) flow

waitingPayment

cancelled / declined

timeout

paymentReceived

complete

inProgress

resolved

timeout

Order created

KYC + bank
details

Awaiting
crypto transfer

cancelled / declined

expired

Fiat payout
processing

complete

On hold /
manual review

waitingPayment

cancelled / declined

timeout

paymentReceived

complete

inProgress

resolved

timeout

Order created

KYC + bank
details

Awaiting
crypto transfer

cancelled / declined

expired

Fiat payout
processing

complete

On hold /
manual review

The typical sell path is waitingPayment → paymentReceived → complete, with a fiatTransferred webhook before complete for some payout methods. Sell orders don't use cryptoTransferred or extraVerification.

waitingPayment is the signal for custodial integrations to execute the crypto transfer. The order webhook doesn't include the deposit address; get it from GET /v2/orders/{orderId}. Once Banxa receives the crypto (paymentReceived), the fiat payout is processed.


Terminal statuses

The following statuses are final — the order will not progress further:

  • complete
  • cancelled
  • declined
  • refunded

Note: for buy orders, expired is not always terminal. A buy order can resume if payment is received after the expiry time. For sell orders, see Expiry and incorrect deposits. extraVerification is a hold state — the order will resume once verification is resolved by Banxa support.

Do not settle on paymentReceived

paymentReceived is not a settlement guarantee. An order can still be cancelled and refunded after payment if it is held for risk or compliance review, and reviews can take hours in some cases. If you credit customers or trigger downstream fulfilment from order status, wait for complete.


Order identifiers

Every order has two identifiers:

IdentifierFormatWhere it appears
Order IDShort numericShown to the customer in checkout and order emails
Order keyLong hashAPI responses, webhook payloads, order lookup

Always reconcile using the long hash. The short numeric ID is customer-facing only and is what customers will quote in support requests.


Checking order status

You can retrieve the current status of any order via the order lookup endpoint, or receive status updates automatically via webhooks.

→ See Order Lookup and Webhooks.