From tray-api
Manages Tray Multi-CD API for distribution centers: CRUD operations, stock per product/variation per CD, priority/regional coverage, and stock sync webhooks.
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).Documentação oficial: https://developers.tray.com.br/#api-de-multicd
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /multicd/distribution-centers | Listar centros de distribuição |
| GET | /multicd/distribution-centers/:id | Consultar CD por ID |
| POST | /multicd/distribution-centers | Cadastrar novo centro de distribuição |
| PUT | /multicd/distribution-centers/:id | Atualizar dados do CD |
| DELETE | /multicd/distribution-centers/:id | Excluir centro de distribuição |
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /multicd/stock/detailed/product/:id | Consultar estoque detalhado de produto em todos os CDs |
| GET | /multicd/stock/detailed/variant/:id | Consultar estoque detalhado de variação em todos os CDs |
| PUT | /multicd/distribution-centers/:id/stock | Atualizar estoque do CD (produto ou variação) |
Autenticação: ?access_token={token} em todas as chamadas.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | — | ID do CD (retornado pela API) |
name | string | Sim | Nome do centro de distribuição (ex: "CD São Paulo", "CD Minas") |
zip_code | string | Sim | CEP do CD (apenas números, ex: "01310100") |
address | string | Sim | Endereço completo do CD |
city | string | Sim | Cidade do CD |
state | string | Sim | Estado/UF do CD (ex: "SP", "MG") |
priority | number | Não | Prioridade do CD (menor número = maior prioridade) |
active | number | Não | 1 = ativo, 0 = inativo |
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
product_id | number | — | ID do produto |
variant_id | number | — | ID da variação (quando aplicável) |
stock | number | Sim | Quantidade em estoque no CD |
distribution_center_id | number | — | ID do centro de distribuiçã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
{
"DistributionCenter": {
"name": "CD São Paulo",
"zip_code": "01310100",
"address": "Av. Paulista, 1000",
"city": "São Paulo",
"state": "SP",
"priority": 1,
"active": 1
}
}
{
"DistributionCenter": {
"name": "CD São Paulo - Matriz",
"priority": 1,
"active": 1
}
}
Produto:
{
"DistributionCenterProduct": {
"stock": 150
}
}
Variação:
{
"DistributionCenterVariant": {
"stock": 75
}
}
| Operação | Código | Mensagem |
|---|---|---|
| Criação | 201 | {"message": "Created", "id": 5, "code": 201} |
| Atualização | 200 | {"message": "Saved", "id": 5, "code": 200} |
| Exclusão | 200 | {"message": "Deleted", "id": 5, "code": 200} |
{
"paging": {
"total": 3,
"page": 1,
"offset": 0,
"limit": 30,
"maxLimit": 50
},
"DistributionCenters": [
{
"DistributionCenter": {
"id": "1",
"name": "CD São Paulo",
"zip_code": "01310100",
"address": "Av. Paulista, 1000",
"city": "São Paulo",
"state": "SP",
"priority": "1",
"active": "1"
}
},
{
"DistributionCenter": {
"id": "2",
"name": "CD Belo Horizonte",
"zip_code": "30130000",
"address": "Av. Afonso Pena, 500",
"city": "Belo Horizonte",
"state": "MG",
"priority": "2",
"active": "1"
}
}
]
}
{
"DistributionCenterProducts": [
{
"DistributionCenterProduct": {
"product_id": "100",
"stock": "50",
"distribution_center_id": "1"
}
},
{
"DistributionCenterProduct": {
"product_id": "101",
"stock": "30",
"distribution_center_id": "1"
}
}
]
}
Quando um pedido é realizado, a Tray seleciona o CD com base nos seguintes critérios:
active: 1 são consideradosQuando o MultiCD está ativo, a Tray dispara webhooks nos escopos product_stock e variant_stock para qualquer alteração de estoque em qualquer CD, permitindo sincronização em tempo real com ERPs e sistemas externos.
Evento (scope_name) | act | Descrição |
|---|---|---|
product_stock | update | Estoque de produto alterado em qualquer CD |
variant_stock | update | Estoque de variação alterado em qualquer CD |
O formato é application/x-www-form-urlencoded (igual a todos os webhooks da Tray):
seller_id=391250&scope_id=100&scope_name=product_stock&act=update&app_code=718&url_notification=https://suaurldenotificacao
O scope_id corresponde ao ID do produto ou variação alterada. Após receber o webhook, consulte GET /multicd/stock/detailed/product/:id para obter os estoques atualizados por CD.
Para detalhes completos sobre formato de payload, campos e lógica de retry, consulte o skill
tray-webhooks.
active para 0 antes de excluir um CD para evitar impacto em pedidostray-frete (GET /shippings/cotation/)tray-frete, tray-configuracao-frete e tray-webhooksDistributionCenter e configuração de prioridadeproduct_stock e atualização via APIPUT /multicd/distribution-centers/:id/stockproduct_stock + consulta detalhadaaccess_token configuradoproduct_id disponível