Antes de responder
Execute estas verificações antes de gerar qualquer payload ou código:
- Confirme o método HTTP e endpoint correto para a operação solicitada.
- Identifique os campos obrigatórios listados neste documento — não omita nenhum.
- Verifique que
access_token não aparece como literal string no código gerado.
- Confirme que esta é a skill correta para o recurso (leia
when_not_to_use no frontmatter).
- Execute
node skills/produtos/scripts/validate.mjs '<payload_json>'
para confirmar a estrutura do payload que vai gerar. O validador checa
apenas estrutura (campos obrigatórios, tipos e campos desconhecidos),
nunca valores reais — então monte um payload sintético com placeholders
sempre que os valores vierem de variáveis de ambiente, da entrada do
usuário ou de outras chamadas. Exemplo:
node skills/produtos/scripts/validate.mjs '{"Product":{"name":"<nome>","price":"<preço>"}}'.
Corrija todos os erros antes de retornar o código ao usuário. Até 3
tentativas — se persistir, explique o problema ao usuário.
API de Produtos — Tray
Documentação oficial: https://developers.tray.com.br/#api-de-produtos
Endpoints
| Método |
Endpoint |
Descrição |
| GET |
/products |
Listagem de produtos com paginação, filtros e ordenação |
| GET |
/products/:id |
Consultar dados detalhados de um produto |
| POST |
/products |
Cadastrar novo produto |
| PUT |
/products/:id |
Atualizar dados do produto |
| DELETE |
/products/:id |
Excluir produto |
| DELETE |
/kits/:id |
Excluir kit de produto |
Autenticação: ?access_token={token} em todas as chamadas.
Campos do Produto
Dados Básicos
| Campo |
Tipo |
Limite |
Descrição |
name |
string |
200 chars |
Nome do produto |
ean |
string |
120 chars |
Código de barras (EAN) |
ncm |
string |
8 chars |
Classificação fiscal (NCM) |
description |
string |
4800 chars |
Descrição completa |
description_small |
string |
500 chars |
Descrição curta |
reference |
string |
120 chars |
Referência interna |
Preços
| Campo |
Tipo |
Descrição |
price |
decimal |
Preço de venda |
cost_price |
decimal |
Preço de custo |
promotional_price |
decimal |
Preço promocional |
start_promotion |
date (YYYY-MM-DD) |
Início da promoção |
end_promotion |
date (YYYY-MM-DD) |
Fim da promoção |
ipi_value |
decimal |
Valor do IPI |
Dimensões e Peso
| Campo |
Tipo |
Descrição |
weight |
number |
Peso em gramas |
length |
number |
Comprimento |
width |
number |
Largura |
height |
number |
Altura |
cubic_weight |
number |
Peso cúbico |
Estoque e Disponibilidade
| Campo |
Tipo |
Descrição |
stock |
number |
Quantidade em estoque |
available |
number |
0=indisponível, 1=disponível |
available_in_store |
number |
0=oculto da vitrine, 1=visível |
availability |
string |
Texto de disponibilidade (ex: "Disponível em 3 dias") |
availability_days |
number |
Dias até disponível |
Classificação
| Campo |
Tipo |
Descrição |
category_id |
number |
ID da categoria principal |
brand |
string (120) |
Nome da marca |
brand_id |
number |
ID da marca |
model |
string (150) |
Modelo |
related_categories |
array |
IDs de categorias adicionais |
Exibição e Marketing
| Campo |
Tipo |
Descrição |
hot |
number |
0=normal, 1=destaque |
release |
number |
0=lançado, 1=lançamento |
release_date |
date |
Data de lançamento |
virtual_product |
string |
0=físico, 1=digital/virtual |
free_shipping |
number |
0=frete normal, 1=frete grátis |
warranty |
string |
Descrição da garantia |
upon_request |
number |
Produto sob consulta |
SEO
| Campo |
Tipo |
Descrição |
metatag |
object |
{type: "keywords", content: "..."} |
shortcut |
string |
Slug da URL |
Paginação
| Parâmetro |
Descrição |
limit |
Itens por página (máximo 50, padrão 30) |
page |
Número da página |
Resposta inclui: total, page, offset, limit, maxLimit
Filtros de Listagem
id, name, reference, ean, category_id, brand, available, available_in_store, stock, price, price_range, promotion, free_shipping, release, hot, quantity_sold, created, modified
Ordenação: parâmetro sort com nome do campo. rand para aleatório.
Corpo da Requisição (POST/PUT)
O body JSON deve envolver os dados na chave "Product":
{
"Product": {
"name": "Camiseta Exemplo",
"price": "99.90",
"stock": 100,
"category_id": 1,
"available": 1
}
}
Respostas
| Operação |
Código |
Mensagem |
| Criação |
201 |
{"message": "Created", "id": 123, "code": 201} |
| Atualização |
200 |
{"message": "Saved", "id": 123, "code": 200} |
| Exclusão |
200 |
{"message": "Deleted", "id": 123, "code": 200} |
Resposta de Consulta Individual
O endpoint GET /products/:id retorna o objeto Product com dados adicionais:
Properties — características do produto
payment_option_details — opções de parcelamento
related_categories — categorias associadas
all_categories — todas as categorias
ProductImage — array de imagens com thumbnails (30px, 90px, 180px em HTTP e HTTPS)
Variant — array de variações do produto
Como Usar no Claude Code
Exemplos de Prompt
- "cadastra um novo produto na loja com preço, estoque e categoria"
- "atualiza o estoque e o preço promocional do produto ID 123"
- "lista todos os produtos sem estoque disponível"
- "como filtro produtos por categoria e faixa de preço?"
O que o Claude faz
- Identifica a operação desejada (criar, atualizar, listar ou consultar)
- Gera o código com o wrapper
Product obrigatório no body
- Inclui os campos relevantes para o caso de uso (preço, estoque, dimensões, SEO)
- Adiciona paginação e filtros se for listagem
O que você recebe
- Código funcional da chamada à API com todos os campos necessários
- Wrapper
{"Product": {...}} correto no body
- Parâmetros de paginação (
limit, page) e filtros aplicados
- Tratamento da resposta com os IDs gerados
Pré-requisitos
access_token configurado
category_id válido se for criar produto (use tray-categorias antes)
brand_id válido se quiser associar marca (use tray-marcas antes)
1---2name: tray-produtos3description: API de Produtos da Tray. Utilize quando o desenvolvedor precisar listar, consultar, cadastrar, atualizar ou excluir produtos no catálogo de uma loja Tray. Inclui todos os campos do produto (nome, preço, estoque, EAN, NCM, dimensões, SEO), filtros de listagem, paginação, ordenação e exclusão de kits.4---5
6## Antes de responder
7
8> Execute estas verificações antes de gerar qualquer payload ou código:
9
101. Confirme o método HTTP e endpoint correto para a operação solicitada.
112. Identifique os campos obrigatórios listados neste documento — não omita nenhum.
123. Verifique que `access_token` não aparece como literal string no código gerado.
134. Confirme que esta é a skill correta para o recurso (leia `when_not_to_use` no frontmatter).
145. Execute `node skills/produtos/scripts/validate.mjs '<payload_json>'`
15 para confirmar a estrutura do payload que vai gerar. O validador checa
16 apenas **estrutura** (campos obrigatórios, tipos e campos desconhecidos),
17 nunca valores reais — então monte um payload sintético com placeholders
18 sempre que os valores vierem de variáveis de ambiente, da entrada do
19 usuário ou de outras chamadas. Exemplo:
20 `node skills/produtos/scripts/validate.mjs '{"Product":{"name":"<nome>","price":"<preço>"}}'`.
21 Corrija todos os erros antes de retornar o código ao usuário. Até 3
22 tentativas — se persistir, explique o problema ao usuário.
23
24# API de Produtos — Tray
25
26Documentação oficial: https://developers.tray.com.br/#api-de-produtos
27
28## Endpoints
29
30| Método | Endpoint | Descrição |
31|:--|:--|:--|
32| GET | `/products` | Listagem de produtos com paginação, filtros e ordenação |
33| GET | `/products/:id` | Consultar dados detalhados de um produto |
34| POST | `/products` | Cadastrar novo produto |
35| PUT | `/products/:id` | Atualizar dados do produto |
36| DELETE | `/products/:id` | Excluir produto |
37| DELETE | `/kits/:id` | Excluir kit de produto |
38
39**Autenticação:** `?access_token={token}` em todas as chamadas.
40
41## Campos do Produto
42
43### Dados Básicos
44
45| Campo | Tipo | Limite | Descrição |
46|:--|:--|:--|:--|
47| `name` | string | 200 chars | Nome do produto |
48| `ean` | string | 120 chars | Código de barras (EAN) |
49| `ncm` | string | 8 chars | Classificação fiscal (NCM) |
50| `description` | string | 4800 chars | Descrição completa |
51| `description_small` | string | 500 chars | Descrição curta |
52| `reference` | string | 120 chars | Referência interna |
53
54### Preços
55
56| Campo | Tipo | Descrição |
57|:--|:--|:--|
58| `price` | decimal | Preço de venda |
59| `cost_price` | decimal | Preço de custo |
60| `promotional_price` | decimal | Preço promocional |
61| `start_promotion` | date (YYYY-MM-DD) | Início da promoção |
62| `end_promotion` | date (YYYY-MM-DD) | Fim da promoção |
63| `ipi_value` | decimal | Valor do IPI |
64
65### Dimensões e Peso
66
67| Campo | Tipo | Descrição |
68|:--|:--|:--|
69| `weight` | number | Peso em gramas |
70| `length` | number | Comprimento |
71| `width` | number | Largura |
72| `height` | number | Altura |
73| `cubic_weight` | number | Peso cúbico |
74
75### Estoque e Disponibilidade
76
77| Campo | Tipo | Descrição |
78|:--|:--|:--|
79| `stock` | number | Quantidade em estoque |
80| `available` | number | 0=indisponível, 1=disponível |
81| `available_in_store` | number | 0=oculto da vitrine, 1=visível |
82| `availability` | string | Texto de disponibilidade (ex: "Disponível em 3 dias") |
83| `availability_days` | number | Dias até disponível |
84
85### Classificação
86
87| Campo | Tipo | Descrição |
88|:--|:--|:--|
89| `category_id` | number | ID da categoria principal |
90| `brand` | string (120) | Nome da marca |
91| `brand_id` | number | ID da marca |
92| `model` | string (150) | Modelo |
93| `related_categories` | array | IDs de categorias adicionais |
94
95### Exibição e Marketing
96
97| Campo | Tipo | Descrição |
98|:--|:--|:--|
99| `hot` | number | 0=normal, 1=destaque |
100| `release` | number | 0=lançado, 1=lançamento |
101| `release_date` | date | Data de lançamento |
102| `virtual_product` | string | 0=físico, 1=digital/virtual |
103| `free_shipping` | number | 0=frete normal, 1=frete grátis |
104| `warranty` | string | Descrição da garantia |
105| `upon_request` | number | Produto sob consulta |
106
107### SEO
108
109| Campo | Tipo | Descrição |
110|:--|:--|:--|
111| `metatag` | object | `{type: "keywords", content: "..."}` |
112| `shortcut` | string | Slug da URL |
113
114## Paginação
115
116| Parâmetro | Descrição |
117|:--|:--|
118| `limit` | Itens por página (máximo **50**, padrão **30**) |
119| `page` | Número da página |
120
121**Resposta inclui:** `total`, `page`, `offset`, `limit`, `maxLimit`
122
123## Filtros de Listagem
124
125`id`, `name`, `reference`, `ean`, `category_id`, `brand`, `available`, `available_in_store`, `stock`, `price`, `price_range`, `promotion`, `free_shipping`, `release`, `hot`, `quantity_sold`, `created`, `modified`
126
127**Ordenação:** parâmetro `sort` com nome do campo. `rand` para aleatório.
128
129## Corpo da Requisição (POST/PUT)
130
131O body JSON deve envolver os dados na chave `"Product"`:
132
133```json
134{
135 "Product": {
136 "name": "Camiseta Exemplo",
137 "price": "99.90",
138 "stock": 100,
139 "category_id": 1,
140 "available": 1
141 }
142}
143```
144
145## Respostas
146
147| Operação | Código | Mensagem |
148|:--|:--|:--|
149| Criação | 201 | `{"message": "Created", "id": 123, "code": 201}` |
150| Atualização | 200 | `{"message": "Saved", "id": 123, "code": 200}` |
151| Exclusão | 200 | `{"message": "Deleted", "id": 123, "code": 200}` |
152
153## Resposta de Consulta Individual
154
155O endpoint `GET /products/:id` retorna o objeto `Product` com dados adicionais:
156
157- `Properties` — características do produto
158- `payment_option_details` — opções de parcelamento
159- `related_categories` — categorias associadas
160- `all_categories` — todas as categorias
161- `ProductImage` — array de imagens com thumbnails (30px, 90px, 180px em HTTP e HTTPS)
162- `Variant` — array de variações do produto
163
164## Como Usar no Claude Code
165
166### Exemplos de Prompt
167
168- "cadastra um novo produto na loja com preço, estoque e categoria"
169- "atualiza o estoque e o preço promocional do produto ID 123"
170- "lista todos os produtos sem estoque disponível"
171- "como filtro produtos por categoria e faixa de preço?"
172
173### O que o Claude faz
174
1751. Identifica a operação desejada (criar, atualizar, listar ou consultar)
1762. Gera o código com o wrapper `Product` obrigatório no body
1773. Inclui os campos relevantes para o caso de uso (preço, estoque, dimensões, SEO)
1784. Adiciona paginação e filtros se for listagem
179
180### O que você recebe
181
182- Código funcional da chamada à API com todos os campos necessários
183- Wrapper `{"Product": {...}}` correto no body
184- Parâmetros de paginação (`limit`, `page`) e filtros aplicados
185- Tratamento da resposta com os IDs gerados
186
187### Pré-requisitos
188
189- `access_token` configurado
190- `category_id` válido se for criar produto (use `tray-categorias` antes)
191- `brand_id` válido se quiser associar marca (use `tray-marcas` antes)