> ## 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.

# Preview one provider's compatibility for a canonical order

> Resolves exactly one provider using the same explicit/event/default precedence as quoting. It never splits lines, substitutes products, creates a quote, payment, or provider order.



## OpenAPI

````yaml https://api.batchrelay.com/openapi.json post /v1/providers/compatibility
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: Managed assets
  - name: Template renders
  - name: API accounts
paths:
  /v1/providers/compatibility:
    post:
      tags:
        - Print orders
      summary: Preview one provider's compatibility for a canonical order
      description: >-
        Resolves exactly one provider using the same explicit/event/default
        precedence as quoting. It never splits lines, substitutes products,
        creates a quote, payment, or provider order.
      operationId: previewProviderCompatibility
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/QuoteAPIOrderRequest'
                - $ref: '#/components/schemas/OrderRequest'
      responses:
        '200':
          description: Provider compatibility report
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProviderCompatibilityReport'
        '401':
          $ref: '#/components/responses/APIKeyAuthenticationRequired'
        '403':
          $ref: '#/components/responses/APIKeyForbidden'
        '422':
          $ref: '#/components/responses/OrderValidationFailed'
        '503':
          $ref: '#/components/responses/StatefulAPIUnavailable'
components:
  schemas:
    QuoteAPIOrderRequest:
      type: object
      required:
        - order
      properties:
        provider_id:
          $ref: '#/components/schemas/ProviderID'
          description: >-
            Optional explicit provider. It takes precedence over event and
            account defaults.
        event_id:
          type: string
          description: >-
            Optional opaque event/cohort ID. Its saved provider selection
            applies when provider_id is omitted.
        order:
          $ref: '#/components/schemas/OrderRequest'
      additionalProperties: false
    OrderRequest:
      type: object
      required:
        - schema_version
        - environment
        - external_order_id
        - ship_to
        - ship_from
        - shipping_service
        - items
      properties:
        schema_version:
          type: integer
          const: 1
        environment:
          type: string
          enum:
            - sandbox
            - production
        external_order_id:
          type: string
          minLength: 1
        customer:
          $ref: '#/components/schemas/CustomerContact'
        ship_to:
          $ref: '#/components/schemas/Address'
        ship_from:
          $ref: '#/components/schemas/Address'
        shipping_service:
          $ref: '#/components/schemas/ShippingService'
        items:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/OrderLine'
      additionalProperties: false
    ProviderCompatibilityReport:
      type: object
      required:
        - provider
        - lines
      properties:
        provider:
          $ref: '#/components/schemas/ResolvedProvider'
        lines:
          type: array
          items:
            $ref: '#/components/schemas/ProviderCompatibilityLine'
      additionalProperties: false
    ProviderID:
      type: string
      enum:
        - whcc
        - rpl
        - millers
    CustomerContact:
      type: object
      properties:
        external_id:
          type: string
        name:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
          pattern: ^\+[1-9][0-9]{1,14}$
      description: For quote and submit API routes, at least email or phone is required.
      additionalProperties: false
    Address:
      type: object
      required:
        - name
        - address_1
        - city
        - state
        - postal_code
        - country
        - phone
      properties:
        name:
          type: string
          minLength: 1
        address_1:
          type: string
          minLength: 1
        address_2:
          type: string
        city:
          type: string
          minLength: 1
        state:
          type: string
          minLength: 1
        postal_code:
          type: string
          minLength: 1
        country:
          type: string
          minLength: 1
        phone:
          type: string
          pattern: ^\+[1-9][0-9]{1,14}$
          description: E.164 phone number, for example +16516468263
      additionalProperties: false
    ShippingService:
      type: string
      enum:
        - economy_untracked
        - economy
        - expedited
        - standard_one_day
        - priority_one_day
      description: >-
        Required domestic US delivery service. The server freezes the exact
        deterministic provider shipping quote before payment; a service can be
        unavailable when provider eligibility, a one-day zone result, or
        required provider cost evidence is unavailable.
    OrderLine:
      type: object
      required:
        - product
        - quantity
        - assets
      properties:
        product:
          $ref: '#/components/schemas/ProductReference'
        quantity:
          type: integer
          minimum: 1
        options:
          type: array
          items:
            $ref: '#/components/schemas/OptionSelection'
        assets:
          type: array
          items:
            $ref: '#/components/schemas/OrderAssetSource'
        texts:
          type: array
          description: >-
            Text values keyed by the selected product's published semantic
            slots. Each slot may occur at most once; preserve intentional
            whitespace exactly.
          items:
            $ref: '#/components/schemas/TextValue'
      additionalProperties: false
    ResolvedProvider:
      type: object
      required:
        - provider_id
        - provider_selection_source
        - provider_environment
        - provider_availability
        - provider_capability_revision
        - provider_recipe_revision
      properties:
        provider_id:
          $ref: '#/components/schemas/ProviderID'
        provider_selection_source:
          $ref: '#/components/schemas/ProviderSelectionSource'
        provider_environment:
          type: string
          enum:
            - sandbox
            - production
        provider_availability:
          $ref: '#/components/schemas/ProviderAvailability'
        provider_capability_revision:
          type: string
        provider_recipe_revision:
          type: string
      additionalProperties: false
    ProviderCompatibilityLine:
      type: object
      required:
        - line_index
        - product_id
        - available
      properties:
        line_index:
          type: integer
          minimum: 0
        product_id:
          type: string
        available:
          type: boolean
        reason_code:
          type: string
        message:
          type: string
      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
    ProductReference:
      type: object
      required:
        - id
        - revision
      properties:
        id:
          type: string
          minLength: 1
        revision:
          type: integer
          minimum: 1
      additionalProperties: false
    OptionSelection:
      type: object
      required:
        - option_id
        - value
      properties:
        option_id:
          type: string
          minLength: 1
        value:
          type: string
          minLength: 1
      additionalProperties: false
    OrderAssetSource:
      type: object
      description: >-
        Public asset source. Supply role plus exactly one of url or asset_id.
        Batch Relay resolves and freezes immutable metadata during quote;
        optional metadata is a non-authoritative preflight hint. Products with
        template_requirement=required accept only the asset_id from a succeeded
        Batch Relay template render plus template_render_id. Public submission
        never passes a source URL to a provider.
      required:
        - role
      properties:
        role:
          $ref: '#/components/schemas/AssetRole'
        url:
          type: string
          format: uri
          pattern: ^https://
          description: HTTPS source copied into managed fulfillment storage during quote.
        asset_id:
          type: string
          description: >-
            Existing authorized bra_ managed asset or same-studio image asset;
            reused in place.
        template_render_id:
          type: string
          description: >-
            Required with asset_id for a template-required product. Batch Relay
            verifies the succeeded render owns the selected artifact.
        pixel_width:
          type: integer
          minimum: 1
          description: Optional non-authoritative preflight hint.
        pixel_height:
          type: integer
          minimum: 1
          description: Optional non-authoritative preflight hint.
        file_size_bytes:
          type: integer
          minimum: 1
          description: Optional non-authoritative preflight hint.
        format:
          type: string
          enum:
            - jpeg
            - png
            - tiff
          description: Optional non-authoritative preflight hint.
        hash:
          type: string
        printed_file_name:
          type: string
        origin:
          $ref: '#/components/schemas/AssetOrigin'
          description: >-
            Ignored for template provenance; the server derives it from
            template_render_id.
      oneOf:
        - required:
            - url
        - required:
            - asset_id
      additionalProperties: false
    TextValue:
      type: object
      required:
        - slot
        - value
      properties:
        slot:
          $ref: '#/components/schemas/TextSlotID'
        value:
          type: string
      additionalProperties: false
    ProviderSelectionSource:
      type: string
      enum:
        - explicit
        - event
        - account_default
        - legacy_default
    ProviderAvailability:
      type: string
      enum:
        - preview
        - sandbox_verified
        - production_verified
        - unavailable
    AssetRole:
      type: string
      enum:
        - artwork
        - background
        - individual
        - team
        - logo
        - front
        - back
    AssetOrigin:
      type: object
      properties:
        kind:
          $ref: '#/components/schemas/AssetOriginKind'
        design_id:
          type: string
        design_version:
          type: integer
          minimum: 1
        template_render_id:
          type: string
          readOnly: true
        template_revision_id:
          type: string
          readOnly: true
      additionalProperties: false
    TextSlotID:
      type: string
      enum:
        - text-1
        - text-2
        - text-3
        - text-4
        - text-5
        - text-6
    AssetOriginKind:
      type: string
      enum:
        - whcc-preset
        - batch-relay-design
        - studio-design
        - community-design
        - custom-upload
  responses:
    APIKeyAuthenticationRequired:
      description: A valid Batch Relay API key is required.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    APIKeyForbidden:
      description: The API key cannot perform this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    OrderValidationFailed:
      description: >-
        The order did not satisfy the catalog, option, quantity, address, or
        prepared-media requirements.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    StatefulAPIUnavailable:
      description: >-
        The stateful order service is not configured or is temporarily
        unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

````