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

# Products & Variants API: Catalog Access for Gifting

> Access Snappy's global catalog, product variants, and tags to render a native gifting marketplace in your own UI.

A **Product** is a single specific item available in the Snappy catalog - a physical gift, branded swag, a digital item, or a local experience.

A **Variant** represents the orderable version of a Product, holding the specific details required to place an order such as size, color, pricing, and supported countries.

Because the Variant is always the orderable unit, **every Product contains at least one Variant** - even Products with no variations will have a single Variant object representing the item.

When placing an order, always use the `variantId` from the Product's `variants` array.

<Tip>
  Want to understand how **Products** & **Variants** fit into the bigger picture? Check out the [Core Concepts & Data Models](/pages/snappy-core-concepts-and-data-models) page.
</Tip>

## The Product Object

| Field        | Type   | Description                                                                                                                                                     |
| :----------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`         | string | Unique identifier for the Product                                                                                                                               |
| `title`      | string | Display name of the Product                                                                                                                                     |
| `category`   | string | Product category path (e.g. `Electronics / Audio / Headphones`)                                                                                                 |
| `types`      | array  | The type of product. Possible values: `digital`, `physical`                                                                                                     |
| `brand`      | object | The brand associated with this Product. Contains `id`, `name`, and `description`                                                                                |
| `coverImage` | object | The primary display image for the Product. Contains `src`, `type`, and `position`                                                                               |
| `mediaItems` | array  | Additional images for the Product. Each item contains `src`, `type`, `position`, and `publicCloudinaryId`                                                       |
| `options`    | object | The available option dimensions for this Product (e.g. `color`, `size`, `scent`, `flavor`). Used to understand what variations exist before retrieving Variants |
| `tags`       | array  | Tags associated with this Product for categorization and filtering. Each tag contains `id`, `name`, `color`, and `position`                                     |
| `variants`   | array  | The orderable variations of this Product. Always contains at least one entry. See [The Variant Object](#the-variant-object) below                               |
| `notices`    | object | Any additional notices or disclaimers associated with this Product                                                                                              |

***

## The Variant Object

A Variant represents a specific, orderable version of a Product. When placing an order you must always specify the `variantId` - the Product ID alone is not sufficient.

| Field                | Type   | Description                                                                                                                                                           |
| :------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                 | string | Unique identifier for the Variant. This is the ID required when placing an order                                                                                      |
| `title`              | string | Display name of the Variant                                                                                                                                           |
| `optionAttributes`   | object | The specific option values for this Variant (e.g. `color: Black`, `size: S`)                                                                                          |
| `category`           | string | Full category path for this Variant                                                                                                                                   |
| `types`              | array  | The type of variant. Possible values: `digital`, `physical`                                                                                                           |
| `brand`              | object | The brand associated with this Variant. Contains `id`, `name`, and `description`                                                                                      |
| `description`        | string | Short description of the Variant                                                                                                                                      |
| `features`           | string | Key features of the Variant                                                                                                                                           |
| `components`         | string | Components included with the Variant                                                                                                                                  |
| `mediaItems`         | array  | Images specific to this Variant. Each item contains `src`, `type`, `position`, and `publicCloudinaryId`                                                               |
| `information`        | object | Detailed product information including `description`, `features`, `specifications` (dimensions, materials, weight, color family), and `including` (what's in the box) |
| `pricing`            | object | Pricing details by country. Each entry contains `cost`, `totalFee`, `totalTax`, and `totalFinalCost`                                                                  |
| `supportedCountries` | array  | List of countries this Variant can be shipped to, identified by `countryCode`                                                                                         |
| `tags`               | array  | Tags associated with this Variant                                                                                                                                     |
| `notices`            | object | Any additional notices or disclaimers specific to this Variant                                                                                                        |
| `position`           | number | Display order of this Variant relative to others in the same Product                                                                                                  |

***

## Key Concepts & Business Rules

#### **Always order by Variant ID**

Products are the display-level object - they represent what a recipient sees when browsing. Variants are the orderable units. When placing an order via `POST /orders`, always use the `variantId`, not the `productId`.

Every Product contains a `variants` array with at least one entry, even if the product has no variations. For products without variations, the array will contain a single Variant representing the product itself. Always retrieve the `variantId` from this array before placing an order - never assume a Product can be ordered without one.

#### **Options vs. Variant Attributes**

The `options` field on the Product object shows the available option dimensions (e.g. `color`, `size`). The `optionAttributes` field on each Variant shows the specific combination of those options that Variant represents. Use `options` to understand what choices exist, and `optionAttributes` to identify the exact Variant.

#### **Pricing is per country**

The `pricing` object on each Variant is keyed by country code. Always check that a Variant's `supportedCountries` list includes the recipient's country before placing an order.

#### **Product types**

Products and Variants carry a `types` field indicating whether the item is `digital` or `physical`. This affects fulfillment behavior - digital items are delivered electronically, physical items are shipped to the recipient's address.

#### **Tags**

Tags exist at both the Product and Variant level and can be used to filter and categorize items when building a catalog UI. Retrieve all available tags using the `GET /products/tags` endpoint.

***

## How to Work with Products & Variants

**Retrieving Product Tags**

Retrieve a list of all available product tags. Tags can be used to categorize and filter products when building your catalog UI:

```text theme={null}
GET /products/tags
```

Supports searching by tag name using the `title` parameter. Results are paginated.

**Retrieving Products**

Search for and retrieve a list of available products based on your specified criteria:

```text theme={null}
GET /products
```

Filtering options:

* Budget range
* Specific collection
* Brand

**Retrieving Variants by Product ID**

Retrieve **a list of all Variants** for a specific Product:

```text theme={null}
GET /products/{productId}/variants
```

Filtering options:

* Budget range
* Supported countries

**Retrieving Variant by ID**

Retrieve **a specific Variant** by its ID:

```text theme={null}
GET /variants/{variantId}
```
