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

# Get the latest revision of one canonical product



## OpenAPI

````yaml https://api.batchrelay.com/openapi.json get /v1/catalog/products/{product_id}
openapi: 3.1.0
info:
  title: Batch Relay API
  version: 1.0.0
  description: >-
    Provider-neutral print catalog and prepared-media validation. This document
    covers only routes owned by the Go service; it deliberately excludes
    migration-proxied order lifecycle routes and all provider payloads.
servers:
  - url: https://api.batchrelay.com
security: []
tags:
  - name: System
  - name: Catalog
  - name: Print orders
  - name: API accounts
paths:
  /v1/catalog/products/{product_id}:
    get:
      tags:
        - Catalog
      summary: Get the latest revision of one canonical product
      operationId: getCatalogProduct
      parameters:
        - name: product_id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
      responses:
        '200':
          description: Canonical product
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '404':
          $ref: '#/components/responses/ProductNotFound'
components:
  schemas:
    Product:
      type: object
      required:
        - id
        - revision
        - name
        - description
        - category
        - fulfillment_type
        - tax_category
        - physical_output
        - units_per_quantity
        - options
        - unit_costs
        - asset_requirements
      properties:
        id:
          type: string
          description: Stable canonical product identifier.
        revision:
          type: integer
          minimum: 1
          description: Immutable fulfillment-contract revision.
        name:
          type: string
        description:
          type: string
        category:
          type: string
          enum:
            - prints
            - keepsakes
            - trader-products
            - composites
        fulfillment_type:
          type: string
          const: print
        tax_category:
          type: string
          const: physical_print
        physical_output:
          $ref: '#/components/schemas/PhysicalOutput'
        units_per_quantity:
          type: integer
          minimum: 1
          description: Physical units produced by one line quantity.
        options:
          type: array
          items:
            $ref: '#/components/schemas/ProductOption'
        unit_costs:
          type: array
          items:
            $ref: '#/components/schemas/UnitCost'
        asset_requirements:
          type: array
          items:
            $ref: '#/components/schemas/AssetRequirement'
      additionalProperties: false
    PhysicalOutput:
      type: object
      required:
        - width
        - height
        - unit
      properties:
        width:
          type: number
          exclusiveMinimum: 0
        height:
          type: number
          exclusiveMinimum: 0
        unit:
          type: string
          const: inches
      additionalProperties: false
    ProductOption:
      type: object
      required:
        - id
        - name
        - values
        - default_value
      properties:
        id:
          type: string
        name:
          type: string
        values:
          type: array
          items:
            type: string
        default_value:
          type: string
      additionalProperties: false
    UnitCost:
      type: object
      required:
        - option_values
      properties:
        option_values:
          type: array
          items:
            $ref: '#/components/schemas/OptionSelection'
        unit_cost_cents:
          type:
            - integer
            - 'null'
          minimum: 0
      additionalProperties: false
    AssetRequirement:
      type: object
      required:
        - role
        - aspect_ratio
        - required
      properties:
        role:
          $ref: '#/components/schemas/AssetRole'
        aspect_ratio:
          $ref: '#/components/schemas/AspectRatio'
        required:
          type: boolean
      additionalProperties: false
    Error:
      type: object
      required:
        - error
        - code
        - message
        - docs_url
        - request_id
      properties:
        error:
          type: string
          description: Backward-compatible human-readable error.
        code:
          type: string
          description: Stable machine-readable error code.
        message:
          type: string
        docs_url:
          type: string
          format: uri
        request_id:
          type: string
      additionalProperties: false
    OptionSelection:
      type: object
      required:
        - option_id
        - value
      properties:
        option_id:
          type: string
          minLength: 1
        value:
          type: string
          minLength: 1
      additionalProperties: false
    AssetRole:
      type: string
      enum:
        - artwork
        - background
        - individual
        - team
        - logo
        - front
        - back
    AspectRatio:
      type: object
      required:
        - width
        - height
      properties:
        width:
          type: integer
          minimum: 1
        height:
          type: integer
          minimum: 1
      additionalProperties: false
  responses:
    ProductNotFound:
      description: The canonical product does not exist.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

````