Quote types
Bebop sends a single request type:taker_quote. The maker fills in the amount and signs in one response.
Each request identifies the flow source via source (when the request comes from an authenticated partner) and always includes taker_address and receiver. Authenticated partners may additionally pass through origin_address and related fields. See Toxic flow for how to use these fields.
RFQA requests are identified by source: rfqa, with taker_address and receiver both set to the BebopRouter. They can also carry a signed hooks array in your response; see Maker hooks.
Quote expiry
Each quote is valid for a specific duration. The value depends on request source (public or authorised) and chain. Expiry can also vary per authorised source (e.g. CowSwap solvers get 30 seconds).| Chain | Source | Expiry (seconds) |
|---|---|---|
| Default | Public | 10 |
| Default | Authorised | 60 |
| Default | Short expiry | 3 |
| Ethereum | Public | 30 |
| Ethereum | Authorised | 75 |
| Ethereum | Short expiry | 5 |
Request shape
Bebop routes on the levels you stream, but requests can include any token combinations. A request arrives with nullmaker_amount, maker_address, and reference_price: fill these in and sign before responding.
order_type:121(one to one),12M(one to many),M21(many to one). A121can still have multiple entries inquoteswhen the router uses middle-token routing; see Routing › Middle-token routing. For12MandM21, entries in thequotesarray describe each leg.fee_usd: USD value of the fee to deduct from your quote, rounded up to a$0.001minimum. See Fees.fee_native: the same fee in the chain’s native token. Deprecated - removed 31 Aug 2026; usefee_usd.
One to one
Many to one
Eachquotes entry specifies the exact amount of a taker token to convert to the destination token (maker_token).
One to many
Eachquotes entry specifies the amount of taker_token to convert to the desired maker_token.
Responding
Fill in every null field and sign the payload before responding:maker_amount/taker_amount: your output amount. A request specifies exactly one of these; fill in the other.maker_address: your address with approvals formaker_amount.reference_price: the pre-fee price (notmaker_amount / taker_amount).
SingleOrder or MultiOrder per the quote’s order_signing_type. See Signing for EIP-712 schemas and an example.
reference_price is pre-fee. Set it to the price you would have quoted with no fee applied, not maker_amount / taker_amount. See Fees › How to apply fees to a quote for the worked example.Minimum required fields
The responsemsg body only needs to contain:
quote_idmaker_addressmaker_noncequotes(withmaker_amount/taker_amountandreference_pricefilled in)signature
Example response
Rejecting a request
To reject a quote:error_type must be one of the defined values; see Error codes for the full list and their effect on maker standing. error_msg is freeform: include as much detail as you want.