> ## Documentation Index
> Fetch the complete documentation index at: https://docs.convallax.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Quote Request

> Open a live quote request. The relay broadcasts trade parameters to market makers and returns a request ID for streaming, polling, and committing.

Open a live quote request to start receiving competitive quotes from market makers. The relay broadcasts the trade parameters to all connected makers over the [quote-request SSE stream](/api-reference/market-maker/quote-stream) and returns a `requestId` that you use to [stream](/api-reference/trading/stream) or [poll](/api-reference/trading/poll-quotes) for quotes and eventually [commit](/api-reference/trading/commit).

Quote requests are long-lived (default 5-minute TTL, configurable via `QUOTE_REQUEST_TTL_MS`) and require no wallet signature — the trader's authorization happens at the on-chain [`fill()`](/api-reference/contracts/fill) step.


## OpenAPI

````yaml api-reference/openapi.json POST /quote-requests
openapi: 3.1.0
info:
  title: Convallax RFQ API
  version: 3.0.0
  description: >-
    REST surface for the Convallax options protocol — a non-custodial
    request-for-quote marketplace for European calls and puts on Polymarket YES
    outcomes, settled on Polygon.


    **Wire format**: JSON. Successful responses include `"success": true`;
    failures return `{ "success": false, "error": "..." }`.


    **Authentication**: Takers (traders) need no API key — authorization happens
    on-chain at `fill()`. Market makers authenticate with a per-MM API key sent
    as `X-API-Key` (or `?apiKey=`).


    **Streaming**: Quote-request and live-pricing streams use Server-Sent Events
    and the post-trade channel uses WebSocket; those are documented in the
    guides and are not part of this request/response reference.
servers:
  - url: https://api.convallax.com
    description: Production
security: []
tags:
  - name: Series
    description: Browse registered option series available for trading.
  - name: Trading
    description: Open quote requests, read live quotes, and commit to the best price.
  - name: Market Maker
    description: >-
      Submit quotes and confirmation signatures. Authenticated with a per-MM API
      key.
  - name: Settlement
    description: Compute TWAP resolution prices and sign settlement attestations.
  - name: Testnet
    description: Polygon Amoy testnet USDC faucet.
  - name: User
    description: >-
      Account profile and self-serve API keys. Authenticated with a Privy access
      token.
paths:
  /quote-requests:
    post:
      tags:
        - Trading
      summary: Create Quote Request
      description: >-
        Open a live quote request. The relay broadcasts the trade parameters to
        all connected market makers over the quote-request SSE stream and
        returns a `requestId` used to stream, poll, and commit. No wallet
        signature is required — the taker's authorization happens on-chain at
        `fill()`.
      operationId: createQuoteRequest
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteRequestInput'
      responses:
        '200':
          description: Quote request created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteRequestCreated'
        '400':
          $ref: '#/components/responses/Error'
components:
  schemas:
    QuoteRequestInput:
      type: object
      required:
        - market
        - option
        - trade
      properties:
        wallet:
          type: string
          nullable: true
          description: >-
            Taker wallet (checksummed). Optional at creation; can be provided at
            commit.
          example: 0xTrader0000000000000000000000000000000000
        market:
          $ref: '#/components/schemas/MarketInput'
        option:
          $ref: '#/components/schemas/OptionInput'
        trade:
          $ref: '#/components/schemas/TradeInput'
    QuoteRequestCreated:
      type: object
      properties:
        success:
          type: boolean
          const: true
        requestId:
          type: string
          example: req-789
        expiresAt:
          type: string
          format: date-time
          example: '2026-06-15T12:05:00.000Z'
        makersConnected:
          type: integer
          description: Makers subscribed to the quote-request stream at broadcast time.
          example: 3
    MarketInput:
      type: object
      required:
        - conditionId
        - yesTokenId
        - question
      properties:
        conditionId:
          type: string
          description: Polymarket condition ID (bytes32 hex).
          example: '0xa4ddc18895cc7b14810283ef8f113939abffd3969c6a0e37f1897110c67e6f73'
        yesTokenId:
          type: string
          description: Polymarket YES CLOB token ID (uint256 as string).
          example: >-
            51508280778202349361616850684455231843716212176724253736363122559269229712002
        question:
          type: string
          example: Will there be a Hantavirus outbreak in 2026?
    OptionInput:
      type: object
      required:
        - strikeBps
        - expiryMs
        - optionType
      properties:
        strikeBps:
          type: number
          description: Strike in basis points of $1 (5–95, step 5).
          example: 50
        expiryMs:
          type: number
          description: Option expiry as a Unix timestamp in milliseconds.
          example: 1735689600000
        optionType:
          description: '`"call"`/`0` for Call, `"put"`/`1` for Put.'
          oneOf:
            - type: string
              enum:
                - call
                - put
            - type: integer
              enum:
                - 0
                - 1
          example: call
    TradeInput:
      type: object
      required:
        - side
      description: >-
        On a buy, the taker submits a USDC budget (`budgetUsd`) and the fill is
        `floor(budgetUsd / price)` whole options, capped by the maker's quoted
        size. On a sell, the taker submits a contract count (`size`).
      properties:
        side:
          type: string
          description: '`"buy"`/`"long"` or `"sell"`/`"short"`.'
          enum:
            - buy
            - sell
            - long
            - short
          example: buy
        budgetUsd:
          type: number
          description: >-
            Buys only. USDC the taker will spend (premium budget). Contracts
            received = `floor(budgetUsd / price)`, capped by the maker's quoted
            size.
          example: 100
        size:
          type: number
          description: Sells only. Number of whole options the taker wants to write.
          example: 10
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          type: string
          description: Human-readable error message.
          example: Quote request not found or expired
  responses:
    Error:
      description: Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'

````