> ## Documentation Index > Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt > Use this file to discover all available pages before exploring further. # Submit a quote > Submit a signed maker quote for an active RFQ. Requires CLOB L2 authentication for the maker role. REST does not assign a quote ID — generate `quote_id` client-side. ## OpenAPI ````yaml /api-spec/combos-rfq-openapi.yaml post /v1/maker/quotes openapi: 3.1.0 info: title: Polymarket Combinatorial RFQ API description: > REST API for the combinatorial RFQ (Request for Quote) system. This spec covers the publicly documented endpoints used by quoters (market makers): the combo-market catalog and the authenticated maker commands for submitting, cancelling, and confirming quotes. Conventions: - All `*_e6` fields are six-decimal fixed-point values encoded as **strings** to avoid number precision issues. - All timestamps are **Unix milliseconds** (integer); zero/omitted means unset. - Errors return an HTTP status code with a body of the form `{ "error": "..." }`. license: name: MIT identifier: MIT version: 1.0.0 servers: - url: https://combos-rfq-api.polymarket.com description: Production combinatorial RFQ API security: [] tags: - name: Combo Markets description: Public catalog of markets that can be used as combo legs - name: Maker description: Authenticated quoter (maker) commands paths: /v1/maker/quotes: post: tags: - Maker summary: Submit a quote description: | Submit a signed maker quote for an active RFQ. Requires CLOB L2 authentication for the maker role. REST does not assign a quote ID — generate `quote_id` client-side. operationId: submitMakerQuote requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Quote' example: quote_id: quote_ rfq_id: rfq_ signer_address: 0xYourSigner maker_address: 0xYourQuoterWallet signature_type: 0 price_e6: '450000' size_e6: '1000000' signed_order: salt: maker: 0xYourQuoterWallet signer: 0xYourSigner tokenId: makerAmount: takerAmount: side: 0 signatureType: 0 timestamp: metadata: >- 0x0000000000000000000000000000000000000000000000000000000000000000 builder: >- 0x0000000000000000000000000000000000000000000000000000000000000000 signature: 0x... responses: '200': description: Current RFQ snapshot after the quote was accepted content: application/json: schema: $ref: '#/components/schemas/RFQSnapshot' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '503': $ref: '#/components/responses/ServiceUnavailable' security: - polyApiKey: [] polyAddress: [] polySignature: [] polyPassphrase: [] polyTimestamp: [] components: schemas: Quote: type: object description: A signed maker quote. properties: quote_id: type: string description: Maker-generated quote ID (required for REST submissions). example: quote_ rfq_id: type: string description: RFQ ID from the `RFQ_REQUEST`. example: rfq_ auth_address: type: string description: Derived from the authenticated session; ignored if provided. readOnly: true signer_address: type: string example: 0xYourSigner maker_address: type: string example: 0xYourQuoterWallet signature_type: $ref: '#/components/schemas/SignatureType' price_e6: type: string description: Quote price in six-decimal fixed-point units (must be positive). example: '450000' size_e6: type: string description: > Fillable share count in six-decimal fixed-point units (must be positive). Note this differs from the request's size field, which may be notional or shares. example: '1000000' valid_until: type: integer format: int64 description: Optional quote expiry in Unix milliseconds. signed_order: $ref: '#/components/schemas/ExchangeV3Order' received_at: type: integer format: int64 description: Server-assigned receipt time in Unix milliseconds. readOnly: true required: - quote_id - rfq_id - signer_address - maker_address - signature_type - price_e6 - size_e6 - signed_order RFQSnapshot: type: object description: Point-in-time view of an RFQ and its competition/confirmation windows. properties: request: $ref: '#/components/schemas/RFQRequest' status: $ref: '#/components/schemas/RFQStatus' competition_started_at: type: integer format: int64 description: Unix milliseconds. competition_ends_at: type: integer format: int64 description: Unix milliseconds. confirmation_started_at: type: integer format: int64 description: Unix milliseconds. confirmation_ends_at: type: integer format: int64 description: Unix milliseconds. quote_id: type: string bundle: $ref: '#/components/schemas/FillBundle' maker_confirmations: type: array items: $ref: '#/components/schemas/MakerConfirmationSnapshot' required: - request - status SignatureType: type: integer description: | CLOB signature type: - `0` EOA - `1` POLY_PROXY - `2` GNOSIS_SAFE - `3` POLY_1271 enum: - 0 - 1 - 2 - 3 example: 0 ExchangeV3Order: type: object description: >- Signed Exchange v3 order. Combinatorial RFQ trades settle through Exchange v3. properties: salt: type: string description: Order salt (uint256 as a decimal string) maker: type: string description: Wallet that funds the order example: 0xYourQuoterWallet signer: type: string description: Address that signs the order example: 0xYourSigner tokenId: type: string description: YES or NO combo position ID (uint256 as a decimal string) makerAmount: type: string description: >- Amount the maker pays, in six-decimal base units (uint256 as a string) takerAmount: type: string description: >- Amount the maker receives, in six-decimal base units (uint256 as a string) side: type: integer description: Order side — `0` BUY, `1` SELL enum: - 0 - 1 signatureType: $ref: '#/components/schemas/SignatureType' timestamp: type: string description: Order timestamp in Unix seconds (as a string) metadata: type: string description: 32-byte hex field; defaults to the zero value example: '0x0000000000000000000000000000000000000000000000000000000000000000' builder: type: string description: 32-byte hex field; defaults to the zero value example: '0x0000000000000000000000000000000000000000000000000000000000000000' signature: type: string description: EIP-712 signature over the order example: 0x... required: - salt - maker - signer - tokenId - makerAmount - takerAmount - side - signatureType - timestamp - signature RFQRequest: type: object description: The RFQ request as stored by the engine. properties: rfq_id: type: string auth_address: type: string signer_address: type: string maker_address: type: string signature_type: $ref: '#/components/schemas/SignatureType' requestor_public_id: type: string leg_position_ids: type: array items: type: string condition_id: type: string yes_position_id: type: string no_position_id: type: string direction: $ref: '#/components/schemas/Direction' side: $ref: '#/components/schemas/Side' requested_size: $ref: '#/components/schemas/RequestedSize' created_at: type: integer format: int64 description: Creation time in Unix milliseconds. required: - rfq_id - leg_position_ids - direction - side RFQStatus: type: string description: Lifecycle status of the RFQ enum: - CREATED - COLLECTING_QUOTES - AWAITING_REQUESTER_ACCEPTANCE - AWAITING_MAKER_CONFIRMATION - EXECUTING - FILLED - FAILED - EXPIRED - CANCELED - REJECTED FillBundle: type: object description: The selected executable bundle of maker allocations. properties: requested_shares_e6: type: string description: Requested share size in six-decimal fixed-point units. requested_notional_e6: type: string description: Requested notional in six-decimal fixed-point units (BUY RFQs only). blended_price_e6: type: string description: Blended bundle price in six-decimal fixed-point units. allocations: type: array items: $ref: '#/components/schemas/FillAllocation' required: - requested_shares_e6 - blended_price_e6 - allocations MakerConfirmationSnapshot: type: object properties: quote_id: type: string signer_address: type: string maker_address: type: string decision: type: string enum: - CONFIRM - DECLINE - TIMED_OUT reason: type: string responded_at: type: integer format: int64 description: Response time in Unix milliseconds. required: - quote_id - signer_address - maker_address ErrorResponse: type: object properties: error: type: string description: Human-readable error detail required: - error Direction: type: string description: Requester trade direction enum: - BUY - SELL Side: type: string description: Combinatorial position side. Currently only `YES` is supported. enum: - 'YES' - 'NO' RequestedSize: type: object description: Requested RFQ size and unit properties: unit: type: string description: > `notional` for requester BUY RFQs and `shares` for requester SELL RFQs. enum: - notional - shares value_e6: type: string description: Six-decimal fixed-point value encoded as a string. example: '1000000' required: - unit - value_e6 FillAllocation: type: object properties: maker_quote_id: type: string signer_address: type: string maker_address: type: string size_e6: type: string description: >- Accepted fill size for this maker quote, in six-decimal fixed-point units. price_e6: type: string description: Fill price in six-decimal fixed-point units. received_at: type: integer format: int64 description: Receipt time in Unix milliseconds. required: - maker_quote_id - signer_address - maker_address - size_e6 - price_e6 responses: BadRequest: description: >- Invalid request (malformed JSON, invalid parameters, or failed validation) content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: invalid quote Unauthorized: description: Missing or invalid CLOB L2 authentication content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: unauthenticated Forbidden: description: >- Authenticated identity does not match the request, or role is not allowed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: auth address mismatch NotFound: description: The referenced RFQ is not active or no longer exists content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: unknown rfq Conflict: description: The RFQ is not in a state that accepts this command content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: competition window closed TooManyRequests: description: Rate limited content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: rate limited ServiceUnavailable: description: An RFQ service dependency is temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: error: service unavailable securitySchemes: polyApiKey: type: apiKey in: header name: POLY_API_KEY description: CLOB API key polyAddress: type: apiKey in: header name: POLY_ADDRESS description: Wallet address associated with the API key polySignature: type: apiKey in: header name: POLY_SIGNATURE description: HMAC-SHA256 signature of the request polyPassphrase: type: apiKey in: header name: POLY_PASSPHRASE description: CLOB API key passphrase polyTimestamp: type: apiKey in: header name: POLY_TIMESTAMP description: Unix timestamp of the request ````