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

# Poll a quote request

> A quote request from POST /v1/quotes: 202 while it prices, then exactly what POST /v1/quotes would have
answered (200 with the quote, or the error).



## OpenAPI

````yaml /api-reference/openapi.json get /v1/quote-requests/{request_id}
openapi: 3.1.0
info:
  title: ProvenMetal API
  version: 1.0.0
  description: >-
    Everything the ProvenMetal MCP does, over HTTP with an API key: upload a
    design, get a live JLCPCB quote and checkout link, follow it to delivery,
    pay with saved details, and check parts and designs. Formal quotes for any
    fab or assembler are under Orders.
servers:
  - url: https://api.provenmetal.com
security:
  - ApiKey: []
tags:
  - name: Uploads
  - name: Quotes
  - name: Saved details
  - name: Checks
  - name: Buy links
  - name: Orders
  - name: Account
paths:
  /v1/quote-requests/{request_id}:
    get:
      tags:
        - Quotes
      summary: Poll a quote request
      description: >-
        A quote request from POST /v1/quotes: 202 while it prices, then exactly
        what POST /v1/quotes would have

        answered (200 with the quote, or the error).
      operationId: get_quote_request_v1_quote_requests__request_id__get
      parameters:
        - name: request_id
          in: path
          required: true
          schema:
            type: string
            maxLength: 64
            title: Request Id
        - name: wait_s
          in: query
          required: false
          schema:
            type: integer
            maximum: 150
            minimum: 0
            description: Seconds to wait for it to finish.
            default: 0
            title: Wait S
          description: Seconds to wait for it to finish.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteReply'
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PendingQuoteReply'
          description: Accepted
        '422':
          description: >-
            A field was refused, or the design needs an answer first
            (needs_details...)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReply'
        4XX:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReply'
          description: Client Error
        5XX:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReply'
          description: Server Error
components:
  schemas:
    QuoteReply:
      properties:
        ok:
          type: boolean
          title: Ok
        mode:
          type: string
          enum:
            - instant
            - review
          title: Mode
          description: >-
            instant: a live price the customer pays at checkout_url. review:
            ProvenMetal's team quotes it (custom options, or parts that couldn't
            be priced); the customer requests it at checkout_url.
        quote_id:
          type: string
          title: Quote Id
          description: >-
            64 hex characters: GET /v1/quotes/{quote_id} reports where it
            stands.
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Request Id
          description: The quote request that made it.
        checkout_url:
          type: string
          title: Checkout Url
        quantity:
          type: integer
          title: Quantity
        total:
          anyOf:
            - type: string
            - type: 'null'
          title: Total
          description: Total in USD, delivered, with tax (instant). null for review.
        per_board:
          anyOf:
            - type: string
            - type: 'null'
          title: Per Board
        tax:
          anyOf:
            - type: string
            - type: 'null'
          title: Tax
        currency:
          anyOf:
            - type: string
            - type: 'null'
          title: Currency
          description: 'instant: USD.'
        total_cents:
          anyOf:
            - type: integer
            - type: 'null'
          title: Total Cents
          description: 'instant: the total in cents.'
        per_board_cents:
          anyOf:
            - type: integer
            - type: 'null'
          title: Per Board Cents
        tax_cents:
          anyOf:
            - type: integer
            - type: 'null'
          title: Tax Cents
        lines:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Lines
          description: 'instant: what the total is made of, each {label, cents}.'
        board_details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Board Details
          description: >-
            instant: the board as priced (layers, width_mm, height_mm,
            thickness_mm, copper_oz, inner_copper_oz, surface_finish,
            solder_mask, material).
        assembled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Assembled
        lead_time:
          anyOf:
            - type: string
            - type: 'null'
          title: Lead Time
          description: Build time.
        delivery:
          anyOf:
            - type: string
            - type: 'null'
          title: Delivery
          description: From payment to the door, build included.
        includes:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Includes
          description: The total's lines, as words.
        board:
          anyOf:
            - type: string
            - type: 'null'
          title: Board
          description: The board in one line.
        board_image_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Board Image Url
          description: A PNG of the board.
        delivery_saved:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Delivery Saved
          description: Checkout opens with the delivery details already saved.
        saved_details:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Saved Details
          description: >-
            The email in ship_to has a saved card and address: the customer can
            pay through /saved/code, /saved/verify and /saved/pay after saying
            yes.
        unpriced_parts:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Unpriced Parts
          description: >-
            review: each part that couldn't be priced, with why and what was
            searched, and any similar_part to offer.
        picked_parts:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Picked Parts
          description: 'staff_picks_parts: the parts ProvenMetal chose.'
        requested_substitutions:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Requested Substitutions
        custom_quote_reasons:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Custom Quote Reasons
          description: 'review: why it needs ProvenMetal''s team.'
        fabrication_quote:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Fabrication Quote
          description: >-
            review of an assembly: an instant price for the bare boards alone,
            with its own checkout_url.
        notes:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Notes
        expires_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Expires At
        next:
          anyOf:
            - type: string
            - type: 'null'
          title: Next
          description: What to do next, in words to relay.
      additionalProperties: true
      type: object
      required:
        - ok
        - mode
        - quote_id
        - checkout_url
        - quantity
      title: QuoteReply
    PendingQuoteReply:
      properties:
        ok:
          type: boolean
          title: Ok
        status:
          type: string
          const: pending
          title: Status
        request_id:
          type: string
          title: Request Id
        poll_url:
          type: string
          title: Poll Url
          description: GET it (optionally with wait_s) for the result.
        retry_after_s:
          type: integer
          title: Retry After S
        elapsed_s:
          type: integer
          title: Elapsed S
        progress:
          type: string
          title: Progress
          description: What the quote is doing now.
      additionalProperties: true
      type: object
      required:
        - ok
        - status
        - request_id
        - poll_url
        - retry_after_s
        - elapsed_s
        - progress
      title: PendingQuoteReply
    ErrorReply:
      properties:
        ok:
          type: boolean
          const: false
          title: Ok
          default: false
        error:
          type: string
          title: Error
          description: >-
            The MCP's error code, for example needs_details, rate_limited or
            no_files.
        message:
          type: string
          title: Message
          description: What went wrong and what to do, in words to relay.
        questions:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Questions
          description: >-
            needs_details: each open question with its option, choices and usual
            answer. Answer them and send the same quote again with those fields.
        known:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Known
          description: 'needs_details: what the files already said.'
        parts:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Parts
          description: >-
            needs_part_numbers (and needs_details): the BOM lines to name
            exactly.
        off_board_parts:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Off Board Parts
          description: BOM lines with no pick-and-place position.
        retry_after_s:
          anyOf:
            - type: integer
            - type: 'null'
          title: Retry After S
          description: 'rate_limited: seconds to wait. Also in the Retry-After header.'
        checkout_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Checkout Url
          description: >-
            card_declined / authentication_required: where the customer pays
            instead.
        fields:
          anyOf:
            - items:
                additionalProperties:
                  type: string
                type: object
              type: array
            - type: 'null'
          title: Fields
          description: 'invalid_request: each field that was refused and why.'
      additionalProperties: true
      type: object
      required:
        - error
        - message
      title: ErrorReply
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Your ProvenMetal API key (`pm_live_...`). `Authorization: Bearer <key>`
        also works.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.