Skip to main content
Combos are multi-leg parlays, a single position that pays out only if every selected market resolves in your favor. Instead of placing separate orders across multiple markets, you submit a single combo order that bundles 2–10 YES outcome legs into one on-chain position. This API uses a Request-for-Quote (RFQ) model, meaning every price you receive is a firm, live quote from a real maker counterparty. To use the Combos API, your token must carry the 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 in GET /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.