Prerequisites
Before you begin, ensure that you’ve:- Obtained a Circle API key with Match access
- Created a Circle Mint wallet with sufficient USDC balance and linked a fiat account to receive settlement proceeds (BURN orders only)
- Reviewed the funding model and auction mechanics
Steps
Step 1. Place a BURN order
A BURN order converts USDC to fiat. It requires two fields that MINT orders
omit: sourceWalletId (the wallet that funds the burn) and fiatAccountId (the
bank account that receives the settlement proceeds).
The idempotencyKey you supply in the request body becomes the orderId for
all subsequent lookups. Use a unique UUID v4 for each new order. Reusing an
idempotency key with different parameters returns a 409 with error code 137004.
202 Accepted:
Step 2. Place a MINT order
A MINT order converts fiat to USDC. It uses the same endpoint and most of the same fields, but you must omitsourceWalletId and fiatAccountId. Including
either field in a MINT order returns a validation error.
Step 3. Place a market order
A market order matches at whatever clearing fee the auction produces, with no fee ceiling. To place a market order, omitfeeBps entirely, or explicitly set
it to null.
feeBps set) only matches when the clearing fee does not
exceed your limit. If the clearing fee is higher, the order ends the auction
cycle unfilled and follows your postFillAction election.
Step 4. List orders with filters
UseGET /v1/match/orders to retrieve a paginated list of your orders. All
parameters are optional.
The response includes a
pagination object alongside the orders array:
Step 5. Get a single order and read lineage and fill
UseGET /v1/match/orders/{id} to fetch full detail for one order, including
its lineage and fill result.
lineage object lets you trace the full chain:
lineage.parentOrderId: the UUID of the order this one rolled from.nullif this is the original order.lineage.childOrderId: the UUID of the order this one rolled into.nullif the order hasn’t rolled yet, or if it was cancelled.
parentOrderId backward or childOrderId forward until you
reach null.
Reading the fill object
The fill field is null until the order is matched. Once matched, it
contains:
unfilledAmount indicates a partial fill. In that case, check
lineage.childOrderId to find the follow-on order that was created for the
unfilled portion according to your postFillAction election.