From tray-api
Manages Tray e-commerce products via REST API: lists with filters/pagination/sorting, retrieves details, creates/updates/deletes; covers all fields (name, price, stock, EAN, NCM, dimensions, SEO); deletes kits.
npx claudepluginhub tray-tecnologia/tray-api-ai-plugin --plugin tray-apiThis skill uses the workspace's default tool permissions.
> Execute estas verificações antes de gerar qualquer payload ou código:
Monitors deployed URLs for regressions after deploys, merges, or upgrades by checking HTTP status, console errors, network failures, performance (LCP/CLS/INP), content, and API health.
Share bugs, ideas, or general feedback.
Execute estas verificações antes de gerar qualquer payload ou código:
access_token não aparece como literal string no código gerado.when_not_to_use no frontmatter).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.Documentação oficial: https://developers.tray.com.br/#api-de-produtos
| 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.
| 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 |
| 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 |
| Campo | Tipo | Descrição |
|---|---|---|
weight | number | Peso em gramas |
length | number | Comprimento |
width | number | Largura |
height | number | Altura |
cubic_weight | number | Peso cúbico |
| 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 |
| 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 |
| 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 |
| Campo | Tipo | Descrição |
|---|---|---|
metatag | object | {type: "keywords", content: "..."} |
shortcut | string | Slug da URL |
| 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
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.
O body JSON deve envolver os dados na chave "Product":
{
"Product": {
"name": "Camiseta Exemplo",
"price": "99.90",
"stock": 100,
"category_id": 1,
"available": 1
}
}
| 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} |
O endpoint GET /products/:id retorna o objeto Product com dados adicionais:
Properties — características do produtopayment_option_details — opções de parcelamentorelated_categories — categorias associadasall_categories — todas as categoriasProductImage — array de imagens com thumbnails (30px, 90px, 180px em HTTP e HTTPS)Variant — array de variações do produtoProduct obrigatório no body{"Product": {...}} correto no bodylimit, page) e filtros aplicadosaccess_token configuradocategory_id válido se for criar produto (use tray-categorias antes)brand_id válido se quiser associar marca (use tray-marcas antes)