# Order Statuses

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

| Status | Definition |
|  --- | --- |
| `pendingPayment` | Order has been created and the customer has submitted KYC information. **Buy:** waiting for customer payment. **Sell:** waiting for required conditions before Banxa can accept the crypto payment. |
| `waitingPayment` | **Buy:** customer has submitted payment information; waiting for final confirmation from external payment systems. **Sell:** all conditions are met and the customer needs to send crypto to the provided wallet address. This webhook signals that cryptocurrency is ready to be sent to Banxa. |
| `paymentReceived` | Payment confirmed. **Buy:** fiat payment received. **Sell:** crypto payment received. |
| `inProgress` | Payment information has been received by external payment systems. The order is in final verification and processing. |
| `cryptoTransferred` | Cryptocurrency transaction has been submitted to the blockchain. |
| `complete` | Order completed. **Buy:** deemed complete after 2 blockchain confirmations. **Sell:** deemed complete when fiat has been successfully sent to the customer. |
| `cancelled` | Order cancelled by Banxa due to internal risk and compliance alerts. |
| `declined` | Order declined by external payment systems. |
| `expired` | Order created but payment not received within the expiry window. Expiry times vary by payment method. **Note:** expired orders can become active again — if payment is received after expiry, the order will automatically continue through the normal processing stages. |
| `refunded` | Order refunded by Banxa customer support at the customer's request. |
| `extraVerification` | Order 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

```mermaid
flowchart LR
    A([Order created]) -->|pendingPayment| B[KYC]
    B -->|pendingPayment| C[Payment]
    C -->|cancelled / declined| D([cancelled / declined])
    D -->|timeout| E([expired])
    C -->|paymentReceived| F[Order\nexecution]
    F -->|inProgress| G{Verified?}
    G -->|cryptoTransferred| H[Crypto sent\nto wallet]
    H -->|complete| Z([complete])
    G -->|inProgress| I[Manual\nreview]
    I -->|resolved| Z
    I -->|timeout| E
```

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

## Typical off-ramp (sell) flow

```mermaid
flowchart LR
    A([Order created]) -->|pendingPayment| B[KYC + bank\ndetails]
    B -->|waitingPayment| C[Awaiting\ncrypto transfer]
    C -->|cancelled / declined| D([cancelled / declined])
    D -->|timeout| E([expired])
    C -->|paymentReceived| F[Fiat payout\nprocessing]
    F -->|inProgress| G{Verified?}
    G -->|complete| Z([complete])
    G -->|inProgress| I[Manual\nreview]
    I -->|resolved| Z
    I -->|timeout| E
```

`waitingPayment` is the signal for custodial integrations to execute the crypto transfer. 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:** `expired` is not always terminal. Orders can resume if payment is received after the expiry time. `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:

| Identifier | Format | Where it appears |
|  --- | --- | --- |
| Order ID | Short numeric | Shown to the customer in checkout and order emails |
| Order key | Long hash | API 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](/products/hosted-checkout/docs/transaction-lifecycle/order-lookup) and [Webhooks](/products/hosted-checkout/docs/transaction-lifecycle/webhooks).