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

# Retrieve a part by id

> Retrieves a single part from the supplier's catalog.



## OpenAPI

````yaml /openapi/partners.json get /v1/partners/inventory/parts/{id}
openapi: 3.1.0
info:
  title: OpenWrench Internal Teams API
  version: 1.0.0
  description: >-
    External partners API for OpenWrench supplier inventory: purchase requests,
    purchase orders, receipts, parts, equipment types, vendors, stock locations,
    per-stock-location inventory, and work order part/equipment usage.


    ## Authentication

    Every request must include an API key in the `X-API-KEY` header. Requests
    with a missing or invalid key receive `401 Unauthorized`. All data is scoped
    to the supplier company/facility of the contact the API key belongs to.


    ## Rate limiting

    Each API key is limited to 10 requests per 20-second window. Requests beyond
    that receive `429 Too Many Requests`.


    ## Response envelope

    Single-entity responses are wrapped as `{ "type": "<EntityName>", "data": {
    ... }, "status": "ok" }`. List responses are wrapped as `{ "type":
    "<EntityName>", "data": [ ... ], "count": <total>, "status": "ok" }` where
    `count` is the total number of matching records. Count endpoints return `{
    "type": "Count", "data": <integer>, "status": "ok" }`. Errors are returned
    as `{ "message": "...", "type": "<ExceptionType>", "status": "error",
    "traceId": "..." }` with HTTP status 400 (bad input), 401 (missing/invalid
    key), 404 (not found), or 429 (rate limited).


    ## Pagination and filtering

    List endpoints accept `offset`, `limit` (default 10, max 25), `sort_by`, and
    `order` (`asc`|`desc`) query parameters. Any other query parameter is passed
    through as an equality filter on the corresponding entity column.


    ## Date formats

    Date-time fields serialize as strings in one of two shapes depending on the
    underlying type: ISO 8601 with offset (e.g. `2026-08-14T13:05:22.000-07:00`)
    for most timestamps, or `yyyy-MM-dd HH:mm:ss.S` (space-separated, no offset)
    for database timestamp fields. Plain dates are `yyyy-MM-dd`. When sending
    date-times, ISO 8601 is accepted.


    ## API keys

    These endpoints require a **partner API key**, which is separate from buyer
    and supplier API keys. A buyer API key will not authenticate against
    `/v1/partners/` endpoints. Contact support@useopenwrench.com to have a
    partner key issued.


    ## Required headers

    Every request must carry BOTH `X-API-KEY` (your API key) and `OW-KEY` (the
    OpenWrench shared secret issued with it). Requests missing either return
    401.
servers:
  - url: https://api.useopenwrench.com/api/external
security:
  - ApiKeyAuth: []
    OwKeyAuth: []
tags:
  - name: Ping
    description: Health/authentication check
  - name: Purchase Requests
    description: Supplier inventory purchase requests
  - name: Purchase Request Line Items
    description: Line items on purchase requests
  - name: Purchase Orders
    description: Supplier inventory purchase orders
  - name: Purchase Order Line Items
    description: Line items on purchase orders
  - name: Purchase Order Receipts
    description: Receipts recorded against purchase order line items
  - name: Parts
    description: Supplier part catalog
  - name: Equipment Types
    description: Supplier equipment type catalog
  - name: Vendors
    description: Part/equipment vendors
  - name: Stock Locations
    description: Warehouses and mobile stock locations
  - name: Parts Per Stock Location
    description: Part stocking records per stock location
  - name: Equipment Per Stock Location
    description: Individual equipment held per stock location
  - name: Work Order Parts and Equipment
    description: Parts and equipment used on work orders
paths:
  /v1/partners/inventory/parts/{id}:
    get:
      tags:
        - Parts
      summary: Retrieve a part by id
      description: Retrieves a single part from the supplier's catalog.
      operationId: getPart
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
          description: Numeric identifier of the entity
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    PartResponse:
      type: object
      description: Standard single-entity envelope wrapping a Part.
      properties:
        type:
          type: string
          description: Entity type name, e.g. "Part"
        data:
          $ref: '#/components/schemas/Part'
        status:
          type: string
          enum:
            - ok
      required:
        - type
        - data
        - status
    Part:
      type: object
      description: A part in the supplier's inventory catalog.
      properties:
        id:
          type:
            - integer
            - 'null'
          format: int64
        partUUID:
          type:
            - string
            - 'null'
        manufacturerId:
          type:
            - string
            - 'null'
        manufacturerName:
          type:
            - string
            - 'null'
        partNumber:
          type:
            - string
            - 'null'
        aliasPartId:
          type:
            - string
            - 'null'
        name:
          type: string
        images:
          type: array
          items:
            type: string
          description: Image URLs
        description:
          type:
            - string
            - 'null'
        cost:
          type:
            - number
            - 'null'
        uomId:
          type: integer
          format: int32
          description: Unit-of-measure id
        unitOfMeasure:
          anyOf:
            - $ref: '#/components/schemas/AbridgedEntity'
            - type: 'null'
          description: Hydrated unit of measure (abridged).
        defaultVendorId:
          type:
            - integer
            - 'null'
          format: int32
        defaultVendor:
          anyOf:
            - $ref: '#/components/schemas/PartEquipmentVendor'
            - type: 'null'
        defaultPartCatalogId:
          type:
            - integer
            - 'null'
          format: int64
        defaultPartCatalog:
          anyOf:
            - $ref: '#/components/schemas/AbridgedEntity'
            - type: 'null'
          description: Hydrated part catalog (abridged).
        assetTypeId:
          type:
            - integer
            - 'null'
          format: int32
        assetType:
          anyOf:
            - $ref: '#/components/schemas/AbridgedEntity'
            - type: 'null'
          description: Hydrated asset type (abridged).
        assetModelId:
          type:
            - integer
            - 'null'
          format: int32
        assetModel:
          anyOf:
            - $ref: '#/components/schemas/AbridgedEntity'
            - type: 'null'
          description: Hydrated asset model (abridged).
        isActive:
          type: boolean
        glCode:
          type:
            - string
            - 'null'
        partEquipmentVendorCount:
          type: integer
          format: int64
        isStocked:
          type: boolean
        isAssociatedWithOtherEntities:
          type:
            - boolean
            - 'null'
        customFieldDetails:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/AbridgedEntity'
        labelIds:
          type:
            - array
            - 'null'
          items:
            type: integer
            format: int64
        labels:
          type:
            - array
            - 'null'
          items:
            type: string
        partLabels:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/PartLabel'
        supplierCompanyId:
          type: integer
          format: int32
        supplierCompany:
          anyOf:
            - $ref: '#/components/schemas/AbridgedEntity'
            - type: 'null'
          description: Hydrated supplier company (abridged).
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
        isDeleted:
          type: boolean
        deletedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
      required:
        - name
        - images
        - uomId
        - isActive
        - partEquipmentVendorCount
        - isStocked
        - supplierCompanyId
        - isDeleted
    Error:
      type: object
      description: Standard error envelope.
      properties:
        message:
          type: string
          description: Human-readable error message
        type:
          type: string
          description: >-
            Exception type, e.g. badRequestException, unauthorizedException,
            notFoundException
        status:
          type: string
          enum:
            - error
        traceId:
          type: string
          description: >-
            Server-generated trace identifier (11 alphanumeric characters) for
            support/debugging
      required:
        - message
        - type
        - status
        - traceId
    AbridgedEntity:
      type: object
      additionalProperties: true
      description: >-
        Nested hydrated entity whose full schema is not expanded in this spec
        (the shape is abridged). Present only when the record has the
        association hydrated.
    PartEquipmentVendor:
      type: object
      description: A vendor that supplies parts and/or equipment.
      properties:
        id:
          type:
            - integer
            - 'null'
          format: int32
        name:
          type: string
        vendorId:
          type:
            - string
            - 'null'
          description: External/custom vendor identifier
        address:
          anyOf:
            - $ref: '#/components/schemas/AbridgedEntity'
            - type: 'null'
          description: Postal address (abridged).
        currencyId:
          type: string
        email:
          type:
            - string
            - 'null'
        logoUrl:
          type:
            - string
            - 'null'
        phoneNumber:
          type:
            - string
            - 'null'
        paymentTerms:
          type:
            - string
            - 'null'
        shippingTerms:
          type:
            - string
            - 'null'
        orderingEmails:
          type:
            - array
            - 'null'
          items:
            type: string
        accountManagerEmails:
          type:
            - array
            - 'null'
          items:
            type: string
        accountManagerContacts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/VendorContact'
        salesRepEmails:
          type:
            - array
            - 'null'
          items:
            type: string
        salesRepContacts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/VendorContact'
        accountsPayableEmails:
          type:
            - array
            - 'null'
          items:
            type: string
        accountsPayableContacts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/VendorContact'
        defaultWarrantyMonths:
          type:
            - integer
            - 'null'
          format: int32
        notes:
          type:
            - string
            - 'null'
        isActive:
          type: boolean
        supplierFacilityId:
          type: integer
          format: int32
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
        isDeleted:
          type: boolean
        deletedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
      required:
        - name
        - currencyId
        - isActive
        - supplierFacilityId
        - isDeleted
    PartLabel:
      type: object
      properties:
        id:
          type:
            - integer
            - 'null'
          format: int64
        label:
          type: string
        color:
          type:
            - string
            - 'null'
        associatedPartsCount:
          type: integer
          format: int64
        supplierCompanyId:
          type: integer
          format: int32
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
        isDeleted:
          type: boolean
        deletedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
      required:
        - label
        - associatedPartsCount
        - supplierCompanyId
        - isDeleted
    VendorContact:
      type: object
      properties:
        email:
          type: string
        name:
          type: string
        phoneNumber:
          type:
            - string
            - 'null'
        vendorId:
          type: integer
          format: int32
        supplierFacilityId:
          type: integer
          format: int32
        createdAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
        updatedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: ISO 8601 date-time
      required:
        - email
        - name
        - vendorId
        - supplierFacilityId
  responses:
    BadRequest:
      description: >-
        Bad request — invalid input, a disallowed state transition, the API
        key's contact is not associated with the required company/facility, or
        the key lacks read/write permission for the entity (permission failures
        are returned as 400 with type "unauthorizedException", not as 403)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing or invalid X-API-KEY
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Entity not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limit exceeded (10 requests per 20-second window per key)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
      description: >-
        Supplier partner API key. Rate limited to 10 requests per 20-second
        window.
    OwKeyAuth:
      type: apiKey
      in: header
      name: OW-KEY
      description: >-
        OpenWrench shared secret. Required on every request alongside X-API-KEY;
        issued together with your API key.

````