trade.combos scope.
Why Bravado over the native endpoints
Polymarket has no multi-leg product. To express “all of these outcomes happen”, you buy each leg separately, which leaves you holding several independent positions rather than one parlay. That distinction matters more than it first appears:- A firm quote, not an estimate. A real maker counterparty prices the blended position and stands behind it. This is not a simulated midpoint derived from the books.
- No leg risk. Legging in manually means the market can move against you between the first fill and the last, and a failed leg leaves you exposed to a position you did not intend to hold.
Endpoints
RFQ model
The Combos API is built on a Request-for-Quote flow. When you call/combo/quote, a real maker counterparty prices the blended position and returns a firm quote, not an estimate or a simulated midpoint. That quote is valid for approximately 8.5 seconds from the time it is issued.
You must call /combo/accept before the expires_at timestamp in the quote response. If you wait too long, the API returns a 410 QUOTE_EXPIRED error. When that happens, re-quote rather than retrying the stale accept, the underlying market prices may have moved, and the maker needs to re-price the position.
Key units
All numeric fields in API responses are returned as JSON strings, not numbers. Parse them accordingly before performing arithmetic.
Combo positions
After a combo is accepted on-chain, it appears inGET /combo/positions with one of four status values:
Use the
combo_position_id returned from /combo/positions when calling /combo/redeem if you did not retain the original combo_order_id from /combo/accept.