> ## 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.

# Check parts

> A part list checked for the build quantity, with no files: JLCPCB's stock in about two seconds, then Digi-Key,
Mouser, LCSC and Octopart for what JLCPCB lacks. Parts still checking come back with retry_after_s (also the
Retry-After header): send the same check again then. 240 an hour per key.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/part-checks
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/part-checks:
    post:
      tags:
        - Checks
      summary: Check parts
      description: >-
        A part list checked for the build quantity, with no files: JLCPCB's
        stock in about two seconds, then Digi-Key,

        Mouser, LCSC and Octopart for what JLCPCB lacks. Parts still checking
        come back with retry_after_s (also the

        Retry-After header): send the same check again then. 240 an hour per
        key.
      operationId: part_check_v1_part_checks_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PartCheckRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartCheckReply'
        '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:
    PartCheckRequest:
      properties:
        boards:
          type: integer
          maximum: 100000
          minimum: 1
          title: Boards
          description: How many boards will be built.
        parts:
          anyOf:
            - items:
                $ref: '#/components/schemas/DesignPart'
              type: array
            - type: 'null'
          title: Parts
          description: >-
            The BOM lines (at most 300): reference, quantity per board, and mpn
            with manufacturer, or lcsc, or value with footprint for a resistor,
            capacitor or inductor. digikey, mouser and description help.
        bom_csv:
          anyOf:
            - type: string
            - type: 'null'
          title: Bom Csv
          description: A BOM file's text, instead of parts.
        wait_s:
          type: integer
          maximum: 50
          minimum: 0
          title: Wait S
          description: >-
            Seconds to wait for the distributors' answer. 0 returns JLCPCB's
            answer at once (about two seconds); the default covers most boards.
          default: 20
        itar:
          type: boolean
          title: Itar
          description: >-
            true if the design is ITAR-controlled: it is refused before anything
            is read.
          default: false
      additionalProperties: false
      type: object
      required:
        - boards
      title: PartCheckRequest
      description: A part list (or a BOM file's text) and how many boards will be built.
    PartCheckReply:
      properties:
        ok:
          type: boolean
          title: Ok
        phase:
          type: string
          enum:
            - jlcpcb
            - complete
          title: Phase
          description: 'jlcpcb: JLCPCB''s stock only so far; complete: distributors too.'
        boards:
          type: integer
          title: Boards
        parts:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Parts
          description: >-
            Each part: reference, part, quantity_per_board, verdict (ok, check,
            problem, checking), source, jlcpcb_code, jlcpcb_library, supplier,
            cost_usd (for the whole build), stock, lead_time_days, lifecycle,
            why, similar_part.
        summary:
          additionalProperties: true
          type: object
          title: Summary
        retry_after_s:
          anyOf:
            - type: integer
            - type: 'null'
          title: Retry After S
          description: 'Parts still checking: send the same check again then.'
      additionalProperties: true
      type: object
      required:
        - ok
        - phase
        - boards
        - parts
        - summary
      title: PartCheckReply
    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
    DesignPart:
      properties:
        reference:
          type: string
          title: Reference
        quantity:
          type: integer
          minimum: 1
          title: Quantity
          description: >-
            Number of this component on ONE board, not the total across the
            build. For one chip on each of 10 boards, use quantity=1 and
            boards=10.
        mpn:
          type: string
          title: Mpn
          description: >-
            Exact manufacturer part number supplied by the user or BOM. Do not
            invent or append suffixes.
        manufacturer:
          type: string
          title: Manufacturer
        lcsc:
          type: string
          title: Lcsc
        digikey:
          type: string
          title: Digikey
        mouser:
          type: string
          title: Mouser
        value:
          type: string
          title: Value
        footprint:
          type: string
          title: Footprint
        description:
          type: string
          title: Description
      additionalProperties: false
      type: object
      title: DesignPart
      description: >-
        One BOM line of a board being designed: what the schematic or design
        code says about it.
  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.