MANDATORY: Tool Calls Required Before Answering
Estas chamadas são OBRIGATÓRIAS, não opcionais. Execute-as antes de gerar qualquer código ou payload. Se você está respondendo sem ter chamado as duas ferramentas abaixo, pare e chame agora.
1. Buscar documentação atualizada (sempre)
node skills/tray-dev/scripts/search_docs.mjs --topic=marcas "<termo da pergunta>"
<TOPIC_SLUG>: ver tabela emskills/tray-dev/SKILL.md.- Use os trechos retornados como fonte primária; este SKILL.md é resumo.
2. Validar payload localmente (antes de retornar código)
node skills/marcas/scripts/validate.mjs --schema=<SCHEMA_NAME> '<payload_json>'
- Schemas disponíveis:
marca.create,marca.update. Use--list-schemaspara confirmar. - Exit codes:
0válido ·1inválido ·2erro de uso. - Para output programático:
--json. - Corrija todos os erros antes de retornar o código (até 3 tentativas).
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_tokennão aparece como literal string no código gerado. - Confirme que esta é a skill correta para o recurso (leia
when_not_to_useno frontmatter).
API de Marcas — Tray
Documentação oficial: https://developers.tray.com.br/#api-de-marca-do-produto
Endpoints
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /products/brands |
Listagem de marcas com paginação e filtros |
| GET | /products/brands/:id |
Consultar dados de uma marca por ID |
| POST | /products/brands |
Cadastrar nova marca |
| PUT | /products/brands/:id |
Atualizar dados da marca |
| DELETE | /products/brands/:id |
Excluir marca |
Autenticação: ?access_token={token} em todas as chamadas.
Alias não oficial: a rota
/brands(sem o prefixo/products/) também retorna HTTP 200 nesta API, mas não é documentada oficialmente pela Tray. Use sempre/products/brandspara garantir compatibilidade e aderência à documentação oficial.
Campos da Marca
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
number | — | ID da marca (retornado pela API) |
brand |
string | Sim | Nome da marca |
slug |
string | Não | Slug para URL amigável (gerado automaticamente se não informado) |
⚠️ O campo do nome da marca é
brand, NÃOname. Enviarnameresulta em"Invalid data provided"(HTTP 400) — a API ignora o campo desconhecido e falha porbrandausente. Os campos aceitos no payload são apenasbrandeslug. Os camposdescriptioneimagenão existem nesta API de marcas.
Atenção (causa #1 de HTTP 400 neste recurso): o campo do nome da marca é
brand, nãoname. Enviar{"Brand": {"name": "Nike"}}resulta emHTTP 400. Confirmado contra a doc oficial: o body e a resposta usambrand(ex.:{"Brand": {"slug": "nike", "brand": "Nike"}}), e o filtro de listagem também ébrand(nãoname).
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
| Filtro | Tipo | Descrição |
|---|---|---|
id |
number | Filtrar por ID da marca |
brand |
string | Filtrar por nome da marca |
Corpo da Requisição (POST/PUT)
{
"Brand": {
"brand": "Nike",
"slug": "nike"
}
}
Respostas
| Operação | Código | Mensagem |
|---|---|---|
| Criação | 201 | {"message": "Created", "id": 10, "code": 201} |
| Atualização | 200 | {"message": "Saved", "id": 10, "code": 200} |
| Exclusão | 200 | {"message": "Deleted", "id": 10, "code": 200} |
Exemplo de Resposta — Listar Marcas
{
"paging": {
"total": 25,
"page": 1,
"offset": 0,
"limit": 30,
"maxLimit": 50
},
"Brands": [
{
"Brand": {
"id": "1",
"brand": "Nike",
"slug": "nike"
}
}
]
}
Exemplo de Resposta — Consultar Marca por ID
{
"Brand": {
"id": "1",
"brand": "Nike",
"slug": "nike"
}
}
Boas Práticas
- Crie marcas antes dos produtos — ao cadastrar produtos, o
brand_iddeve referenciar uma marca existente - Use slugs descritivos — o slug é usado na URL da página de marca na vitrine; mantenha-o limpo e legível
- Evite duplicidade — consulte a listagem antes de criar para evitar marcas duplicadas
- Campo correto — use sempre
brandpara o nome da marca;nameé ignorado e causa erro - Exclusão segura — não exclua marcas que possuam produtos associados; reatribua os produtos antes
Como Usar no Claude Code
Exemplos de Prompt
- "cadastra as marcas Nike, Adidas e Puma"
- "lista todas as marcas disponíveis na loja"
- "verifica se a marca Samsung já existe antes de criar"
- "atualiza o slug da marca ID 10"
O que o Claude faz
- Gera o código de criação com wrapper
Brand, usando o campobrand(e slug automático) - Inclui verificação de duplicidade via
GET /products/brands?brand=...antes de criar - Monta o payload apenas com os campos aceitos (
brand,slug) - Explica que o
brand_idretornado deve ser usado ao cadastrar produtos
O que você recebe
- Código de criação de marca com wrapper
{"Brand": {...}}correto e campobrand - Verificação de duplicidade antes de criar
brand_idextraído da resposta para uso em produtos- Código de listagem com paginação
Pré-requisitos
access_tokenconfigurado