# 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.


## 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).