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

# Products

> Browse every canonical Batch Relay product and copy a verified prepared-media contract.

Batch Relay publishes provider-neutral canonical products. The catalog response
contains `families` for browsing and `products` for ordering. Every product has a
stable ID, immutable fulfillment revision, explicit physical output, quantity
meaning, options, and prepared-media contract. Fetch the catalog instead of
hardcoding a provider SKU, image shape, or product alias:

```http theme={null}
GET /v1/catalog/products
GET /v1/catalog/products/{product_id}
```

Submit that revision with prepared media for your chosen product. Batch Relay
does not crop or silently alter order artwork. The public API can copy an
external source into managed fulfillment storage, and the optional template
renderer can create composed artwork before fulfillment.

## Start with the catalog

The catalog is the live authority for availability, lifecycle status, revisions,
and option values. A family groups related immutable variants. Orders and quotes
still use a concrete product ID and revision. If a page and the catalog
disagree, use the catalog response.

| Category | Products |
| - | - |
| [Prints](#prints) | 4 × 5, 4 × 6, 5 × 5, 5 × 7, 3.5 × 5, 8 × 10, 12 × 18, 16 × 20, wallet sheets |
| [Keepsakes](#keepsakes) | Magnets, buttons, keychains, bag tags, contemporary plaques |
| [Trader products](#trader-products) | Trader cards and trader-card magnets |
| [Designed output](#designed-output) | Memory Mates and magazine covers rendered into ordinary print artwork |
| [Digital delivery](#digital-delivery) | Digital Download catalog record, not a print-order API fulfillment route |

## Prepared assets

Every order item has an `assets` array. Each asset has a semantic `role` and
exactly one source: an external HTTPS `url` or an authorized `asset_id`.
Creating a quote copies URL sources into private managed fulfillment storage;
an `asset_id` reuses already-managed bytes without another copy. Immutable
dimensions, size, format, and SHA-256 metadata are resolved from the stored
bytes rather than trusted from caller hints.

Examples of roles include `artwork`, `background`, `individual`, `team`,
`logo`, `front`, and `back`. The catalog is authoritative for which roles are
required, each role's aspect ratio, and `rotation_policy`. A role appears
exactly once. A URL only needs to remain available through successful quote
creation; submission and fulfillment use the quote-owned managed snapshot.

The product examples below focus on the product-specific portion of an item.
An external URL source can be supplied as:

```json theme={null}
{
  "role": "artwork",
  "url": "https://cdn.example.com/orders/ord_123/artwork.jpg",
  "printed_file_name": "ord_123-artwork.jpg"
}
```

For an existing managed asset, replace `url` with `asset_id`. URL-backed quote
requests require an `Idempotency-Key`; retries reuse the same immutable copy.
Provider offers are discovery-only. They do not ingest assets or create a
submit-ready total.

## Orientation and provider placement

Every asset role defaults to `rotation_policy: "fixed"`: prepare the exact
orientation and ratio listed on its product page. Batch Relay rejects a wrong
canonical role or ratio; it never edits the image to make it fit.

Only a role published with `rotation_policy: "allowed"` accepts the reciprocal
ratio. Standard prints and active Memory Mates allow rotation.
When a template is used, its renderer produces a final ordinary print artifact
in the selected output geometry before the fulfillment step.

For the current WHCC adapter, native `AutoRotate` is enabled only for an
explicitly allowed role. It is disabled for fixed roles. The adapter preflights
placement against the verified provider node and rejects a fit that would
require more than a 1.25% center crop. This is provider-side placement
reconciliation, not an image transformation.

## Prints

| Product | Output per quantity | Prepared asset |
| - | - | - |
| [Print variants](/products/prints) | 1 print | `artwork`; exact ratio comes from the selected size variant |
| [Wallet sheet](/products/wallet-set-4) | 4 wallets | `artwork` `5:7` |

## Keepsakes

| Product | Output per quantity | Prepared asset roles |
| - | - | - |
| [4 × 5 Magnet](/products/magnet-4x5) | 1 magnet | `artwork` `4:5` |
| [3-inch Photo Button](/products/photo-button-3) | 1 button | `artwork` `1:1` |
| [Acrylic Keychains](/products/acrylic-keychains) | 1 keychain | Small `4:5`; large `7:5`; both require `front` and `back` |
| [Metal Keychain](/products/metal-keychain) | 1 keychain | `front`, `back` `15:11` |
| [Bag Tags](/products/bag-tags) | 1 bag tag | Small and large use separate two-sided contracts |
| [Contemporary Plaques](/products/contemporary-plaques) | 1 plaque | 5 × 7 uses `4:5`; 8 × 10 uses `7:9` |

## Trader products

| Product | Output per quantity | Prepared asset roles |
| - | - | - |
| [Trader Cards](/products/trader-cards-12) | 12 cards | `front` `11:15`, `individual` `9:7`, `back` `15:11` |
| [Trader Card Magnets](/products/trader-card-magnets-2) | 2 magnets | `front` `21:16`, `back` `7:5` |

## Designed output

`template_requirement` controls whether an order may use prepared artwork
directly:

* `optional` means the product can use prepared artwork directly or a succeeded
  Batch Relay render. Standard photographic prints use this policy.
* `required` means the product must use the `asset_id` from a succeeded Batch
  Relay render and the matching `template_render_id`. A raw URL or unrelated
  managed asset is rejected.
* `unsupported` means the product has no supported template workflow.

The designed products below all use `template_requirement: "required"`. Their
rendered `artwork` remains attached to the Memory Mate or magazine-cover order
record, then fulfills through its pinned standard-print target. See [Template
renders](/template-renders) for the render workflow.

| Product | Output per quantity | Prepared asset |
| - | - | - |
| [5 × 7 Memory Mate](/products/memory-mates) | 1 print | `artwork` `5:7` or `7:5` |
| [8 × 10 Memory Mate](/products/memory-mates) | 1 print | `artwork` `4:5` or `5:4` |
| [Magazine Cover, 8 × 10](/products/magazine-cover-8x10) | 1 print | `artwork` `4:5` |

## Digital delivery

[Digital Download](/products/digital-download) is a live catalog record, but
the public print-order API does not create or deliver digital entitlements.
Do not put it in a print-order request.

## Pricing and availability are explicit

Catalog products identify the canonical product and its fulfillment contract.
Provider offers identify what a given provider can supply and its exact
per-unit provider cost:

```http theme={null}
GET /v1/catalog/products/{product_id}/offers
```

Offers do not expose provider-native SKUs or adapter mappings. A product list
may show a price range for discovery, but that range is not a quote and cannot
be submitted. Create a quote to freeze the selected offers, shipping, tax, the
`api-access-fee-v1` policy, and total for 15 minutes. The quote's
`provider_offer_lines` records the exact provider offer, unit cost, quantity,
and line subtotal for each requested order line.

Catalog support means Batch Relay recognizes and validates the canonical
contract. Offer availability and hosted quote availability are separate
decisions. Use the offer and quote response for the environment in which you
will order; do not infer fulfillment readiness from a product page.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.