MANDATORY: Tool Call Required Before Answering
Esta chamada é OBRIGATÓRIA, não opcional. Execute-a antes de gerar
qualquer código ou payload. Se você está respondendo sem ter chamado a
ferramenta abaixo, pare e chame agora.
Buscar documentação atualizada (sempre)
node skills/tray-dev/scripts/search_docs.mjs --topic=clientes "<termo da pergunta>"
<TOPIC_SLUG>: ver tabela em skills/tray-dev/SKILL.md.
- Use os trechos retornados como fonte primária; este SKILL.md é resumo.
Nota: este recurso ainda não tem validate.mjs local. Você é responsável
por revisar campos obrigatórios contra a doc retornada e o resumo abaixo.
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).
API de Endereços de Clientes — Tray
Documentação oficial: https://developers.tray.com.br/#api-de-clientes
Endpoints
| Método |
Endpoint |
Descrição |
| GET |
/customers/addresses |
Listar endereços (filtre por customer_id na query) |
| GET |
/customers/addresses/:id |
Consultar endereço específico por ID |
| POST |
/customers/addresses |
Cadastrar novo endereço (customer_id vai no corpo) |
| PUT |
/customers/addresses/:id |
Atualizar endereço |
| DELETE |
/customers/addresses/:id |
Excluir endereço |
Autenticação: ?access_token={token} em todas as chamadas.
⚠️ Rota correta é /customers/addresses (e /customers/addresses/:id),
NÃO /customers/:id/addresses. O caminho com o id do cliente no meio
retorna HTTP 404. O customer_id vai na query (listagem/filtro) ou no
corpo (criação), nunca no path.
Campos do Endereço
| Campo |
Tipo |
Obrigatório |
Descrição |
id |
number |
— |
ID do endereço (retornado pela API) |
customer_id |
number |
Sim |
ID do cliente (no corpo na criação; na query na listagem) |
recipient |
string |
Sim |
Nome do destinatário |
street |
string |
Sim |
Nome da rua/logradouro |
number |
string |
Sim |
Número do endereço |
complement |
string |
Não |
Complemento (apto, bloco, sala) |
neighborhood |
string |
Sim |
Bairro |
city |
string |
Sim |
Cidade |
state |
string |
Sim |
Estado (sigla UF, ex: "SP", "RJ") |
zipcode |
string |
Sim |
CEP (formato: "01001000" — apenas números) |
country |
string |
Não |
País (padrão: "Brasil") |
type |
string |
Não |
Tipo do endereço: "delivery" (entrega) ou "billing" (cobrança) |
is_default |
number |
Não |
1 = endereço padrão, 0 = endereço secundário |
Paginação
| Parâmetro |
Descrição |
limit |
Itens por página (máximo 50, padrão 30) |
page |
Número da página |
Corpo da Requisição (POST)
{
"Address": {
"recipient": "João Silva",
"street": "Rua Augusta",
"number": "1500",
"complement": "Apto 42",
"neighborhood": "Consolação",
"city": "São Paulo",
"state": "SP",
"zipcode": "01304001",
"country": "Brasil",
"type": "delivery",
"is_default": 1
}
}
Respostas
| Operação |
Código |
Mensagem |
| Criação |
201 |
{"message": "Created", "id": 200, "code": 201} |
| Exclusão |
200 |
{"message": "Deleted", "id": 200, "code": 200} |
Exemplo de Resposta — Listar Endereços
{
"Addresses": [
{
"Address": {
"id": "200",
"customer_id": "50",
"recipient": "João Silva",
"street": "Rua Augusta",
"number": "1500",
"complement": "Apto 42",
"neighborhood": "Consolação",
"city": "São Paulo",
"state": "SP",
"zipcode": "01304001",
"country": "Brasil",
"type": "delivery",
"is_default": "1"
}
}
]
}
Exemplo de Resposta — Consultar Endereço por ID
{
"Address": {
"id": "200",
"customer_id": "50",
"recipient": "João Silva",
"street": "Rua Augusta",
"number": "1500",
"complement": "Apto 42",
"neighborhood": "Consolação",
"city": "São Paulo",
"state": "SP",
"zipcode": "01304001",
"country": "Brasil",
"type": "delivery",
"is_default": "1"
}
}
Boas Práticas
- CEP apenas números — envie o CEP sem pontos ou traços (ex: "01304001" e não "01304-001")
- Estado em sigla — use a sigla de 2 letras da UF (ex: "SP", "RJ", "MG")
- Endereço padrão — ao definir
is_default: 1, esse passa a ser o endereço principal do cliente
- Tipo do endereço — diferencie entre endereços de entrega ("delivery") e cobrança ("billing") para checkout correto
- Valide o CEP — antes de cadastrar, valide o CEP via serviço externo (ex: ViaCEP) para garantir dados corretos
- Não edite, recrie — a API não possui endpoint PUT para endereços; para alterar, exclua o antigo e crie um novo
- Recursos relacionados — consulte o skill
tray-clientes para gerenciar dados do cliente
Como Usar no Claude Code
Exemplos de Prompt
- "cadastra o endereço de entrega do cliente 50 em São Paulo"
- "lista todos os endereços do cliente ID 50"
- "implementa o fluxo de cadastro de múltiplos endereços para o cliente"
- "como altero o endereço padrão de um cliente?"
O que o Claude faz
- Gera o código de criação com wrapper
Address e todos os campos obrigatórios
- Formata o CEP sem pontuação e o estado em sigla UF
- Explica que não há endpoint PUT — para alterar, deve excluir e recriar
- Demonstra como definir
is_default: 1 e o type (delivery/billing)
O que você recebe
- Código de criação com
{"Address": {...}} e formatação correta dos campos
- Código de listagem dos endereços do cliente
- Fluxo de atualização:
DELETE + novo POST
- Exemplo de endereço de entrega e cobrança separados
Pré-requisitos
access_token configurado
customer_id do cliente já cadastrado via tray-clientes
1---2name: tray-enderecos-cliente3description: API de Endereços de Clientes da Tray. Utilize quando o desenvolvedor precisar gerenciar os endereços cadastrados dos clientes, incluindo listagem, consulta individual, criação e exclusão. Suporta endereços de entrega e cobrança, com campos completos do padrão brasileiro (CEP, bairro, cidade, estado, complemento).4---56## MANDATORY: Tool Call Required Before Answering78> **Esta chamada é OBRIGATÓRIA, não opcional.** Execute-a antes de gerar9> qualquer código ou payload. Se você está respondendo sem ter chamado a10> ferramenta abaixo, **pare e chame agora**.1112### Buscar documentação atualizada (sempre)1314```bash15node skills/tray-dev/scripts/search_docs.mjs --topic=clientes "<termo da pergunta>"16```1718- `<TOPIC_SLUG>`: ver tabela em `skills/tray-dev/SKILL.md`.19- Use os trechos retornados como fonte primária; este SKILL.md é resumo.2021> **Nota:** este recurso ainda não tem `validate.mjs` local. Você é responsável22> por revisar campos obrigatórios contra a doc retornada e o resumo abaixo.2324## Antes de responder2526> Execute estas verificações antes de gerar qualquer payload ou código:27281. Confirme o método HTTP e endpoint correto para a operação solicitada.292. Identifique os campos obrigatórios listados neste documento — não omita nenhum.303. Verifique que `access_token` não aparece como literal string no código gerado.314. Confirme que esta é a skill correta para o recurso (leia `when_not_to_use` no frontmatter).3233# API de Endereços de Clientes — Tray3435Documentação oficial: https://developers.tray.com.br/#api-de-clientes3637## Endpoints3839| Método | Endpoint | Descrição |40|:--|:--|:--|41| GET | `/customers/addresses` | Listar endereços (filtre por `customer_id` na query) |42| GET | `/customers/addresses/:id` | Consultar endereço específico por ID |43| POST | `/customers/addresses` | Cadastrar novo endereço (`customer_id` vai no corpo) |44| PUT | `/customers/addresses/:id` | Atualizar endereço |45| DELETE | `/customers/addresses/:id` | Excluir endereço |4647**Autenticação:** `?access_token={token}` em todas as chamadas.4849> ⚠️ **Rota correta é `/customers/addresses` (e `/customers/addresses/:id`),50> NÃO `/customers/:id/addresses`.** O caminho com o id do cliente no meio51> retorna HTTP 404. O `customer_id` vai na **query** (listagem/filtro) ou no52> **corpo** (criação), nunca no path.5354## Campos do Endereço5556| Campo | Tipo | Obrigatório | Descrição |57|:--|:--|:--|:--|58| `id` | number | — | ID do endereço (retornado pela API) |59| `customer_id` | number | Sim | ID do cliente (no corpo na criação; na query na listagem) |60| `recipient` | string | Sim | Nome do destinatário |61| `street` | string | Sim | Nome da rua/logradouro |62| `number` | string | Sim | Número do endereço |63| `complement` | string | Não | Complemento (apto, bloco, sala) |64| `neighborhood` | string | Sim | Bairro |65| `city` | string | Sim | Cidade |66| `state` | string | Sim | Estado (sigla UF, ex: "SP", "RJ") |67| `zipcode` | string | Sim | CEP (formato: "01001000" — apenas números) |68| `country` | string | Não | País (padrão: "Brasil") |69| `type` | string | Não | Tipo do endereço: "delivery" (entrega) ou "billing" (cobrança) |70| `is_default` | number | Não | 1 = endereço padrão, 0 = endereço secundário |7172## Paginação7374| Parâmetro | Descrição |75|:--|:--|76| `limit` | Itens por página (máximo **50**, padrão **30**) |77| `page` | Número da página |7879## Corpo da Requisição (POST)8081```json82{83 "Address": {84 "recipient": "João Silva",85 "street": "Rua Augusta",86 "number": "1500",87 "complement": "Apto 42",88 "neighborhood": "Consolação",89 "city": "São Paulo",90 "state": "SP",91 "zipcode": "01304001",92 "country": "Brasil",93 "type": "delivery",94 "is_default": 195 }96}97```9899## Respostas100101| Operação | Código | Mensagem |102|:--|:--|:--|103| Criação | 201 | `{"message": "Created", "id": 200, "code": 201}` |104| Exclusão | 200 | `{"message": "Deleted", "id": 200, "code": 200}` |105106## Exemplo de Resposta — Listar Endereços107108```json109{110 "Addresses": [111 {112 "Address": {113 "id": "200",114 "customer_id": "50",115 "recipient": "João Silva",116 "street": "Rua Augusta",117 "number": "1500",118 "complement": "Apto 42",119 "neighborhood": "Consolação",120 "city": "São Paulo",121 "state": "SP",122 "zipcode": "01304001",123 "country": "Brasil",124 "type": "delivery",125 "is_default": "1"126 }127 }128 ]129}130```131132## Exemplo de Resposta — Consultar Endereço por ID133134```json135{136 "Address": {137 "id": "200",138 "customer_id": "50",139 "recipient": "João Silva",140 "street": "Rua Augusta",141 "number": "1500",142 "complement": "Apto 42",143 "neighborhood": "Consolação",144 "city": "São Paulo",145 "state": "SP",146 "zipcode": "01304001",147 "country": "Brasil",148 "type": "delivery",149 "is_default": "1"150 }151}152```153154## Boas Práticas1551561. **CEP apenas números** — envie o CEP sem pontos ou traços (ex: "01304001" e não "01304-001")1572. **Estado em sigla** — use a sigla de 2 letras da UF (ex: "SP", "RJ", "MG")1583. **Endereço padrão** — ao definir `is_default: 1`, esse passa a ser o endereço principal do cliente1594. **Tipo do endereço** — diferencie entre endereços de entrega ("delivery") e cobrança ("billing") para checkout correto1605. **Valide o CEP** — antes de cadastrar, valide o CEP via serviço externo (ex: ViaCEP) para garantir dados corretos1616. **Não edite, recrie** — a API não possui endpoint PUT para endereços; para alterar, exclua o antigo e crie um novo1627. **Recursos relacionados** — consulte o skill `tray-clientes` para gerenciar dados do cliente163164## Como Usar no Claude Code165166### Exemplos de Prompt167168- "cadastra o endereço de entrega do cliente 50 em São Paulo"169- "lista todos os endereços do cliente ID 50"170- "implementa o fluxo de cadastro de múltiplos endereços para o cliente"171- "como altero o endereço padrão de um cliente?"172173### O que o Claude faz1741751. Gera o código de criação com wrapper `Address` e todos os campos obrigatórios1762. Formata o CEP sem pontuação e o estado em sigla UF1773. Explica que não há endpoint PUT — para alterar, deve excluir e recriar1784. Demonstra como definir `is_default: 1` e o `type` (delivery/billing)179180### O que você recebe181182- Código de criação com `{"Address": {...}}` e formatação correta dos campos183- Código de listagem dos endereços do cliente184- Fluxo de atualização: `DELETE` + novo `POST`185- Exemplo de endereço de entrega e cobrança separados186187### Pré-requisitos188189- `access_token` configurado190- `customer_id` do cliente já cadastrado via `tray-clientes`