Skip to main content
These four endpoints cover the full lifecycle of a combo position on Bravado: obtaining a firm RFQ quote, accepting it on-chain before it expires, listing your open and resolved positions, and redeeming a winning combo for pUSD. All mutating endpoints require an Idempotency-Key header to prevent duplicate submissions.

POST /v2/trade/combo/quote

Request a firm RFQ quote for a multi-leg parlay. The quote is priced by a live maker counterparty and is valid for approximately 8.5 seconds. Use the returned combo_order_id and quote_id together when calling /combo/accept.

Headers

Request

string[]
required
An array of 2–10 YES outcome token IDs, each representing one leg of the parlay. All legs must be on separate markets.
number
required
The total amount in US dollars you want to spend on this combo. Minimum 0.01.
string
Trade direction. Only "BUY" is currently supported. Defaults to "BUY" if omitted.

Response

string
Unique identifier for this combo order. Pass this value to /combo/accept and /combo/redeem.
string
Unique identifier for this specific RFQ quote. Required when calling /combo/accept. Becomes invalid after expires_at.
string
The underlying RFQ session identifier assigned by the maker infrastructure.
string
The blended price in cents per YES combo share. For example, "2" means each share costs $0.02. Returned as a string.
string
The notional dollars the maker counterparty posts to back this quote. Returned as a string.
string
The number of combo shares you will receive if you accept this quote. Returned as a string.
string
ISO-8601 datetime after which this quote is no longer valid. You must call /combo/accept before this timestamp.

POST /v2/trade/combo/accept

Accept a previously issued quote and execute the combo trade on-chain. You must call this endpoint before the expires_at timestamp returned by /combo/quote.

Headers

Request

string
required
The combo_order_id returned by /combo/quote.
string
required
The quote_id returned by /combo/quote. This ties the accept to the specific live quote from the maker.

Response

string
The same combo_order_id passed in the request, confirming which order was executed.
string
"EXECUTED" when the combo has been successfully submitted on-chain.
string
The Polygon transaction hash for the on-chain execution. Use this to verify finality on a block explorer.
You must call /combo/accept before the expires_at time returned by /combo/quote. If the quote has expired, the API returns 410 QUOTE_EXPIRED. Do not retry the stale accept, call /combo/quote again to obtain a fresh price, then accept the new quote.

POST /v2/trade/combo/redeem

Redeem a winning combo position for pUSD after all legs have resolved in your favor. You can identify the position using either the combo_order_id from the original trade or the combo_position_id returned by GET /combo/positions. Provide one or the other, not both.

Headers

Request

string
The combo_order_id from the /combo/accept response. Provide this or combo_position_id, not both.
string
The combo_position_id from GET /combo/positions. Useful if you did not store the original order ID. Provide this or combo_order_id, not both.

Response

string
The order identifier for the redeemed combo.
string
"REDEEMED" when pUSD has been successfully credited to your account.
string
The amount of pUSD paid out to your account. Returned as a string.
string
The Polygon transaction hash for the on-chain redemption.
Only positions with status RESOLVED_WIN produce a payout. If any single leg resolves against you, the entire combo is worthless, that is correct parlay behavior. Attempting to redeem a RESOLVED_LOSS position returns an error.

GET /v2/trade/combo/positions

List all combo positions for the authenticated user, across all statuses. Use this endpoint to find positions eligible for redemption or to monitor the resolution of in-flight combos.

Headers

Query parameters


Common rejections

The ~8.5-second acceptance window for this quote has passed. Call POST /combo/quote again to obtain a fresh price, then call POST /combo/accept with the new combo_order_id and quote_id. Never retry a stale accept, the underlying prices may have moved significantly.
Your account does not have enough pUSD to cover the notional_usd you requested. The error message specifies the exact shortfall in dollars. Reduce notional_usd or top up your balance before retrying.
No maker counterparty was willing to price the combo at this size. This is most common on thin markets or very large notionals. Wait a moment and retry, or reduce notional_usd. If the market is consistently illiquid, consider removing the lowest-volume leg from the combo.