RFQ
Check ERC-20 allowance
/api/v1/check_approvalReturns unsigned ERC-20 transactions for the wallet to execute. Sufficient allowance returns null for both payloads. Zero allowance returns approval only. Nonzero but insufficient allowance returns cancel (approve Reactor for zero) and approval (approve Reactor for maxUint256). Execute cancel before approval, atomically when supported or waiting for each transaction to confirm.
Request Body
application/jsonstringToken owner whose Reactor allowance is read — the swapper that will sign the order.
integer·max 9007199254740991Chain to run the check on. Must match the single chain this deployment is configured for.
stringERC-20 the swapper will spend. Its allowance for the Reactor is what gets checked.
Responses
objectUnsigned approve(Reactor, maxUint256) transaction, or null when allowance covers the requested amount.
Request a quote
/api/v1/quoteFans the swap request out to enabled solvers with eligible adapter inventory and returns a non-empty quotes array, best output first, with ties broken by the faster solver response. Each entry contains solver metadata, a quote, and its EIP-712 signing data. Choose an entry, sign its signatureData, and submit its quote to POST /api/v1/order. Responds 404 "No quotes available" when the amount is below the input token's configured minimum, no solver is eligible, or no solver returns a non-zero quote.
Request Body
application/jsoninteger·max 9007199254740991Chain the input token lives on. Must equal the single chain this deployment serves or the call 400s.
integer·max 9007199254740991Chain of the output token. Must equal tokenInChainId and the deployment's chain.
stringToken the swapper is selling. 0x address, case-insensitive and normalized to lowercase.
stringToken the swapper wants to receive. Every outputs[].token must repeat this address.
string·const EXACT_INPUTOnly "EXACT_INPUT" is supported: amount fixes the input and solvers compete on the output amount.
stringInput amount to sell, in tokenIn's smallest unit. Below the token's configured minimum no quote is returned.
stringAddress that must sign the order and, unless an output overrides it, receives the output tokens.
string·const BEST_PRICE·default BEST_PRICEOnly "BEST_PRICE" is accepted and it is the default. It is recorded but does not affect solver selection.
string·const EXACTOptional, "EXACT" is the only accepted value and it is only stored alongside the quote request.
string[]·min 1·max 50Restricts the auction to these solver ids (1-50 entries). Omit to fan out to every enabled solver.
Responses
stringServer-generated UUID for this quote request. It is logged, so quote it when reporting issues.
Get solver liquidity
/api/v1/liquidityReturns the adapter inventory available to each eligible solver using the same authorization and live-discount limits as quote construction. Each liquidity value sums adapters[].maxAssets in tokenOut base units, totalLiquidity sums all returned solver values, including shared inventory counted for each solver. Solvers are sorted by liquidity descending. Optional solverId restricts the list and total to one solver and takes precedence over solverIds. Does not request solver quotes or persist quote records. Empty inventory returns 200 with totalLiquidity=0 and solvers=[].
Request Body
application/jsonstringToken to sell. Must be a deployment input token with a configured liquidity output token.
string·min 1Restricts solvers and totalLiquidity to this configured solver. Takes precedence over solverIds. No eligible liquidity returns a zero total and an empty solvers array.
Responses
stringToken to sell. Must be a deployment input token with a configured liquidity output token.
stringOutput token in which all liquidity values are denominated, fixed per tokenIn by the deployment manifest.
objectDeployment metadata for the sold token, enough to format its amounts client-side.
objectDeployment metadata for the output token in which all liquidity values are denominated.
stringSum of solvers[].liquidity in tokenOut base units. Shared inventory is counted for each eligible solver.
Publish a discount
/api/v1/discountPublish a signed discount. A signed request with deadline=0 instead cancels (deletes) the discount currently stored for the (adapter, tokenToRedeem) pair. The signer must still produce a valid signature and be authorized for the adapter. Cancellation is backend-only — it stops the discount being served but does not retract the signed object on-chain.
Submit an order
/api/v1/orderAccepts a quote returned by POST /api/v1/quote together with the swapper's EIP-712 signature over it. The backend re-checks the terms against the stored quote, verifies the signature, re-runs the auction, counter-signs the order with the protocol key and stores it. An unknown quoteId gives 404. An expired quote, or one no solver can still honor, gives 409. Re-posting the same quoteId and signature returns the existing order instead of creating a second one.
Request Body
Responses
stringUUID generated for this call and stored on the order row alongside the order.
string <uuid>UUID of the stored order. Pass it to GET /api/v1/orders to poll progress.
List orders
/api/v1/ordersReturns stored orders matching the supplied filters, newest first by default, each carrying the amounts the indexer has seen settled for its on-chain order hash. At least one of orderId, orderIds, orderHash, orderHashes, orderStatus, swapper or filler is required, otherwise the request is rejected with 400.
Query Parameters
stringKeep only orders currently in this lifecycle state.
openexpirederrorcancelledfilledstringKeep only orders assigned to this solver, and expose the execution fields on its own open orders.
stringTimestamp the page is ordered by: createdAt (default) or updatedAt.
createdAtupdatedAt