Upcoming - beta access required. The Combos API is not generally available yet. Reach out to institutional@polymarket.us to join the beta test.
The Combos API lets participants request and quote multi-leg combo trades. A requester creates an RFQ with one or more legs, makers respond with quotes, and the requester accepts one quote to execute the resulting order.
For real-time RFQ and quote changes, use the RFQ Events Stream .
Endpoints
Method Endpoint Required Scope Description GET/v1/combos/rfq/user-idread:ordersGet your public RFQ user ID GET/v1/combos/rfqsread:ordersQuery RFQs POST/v1/combos/rfqswrite:ordersCreate an RFQ GET/v1/combos/quotesread:ordersQuery quotes POST/v1/combos/quoteswrite:ordersCreate a quote DELETE/v1/combos/rfqs/{rfqId}/quotes/{quoteId}write:ordersDelete a quote PUT/v1/combos/rfqs/{rfqId}/quotes/{quoteId}/acceptwrite:ordersAccept a quote
All Combos API calls require normal bearer-token authentication. Calls must also identify the acting participant either through the x-participant-id header or through a participant_id claim in the bearer token.
RFQ Flow
Call GetRFQUserID to learn the public RFQ user ID for the authenticated participant.
Call CreateRFQ with the combo legs, requested side, quantity or cash order quantity, and expiration time.
Makers call GetRFQs and CreateQuote to respond.
Requesters monitor GetQuotes or subscribe to StreamRFQEvents.
The requester calls AcceptQuote to execute one quote.
Create RFQ
Request Body
Field Type Required Description qtyDecimalstring Conditional Share quantity for the RFQ. Provide this or cashOrderQty. cashOrderQtystring Conditional Cash notional for the RFQ. Provide this or qtyDecimal. legsCreateRFQLeg[]Yes Combo legs. Each leg has symbol and side. sideSideYes Requester’s side for the combo. clientRequestIdstring No Client idempotency / correlation ID. expirationTimeRFC3339 Yes Time when the RFQ expires.
Example
{
"qtyDecimal" : "100" ,
"side" : "SIDE_BUY" ,
"clientRequestId" : "rfq-20260613-001" ,
"expirationTime" : "2026-06-13T18:00:00Z" ,
"legs" : [
{
"symbol" : "aec-mlb-nyy-bos-2026-06-13-nyy" ,
"side" : "SIDE_BUY"
},
{
"symbol" : "aec-mlb-nyy-bos-2026-06-13-bos" ,
"side" : "SIDE_SELL"
}
]
}
Response
{
"clientRequestId" : "rfq-20260613-001"
}
Query RFQs
GET /v1/combos/rfqs?symbol=aec-mlb-nyy-bos-2026-06-13-nyy & pageSize = 100
Query Parameters
Parameter Type Description pageSizeinteger Number of RFQs to return. pageTokenstring Pagination token from nextPageToken. rfqIdstring Filter by RFQ ID. rfqCreatorUserIdstring Filter by requester RFQ user ID. symbolstring Filter by combo or leg symbol. clientRequestIdstring Filter by client request ID.
Create Quote
Request Body
Field Type Required Description rfqIdstring Yes RFQ being quoted. sideSideYes Quote side. pricestring Yes Quote price as a decimal string. symbolstring Yes Combo symbol. qtyDecimalstring Yes Quote quantity as a decimal string. clientRequestIdstring No Client idempotency / correlation ID. expirationTimeRFC3339 No Quote expiration time.
Query Quotes
GET /v1/combos/quotes?rfqId=rfq_123 & status = QUOTE_STATUS_PENDING
Query Parameters
Parameter Type Description pageSizeinteger Number of quotes to return. pageTokenstring Pagination token from nextPageToken. quoteIdstring Filter by quote ID. rfqIdstring Filter by RFQ ID. creatorRfqUserIdstring Filter by quote creator RFQ user ID. symbolstring Filter by combo symbol. statusQuoteStatusFilter by quote status. clientRequestIdstring Filter by client request ID.
Accept Quote
PUT /v1/combos/rfqs/{rfqId}/quotes/{quoteId}/accept
Accepting a quote inserts the resulting order. The body repeats the economic terms being accepted.
Field Type Required Description sideSideYes Side being accepted. pricestring Yes Accepted price. symbolstring Yes Combo symbol. qtyDecimalstring Yes Accepted quantity.
Quote Statuses
Status Description QUOTE_STATUS_PENDINGQuote is active and can be accepted. QUOTE_STATUS_ACCEPTEDQuote was accepted. QUOTE_STATUS_DELETEDQuote was deleted by its creator. QUOTE_STATUS_EXPIREDQuote expired. QUOTE_STATUS_PASSEDQuote was passed. QUOTE_STATUS_DONE_AWAYQuote was done away. QUOTE_STATUS_PENDING_RISKQuote is waiting on risk checks. QUOTE_STATUS_PENDING_END_TRADEQuote is waiting for end-trade processing. QUOTE_STATUS_REJECTEDQuote was rejected.
Rate Limits
Endpoint Rate Burst GET /v1/combos/rfq/user-idFirm-wide REST cap - GET /v1/combos/rfqs1 req/sec 1 GET /v1/combos/quotes1 req/sec 1 POST /v1/combos/rfqs10 req/sec 10 POST /v1/combos/quotes100 req/sec 100 DELETE /v1/combos/rfqs/{rfqId}/quotes/{quoteId}100 req/sec 100 PUT /v1/combos/rfqs/{rfqId}/quotes/{quoteId}/accept100 req/sec 100
Exceeding these limits returns ResourceExhausted (429 Too Many Requests).
Error Codes
Error Cause InvalidArgumentMissing participant ID, invalid RFQ, quote, symbol, side, price, quantity, or pagination input. UnauthenticatedMissing or invalid bearer token. PermissionDeniedToken lacks the required scope or participant access. FailedPreconditionParticipant token setup is not ready or token state is invalid. UnavailableUpstream Combos service is unavailable. ResourceExhaustedPer-firm rate limit exceeded.
See Also
RFQ Events Stream Real-time RFQ and quote events
Trading API Order entry and lifecycle APIs
Authentication Required scopes and OAuth flow
Rate Limits Endpoint-level request limits