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 |
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 |
|---|---|---|
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 |
A newly created payout starts at aml_processing. tx_id is null until the
payout is broadcast, so it carries a value only on done.
uuid can also be null.
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.
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 |
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.
Cancel Order is what produces cancel on a limit
order; a cancelled market order ends up 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 rather than a side:
trend | Meaning |
|---|---|
up | Buy |
down | Sell |
The asset a fee was taken in is stated explicitly as fee_asset_id, so it never
has to be derived from the 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. The same field is returned by Withdrawal Fees, so you can see how a payout would be settled before creating it.