Order snapshot events
exchange.accepted, exchange.cancelled, and exchange.rejected have the same
data.order shape. The event type and order status identify the transition.
exchange.cancelled, order.status is cancelled. cancel_reason is
null for an explicit cancel, unfilled_ioc_quantity when an immediate order
executed part of its quantity and the remainder was cancelled, or
self_trade_prevention when the order would have matched one of your own
resting orders. A resting order of yours that is cancelled as the counterparty
of one of your own commands also receives this event.
For exchange.rejected, order.status is rejected and reject_reason is
no_fill (an immediate order found no liquidity) or post_only_would_cross.
Requests that fail before reaching the matching engine, such as a missing
balance, an invalid price, or a suspended pair, are answered synchronously by
the REST or WebSocket call and produce no webhook.
An order that fills completely on arrival emits exchange.filled (and
exchange.cancelled for any remainder) without a preceding
exchange.accepted.
exchange.filled
One order can produce several fill events. data.fill.id identifies the fill;
data.order is the order snapshot after that fill was applied.
applied_fee_bps is the fee rate committed for your side of this fill and
maker_rebate is any rebate paid to you in the base asset. Both are omitted
when they do not apply.
exchange.replaced
A replacement event contains both snapshots. For explicit order_replace, the
original is cancelled and links to the new order ID through
replace.replaced_by_order_id. The replacement links back through
replace.replaces_order_id.
For a material market-maker quote amendment, both snapshots have the same
order ID: original_order contains the terms before the change and
replacement_order contains the current terms afterward. Both retain the live
status, cumulative filled quantity, original creation time and existing
replacement ancestry. An amendment creates no cancellation or replacement
self-links. For example, after 3 units have filled, requesting 8 remaining
units updates total quantity to 11 while filled_quantity remains 3.
Update your current order from replacement_order, keyed by its id; equal
IDs indicate an in-place update. Each material amendment emits one
exchange.replaced event using your existing subscription, with no additional
accepted or cancelled event. Deduplicate retries by the envelope id.
This example shows an explicit replacement with distinct order IDs:
data.order.id, data.original_order.id, or
data.replacement_order.id with GET /v1/partner/exchange/orders/{order_id}
for the authoritative order state, including the order’s fills list.
Return to the webhook overview