Status mapping

Internal lifecycle states mapped to the stable partner-facing status field.

Six possible status values. Use them directly — don’t infer state from anything else. They appear in every /v1/order response and every webhook body.

Partner status vocabulary

ValueMeaning
NEWOrder created, awaiting the deposit transaction.
PENDINGDeposit observed on-chain, awaiting confirmations.
EXCHANGEPayout is being executed; the end user has not received funds yet.
DONEPayout transaction broadcast; the end user has received funds. This is the terminal success state on the wire.
EXPIREDOrder is no longer actionable — the deposit window closed, the order was removed by the user, or it landed in any other non-live state. We never invent a live state we cannot back with data.
EMERGENCYPartner choice required; see emergency.status for the reason.

When DONE is final

DONE means the payout transaction has been broadcast and the end user has received funds. It is terminal on the wire; no further status updates follow. time.finish records the moment the payout was broadcast.

Soft-delete invisibility

When a user soft-deletes an order it disappears from the partner surface entirely. /v1/order, /v1/emergency, and /v1/qr collapse to { code: 6, msg: "NOT_FOUND" }, and webhook delivery is suppressed. Aggregate counters on your partner record are never decremented; earnings and volume stay accurate.

Emergency status detail

An order in status = "EMERGENCY" carries a non-empty emergency.status array. The set of values we emit today:

ValueMeaning
LIMITDeposit amount is outside the per-pair USD bounds (caps or per-asset min/max).
EXPIREDThe order has terminally expired alongside status = EMERGENCY (rare race condition).
LESSReserved for future use (underpayment classification — currently rolled up into LIMIT).
MOREReserved for future use (overpayment classification — currently rolled up into LIMIT).

Resume the order by calling POST /v1/emergency with choice: "EXCHANGE" (continue at the live rate). Orders that should not resume (for example, because the deposit needs to be returned) are finalised by the operator; the final state surfaces through order.status_changed as EXPIRED.

emergency.choice

emergency.choice in the order DTO is NONE until a partner submits a choice through /v1/emergency, then EXCHANGE. Any other value collapses to NONE in the wire response.

Partner API.
Same engine as 0trace.

A private partner integration surface. Signed quotes, server-side pricing, webhook delivery, multiple reference codes, and a self-serve cabinet — all backed by the production exchange engine.

Support

Questions? Answers.

Get the latest updates

Follow us on X

The 0trace team will never ask for KYC or AML. We retain no logs, metadata, or tracking cookies.

Learn more