RFQ
Check ERC-20 allowance
/api/v1/check_approvalReads the wallet's ERC-20 allowance for the Reactor contract and returns an approve() transaction when it is below the requested amount. Call it before submitting an order so the Reactor holds a large enough allowance for the input token.
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
Request a quote
/api/v1/quoteFans the swap request out to every enabled solver that has eligible adapter inventory for the tokenIn/tokenOut pair, keeps the highest total output (ties broken by the faster solver response), and returns it with the EIP-712 payload the swapper signs. Call it before POST /api/v1/order, which consumes the returned quoteId, orderInfo and the swapper's signature. Responds 404 "No quotes available" when the amount is below the input token's configured minimum, when no solver is eligible, or when 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.
objectWinning quote: the highest total output offered, ties broken by the faster solver response.
objectEIP-712 typed data (primaryType "Request") the swapper signs to authorize the order.
Quote liquidity levels
/api/v1/liquidityRuns a full solver auction at every trade size configured for the given input token and returns each solver's offer plus its gap to the oracle price. Use it to plot a depth/price-impact curve before requesting an executable quote. Results are pure price probes, are not persisted, and carry no quoteId, so they cannot back an order. Responds 400 when the token has no configured ladder and 404 when no solver quoted any size.
Request Body
Responses
stringToken to sell. Must be an enabled deployment input token that has a configured liquidity ladder.
stringOutput token the whole ladder is priced in, fixed per tokenIn by the deployment manifest.
objectDeployment metadata for the sold token, enough to format its amounts client-side.
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