> ## 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 one active product

> Returns active products only. Deprecated product IDs return product_not_found.



## OpenAPI

````yaml https://api.batchrelay.com/openapi.json get /v1/catalog/products/{product_id}
openapi: 3.1.0
info:
  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.
  license:
    name: Proprietary
    url: https://github.com/SENTINELITE/Batch-Relay-Go/blob/main/README.md
  title: Batch Relay API
  version: 1.0.1
servers:
  - url: https://api.batchrelay.com
security: []
tags:
  - description: Service health and the public API description.
    name: System
  - description: Test Mode session creation and API credential entry points.
    name: Authentication
  - description: >-
      Provider-neutral canonical catalog resources and platform-owned semantic
      definitions.
    name: Catalog
  - description: Studio-scoped guest checkout-link management.
    name: Checkout links
  - description: >-
      One-way operational event messages. Alert emails contain no message body
      and recipients read messages after Batch Relay authentication.
    name: Studio messages
  - description: >-
      Explicit, reviewable sandbox-to-Live promotion plans for forms, catalog,
      and storefront configuration.
    name: Sandbox promotions
  - description: Provider-neutral validation, quoting, and order lifecycle operations.
    name: Print orders
  - description: Managed fulfillment asset ingestion and metadata.
    name: Managed assets
  - description: Studio-scoped original asset upload sessions and objects.
    name: Studio assets
  - description: Prepared and confirmed event roster team changes.
    name: Event team changes
  - description: Authenticated studio, event, and form-management operations.
    name: Studio management
  - description: >-
      Authenticated studio retail catalog management. Draft and publication
      lifecycles are explicit per product or package.
    name: Studio catalog
  - description: >-
      Authenticated singular storefront assortment management. PATCH atomically
      publishes a new immutable assortment revision; no storefront draft
      lifecycle exists yet.
    name: Storefront
  - description: Managed media used by the studio retail catalog.
    name: Studio catalog assets
  - description: Template rendering job creation and retrieval.
    name: Template renders
  - description: >-
      Published browser-side template packages and short-lived server proof
      renders. Preview artifacts are never fulfillment artwork.
    name: Browser previews
  - description: API account and credential administration.
    name: API accounts
paths:
  /v1/catalog/products/{product_id}:
    parameters:
      - $ref: '#/components/parameters/ClientSurface'
      - $ref: '#/components/parameters/ClientVersion'
      - $ref: '#/components/parameters/InvocationMode'
    get:
      tags:
        - Catalog
      summary: Get one active product
      description: >-
        Returns active products only. Deprecated product IDs return
        product_not_found.
      operationId: getCatalogProduct
      parameters:
        - in: path
          name: product_id
          required: true
          schema:
            minLength: 1
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
          description: Canonical product
        '404':
          $ref: '#/components/responses/ProductNotFound'
      security: []
components:
  parameters:
    ClientSurface:
      description: >-
        Untrusted optional analytics hint naming the calling client surface. It
        never affects authorization, routing, pricing, or behavior.
      in: header
      name: X-BatchRelay-Client-Surface
      required: false
      schema:
        maxLength: 100
        minLength: 1
        type: string
    ClientVersion:
      description: >-
        Untrusted optional analytics hint naming the calling client version. It
        never affects authorization, routing, pricing, or behavior.
      in: header
      name: X-BatchRelay-Client-Version
      required: false
      schema:
        maxLength: 100
        minLength: 1
        type: string
    InvocationMode:
      description: >-
        Untrusted optional analytics hint naming the invocation mode. It never
        affects authorization, routing, pricing, or behavior.
      in: header
      name: X-BatchRelay-Invocation-Mode
      required: false
      schema:
        maxLength: 100
        minLength: 1
        type: string
  schemas:
    Product:
      additionalProperties: false
      allOf:
        - oneOf:
            - properties:
                fulfillment_type:
                  const: print
                tax_category:
                  const: physical_print
              required:
                - physical_output
            - not:
                properties:
                  physical_output: {}
                required:
                  - physical_output
              properties:
                category:
                  const: digital-downloads
                fulfillment_type:
                  const: digital
                tax_category:
                  const: digital_download
      properties:
        asset_requirements:
          items:
            $ref: '#/components/schemas/AssetRequirement'
          type: array
        category:
          enum:
            - prints
            - keepsakes
            - trader-products
            - composites
            - digital-downloads
          type: string
        consumer_quantity:
          $ref: '#/components/schemas/ConsumerQuantity'
        description:
          type: string
        family:
          $ref: '#/components/schemas/ProductFamilyReference'
        fulfillment_target:
          $ref: '#/components/schemas/ProductReference'
          description: >-
            The standard physical product used for provider-neutral routing
            after a composed product has flattened to finished artwork.
        fulfillment_type:
          enum:
            - print
            - digital
          type: string
        id:
          description: Stable canonical product identifier.
          type: string
        lifecycle:
          $ref: '#/components/schemas/ProductLifecycle'
        name:
          type: string
        options:
          items:
            $ref: '#/components/schemas/ProductOption'
          type: array
        physical_output:
          $ref: '#/components/schemas/PhysicalOutput'
          description: >-
            Required for physical print products and omitted for digital
            products.
        prepared_artwork:
          $ref: '#/components/schemas/PreparedArtworkGeometry'
        print_safety_profile:
          $ref: '#/components/schemas/PrintSafetyProfile'
        revision:
          description: Immutable fulfillment-contract revision.
          minimum: 1
          type: integer
        tax_category:
          enum:
            - physical_print
            - digital_download
          type: string
        template_requirement:
          description: >-
            Product-specific template policy. required accepts only artwork from
            a succeeded Batch Relay template render; optional accepts either a
            compatible rendered output or direct prepared artwork; unsupported
            has no template workflow.
          enum:
            - required
            - optional
            - unsupported
          type: string
        text_requirements:
          description: >-
            Provider-neutral ordered text slots supported by this product. The
            current catalog publishes six generic Memory Mate slots while final
            visual/provider field labels are under verification; clients must
            use the returned slot IDs rather than infer provider node IDs.
          items:
            $ref: '#/components/schemas/TextRequirement'
          type: array
        unit_costs:
          items:
            $ref: '#/components/schemas/UnitCost'
          type: array
        units_per_quantity:
          description: Units produced or delivered by one line quantity.
          minimum: 1
          type: integer
        variant_attributes:
          $ref: '#/components/schemas/ProductVariantAttributes'
      required:
        - id
        - revision
        - name
        - description
        - family
        - variant_attributes
        - category
        - fulfillment_type
        - tax_category
        - units_per_quantity
        - options
        - unit_costs
        - asset_requirements
        - template_requirement
        - lifecycle
      type: object
    AssetRequirement:
      additionalProperties: false
      properties:
        aspect_ratio:
          $ref: '#/components/schemas/AspectRatio'
        required:
          type: boolean
        role:
          $ref: '#/components/schemas/AssetRole'
        rotation_policy:
          description: >-
            Whether the prepared asset may use the transposed aspect
            orientation. Fixed is the default for templates and multi-asset
            layouts.
          enum:
            - fixed
            - allowed
          type: string
      required:
        - role
        - aspect_ratio
        - required
        - rotation_policy
      type: object
    ConsumerQuantity:
      additionalProperties: false
      properties:
        container_plural:
          minLength: 1
          type: string
        container_singular:
          minLength: 1
          type: string
        unit_plural:
          minLength: 1
          type: string
        unit_singular:
          minLength: 1
          type: string
      required:
        - unit_singular
        - unit_plural
      type: object
    ProductFamilyReference:
      additionalProperties: false
      description: >-
        Discovery grouping shared by related immutable products. Do not use a
        family ID in an order.
      properties:
        id:
          minLength: 1
          type: string
        name:
          minLength: 1
          type: string
      required:
        - id
        - name
      type: object
    ProductReference:
      additionalProperties: false
      properties:
        id:
          minLength: 1
          type: string
        revision:
          minimum: 1
          type: integer
      required:
        - id
        - revision
      type: object
    ProductLifecycle:
      additionalProperties: false
      properties:
        replacement_product_id:
          description: >-
            A recommended canonical replacement. Deprecated products remain
            decodable for historical records but cannot be planned for new
            fulfillment.
          type: string
        status:
          enum:
            - active
            - deprecated
          type: string
      required:
        - status
      type: object
    ProductOption:
      additionalProperties: false
      properties:
        affects_price:
          description: Whether a selected value can change the provider unit cost.
          type: boolean
        default_value:
          type: string
        id:
          type: string
        name:
          type: string
        values:
          items:
            type: string
          type: array
      required:
        - id
        - name
        - values
        - default_value
        - affects_price
      type: object
    PhysicalOutput:
      additionalProperties: false
      properties:
        height:
          exclusiveMinimum: 0
          type: number
        unit:
          const: inches
          type: string
        width:
          exclusiveMinimum: 0
          type: number
      required:
        - width
        - height
        - unit
      type: object
    PreparedArtworkGeometry:
      additionalProperties: false
      properties:
        finished_area:
          $ref: '#/components/schemas/ArtworkArea'
        important_content_area:
          $ref: '#/components/schemas/ArtworkArea'
        output_bounds_in:
          $ref: '#/components/schemas/ArtworkSize'
        output_dpi:
          maximum: 1200
          minimum: 72
          type: integer
      required:
        - output_bounds_in
        - output_dpi
        - finished_area
        - important_content_area
      type: object
    PrintSafetyProfile:
      additionalProperties: false
      properties:
        expected_trim_fraction_per_edge:
          minimum: 0
          type: number
        id:
          minLength: 1
          type: string
        important_content_inset_in:
          minimum: 0
          type: number
        minimum_border_inset_in:
          minimum: 0
          type: number
        mounted:
          type: boolean
        trim_bottom_in:
          minimum: 0
          type: number
        trim_left_in:
          minimum: 0
          type: number
        trim_right_in:
          minimum: 0
          type: number
        trim_top_in:
          minimum: 0
          type: number
        version:
          minimum: 1
          type: integer
      required:
        - id
        - version
        - expected_trim_fraction_per_edge
        - trim_left_in
        - trim_top_in
        - trim_right_in
        - trim_bottom_in
        - important_content_inset_in
        - minimum_border_inset_in
      type: object
    TextRequirement:
      additionalProperties: false
      properties:
        allow_blank:
          type: boolean
        name:
          description: >-
            Current public label. Memory Mate labels are intentionally generic
            while final visual/provider-field mapping is under verification.
          type: string
        slot:
          $ref: '#/components/schemas/TextSlotID'
      required:
        - slot
        - name
        - allow_blank
      type: object
    UnitCost:
      additionalProperties: false
      properties:
        option_values:
          items:
            $ref: '#/components/schemas/OptionSelection'
          type: array
        pricing_status:
          description: Confidence state for this exact option combination.
          enum:
            - unverified
            - sandbox_quote
            - production_verified
          type: string
        unit_cost_cents:
          description: >-
            Provider PPU in cents. Null means the price is not yet established;
            zero is a real zero price.
          minimum: 0
          type:
            - integer
            - 'null'
      required:
        - option_values
        - unit_cost_cents
        - pricing_status
      type: object
    ProductVariantAttributes:
      additionalProperties:
        type: string
      description: >-
        Display and filtering attributes for one immutable variant. These values
        do not replace the product ID and revision in an order.
      type: object
    Error:
      additionalProperties: false
      properties:
        code:
          description: Stable machine-readable error code.
          type: string
        docs_url:
          format: uri
          type: string
        error:
          description: Backward-compatible human-readable error.
          type: string
        message:
          type: string
        request_id:
          type: string
      required:
        - error
        - code
        - message
        - docs_url
        - request_id
      type: object
    AspectRatio:
      additionalProperties: false
      properties:
        height:
          minimum: 1
          type: integer
        width:
          minimum: 1
          type: integer
      required:
        - width
        - height
      type: object
    AssetRole:
      enum:
        - artwork
        - background
        - individual
        - team
        - logo
        - front
        - back
      type: string
    ArtworkArea:
      additionalProperties: false
      properties:
        center_in:
          $ref: '#/components/schemas/ArtworkPoint'
        diameter_in:
          exclusiveMinimum: 0
          type: number
        inset_in:
          $ref: '#/components/schemas/ArtworkInsets'
        kind:
          enum:
            - rectangle
            - circle
          type: string
      required:
        - kind
      type: object
    ArtworkSize:
      additionalProperties: false
      properties:
        height:
          exclusiveMinimum: 0
          type: number
        width:
          exclusiveMinimum: 0
          type: number
      required:
        - width
        - height
      type: object
    TextSlotID:
      enum:
        - text-1
        - text-2
        - text-3
        - text-4
        - text-5
        - text-6
      type: string
    OptionSelection:
      additionalProperties: false
      properties:
        option_id:
          minLength: 1
          type: string
        value:
          minLength: 1
          type: string
      required:
        - option_id
        - value
      type: object
    ArtworkPoint:
      additionalProperties: false
      properties:
        x:
          minimum: 0
          type: number
        'y':
          minimum: 0
          type: number
      required:
        - x
        - 'y'
      type: object
    ArtworkInsets:
      additionalProperties: false
      properties:
        bottom:
          minimum: 0
          type: number
        left:
          minimum: 0
          type: number
        right:
          minimum: 0
          type: number
        top:
          minimum: 0
          type: number
      required:
        - left
        - top
        - right
        - bottom
      type: object
  responses:
    ProductNotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: The active public product does not exist.

````