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 /api/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. /api/v1/order, /api/v1/emergency, and /api/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 /api/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 /api/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.

Need help?

Questions? Answers.

A partner integration surface on top of the same exchange engine that powers 0trace.io. You connect with a signed REST contract, query quotes, open orders, and receive webhook notifications. Our liquidity, our pricing, our payouts. You focus on your product.
No. The API is private and invite-only, aligned with the privacy posture of 0trace itself. There is no KYC, no identity collection, and no source-of-funds reporting required of partners or their end users.
Submit a request through our partner application form at 0trace.io/api/contact-sales and we’ll reply within three business days.
Traffic is encrypted in transit (TLS). Every request is signed with HMAC-SHA256 over the exact request body bytes and gated by a nonce-based replay window. Pricing, fees, and payout amounts are computed server-side. Payouts run on an isolated service that re-verifies each transfer against the on-chain deposit before broadcasting.
A per-partner sliding-window weight budget, default 2500 wu/min (≈50 creates/minute). Endpoint weights: /api/v1/create is 50, /api/v1/qr is 5, every other endpoint is 1. XML feeds run on a separate public bucket. Exceeding the budget returns 429 with a Retry-After header. To raise your cap, send your projected per-endpoint call rate to your operator contact.
Two ways to earn. Revenue share: send us traffic with your referral link and earn a share of our service fee on every order — the visitor sees our live rate. Markup: integrate through the API and add your own margin on top of our rate, shown in your own interface. Use either, or both.
Yes. 0trace operates its own liquidity pool across every supported asset and network. Quotes are recomputed server-side at order creation against the live feed. Payouts are direct, with no third-party intermediary.
Bitcoin, Ethereum, BSC, Solana, Tron, Monero, and Arbitrum One — covering native coins plus the major stablecoins on each network (USDT, USDC, USDC.e).
Yes. We push signed events for order.status_changed and partner.paid_out; you subscribe to the ones you want in your cabinet.

Follow us on X for the latest updates.

Subscribe