Cofactr products API

Search, view, and autocomplete electronic component products. Every product is a unique combination of manufacturer (`mfr`) and manufacturer part number (`mpn`), identified by a Cofactr ID (CPID). Product responses are shaped by the requested `schema` and can include specs, documents, compliance data, and market offers.

OpenAPI Specification

cofactr-products-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Cofactr Knowledge Graph batch products API
  version: '2026-07-10'
  x-logo:
    url: /static/cofactr_logo.png
  description: Execute multiple product queries in a single request. Each batch member is an operation against the products API expressed as a relative URL; members are fulfilled concurrently and returned in order.
servers:
- url: https://graph.cofactr.com
  description: Production
security:
- ApiKey: []
  ClientId: []
tags:
- name: products
  description: Search, view, and autocomplete electronic component products. Every product is a unique combination of manufacturer (`mfr`) and manufacturer part number (`mpn`), identified by a Cofactr ID (CPID). Product responses are shaped by the requested `schema` and can include specs, documents, compliance data, and market offers.
paths:
  /products/:
    get:
      tags:
      - products
      summary: List products
      description: List products.
      operationId: listProducts
      parameters:
      - $ref: '#/components/parameters/Fields'
      - $ref: '#/components/parameters/External'
      - $ref: '#/components/parameters/ForceRefresh'
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 500
          minimum: 0
          default: 10
          title: Limit
      - $ref: '#/components/parameters/PageToken'
      - $ref: '#/components/parameters/Filtering'
      - $ref: '#/components/parameters/Q'
      - $ref: '#/components/parameters/StaleDelta'
      - $ref: '#/components/parameters/SearchStrategy'
      - $ref: '#/components/parameters/Schema'
      responses:
        '200':
          description: Products matching the search query or filters, shaped by the requested `schema` (example shows `product-v1`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
              example:
                data:
                - id: CC2DKKO1LUCF
                  classification: ceramic capacitors
                  description: 0805 0.1 uF 100V ±10% Tolerance X7R SMT Multilayer Ceramic Capacitor
                  hero_image: https://assets.cofactr.com/image/772e5cab-cbf3-337d-99ff-c8ac79448a0c.jpg
                  mfr: Murata
                  mpn: GCM21BR72A104KA37L
                  alt_mpns:
                  - GCM21BR72A104KA37L.
                  - GCM21BR72A104KA37L
                  msl: '1'
                  package: 0805
                  termination_type: SMT
                  lifecycle_status: Production
                  inventory_level: 31089253
                  buyable: 31
                  quotable: 35
                  maybe: 0
                  updated_at: '2026-07-09T22:21:55.650630+00:00'
                  deprecated_ids:
                  - XXLL0JPD4W2X
                  - CC96NA4H7MOT
                  - CCI0BFAAL00D
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded. This may be the monthly product quota or the concurrent-request ceiling.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds until the request may be retried. Always present on 429/504.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: string
            X-RateLimit-ResetTime:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: string
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request exceeded the maximum processing time (concurrency-limited clients).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds until the request may be retried. Always present on 429/504.
              schema:
                type: string
  /products/{id}:
    get:
      tags:
      - products
      summary: View product
      description: View product.
      operationId: getProduct
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          title: Id
      - $ref: '#/components/parameters/StaleDelta'
      - $ref: '#/components/parameters/Fields'
      - $ref: '#/components/parameters/External'
      - $ref: '#/components/parameters/ForceRefresh'
      - $ref: '#/components/parameters/Schema'
      responses:
        '200':
          description: The requested product, shaped by the requested `schema` (example shows `product-offers-v1`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductViewResponse'
              example:
                data:
                  id: CC2DKKO1LUCF
                  classification: ceramic capacitors
                  description: 0805 0.1 uF 100V ±10% Tolerance X7R SMT Multilayer Ceramic Capacitor
                  documents:
                  - label: Datasheet
                    url: https://www.mouser.com/datasheet/2/281/1/GCM21BR72A104KA37_01A-3145807.pdf
                    filename: Untitled
                  - label: Reach Statement
                    url: http://sigma.octopart.com/reach_statement/Murata-company-16.pdf
                    filename: Murata-company-16.pdf
                  hero_image: https://assets.cofactr.com/image/772e5cab-cbf3-337d-99ff-c8ac79448a0c.jpg
                  mfr: Murata
                  mpn: GCM21BR72A104KA37L
                  alt_mpns:
                  - GCM21BR72A104KA37L.
                  - GCM21BR72A104KA37L
                  msl: '1'
                  package: 0805
                  specs:
                  - id: capacitance
                    label: Capacitance
                    display_value: 100 nF
                    quantity:
                      unit: F
                      amount: 1e-07
                  - id: voltagerating_dc_
                    label: Voltage rating (DC)
                    display_value: 100 V
                    quantity:
                      unit: V
                      amount: 100
                  - id: temperaturecoefficient
                    label: Temperature coefficient
                    display_value: X7R
                  product_updated_at: '2026-07-09T22:21:55.650630+00:00'
                  termination_type: SMT
                  deprecated_ids:
                  - XXLL0JPD4W2X
                  - CC96NA4H7MOT
                  - CCI0BFAAL00D
                  min_lead: 3
                  offers:
                  - part: CC2DKKO1LUCF
                    seller:
                      id: 622fb450e4c292d8287b0af5
                      deprecated_ids:
                      - 62d4bcc6412443e55717f293
                      - 62d4bcc6412443e55717f291
                      - 62d4bcc6412443e55717f28f
                      label: Digi-Key
                      aliases:
                      - Digi-Key Kit
                      - Digi-Key Corporation
                      - DIGI-KEY EVALUATION BOARDS
                      - Digikey
                      - Digi-Key Electronics
                      certifications:
                      - AS9120
                      - CFR21
                      lead: 3
                      free_ship:
                        threshold: 250
                        shipping_lead: 2
                      shipping_options:
                      - price: 29.99
                        shipping_lead: 1
                      - price: 13.99
                        shipping_lead: 2
                      - price: 0
                        shipping_lead: 5
                      convenience_return_window: 30
                      scheduled_release_period: 12
                      us_shipping_methods:
                        UPS 1 day: 1
                        UPS 2 day: 2
                        UPS 3 day: 3
                        UPS ground: 5
                      international_shipping_methods:
                        DHL worldwide Express: 3
                        UPS worldwide saver: 4
                      custom_reel_price: 0.0
                    is_authorized: true
                    shipping_lead: 4
                    ships_from_country: US
                    sku: 490-4789-2-ND
                    inventory_level: 652178
                    packaging: Tape & Reel
                    moq: 3000
                    prices:
                    - quantity: 3000
                      price: 0.03828
                      currency: USD
                      converted_currency: USD
                      converted_price: 0.03828
                      conversion_rate: 1.0
                    - quantity: 6000
                      price: 0.0354
                      currency: USD
                      converted_currency: USD
                      converted_price: 0.0354
                      conversion_rate: 1.0
                    - quantity: 9000
                      price: 0.03395
                      currency: USD
                      converted_currency: USD
                      converted_price: 0.03395
                      conversion_rate: 1.0
                    factory_lead_days: 147
                    order_multiple: 1
                    offer_updated_at: '2026-07-11T00:54:11.127659+00:00'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded. This may be the monthly product quota or the concurrent-request ceiling.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds until the request may be retried. Always present on 429/504.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: string
            X-RateLimit-ResetTime:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: string
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request exceeded the maximum processing time (concurrency-limited clients).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds until the request may be retried. Always present on 429/504.
              schema:
                type: string
  /products/autocompletions/:
    get:
      tags:
      - products
      summary: List product autocompletions
      description: List product autocompletions.
      operationId: autocompleteProducts
      parameters:
      - $ref: '#/components/parameters/Q'
      - name: limit
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            maximum: 500
            exclusiveMinimum: 0
          - type: 'null'
          description: Maximum number of predictions that may be returned.
          default: 10
          title: Limit
        description: Maximum number of predictions that may be returned.
      responses:
        '200':
          description: Autocomplete predictions for the query, best match first.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutocompletionsResponse'
              example:
                data:
                - id: CC2DKKO1LUCF
                  label: Murata Electronics GCM21BR72A104KA37L
                - id: CCEHW3JXS5CQ
                  label: Murata Electronics GCM21BR71H104KA37L
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded. This may be the monthly product quota or the concurrent-request ceiling.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds until the request may be retried. Always present on 429/504.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: string
            X-RateLimit-ResetTime:
              description: Present only when the monthly product quota was exceeded.
              schema:
                type: string
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request exceeded the maximum processing time (concurrency-limited clients).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: Seconds until the request may be retried. Always present on 429/504.
              schema:
                type: string
components:
  schemas:
    ProductOffersV1Spec:
      title: ProductOffersV1Spec
      description: Product specification for product-offers-v1.
      type: object
      properties:
        id:
          type: string
        label:
          type: string
        display_value:
          type: string
        quantity:
          anyOf:
          - type: 'null'
          - $ref: '#/components/schemas/ProductOffersV1Quantity'
          default: null
      required:
      - id
      - label
      - display_value
    ProductViewResponse:
      type: object
      description: 'The shape of `data` is selected by the required `schema` query parameter: `product-v0` → ProductV0, `product-v1` → ProductV1, `product-offers-v0` → ProductOffersV0, `product-offers-v1` → ProductOffersV1.'
      required:
      - data
      properties:
        data:
          anyOf:
          - $ref: '#/components/schemas/ProductV0'
          - $ref: '#/components/schemas/ProductV1'
          - $ref: '#/components/schemas/ProductOffersV0'
          - $ref: '#/components/schemas/ProductOffersV1'
    ProductSpec:
      title: ProductSpec
      description: Class name is part of the public OpenAPI contract. Do not rename casually.
      type: object
      properties:
        id:
          type: string
        label:
          type: string
        value:
          type: string
      required:
      - id
      - label
      - value
    ProductOffersV1Seller:
      title: ProductOffersV1Seller
      description: Seller fields exposed by product-offers-v1.
      type: object
      properties:
        id:
          type: string
        deprecated_ids:
          type: array
          items:
            type: string
          default: []
        label:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        aliases:
          type: array
          items:
            type: string
          default: []
        certifications:
          type: array
          items:
            type: string
          default: []
        lead:
          type: integer
        free_ship:
          $ref: '#/components/schemas/FreeShipTerms'
        shipping_options:
          type: array
          items:
            type: object
        best_case_lead:
          anyOf:
          - type: integer
          - type: 'null'
        convenience_return_window:
          anyOf:
          - type: integer
          - type: 'null'
        scheduled_release_period:
          anyOf:
          - type: integer
          - type: 'null'
        us_shipping_methods:
          type: object
          additionalProperties:
            type: integer
        international_shipping_methods:
          type: object
          additionalProperties:
            type: integer
        custom_reel_price:
          anyOf:
          - type: number
          - type: 'null'
      required:
      - id
      - lead
      - shipping_options
      - best_case_lead
      - convenience_return_window
      - scheduled_release_period
      - us_shipping_methods
      - international_shipping_methods
      - custom_reel_price
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    OffersV0:
      title: OffersV0
      description: Offers v0 schema.
      type: object
      properties:
        part:
          type: string
        seller:
          $ref: '#/components/schemas/Seller'
        is_authorized:
          type: boolean
          default: false
        status:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        shipping_lead:
          type: integer
        ships_from_country:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        sku:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        inventory_level:
          type: integer
          default: 0
        packaging:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        moq:
          type: integer
          default: 1
        prices:
          type: array
          items:
            $ref: '#/components/schemas/PricePoint'
          default: []
        updated_at:
          type: string
        factory_lead_days:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        on_order_quantity:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        factory_pack_quantity:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        order_multiple:
          type: integer
          default: 1
        multipack_quantity:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        is_foreign:
          type: boolean
          default: false
      required:
      - part
      - seller
      - shipping_lead
      - updated_at
    ProductOffersV1:
      title: ProductOffersV1
      description: Product details with offers for new public API integrations.
      type: object
      properties:
        id:
          type: string
        classification:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        documents:
          type: array
          items:
            $ref: '#/components/schemas/ProductDocument'
          default: []
        hero_image:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        mfr:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        mpn:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        alt_mpns:
          type: array
          items:
            type: string
          default: []
        msl:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        package:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        specs:
          type: array
          items:
            $ref: '#/components/schemas/ProductOffersV1Spec'
          default: []
        terminations:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        product_updated_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        termination_type:
          type: string
          default: other
        deprecated_ids:
          type: array
          items:
            type: string
          default: []
        min_lead:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        offers:
          type: array
          items:
            $ref: '#/components/schemas/ProductOffersV1Offer'
          default: []
      required:
      - id
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Error:
      type: object
      required:
      - detail
      properties:
        detail:
          type: string
          description: Human-readable explanation of the error.
    ProductOffersV1Quantity:
      title: ProductOffersV1Quantity
      description: Structured quantity for product-offers-v1 specs.
      type: object
      properties:
        unit:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        amount:
          anyOf:
          - type: number
          - type: 'null'
          default: null
        lower_bound:
          anyOf:
          - type: number
          - type: 'null'
          default: null
        upper_bound:
          anyOf:
          - type: number
          - type: 'null'
          default: null
      required: []
    ProductOffersV1Offer:
      title: ProductOffersV1Offer
      description: Supplier offer for product-offers-v1.
      type: object
      properties:
        part:
          type: string
        seller:
          $ref: '#/components/schemas/ProductOffersV1Seller'
        is_authorized:
          type: boolean
          default: false
        shipping_lead:
          type: integer
        ships_from_country:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        sku:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        inventory_level:
          type: integer
          default: 0
        packaging:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        moq:
          type: integer
          default: 1
        prices:
          type: array
          items:
            $ref: '#/components/schemas/PricePoint'
          default: []
        offer_updated_at:
          type: string
        factory_lead_days:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        factory_pack_quantity:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        order_multiple:
          type: integer
          default: 1
      required:
      - part
      - seller
      - shipping_lead
      - offer_updated_at
    ProductDocument:
      title: ProductDocument
      description: Class name is part of the public OpenAPI contract. Do not rename casually.
      type: object
      properties:
        label:
          type: string
        url:
          type: string
        filename:
          type: string
      required:
      - label
      - url
      - filename
    PricePoint:
      title: PricePoint
      description: "Price in a specific currency + quantity.\n    Based on https://octopart.com/api/v4/reference#pricepoint\n\n    Class name is part of the public OpenAPI contract. Do not rename casually."
      type: object
      properties:
        quantity:
          anyOf:
          - type: integer
          - type: 'null'
        price:
          anyOf:
          - type: number
          - type: 'null'
        currency:
          anyOf:
          - type: string
          - type: 'null'
        converted_currency:
          anyOf:
          - type: string
          - type: 'null'
        converted_price:
          anyOf:
          - type: number
          - type: 'null'
        conversion_rate:
          anyOf:
          - type: number
          - type: 'null'
      required:
      - quantity
      - price
      - currency
      - converted_currency
      - converted_price
      - conversion_rate
    SearchStrategy:
      type: string
      enum:
      - default
      - mpn_exact_mfr
      - mpn_exact
      - mpn_exact_multi
      - mpn_sku_mfr
      title: SearchStrategy
      description: Search strategy.
    ProductOffersV0:
      title: ProductOffersV0
      type: object
      properties:
        id:
          type: string
        classification:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        documents:
          type: array
          items:
            $ref: '#/components/schemas/ProductDocument'
          default: []
        hero_image:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        mfr:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        mpn:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        alt_mpns:
          type: array
          items:
            type: string
          default: []
        msl:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        package:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        specs:
          type: array
          items:
            $ref: '#/components/schemas/ProductSpec'
          default: []
        terminations:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        inventory_level:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        buyable:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        quotable:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        maybe:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        updated_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        termination_type:
          type: string
          default: other
        buyable_reference_prices:
          type: array
          items:
            $ref: '#/components/schemas/PricePoint'
          default: []
        reference_prices:
          type: array
          items:
            $ref: '#/components/schemas/PricePoint'
          default: []
        deprecated_ids:
          type: array
          items:
            type: string
          default: []
        min_lead:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        offers:
          type: array
          items:
            $ref: '#/components/schemas/OffersV0'
          default: []
      required:
      - id
    AutocompletionsResponse:
      type: object
      required:
      - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Autocompletion'
    ProductV1:
      title: ProductV1
      description: Basic product information model for external API responses.
      type: object
      properties:
        id:
          type: string
        classification:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        hero_image:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        mfr:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        mpn:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        alt_mpns:
          type: array
          items:
            type: string
          default: []
        msl:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        package:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        terminations:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        termination_type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        lifecycle_status:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        inventory_level:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        buyable:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        quotable:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        maybe:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
        updated_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
        deprecated_ids:
          type: array
          items:
            type: string
          default: []
      required:
      - id
    FreeShipTerms:
      title: FreeShipTerms
      description: Class name is part of the public OpenAPI contract. Do not rename casually.
      type: object
      properties:
        thre

# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cofactr/refs/heads/main/openapi/cofactr-products-api-openapi.yml