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

> Discover canonical print products and prepare their media.

Batch Relay publishes provider-neutral canonical products. 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}
```

Each catalog product provides its immutable `revision`, physical output,
quantity semantics, selectable options, and exact `asset_requirements`. Submit
that revision with the prepared media for your selected product. Batch Relay
does not crop, rotate, render, or upload arbitrary images.

## Prepared assets

Every order item has an `assets` array. Each asset has a semantic `role`, a
prepared HTTPS `url`, and its pixel dimensions. Quote and submission requests
also require immutable diagnostic metadata such as `file_size_bytes` and
`format`.

Examples of roles include `artwork`, `background`, `individual`, `team`,
`logo`, `front`, and `back`. The catalog is authoritative for which roles are
required and each role's aspect ratio.

## Memory Mates

Batch Relay supports these canonical products:

| Product ID                    | Output        | Required asset roles                       |
| ----------------------------- | ------------- | ------------------------------------------ |
| `memory-mate-8x10-horizontal` | 10 × 8 inches | `background`, `individual`, `team`, `logo` |
| `memory-mate-8x10-vertical`   | 8 × 10 inches | `background`, `individual`, `team`, `logo` |

Memory Mates support the `text-style` option:

* `black-no-stroke`
* `black-white-stroke`
* `white-black-stroke`
* `white-no-stroke`

They also publish six semantic text slots in `text_requirements`: `text-1`
through `text-6`. Supply optional values through the order line's `texts`
array. Intentional whitespace is preserved.

```json theme={null}
{
  "product": { "id": "memory-mate-8x10-vertical", "revision": 1 },
  "quantity": 1,
  "options": [{ "option_id": "text-style", "value": "white-no-stroke" }],
  "assets": [
    { "role": "background", "url": "https://assets.example.com/background.jpg", "pixel_width": 2400, "pixel_height": 3000 },
    { "role": "individual", "url": "https://assets.example.com/individual.jpg", "pixel_width": 2100, "pixel_height": 1500 },
    { "role": "team", "url": "https://assets.example.com/team.jpg", "pixel_width": 1500, "pixel_height": 2100 },
    { "role": "logo", "url": "https://assets.example.com/logo.png", "pixel_width": 1000, "pixel_height": 1000 }
  ],
  "texts": [
    { "slot": "text-1", "value": "Varsity" },
    { "slot": "text-2", "value": "Knights" },
    { "slot": "text-3", "value": " " }
  ]
}
```

The current public labels are intentionally generic (`Text 1` through `Text
6`). Their final visual labels and provider-layout mapping are still under
verification. Use the returned slot IDs; never infer or depend on a provider's
internal text-node IDs.

For now, a Memory Mate background is simply a prepared `background` asset URL.
The public API does not yet publish hosted theme/background catalogs or accept
a theme identifier. Optional asset `origin` metadata can describe a preset,
Batch Relay design, studio design, community design, or custom upload without
changing fulfillment behavior.

See the generated API reference for the complete schemas.
