tray-cupons
API completa de cupons de desconto da Tray (discount_coupons). Permite criar, editar, excluir e consultar cupons, além de gerenciar relacionamentos com clientes, produtos, categorias, marcas e fretes.
Files1
View on GitHubSKILL.mdskills/cupons/SKILL.md
GitHubCupons de Desconto — API Tray
Documentação oficial: https://developers.tray.com.br/#api-de-cupom
Atenção: O endpoint base é
/discount_coupons(não/coupons). O wrapper de resposta éDiscountCoupon(nãoCoupon).
Autenticação
Todas as requisições utilizam query string: ?access_token={token}
Paginação
Endpoints de listagem suportam: ?limit=30&page=1 (máximo 50 por página)
Endpoints — CRUD
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /discount_coupons |
Listar cupons |
| GET | /discount_coupons/:id |
Detalhes de um cupom |
| POST | /discount_coupons |
Criar cupom |
| PUT | /discount_coupons/:id |
Atualizar cupom |
| DELETE | /discount_coupons/:id |
Excluir cupom |
Endpoints — Consulta de Relacionamentos (GET)
| Endpoint | Descrição |
|---|---|
/discount_coupons/customer_relationship/:id |
Listar clientes vinculados |
/discount_coupons/product_relationship/:id |
Listar produtos vinculados |
/discount_coupons/category_relationship/:id |
Listar categorias vinculadas |
/discount_coupons/brand_relationship/:id |
Listar marcas vinculadas |
/discount_coupons/shipping_relationship/:id |
Listar fretes vinculados |
/discount_coupons/gift_relationship/:id |
Consultar cupom-presente vinculado |
Dica: Ao listar cupons (
GET /discount_coupons), o campocoupon_typeindica qual relacionamento buscar:cliente→ customer_relationship,lojacomlocal_application=produtos→ product_relationship, etc.
Endpoint — Criação de Relacionamentos (POST)
Todos os tipos de relacionamento usam o mesmo endpoint:
POST /discount_coupons/create_relationship/:id
O tipo de relacionamento é definido pelo corpo da requisição (máximo 100 registros por POST):
Vincular clientes:
{
"DiscountCouponCustomer": [
{ "customer_id": "10" },
{ "customer_id": "20" }
]
}
Vincular produtos:
{
"DiscountCouponProduct": [
{ "product_id": "10" },
{ "product_id": "20" }
]
}
Vincular categorias:
{
"DiscountCouponCategory": [
{ "category_id": "10" }
]
}
Vincular marcas:
{
"DiscountCouponBrand": [
{ "brand_id": "10" }
]
}
Vincular fretes (método de envio):
{
"DiscountCouponShipping": [
{ "shipping_id": "10" }
]
}
Vincular frete grátis (valor zerado):
{
"DiscountCouponShipping": {
"value": "0"
}
}
Vincular desconto de frete (valor específico):
{
"DiscountCouponShipping": {
"value": "10"
}
}
Criar cupom de troca a partir de pedido:
{
"DiscountCouponCustomer": {
"order_id": "10"
}
}
Campos — Criar/Atualizar Cupom
O body usa Content-Type: application/x-www-form-urlencoded com o wrapper ["DiscountCoupon"]["campo"]. A estrutura JSON equivalente:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
code |
string | Sim | Código do cupom — sem espaços nem acentos |
description |
string | Não | Descrição do cupom |
coupon_type |
string | Não | Tipo: loja, cliente, troca, presente |
starts_at |
date | Não | Início da validade (YYYY-MM-DD) |
ends_at |
date | Não | Fim da validade (YYYY-MM-DD) |
value |
decimal | Sim | Valor do desconto |
type |
string | Sim | $ = reais / % = percentual |
value_start |
decimal | Não | Valor mínimo do produto para aplicar desconto |
value_end |
decimal | Não | Valor máximo do produto para aplicar desconto |
usage_sum_limit |
decimal | Não | Limite total acumulado de uso |
usage_counter_limit |
integer | Não | Limite de usos totais do cupom |
usage_counter_limit_customer |
integer | Não | Limite de usos por cliente |
cumulative_discount |
number | Não | 1 = acumula com desconto progressivo |
Campos
local_application:loja,produtos,marcas,categoriasCamposfreight_application:nao_aplicavel,desconto,frete_gratis
Exemplos
Listar cupons
GET /discount_coupons?access_token={token}&limit=30&page=1
Resposta:
{
"paging": { "total": 7, "page": 1, "offset": 0, "limit": 30, "maxLimit": 50 },
"DiscountCoupons": [
{
"DiscountCoupon": {
"id": "7",
"code": "NATAL25",
"description": "Cupom de Natal",
"value": "10.00",
"type": "%",
"starts_at": "2019-12-01",
"ends_at": "2019-12-31",
"usage_counter_limit": "0",
"coupon_type": "loja",
"local_application": "loja",
"freight_application": "nao_aplicavel",
"usage_counter_limit_customer": "10"
}
}
]
}
Criar cupom
POST /discount_coupons?access_token={token}
Content-Type: application/x-www-form-urlencoded
["DiscountCoupon"]["code"]=PROMO10&["DiscountCoupon"]["description"]=Promo Abril&["DiscountCoupon"]["starts_at"]=2026-04-01&["DiscountCoupon"]["ends_at"]=2026-04-30&["DiscountCoupon"]["value"]=10.00&["DiscountCoupon"]["type"]=%&["DiscountCoupon"]["usage_counter_limit_customer"]=5
Estrutura JSON equivalente do body:
{
"DiscountCoupon": {
"code": "PROMO10",
"description": "Promo Abril",
"starts_at": "2026-04-01",
"ends_at": "2026-04-30",
"value": "10.00",
"type": "%",
"usage_counter_limit": "",
"usage_counter_limit_customer": "5",
"cumulative_discount": "0"
}
}
Resposta de sucesso:
{ "message": "Created", "id": "1", "code": 201 }
Vincular produtos ao cupom
POST /discount_coupons/create_relationship/7?access_token={token}
Content-Type: application/json
{
"DiscountCouponProduct": [
{ "product_id": "456" },
{ "product_id": "789" }
]
}
Consultar clientes do cupom
GET /discount_coupons/customer_relationship/7?access_token={token}
Resposta:
{
"DiscountCouponCustomers": [
{ "DiscountCouponCustomer": { "customer_id": "1" } },
{ "DiscountCouponCustomer": { "customer_id": "20" } }
]
}
Tipos de Cupom — Lógica de Uso
coupon_type |
Comportamento |
|---|---|
loja |
Genérico — aplica a toda a loja e todos os clientes |
cliente |
Restrito a clientes vinculados via create_relationship |
troca |
Gerado a partir de um pedido (order_id) |
presente |
Vincula a um produto como presente |
Cupom sem nenhum relacionamento criado = cupom genérico válido para toda a loja.
Boas Práticas
- O campo
codenão aceita espaços nem acentos. - Campos
value_startevalue_endvazios = sem restrição de valor de produto. usage_counter_limiteusage_counter_limit_customerprecisam ser consistentes entre si — se o cliente pode usar 2 vezes, o limite geral não pode ser menor que 2.- Use
coupon_type=lojasem relacionamentos para promoções gerais. Adicione relacionamentos para restrições. - Limite de 100 registros por POST de relacionamento — divida lotes maiores.
- Consulte
coupon_typeelocal_applicationno GET principal para saber qual endpoint de relacionamento chamar.
Como Usar no Claude Code
Exemplos de Prompt
- "cria um cupom PROMO10 de 10% de desconto válido por 30 dias"
- "cria um cupom de frete grátis para compras acima de R$ 150"
- "vincula o cupom VIP20 exclusivamente aos clientes do perfil Atacado"
- "lista todos os cupons ativos na loja"
O que o Claude faz
- Gera o código de criação com formato
x-www-form-urlencodede wrapperDiscountCoupon - Define os campos de validade (
starts_at,ends_at), tipo (percentage/value) e limites de uso - Gera o código de relacionamento para cupons restritos a clientes, produtos ou categorias
- Orienta sobre a diferença entre
coupon_type(loja/cliente/troca/presente)
O que você recebe
- Código de criação de cupom com todos os campos configurados
- Exemplo com
Content-Type: application/x-www-form-urlencodedcorreto - Código de relacionamento via
POST /discount_coupons/create_relationship/:id - Listagem de cupons ativos com filtros
Pré-requisitos
access_tokenconfiguradocustomer_id,product_idoucategory_idse o cupom tiver restrições de relacionamento