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

> ## Agent Instructions
> The PartFinder API is served at https://api.partfinder.dev. Authenticate with `Authorization: Bearer $PARTFINDER_API_KEY`; create an account at https://console.partfinder.dev/sign-up and pick pay as you go or a monthly or yearly plan (see https://partfinder.dev/pricing), then create a key. Pay as you go starts with 100 free credits, once per person and per company.
> Install the PartFinder agent skill with `npx skills add https://docs.partfinder.dev` (skill file: https://docs.partfinder.dev/skill.md).
> The OpenAPI document at https://api.partfinder.dev/v1/openapi.json is the source of truth for request and response schemas.
> What each call costs and current plans: https://api.partfinder.dev/llms.txt.

# Get a BOM report

> The report for one BOM: a risk average and distribution, the gaps across the BOM, where it is made, and every line with its own score, drivers and current supply. While `bom.status` is `processing` the lines already analyzed are scored and the rest are `pending`; poll until it is `complete`. Each poll counts toward your rate limit. Scores are computed at read time against current disruption events and distributor figures.



## OpenAPI

````yaml https://api.partfinder.dev/v1/openapi.json get /v1/bom/{id}
openapi: 3.1.0
info:
  title: PartFinder API
  version: 1.0.0
  license:
    name: Proprietary
    url: https://partfinder.dev/terms
  description: >-
    Supply-chain intelligence for industrial parts: risk scoring, supply
    availability, datasheets, disruption events, BOM analysis, alternates, part
    search and part comparison. Responses are structured for an AI agent to read
    — every score carries its scale, direction and an interpretation, every
    measure carries its unit, every successful response carries `as_of`, and
    every error carries an `error` code, usually with a `summary` you can relay,
    except a 413 (request body too large), which has no body.
servers:
  - url: https://api.partfinder.dev
security:
  - bearerAuth: []
tags:
  - name: Authentication
    description: Confirm an API key works.
  - name: Parts
    description: 'Research one part: risk, supply, datasheet, events, alternates.'
  - name: BOMs
    description: Analyze a bill of materials line by line.
  - name: Events
    description: >-
      Supply-chain disruptions: events, the countries they hit, and port and
      sea-route activity.
  - name: Search
    description: >-
      Find parts for a part number or a description, with specifications and
      stock.
  - name: Compare
    description: >-
      Put parts side by side on their specifications, with a verdict per
      specification.
  - name: RFQs
    description: Send requests for quote to suppliers and read their replies.
  - name: Keys
    description: Give each of your own customers a key that sees only its own data.
  - name: Webhooks
    description: >-
      Be told when a supplier replies, or a search or a comparison ends, instead
      of polling.
paths:
  /v1/bom/{id}:
    get:
      tags:
        - BOMs
      summary: Get a BOM report
      description: >-
        The report for one BOM: a risk average and distribution, the gaps across
        the BOM, where it is made, and every line with its own score, drivers
        and current supply. While `bom.status` is `processing` the lines already
        analyzed are scored and the rest are `pending`; poll until it is
        `complete`. Each poll counts toward your rate limit. Scores are computed
        at read time against current disruption events and distributor figures.
      operationId: getBom
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The BOM id returned by `POST /v1/bom`.
        - name: country
          in: query
          required: false
          schema:
            type: string
            pattern: ^[A-Za-z]{2}$
          example: SG
          description: >-
            The buyer's country, as a two-letter ISO 3166-1 code. The scores are
            computed for a buyer there, and `scored_for_country` names it.
            Without it the scores are not tied to any buyer location.
      responses:
        '200':
          description: The BOM report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BomReport'
              example:
                as_of: '2026-10-01T12:45:25.731Z'
                summary: >-
                  3 lines: 0 critical, 0 high, 2 medium, 0 low, 1 not scored.
                  Flagged at medium or above: geography on 3 lines, disruption
                  exposure on 1 line, lead-time volatility on 2 lines.
                notice: >-
                  Informational only. Risk scores, stock levels, lead times and
                  alternate-part suggestions may be incomplete, delayed or
                  inaccurate. Independently verify before making procurement,
                  engineering, compliance, safety or sourcing decisions.
                bom:
                  id: fc2b3371-7eb7-48cd-8847-70b2d76b0be8
                  name: Controller board rev C
                  status: complete
                  lines: 3
                  created_at: '2026-09-28T15:49:38.809Z'
                  completed_at: '2026-09-28T15:50:00.022Z'
                  identified: 3
                  unresolved: 0
                scored_for_country: null
                risk:
                  average:
                    value: 29
                    scale: 100
                    direction: higher_is_worse
                    interpretation: Medium. The mean of the 2 scored lines.
                  distribution:
                    critical: 0
                    high: 0
                    medium: 2
                    low: 0
                    not_scored: 1
                  gaps:
                    - kind: no_supplier
                      lines: 2
                      interpretation: >-
                        2 lines name no supplier. A data gap; it counts in the
                        gaps driver.
                countries:
                  - country: Mexico
                    country_code: MX
                    lines: 1
                    share_percent: 33.3
                    worst_tier: medium
                  - country: Malaysia
                    country_code: MY
                    lines: 1
                    share_percent: 33.3
                    worst_tier: medium
                  - country: China
                    country_code: CN
                    lines: 1
                    share_percent: 33.3
                    worst_tier: null
                parts:
                  - line: 1
                    mpn: TPS54331DR
                    manufacturer: Texas Instruments
                    quantity: 100
                    status: resolved
                    notes: []
                    part:
                      identified_mpn: null
                      category: Semiconductors
                      lifecycle: Active
                      manufacturing_country: Mexico
                      manufacturing_country_code: MX
                    risk:
                      composite:
                        value: 31
                        scale: 100
                        direction: higher_is_worse
                        interpretation: >-
                          Medium. Combined from manufacturing geography,
                          disruption exposure, lead-time volatility and sourcing
                          gaps.
                      tier: medium
                      drivers:
                        geography:
                          tier: high
                          interpretation: High. Reflects the risk profile of Mexico.
                        disruption_exposure:
                          tier: medium
                          interpretation: >-
                            Medium. Some exposure to active disruptions. 5
                            events and shipping conditions are listed in
                            `events`.
                        lead_time_volatility:
                          tier: medium
                          interpretation: Medium. Lead times for this part vary somewhat.
                        gaps:
                          tier: low
                          interpretation: Low. No sourcing gap flagged for this line.
                      gap_flags: []
                      events:
                        - kind: port_activity
                          id: null
                          title: >-
                            Ports in Mexico: ship arrivals 21% below the usual
                            level for this time of year
                          root_cause: null
                          country: Mexico
                          severity: null
                          published_date: '2026-09-18T00:00:00.000Z'
                          url: null
                        - kind: news
                          id: 1179
                          title: >-
                            Wacker Chemie may close Tennessee polysilicon plant
                            amid U.S. trade measures
                          root_cause: geopolitical_action
                          country: United States
                          severity: high
                          published_date: '2026-09-04T00:00:00.000Z'
                          url: >-
                            https://www.reuters.com/business/trumps-bid-shield-chip-supply-chain-could-backfire-tennessee-2026-09-04/
                        - kind: sea_route
                          id: null
                          title: >-
                            Panama Canal: ship transits 21% below the usual
                            level for this time of year
                          root_cause: null
                          country: null
                          severity: null
                          published_date: '2026-09-20T00:00:00.000Z'
                          url: null
                        - kind: news
                          id: 1189
                          title: >-
                            China imposes provisional duties on Japanese
                            semiconductor chemical
                          root_cause: regulatory_change
                          country: China
                          severity: medium
                          published_date: '2026-09-09T00:00:00.000Z'
                          url: https://hk.epochtimes.com/news/2026-09-09/80403878
                        - kind: news
                          id: 1166
                          title: >-
                            China imposes helium export controls affecting
                            global high‑tech supply
                          root_cause: regulatory_change
                          country: China
                          severity: high
                          published_date: '2026-07-11T00:00:00.000Z'
                          url: >-
                            https://www.caixinglobal.com/2026-07-11/china-bans-helium-exports-as-global-supply-crunch-hits-chipmaking-gas-102462943.html
                    supply:
                      stock:
                        value: 9215
                        unit: units
                      lead_time_median:
                        value: 94
                        unit: days
                      lead_time_min:
                        value: 84
                        unit: days
                      lead_time_max:
                        value: 106
                        unit: days
                      distributor_count: 2
                      scope: manufacturer
                      distributors:
                        - name: Mouser
                          country: United States
                          country_code: US
                          regions:
                            - Americas
                          subregion: Northern America
                          stock:
                            value: 5941
                            unit: units
                        - name: Farnell
                          country: United Kingdom
                          country_code: GB
                          regions:
                            - Europe
                          subregion: Northern Europe
                          stock:
                            value: 3274
                            unit: units
                  - line: 2
                    mpn: STM32F407VGT6
                    manufacturer: STMicroelectronics
                    quantity: 50
                    status: resolved
                    notes: []
                    part:
                      identified_mpn: null
                      category: Semiconductors
                      lifecycle: Active
                      manufacturing_country: Malaysia
                      manufacturing_country_code: MY
                    risk:
                      composite:
                        value: 26
                        scale: 100
                        direction: higher_is_worse
                        interpretation: >-
                          Medium. Combined from manufacturing geography,
                          disruption exposure, lead-time volatility and sourcing
                          gaps.
                      tier: medium
                      drivers:
                        geography:
                          tier: medium
                          interpretation: Medium. Reflects the risk profile of Malaysia.
                        disruption_exposure:
                          tier: low
                          interpretation: >-
                            Low. Little exposure to active disruptions. 4 events
                            and shipping conditions are listed in `events`.
                        lead_time_volatility:
                          tier: high
                          interpretation: High. Lead times for this part vary a lot.
                        gaps:
                          tier: low
                          interpretation: 'Low. Sourcing gaps on this line: no supplier named.'
                      gap_flags:
                        - no_supplier
                      events:
                        - kind: sea_route
                          id: null
                          title: >-
                            Red Sea / Suez: ship transits 54% below the usual
                            level for this time of year
                          root_cause: null
                          country: null
                          severity: null
                          published_date: '2026-09-20T00:00:00.000Z'
                          url: null
                        - kind: news
                          id: 1179
                          title: >-
                            Wacker Chemie may close Tennessee polysilicon plant
                            amid U.S. trade measures
                          root_cause: geopolitical_action
                          country: United States
                          severity: high
                          published_date: '2026-09-04T00:00:00.000Z'
                          url: >-
                            https://www.reuters.com/business/trumps-bid-shield-chip-supply-chain-could-backfire-tennessee-2026-09-04/
                        - kind: news
                          id: 1189
                          title: >-
                            China imposes provisional duties on Japanese
                            semiconductor chemical
                          root_cause: regulatory_change
                          country: China
                          severity: medium
                          published_date: '2026-09-09T00:00:00.000Z'
                          url: https://hk.epochtimes.com/news/2026-09-09/80403878
                        - kind: news
                          id: 1166
                          title: >-
                            China imposes helium export controls affecting
                            global high‑tech supply
                          root_cause: regulatory_change
                          country: China
                          severity: high
                          published_date: '2026-07-11T00:00:00.000Z'
                          url: >-
                            https://www.caixinglobal.com/2026-07-11/china-bans-helium-exports-as-global-supply-crunch-hits-chipmaking-gas-102462943.html
                    supply:
                      stock:
                        value: 24453
                        unit: units
                      lead_time_median:
                        value: 369
                        unit: days
                      lead_time_min:
                        value: 220
                        unit: days
                      lead_time_max:
                        value: 373
                        unit: days
                      distributor_count: 4
                      scope: manufacturer
                      distributors:
                        - name: Farnell
                          country: United Kingdom
                          country_code: GB
                          regions:
                            - Europe
                          subregion: Northern Europe
                          stock:
                            value: 21050
                            unit: units
                        - name: element14
                          country: Singapore
                          country_code: SG
                          regions:
                            - Asia
                          subregion: South-eastern Asia
                          stock:
                            value: 3174
                            unit: units
                  - line: 3
                    mpn: 6305-2RS
                    manufacturer: SKF
                    quantity: 10
                    status: resolved
                    notes: []
                    part:
                      identified_mpn: null
                      category: Bearings & Linear Guides
                      lifecycle: null
                      manufacturing_country: China
                      manufacturing_country_code: CN
                    risk:
                      composite: null
                      tier: null
                      reason: >-
                        No distributor has stock or lead-time figures for this
                        line, so no overall score is computed.
                      drivers:
                        geography:
                          tier: medium
                          interpretation: Medium. Reflects the risk profile of China.
                        disruption_exposure:
                          tier: low
                          interpretation: >-
                            Low. Little exposure to active disruptions. 1 event
                            or shipping condition is listed in `events`.
                        lead_time_volatility: null
                        gaps:
                          tier: low
                          interpretation: 'Low. Sourcing gaps on this line: no supplier named.'
                      gap_flags:
                        - no_supplier
                      events:
                        - kind: sea_route
                          id: null
                          title: >-
                            Red Sea / Suez: ship transits 54% below the usual
                            level for this time of year
                          root_cause: null
                          country: null
                          severity: null
                          published_date: '2026-09-20T00:00:00.000Z'
                          url: null
                    supply:
                      stock:
                        value: null
                        unit: units
                        reason: No distributor data available for this line.
                      lead_time_median:
                        value: null
                        unit: days
                        reason: No distributor quotes a lead time for this line.
                      lead_time_min:
                        value: null
                        unit: days
                        reason: No distributor quotes a lead time.
                      lead_time_max:
                        value: null
                        unit: days
                        reason: No distributor quotes a lead time.
                      distributor_count: 0
                      scope: null
                      distributors: []
          headers:
            X-RateLimit-Limit:
              description: >-
                Calls allowed in the current window: the minute or the day,
                whichever has fewer calls left.
              schema:
                type: integer
                minimum: 1
            X-RateLimit-Remaining:
              description: Calls left in that window.
              schema:
                type: integer
                minimum: 0
            X-RateLimit-Reset:
              description: Seconds until that window resets.
              schema:
                type: integer
                minimum: 1
        '400':
          description: '`country` is not a country code.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            X-RateLimit-Limit:
              description: >-
                Calls allowed in the current window: the minute or the day,
                whichever has fewer calls left.
              schema:
                type: integer
                minimum: 1
            X-RateLimit-Remaining:
              description: Calls left in that window.
              schema:
                type: integer
                minimum: 0
            X-RateLimit-Reset:
              description: Seconds until that window resets.
              schema:
                type: integer
                minimum: 1
        '401':
          description: Missing, unknown, revoked or expired key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            The caller signed in through an AI app without the permission this
            call needs (`partfinder:read` to read, which includes looking up
            parts, alternates and events and uses credits for those;
            `partfinder:write` to change anything); the error is
            `insufficient_scope`. Or the AI app was disconnected in the console;
            the error is `app_disconnected`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            X-RateLimit-Limit:
              description: >-
                Calls allowed in the current window: the minute or the day,
                whichever has fewer calls left.
              schema:
                type: integer
                minimum: 1
            X-RateLimit-Remaining:
              description: Calls left in that window.
              schema:
                type: integer
                minimum: 0
            X-RateLimit-Reset:
              description: Seconds until that window resets.
              schema:
                type: integer
                minimum: 1
        '404':
          description: >-
            No BOM with that id belongs to your organization (with a key made
            with `POST /v1/keys`, to that customer).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            X-RateLimit-Limit:
              description: >-
                Calls allowed in the current window: the minute or the day,
                whichever has fewer calls left.
              schema:
                type: integer
                minimum: 1
            X-RateLimit-Remaining:
              description: Calls left in that window.
              schema:
                type: integer
                minimum: 0
            X-RateLimit-Reset:
              description: Seconds until that window resets.
              schema:
                type: integer
                minimum: 1
        '429':
          description: >-
            Your organization has used its calls for this minute or this day.
            Wait the number of seconds in `Retry-After`, then retry.
          headers:
            Retry-After:
              description: Seconds until the limit resets.
              schema:
                type: integer
                minimum: 1
            X-RateLimit-Limit:
              description: >-
                Calls allowed in the current window: the minute or the day,
                whichever has fewer calls left.
              schema:
                type: integer
                minimum: 1
            X-RateLimit-Remaining:
              description: Calls left in that window.
              schema:
                type: integer
                minimum: 0
            X-RateLimit-Reset:
              description: Seconds until that window resets.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    BomReport:
      type: object
      properties:
        as_of:
          type: string
          format: date-time
          description: ISO 8601. How current the data in this response is.
        summary:
          type: string
          description: Plain language an agent can relay without re-deriving it.
        notice:
          type: string
          description: Informational-use notice. Always present.
        bom:
          type: object
          properties:
            id:
              type: string
              description: >-
                The BOM id. Use it with `GET /v1/bom/{id}` and `DELETE
                /v1/bom/{id}`.
            name:
              type: string
            status:
              type: string
              enum:
                - processing
                - complete
              description: >-
                `processing` until every line has settled (identified or not);
                then `complete`.
            lines:
              type: integer
              minimum: 0
              description: Lines accepted.
            created_at:
              type: string
              format: date-time
            completed_at:
              anyOf:
                - type: string
                  format: date-time
                - type: 'null'
              description: When every line settled. Null while processing.
            identified:
              type: integer
              minimum: 0
              description: Lines identified, `resolved` and `low_confidence` together.
            unresolved:
              type: integer
              minimum: 0
              description: Lines that could not be identified.
          required:
            - id
            - name
            - status
            - lines
            - created_at
            - completed_at
            - identified
            - unresolved
        scored_for_country:
          description: >-
            The buyer country the scores are computed for, from the `country`
            parameter. Null when no country was sent: the scores are then not
            tied to any buyer location.
          anyOf:
            - type: string
            - type: 'null'
        risk:
          type: object
          properties:
            average:
              anyOf:
                - $ref: '#/components/schemas/Score'
                - type: 'null'
              description: The mean of the scored lines. Null while no line is scored.
            distribution:
              type: object
              properties:
                critical:
                  type: integer
                  minimum: 0
                high:
                  type: integer
                  minimum: 0
                medium:
                  type: integer
                  minimum: 0
                low:
                  type: integer
                  minimum: 0
                not_scored:
                  type: integer
                  minimum: 0
                  description: >-
                    Lines with no score: unresolved, pending, or identified
                    without enough data.
              required:
                - critical
                - high
                - medium
                - low
                - not_scored
            gaps:
              type: array
              items:
                $ref: '#/components/schemas/GapTally'
              description: >-
                How many lines carry each gap. Only kinds present in this BOM
                are listed.
          required:
            - average
            - distribution
            - gaps
        countries:
          type: array
          items:
            $ref: '#/components/schemas/CountryShare'
          description: >-
            Where the BOM is made, most lines first. Lines with no known origin
            are not listed.
        parts:
          type: array
          items:
            $ref: '#/components/schemas/BomLine'
          description: >-
            Every line, in the order submitted. Unresolved lines are present
            with nulls.
      required:
        - as_of
        - summary
        - notice
        - bom
        - scored_for_country
        - risk
        - countries
        - parts
    Error:
      type: object
      properties:
        error:
          type: string
          enum:
            - authentication_required
            - invalid_key
            - invalid_request
            - not_a_specific_part
            - part_not_found
            - verification_unavailable
            - generation_failed
            - bom_too_large
            - bom_not_found
            - bom_columns_not_found
            - event_not_found
            - rate_limited
            - supplier_opted_out
            - send_failed
            - rfq_not_found
            - rfq_bounced
            - message_refused
            - key_not_allowed
            - insufficient_scope
            - app_disconnected
            - key_not_found
            - key_name_taken
            - webhook_endpoint_not_found
            - not_a_parts_query
            - search_not_found
            - compare_not_found
            - credits_exhausted
            - payment_method_required
            - payment_failed
            - usage_limit_reached
          description: >-
            `authentication_required` when no bearer token was sent.
            `invalid_key` when the key or sign-in is unknown, revoked or expired
            — deliberately indistinguishable — or the sign-in names no
            organization you belong to (the `summary` says what to do).
            `invalid_request` when a required parameter is missing.
            `not_a_specific_part` when the input does not identify one specific
            part. `part_not_found` when no supplier lists that part number
            exactly — usually a typo or a partial number.
            `verification_unavailable` when we could not check whether the part
            is real, and so declined to describe it; temporary, safe to retry.
            `generation_failed` when the report could not be produced, or a
            search or a comparison could not be started. `bom_too_large` when
            one call carries more lines than the limit; `reason` states both
            numbers. `bom_not_found` when no BOM with that id belongs to your
            organization (with a key made with `POST /v1/keys`, to that
            customer). `bom_columns_not_found` when an uploaded file has no
            column we can identify as part numbers; `reason` lists the headers
            seen. `event_not_found` when no active event has that id.
            `rate_limited` when your organization has used its calls for this
            minute or this day; wait the seconds in the `Retry-After` header,
            then retry. `supplier_opted_out` when the supplier asked not to
            receive requests for quote from you, or from anyone through
            PartFinder. `send_failed` when the email could not be sent; nothing
            was stored, safe to retry. `rfq_not_found` when no request for quote
            with that id belongs to your organization (with a key made with
            `POST /v1/keys`, to that customer). `rfq_bounced` when the
            supplier's address could not receive the request; send a new request
            for quote to a working address. `message_refused` when the text was
            not sent; `summary` says what to change before sending again.
            `key_not_allowed` when a key that belongs to one of your customers
            calls an endpoint only your organization's own keys may call, or a
            caller signed in through an AI app manages keys or webhooks.
            `insufficient_scope` when an AI app signed in without the permission
            the call needs (`partfinder:read` to read, which includes looking up
            parts, alternates and events and uses credits for those;
            `partfinder:write` to change anything); the `summary` names it, and
            connecting the app again with it allowed fixes it.
            `app_disconnected` when the AI app the caller signed in through was
            disconnected in the console; signing in again does not help,
            allowing the app again in the console does. `key_not_found` when no
            live end-customer key with that id belongs to your organization.
            `key_name_taken` when a key with that name already exists in your
            organization, revoked keys included. `webhook_endpoint_not_found`
            when no webhook endpoint with that id belongs to your organization
            (with a key made with `POST /v1/keys`, to that customer).
            `not_a_parts_query` when a search query is not about a part; send a
            part number or describe the part. `search_not_found` when no search
            with that id belongs to your organization (with a key made with
            `POST /v1/keys`, to that customer). `compare_not_found` when no
            comparison with that id belongs to your organization (with a key
            made with `POST /v1/keys`, to that customer). `credits_exhausted`
            when your plan's credits for this month are used up; this request
            was not run and nothing was charged. Upgrade the plan at
            `billing_url`, then retry. `payment_method_required` when your
            organization is on pay as you go with no payment method; this
            request was not run and nothing was charged. Add a payment method or
            choose a plan at `billing_url`, then retry. `payment_failed` when
            pay as you go is paused because the last payment failed; this
            request was not run and nothing was charged. Update the payment
            method at `billing_url`, then retry. `usage_limit_reached` when your
            organization, on pay as you go, has reached its limit for unpaid
            usage; this request was not run and nothing was charged. Calls
            resume once the current payment goes through; follow it at
            `billing_url`. With a key made with `POST /v1/keys`, these four
            carry no `billing_url`: the `summary` asks your customer to contact
            your organization.
        summary:
          description: >-
            One sentence you can relay to a user as-is, the same as `summary` on
            a successful response. Present whenever there is something useful to
            say about what went wrong.
          type: string
        reason:
          description: The specific detail behind the error.
          type: string
        billing_url:
          description: >-
            On `credits_exhausted`, `payment_method_required`, `payment_failed`
            and `usage_limit_reached`: the PartFinder console Billing page,
            where your organization manages its plan and payment method. Absent
            for a key made with `POST /v1/keys`, and for an organization whose
            plan is set by its contract.
          type: string
          format: uri
        did_you_mean:
          description: >-
            Real part numbers to retry with. On `not_a_specific_part` they are
            parts of the kind you described; on `part_not_found` they are the
            listed part numbers your input is a prefix of, so `TPS5433` returns
            TPS54331, TPS54332 and so on. Absent when there is nothing to
            suggest. Every entry is a real part number, never a guess.
          type: array
          items:
            type: string
      required:
        - error
    Score:
      type: object
      properties:
        value:
          type: number
        scale:
          type: number
          description: The maximum, e.g. 100 for a 0-100 score.
        direction:
          type: string
          enum:
            - higher_is_worse
            - higher_is_better
        interpretation:
          type: string
          description: 'One line of plain language: what this number means.'
      required:
        - value
        - scale
        - direction
        - interpretation
    GapTally:
      type: object
      properties:
        kind:
          type: string
          enum:
            - single_source
            - no_supplier
            - concentration_risk
            - high_risk_region
            - lifecycle_risk
          description: >-
            `single_source`: the only manufacturer for its category in this BOM.
            `no_supplier`: no supplier named on the line; it counts in the gaps
            driver. `concentration_risk`: a large share of the BOM is made in
            one country. `high_risk_region`: made in a high-exposure country.
            `lifecycle_risk`: end of life, obsolete, or not recommended for new
            designs.
        lines:
          type: integer
          minimum: 0
        interpretation:
          type: string
      required:
        - kind
        - lines
        - interpretation
    CountryShare:
      type: object
      properties:
        country:
          type: string
        country_code:
          description: >-
            ISO 3166-1 alpha-2 code of `country`. Kosovo is `XK`, the code in
            common use for it.
          anyOf:
            - type: string
            - type: 'null'
        lines:
          type: integer
          minimum: 0
        share_percent:
          type: number
          description: Share of ALL lines in the BOM, unresolved included, 0-100.
        worst_tier:
          anyOf:
            - type: string
              enum:
                - low
                - medium
                - high
                - critical
            - type: 'null'
          description: >-
            The highest tier among this country's scored lines. Null when none
            of them is scored.
      required:
        - country
        - country_code
        - lines
        - share_percent
        - worst_tier
    BomLine:
      type: object
      properties:
        line:
          type: integer
          minimum: 1
          description: Position in the BOM as submitted, starting at 1.
        mpn:
          type: string
          description: The part number as submitted.
        manufacturer:
          description: As submitted, or as identified when the BOM did not name one.
          anyOf:
            - type: string
            - type: 'null'
        quantity:
          anyOf:
            - type: integer
              exclusiveMinimum: 0
            - type: 'null'
          description: >-
            Units of this line in the build, as submitted. Null when none was
            given.
        status:
          type: string
          enum:
            - resolved
            - low_confidence
            - unresolved
            - pending
          description: >-
            `resolved` when the part was identified with confidence,
            `low_confidence` when identified tentatively, `unresolved` when it
            could not be identified, `pending` while it is still being worked.
        notes:
          type: array
          items:
            $ref: '#/components/schemas/DataNote'
          description: >-
            Where supplier catalogues disagree with what was submitted for this
            line. The submitted values are kept as they are. Empty when there is
            nothing to note.
        part:
          type: object
          properties:
            identified_mpn:
              description: >-
                The part number as identified, when it differs from the one
                submitted.
              anyOf:
                - type: string
                - type: 'null'
            category:
              description: >-
                The broad class of part, e.g. "Semiconductors". `GET /v1/parts`
                gives the specific type, e.g. "DC-DC Buck Converter".
              anyOf:
                - type: string
                - type: 'null'
            lifecycle:
              anyOf:
                - type: string
                  enum:
                    - Active
                    - Mature
                    - NRND
                    - EOL
                    - Obsolete
                - type: 'null'
            manufacturing_country:
              anyOf:
                - type: string
                - type: 'null'
            manufacturing_country_code:
              description: >-
                ISO 3166-1 alpha-2 code of `manufacturing_country`. Kosovo is
                `XK`, the code in common use for it.
              anyOf:
                - type: string
                - type: 'null'
          required:
            - identified_mpn
            - category
            - lifecycle
            - manufacturing_country
            - manufacturing_country_code
        risk:
          type: object
          properties:
            composite:
              anyOf:
                - $ref: '#/components/schemas/Score'
                - type: 'null'
              description: >-
                Combined from the drivers below. Null when the line could not be
                identified, or when no distributor has stock or lead-time
                figures for it; `reason` says which.
            tier:
              anyOf:
                - type: string
                  enum:
                    - low
                    - medium
                    - high
                    - critical
                - type: 'null'
              description: The band `composite` falls in. Null when composite is null.
            reason:
              description: Present only when composite is null.
              type: string
            drivers:
              type: object
              properties:
                geography:
                  anyOf:
                    - $ref: '#/components/schemas/DriverBand'
                    - type: 'null'
                  description: >-
                    Risk carried by the country the part is made in. Null when
                    the origin is not known.
                disruption_exposure:
                  anyOf:
                    - $ref: '#/components/schemas/DriverBand'
                    - type: 'null'
                  description: >-
                    Exposure to active disruption events touching this line's
                    category or origin.
                lead_time_volatility:
                  anyOf:
                    - $ref: '#/components/schemas/DriverBand'
                    - type: 'null'
                  description: >-
                    Instability of quoted lead times. Null when no lead time is
                    quoted.
                gaps:
                  anyOf:
                    - $ref: '#/components/schemas/DriverBand'
                    - type: 'null'
                  description: >-
                    Weaknesses in how this BOM sources the line; the gaps found
                    are listed in `gap_flags`.
              required:
                - geography
                - disruption_exposure
                - lead_time_volatility
                - gaps
              description: >-
                What drives this line's score, each as a band and a sentence.
                Null when the driver has no data.
            gap_flags:
              type: array
              items:
                type: string
                enum:
                  - single_source
                  - no_supplier
                  - concentration_risk
                  - high_risk_region
                  - lifecycle_risk
                description: >-
                  `single_source`: the only manufacturer for its category in
                  this BOM. `no_supplier`: no supplier named on the line; it
                  counts in the gaps driver. `concentration_risk`: a large share
                  of the BOM is made in one country. `high_risk_region`: made in
                  a high-exposure country. `lifecycle_risk`: end of life,
                  obsolete, or not recommended for new designs.
            events:
              type: array
              items:
                type: object
                properties:
                  kind:
                    type: string
                    enum:
                      - news
                      - port_activity
                      - sea_route
                    description: >-
                      `news`: a reported disruption. `port_activity`: ship
                      traffic at the ports of a country this line is made in or
                      sold from is well under its usual level. `sea_route`: the
                      same for a sea passage this line's trade uses.
                  id:
                    anyOf:
                      - type: integer
                        minimum: 0
                      - type: 'null'
                    description: The event id for `news`; null otherwise.
                  title:
                    type: string
                  root_cause:
                    anyOf:
                      - type: string
                        enum:
                          - natural_disaster
                          - geopolitical_action
                          - regulatory_change
                          - labor_disruption
                          - industrial_incident
                          - infrastructure_failure
                          - cyber_attack
                      - type: 'null'
                    description: >-
                      What kind of cause lies behind a `news` event, as on `GET
                      /v1/events`. Null otherwise.
                  country:
                    anyOf:
                      - type: string
                      - type: 'null'
                  severity:
                    anyOf:
                      - type: string
                        enum:
                          - low
                          - medium
                          - high
                          - critical
                      - type: 'null'
                    description: >-
                      For `news`: how serious the event is in itself, not its
                      effect on this line. Null for `port_activity` and
                      `sea_route`, whose `title` states the slowdown.
                  published_date:
                    anyOf:
                      - type: string
                        format: date-time
                      - type: 'null'
                    description: >-
                      For `news`, when it was reported; otherwise the last day
                      of the week it covers.
                  url:
                    anyOf:
                      - type: string
                        format: uri
                      - type: 'null'
                    description: >-
                      A source article for `news`; may be null. Always null
                      otherwise.
                required:
                  - kind
                  - id
                  - title
                  - root_cause
                  - country
                  - severity
                  - published_date
                  - url
              description: >-
                The current shipping conditions and up to five reported events
                that most affect this line's `disruption_exposure`, strongest
                first: ordered by effect on this line's score, not by
                `severity`.
          required:
            - composite
            - tier
            - drivers
            - gap_flags
            - events
          description: >-
            This line's risk within this BOM, which includes how the rest of the
            BOM sources it. `GET /v1/parts` scores a part on its own, with
            different drivers, so the same part can score differently on the two
            endpoints.
        supply:
          type: object
          properties:
            stock:
              $ref: '#/components/schemas/Measure'
            lead_time_median:
              $ref: '#/components/schemas/Measure'
            lead_time_min:
              $ref: '#/components/schemas/Measure'
              description: >-
                The 25th percentile of quoted lead times: the short end of the
                middle half of quotes. Null when no distributor quotes a lead
                time, or when the middle half of quotes is a single figure;
                `reason` says which.
            lead_time_max:
              $ref: '#/components/schemas/Measure'
              description: >-
                The 75th percentile of quoted lead times: the long end of the
                middle half of quotes. Null when no distributor quotes a lead
                time, or when the middle half of quotes is a single figure;
                `reason` says which.
            distributor_count:
              type: integer
              minimum: 0
              description: >-
                Distributors holding stock of this part. `distributors` shows
                only some of them.
            scope:
              anyOf:
                - type: string
                  enum:
                    - manufacturer
                    - all_manufacturers
                    - other_manufacturers
                - type: 'null'
              description: >-
                Whose listings the figures above count. `manufacturer`: this
                line's manufacturer, the one submitted or, when none was, the
                one identified for the part number. `all_manufacturers`: no
                manufacturer was submitted or identified, so every maker of this
                part number. `other_manufacturers`: none is listed for the named
                manufacturer, so these are other makers of the same part number.
                Null when there are no figures.
            distributors:
              type: array
              items:
                $ref: '#/components/schemas/Distributor'
              description: >-
                The distributors holding the most stock, largest first. Not
                every distributor is listed: `distributor_count` is the total.
                Rows can share the same inventory, so do not add them up;
                `stock` is the total.
          required:
            - stock
            - lead_time_median
            - lead_time_min
            - lead_time_max
            - distributor_count
            - scope
            - distributors
      required:
        - line
        - mpn
        - manufacturer
        - quantity
        - status
        - notes
        - part
        - risk
        - supply
    DataNote:
      type: object
      properties:
        kind:
          type: string
          enum:
            - manufacturer_not_listed
            - part_not_listed
            - part_number_identified
            - part_number_needed
          description: >-
            `manufacturer_not_listed`: the manufacturer given is not among the
            makers distributors list for this part number. `part_not_listed`: no
            distributor lists this part number. `part_number_identified`: the
            line was analyzed under a different part number than the one
            submitted. `part_number_needed`: what was submitted is not a
            manufacturer part number that can be identified, so the line is not
            scored; the `summary` says where to add one (the spreadsheet cell
            for an uploaded file).
        summary:
          type: string
          description: One sentence describing what was found, to relay as written.
        suggestions:
          type: array
          items:
            type: string
          description: >-
            For `manufacturer_not_listed`, the makers distributors list for this
            part number, most listed first. For `part_not_listed`, real part
            numbers that begin with the one submitted. For
            `part_number_identified`, the part number the line was analyzed as.
            For `part_number_needed`, a part number the line may refer to, to be
            confirmed before use. May be empty.
      required:
        - kind
        - summary
        - suggestions
    DriverBand:
      type: object
      properties:
        tier:
          anyOf:
            - type: string
              enum:
                - low
                - medium
                - high
                - critical
            - type: 'null'
          description: >-
            The band this driver falls in. Null when there is no data for it;
            `interpretation` says why.
        interpretation:
          type: string
          description: One line of plain language about this driver for this part.
      required:
        - tier
        - interpretation
    Measure:
      type: object
      properties:
        value:
          anyOf:
            - type: number
            - type: 'null'
        unit:
          type: string
        reason:
          description: Present only when value is null.
          type: string
      required:
        - value
        - unit
    Distributor:
      type: object
      properties:
        name:
          type: string
        country:
          description: The distributor's country. Null when it is not a single country.
          anyOf:
            - type: string
            - type: 'null'
        country_code:
          description: >-
            ISO 3166-1 alpha-2 code of `country`. Kosovo is `XK`, the code in
            common use for it.
          anyOf:
            - type: string
            - type: 'null'
        regions:
          type: array
          items:
            type: string
            enum:
              - Africa
              - Americas
              - Asia
              - Europe
              - Oceania
          description: >-
            The regions this listing serves: the region of `country` when a
            country is known, otherwise the regions the distributor states for
            this storefront. Not where the part is made. Empty when no region is
            stated. These are the UN geographic regions, not the region values
            of `GET /v1/events`; to find events affecting a distributor, filter
            events by its `country_code`.
        subregion:
          anyOf:
            - type: string
              enum:
                - Australia and New Zealand
                - Central Asia
                - Eastern Asia
                - Eastern Europe
                - Latin America and the Caribbean
                - Melanesia
                - Micronesia
                - Northern Africa
                - Northern America
                - Northern Europe
                - Polynesia
                - South-eastern Asia
                - Southern Asia
                - Southern Europe
                - Sub-Saharan Africa
                - Western Asia
                - Western Europe
            - type: 'null'
          description: >-
            The UN sub-region of `country` (for example Western Asia). Not where
            the part is made. Null when no country is known. These are UN
            geographic sub-regions, not the region values of `GET /v1/events`;
            to find events affecting a distributor, filter events by its
            `country_code`.
        stock:
          $ref: '#/components/schemas/Measure'
      required:
        - name
        - country
        - country_code
        - regions
        - subregion
        - stock
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An API key created in the PartFinder console at
        https://console.partfinder.dev, or a customer key created with `POST
        /v1/keys`. Send as `Authorization: Bearer <key>`. Revocation takes
        effect within approximately one minute.

````

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