Statuses
Each object carries a status; orders carry state instead. The same values
appear in API responses and in webhook deliveries, so a client
branches on one set either way.
Deposit status
| Status | Meaning | Terminal |
|---|---|---|
aml_processing | AML screening is in progress | no |
frozen | Held pending an AML decision | no |
processing | Being credited | no |
done | Credited to the member's balance | yes |
aml_rejected | Refused by AML screening | yes |
canceled | Cancelled and not credited | yes |
rejected | Refused, including a final AML refusal; not credited | yes |
A deposit carries a tx_id in every status, including the ones where nothing
was credited — the transaction exists on-chain long before the balance moves. A
hash is therefore not a sign that the money arrived. Wait for done.
Withdrawal status
| Status | Meaning | Terminal |
|---|---|---|
initiated | Created, waiting for the core to accept it | no |
aml_processing | AML screening of the destination address is in progress | no |
processing | Accepted and being processed | no |
postponed | Held up by an internal problem | no |
done | Executed — tx_id is populated | yes |
fail | Could not be executed | yes |
rejected | Refused and not sent | yes |
aml_rejected | Refused by AML screening on the destination address | yes |
expired | Not accepted by the core within a day; not sent | yes |
cancel | Cancelled by the platform before the core accepted it; not sent | yes |
A newly created payout starts at aml_processing. That status is not delivered by
webhook — the first one you can receive is processing, see
Receiving Deliveries.
tx_id is null until the payout is broadcast, so it carries a value only on
done. uuid works the other way round: it is set when the core accepts the
payout, so it carries a value in every status in the table above, and is null
only on a payout that failed before the core registered it.
rejected and aml_rejected are separate statuses. aml_rejected specifically
means the destination address did not pass AML screening; rejected is a
refusal for any other reason.
Both are final. Keep them apart when you report back to a customer: an AML refusal is about where the money was going, not a technical failure on your side or ours.
When a payout ends as fail, rejected or aml_rejected, the money held for it
goes back to the balance — but not always all of it. On fail and rejected the
whole amount + fee returns. On aml_rejected the AML part of the fee is kept,
so what returns is amount + fee − AML fee; that part is the aml_fee of the
Withdrawal Fees quote.
postponed is not the customer's faultIt means something went wrong on the platform side, not that the request was invalid, and it is not terminal. Do not present it to a customer as a rejection.
Order state
| State | Meaning | locked | avg_price |
|---|---|---|---|
wait | Live, waiting to fill | still held | null until the first fill |
done | Executed | released | the fill price |
fail | Rejected by the system | released | null |
cancel | Cancelled | released | null |
avg_price is populated once there is a fill — including on a market order.
Older records can depart from this table: a market order in cancel, or a filled
market order with avg_price null.
Cancel Order is what produces cancel on a limit
order. A market order cannot be cancelled through the API; if the core itself
stops an unfilled market order, it ends as fail.
wait is never delivered by webhookOrder webhooks carry the terminal states only — done, fail, cancel. There
is no notification when an order is accepted, so treat the response to
Create Order as the record that it exists, and the
webhook as the record of how it ended.
Deposits and payouts do notify on intermediate statuses.
Trade side
A trade carries trend: the direction of the trade from the taker's side —
the order that executed against the order book.
trend | Meaning |
|---|---|
up | The taker bought |
down | The taker sold |
It matches your member's side only when your member's order was the taker, which
every market order is. When your member's order was the maker — a limit order
resting in the book — trend is the opposite of that order's side. To read
your member's own side, follow order_id to the order and take its side.
The asset a fee was taken in is stated as fee_asset_id — the asset the member
received: the base asset on a buy, the quote asset on a sell. Older trades can
carry null there; for those, apply the same rule using the order's side.
Operation type
Deposits and withdrawals also carry operation_type, which says how the movement
was settled:
| Value | Meaning |
|---|---|
ON_CHAIN | Settled as a blockchain transaction |
OFF_CHAIN | Settled inside the platform, with no network transaction |
Those are the only two values; older records carry null. The same field is
returned by
Withdrawal Fees, so you can see how a payout
would be settled before creating it.