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

# Product

> Referência do objeto Product — contrato público TypeScript 2026-08.

Contrato canônico resumido: [Product Contract](https://docs-loja.usecorvex.com.br/reference/contracts/product.md).

Fonte normativa: `Product`, `ProductSummary` em `@corvex/theme-sdk` types.

***

## Disponível em

* `usePage('product').product`
* `schema.data: ["product"]` → `data.product`
* `storefront.products.list()` / `get()` / `getByHandle()`
* Um campo `type: "product"` guarda só o id. `get(id)` devolve o objeto. `get('')` devolve `null`
* Resultados de busca e conexões `products` em coleção

***

## ProductSummary

| Campo | Tipo | Nullable | Descrição |
| - | - | - | - |
| `id` | `string` | não | UUID |
| `handle` | `string` | não | Slug URL |
| `url` | `string` | não | Caminho relativo |
| `title` | `string` | não | Nome |
| `name` | `string` | sim | Deprecated — usar `title` |
| `featuredImage` | `Image` | sim | Imagem principal |
| `price` | `Money` | não | Preço de venda |
| `compareAtPrice` | `Money` | sim | Preço comparativo |
| `availableForSale` | `boolean` | não | Variante comprável existe |
| `featured` | `boolean` | não | O mapper sempre envia boolean |

`mapProductSummary` também devolve `stock`, `shortDescription` e `reviewSummary`. Eles não estão na tabela mínima acima.

***

## Product (extends ProductSummary)

| Campo | Tipo | Nullable | Descrição |
| - | - | - | - |
| `description` | `string` | sim | Texto plano |
| `descriptionHtml` | `string` | sim | HTML |
| `vendor` | `string` | sim | Marca / fabricante |
| `images` | `Image[]` | não | Galeria |
| `variants` | `ProductVariant[]` | não | Variantes |
| `options` | `ProductOption[]` | não | Opções (Cor, Tamanho) |
| `categories` | `Category[]` | não | Categorias |
| `tags` | `string[]` | não | Tags |
| `seo` | `Seo` | não | Meta SEO |
| `createdAt` | `string` | não | ISO 8601 |
| `updatedAt` | `string` | não | ISO 8601 |

`mapProduct` (usado por `get` e por `list`) também repassa `physical`, `logistics` e `metafields` quando a API envia. O teste `product.test.js` cobre isso. Não invente chaves que a resposta não trouxe.

***

## ProductOption

| Campo | Tipo |
| - | - |
| `name` | `string` |
| `values` | `string[]` |

***

## Exemplo — listagem

```jsx theme={"theme":{"light":"github-light","dark":"github-dark"}}
import { useStorefront } from '@corvex/theme-sdk';

const storefront = useStorefront();
const { nodes } = await storefront.products.list({ first: 8, featured: true });
```

## Exemplo — página de produto

```jsx theme={"theme":{"light":"github-light","dark":"github-dark"}}
import { usePage } from '@corvex/theme-sdk';

export default function ProductTitle() {
  const { product } = usePage('product');
  return <h1>{product.title}</h1>;
}
```

***

## Tipos relacionados

* [Product Variant](https://docs-loja.usecorvex.com.br/data/resources/product-variant.md)
* [Money](https://docs-loja.usecorvex.com.br/data/resources/money.md)
* [Image](https://docs-loja.usecorvex.com.br/data/resources/image.md)
* [Coleção](https://docs-loja.usecorvex.com.br/data/resources/category.md)
* [Product Card Cookbook](https://docs-loja.usecorvex.com.br/cookbook/product-card.md) — exibição `ProductSummary`
* [Variant Selector Cookbook](https://docs-loja.usecorvex.com.br/cookbook/variant-selector.md) — `options` / `variants`


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