Skip to main content
Beta access required. The RFQ API is not generally available yet. Reach out to institutional@polymarket.us to join the beta.
Market makers should read the Combos guide before integrating. It explains quote construction, visibility, last look, and recovery.
The public polymarket.v1.RFQAPI gRPC service creates, reads, and manages combo RFQs and quotes. An RFQ references the exact symbol of a combo instrument. The service also exposes the gRPC-only RFQ event stream. Every REST endpoint below has an equivalent unary gRPC RPC. REST JSON uses lower camel case; protobuf fields use snake case.

Endpoints

All calls require bearer-token authentication and an acting participant, supplied through x-participant-id or the token’s participant_id claim.

RFQ Lifecycle

Create an RFQ

POST /v1/rfqs
The response contains the new rfqId. A created RFQ starts in RFQ_STATUS_OPEN.

Query RFQs

GET /v1/rfqs?limit=10&status=RFQ_STATUS_OPEN The response has rfqs and an opaque cursor. An exact RFQ ID that is absent or not visible returns an empty rfqs array.

Close an RFQ

DELETE /v1/rfqs/{rfqId} closes an open RFQ. Only its requester can close it. The response is {}.

Quotes

A quote can offer both requester sides:
  • buyPrice is the price for a requester buy; the maker sells.
  • sellPrice is the price for a requester sell; the maker buys.
Set an unavailable side to "0". At least one side must be positive. Nonzero prices must be within the instrument’s price limits and land on its tick size.

Create or Replace a Quote

POST /v1/rfqs/quotes
The service derives buyQtyDecimal and sellQtyDecimal from the RFQ:
  • A quantity RFQ uses its qtyDecimal for every offered side.
  • A cash RFQ derives each side independently from cashOrderQty / price, rounded down to the instrument’s fractional quantity scale.
Each maker has one deterministic quote ID per RFQ. Calling CreateQuote again replaces that maker’s quote in place, resets it to QUOTE_STATUS_ACTIVE, and returns the same quoteId.

Query Quotes

GET /v1/rfqs/quotes?rfqId=rfq_... Without rfqId, provide exactly one of userFilter=USER_FILTER_SELF or rfqUserFilter=USER_FILTER_SELF. The response has quotes and an opaque cursor.
Cursors are query-, participant-, and path-bound. Treat them as opaque and reuse them only with the same filters and authenticated participant.

Accept a Quote

PUT /v1/rfqs/{rfqId}/quotes/{quoteId}/accept
Only the requester can accept an active quote. SIDE_BUY selects buyPrice; SIDE_SELL selects sellPrice. The selected price must be positive. Acceptance closes the RFQ, changes the quote to QUOTE_STATUS_ACCEPTED, and starts last look.

Delete a Quote

DELETE /v1/rfqs/{rfqId}/quotes/{quoteId} deletes the caller’s active quote while the RFQ is open. The selected maker can also delete its accepted quote before the confirmation deadline to decline during last look. The response is {}.

Confirm a Quote

PUT /v1/rfqs/{rfqId}/quotes/{quoteId}/confirm The selected maker must confirm before confirmationDeadline. Confirmation changes the quote to QUOTE_STATUS_CONFIRMED and schedules paired order submission. The response is {}.

Statuses

Events and Recovery

RFQAPI.StreamRFQEvents is a live, best-effort gRPC stream. Public RFQ events are visible to participants; quote events are private to the requester and relevant maker. The stream has no replay, gap-free handoff, ordering, or deduplication guarantee. Open the stream for low-latency changes. On startup or reconnect, reconcile durable state with GetRFQs and GetQuotes. See RFQ Events Stream.

See Also

Combos API

Create and read combo instruments

Combos Guide

Maker workflow and quote rules

RFQ Events Stream

Current event payloads and recovery behavior

Authentication

OAuth metadata and required scopes