Skip to content

🎟️ Documentação de Cupons

📋 Visão Geral

Um cupom é um código promocional que o cliente aplica no carrinho para ativar um desconto.

Cada cupom está obrigatoriamente vinculado a uma entidade promocional que define o tipo, o alvo e o valor do benefício. O campo hash é o código digitado pelo cliente — deve ser único na loja.

🔄 Entidades Envolvidas

Todo cupom está vinculado a uma Entidade Promocional (promotionalEntityId), que define o comportamento base do desconto — incluindo o campo avaliado (itemField), o tipo de desconto (type) e o alvo (target).

Os campos opcionais do cupom representam módulos independentes:

  • Agendamento (scheduling) — define o período de vigência do cupom com datas de início e fim.
  • Segmentação (segmentation) — determina quais clientes ou contextos de venda são elegíveis, com regras combinadas por operador lógico.
  • Descontos (discounts) — detalha os valores aplicados por entidade, incluindo itemAmount e value.
  • 📌 Notas e Considerações

  • O campo hash é gerado automaticamente com 8 caracteres alfanuméricos em minúsculo caso não seja informado. Deve ser único na loja — duplicatas retornam o erro UAPPI_STORE_COUPON_HASH_ALREADY_IN_USE.
  • Cupons clonados recebem um hash no formato {hashOriginal}-{8chars} e podem manter referência ao cupom de origem via parentCouponId conforme o parâmetro preserveParent.
  • Não é possível clonar um cupom já clonado — tentativas retornam o erro UAPPI_STORE_COUPON_IS_CLONE.
  • Os campos scheduling, segmentation e discounts retornam null por padrão. Para carregá-los, informe-os no parâmetro fields da requisição.
  • Pedidos cancelados não são contabilizados nas verificações de minCustomerPurchaseQuantity e maxCustomerPurchaseQuantity.

📋 Listagem de Cupons

GET /promotionals/coupons

Retorna a listagem paginada de cupons cadastrados na loja

📋 Descrição

Endpoint utilizado para listar todos os cupons cadastrados na loja, com suporte a paginação, filtros e ordenação.

Por padrão, os campos scheduling, segmentation e discounts retornam como null. Informe-os no parâmetro fields quando precisar exibir informações detalhadas de cada cupom na listagem.

Requer o escopo COUPON_READ.

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
Content-Typeapplication/jsonTipo de conteúdo
AuthorizationBearer SEU_TOKEN_AQUIToken de autenticação

🗂️ Campos Disponíveis (fields)

CampoDescrição
schedulingAgendamento do cupom (período de vigência)
segmentationSegmentação e regras de elegibilidade
discountsDescontos associados ao cupom

🔍 Campos de Condição Disponíveis

CampoTipoDescrição
userIdintegerID do usuário (filtro interno)
activebooleanStatus de ativação do cupom
hashstringCódigo do cupom
titlestringTítulo da entidade promocional vinculada
typestringTipo de desconto da entidade
targetstringAlvo do desconto
itemFieldstringCampo avaliado no desconto
parentCouponIdintegerID do cupom de origem (presente em clones)
allowWithPromotionbooleanPermite uso simultâneo com promoções
tradePolicyIdintegerID da política comercial

🔃 Campos de Ordenação Disponíveis

CampoDescrição
idID do cupom
couponIdID do cupom (alias)
titleTítulo da entidade promocional
createdAtData de criação

💡 Exemplo de Requisição

> Nota: esta API aceita corpo JSON em requisições GET, seguindo a convenção da plataforma. Utilize o header Content-Type: application/json e envie os parâmetros no corpo da requisição.

1curl --request GET \
2 --url {{MAIN_URL}}/promotionals/coupons \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "fields": ["scheduling", "segmentation", "discounts"],
7 "limit": 10,
8 "offset": 0
9 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "registers": [
5 {
6 "id": 1,
7 "parentCouponId": null,
8 "entity": {
9 "title": "Desconto Verão 10%",
10 "observation": null,
11 "itemField": "value",
12 "type": "percentage",
13 "target": "subtotal-shipping",
14 "active": true,
15 "tradePolicies": [1],
16 "id": 5,
17 "createdAt": "2026-03-01 09:00:00",
18 "updatedAt": "2026-03-01 09:00:00"
19 },
20 "hash": "verao10",
21 "quantityUsed": 12,
22 "maxQuantityUse": 100,
23 "maxQuantityCustomerUse": 1,
24 "minCustomerPurchaseQuantity": 0,
25 "maxCustomerPurchaseQuantity": 0,
26 "allowWithPromotion": false,
27 "scheduling": null,
28 "segmentation": null,
29 "discounts": [
30 {
31 "entityId": 1,
32 "entity": "coupon",
33 "itemAmount": 1,
34 "value": 10
35 }
36 ],
37 "createdAt": "2026-03-01 09:00:00",
38 "updatedAt": "2026-03-15 14:20:00"
39 }
40 ],
41 "pagination": {
42 "limit": 10,
43 "offset": 0,
44 "pages": 1,
45 "registers": 1
46 }
47 }
48}

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código InternoHTTPDescrição
UAPPI_AUTH_INVALID401❌ O token de autenticação é inválido ou está ausente.
UAPPI_AUTH_DISABLED403❌ O usuário não possui a permissão COUPON_READ.

🔍 Detalhamento de Cupom

GET /promotionals/coupons/{couponId}

Retorna os dados completos de um cupom pelo seu ID

📋 Descrição

Endpoint utilizado para carregar os dados completos de um cupom no painel administrativo, identificado pelo couponId na URL.

Os campos opcionais scheduling, segmentation e discounts retornam null por padrão. Para carregá-los, informe-os no parâmetro fields — útil para exibir detalhes completos do cupom em telas de edição.

Caso o cupom não seja encontrado, o endpoint retorna erro 400 com o código UAPPI_STORE_COUPON_NOT_FOUND.

Requer o escopo COUPON_READ.

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
Content-Typeapplication/jsonTipo de conteúdo
AuthorizationBearer SEU_TOKEN_AQUIToken de autenticação

🔑 Parâmetros da URL

ParâmetroTipoObrigatórioDescrição
couponIdinteger✅ SimID do cupom a ser detalhado

🗂️ Campos Disponíveis (fields)

CampoDescrição
schedulingAgendamento do cupom (período de vigência)
segmentationSegmentação e regras de elegibilidade
discountsDescontos associados ao cupom

💡 Exemplo de Requisição

1curl --request GET \
2 --url {{MAIN_URL}}/promotionals/coupons/1 \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "fields": ["scheduling", "segmentation", "discounts"]
7 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "id": 1,
5 "parentCouponId": null,
6 "entity": {
7 "title": "Desconto Verão 10%",
8 "observation": null,
9 "itemField": "value",
10 "type": "percentage",
11 "target": "subtotal-shipping",
12 "active": true,
13 "tradePolicies": [1],
14 "id": 5,
15 "createdAt": "2026-03-01 09:00:00",
16 "updatedAt": "2026-03-01 09:00:00"
17 },
18 "hash": "verao10",
19 "quantityUsed": 12,
20 "maxQuantityUse": 100,
21 "maxQuantityCustomerUse": 1,
22 "minCustomerPurchaseQuantity": 0,
23 "maxCustomerPurchaseQuantity": 0,
24 "allowWithPromotion": false,
25 "scheduling": {
26 "id": 3,
27 "startsAt": "2026-06-01 00:00:00",
28 "endsAt": "2026-08-31 23:59:59"
29 },
30 "segmentation": {
31 "id": 2,
32 "operator": "and",
33 "sellerId": null,
34 "userForAllSellers": false,
35 "rules": [
36 {
37 "id": 4,
38 "ruleType": "customer-age",
39 "ruleOperator": "greater",
40 "ruleValue": 18,
41 "entityMap": null,
42 "createdAt": "2026-03-01 09:00:00",
43 "updatedAt": "2026-03-01 09:00:00"
44 }
45 ],
46 "entityMap": null
47 },
48 "discounts": [
49 {
50 "entityId": 1,
51 "entity": "coupon",
52 "itemAmount": 1,
53 "value": 10
54 }
55 ],
56 "createdAt": "2026-03-01 09:00:00",
57 "updatedAt": "2026-03-15 14:20:00"
58 }
59}

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código InternoHTTPDescrição
UAPPI_AUTH_INVALID401❌ O token de autenticação é inválido ou está ausente.
UAPPI_AUTH_DISABLED403❌ O usuário não possui a permissão COUPON_READ.
UAPPI_STORE_COUPON_NOT_FOUND400❌ O cupom informado não foi encontrado.

➕ Criação de Cupom

POST /promotionals/coupons

Permite criar um novo cupom promocional na loja

📋 Descrição

Endpoint responsável por criar um novo cupom promocional, vinculado a uma entidade promocional (promotionalEntityId) existente.

O campo hash é o código que o cliente digita para ativar o desconto. Quando não informado, é gerado automaticamente com 8 caracteres alfanuméricos em minúsculo. Deve ser único na loja.

Os campos maxQuantityUse e maxQuantityCustomerUse controlam os limites de uso. Os campos minCustomerPurchaseQuantity e maxCustomerPurchaseQuantity restringem o cupom por histórico de pedidos do cliente — o valor 0 desativa a restrição e pedidos cancelados não são contabilizados.

Após a criação, a resposta retorna o cupom com scheduling, segmentation e discounts sempre carregados (podendo ser null ou array vazio).

Requer os escopos COUPON_READ e COUPON_WRITE.

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
Content-Typeapplication/jsonTipo de conteúdo
AuthorizationBearer SEU_TOKEN_AQUIToken de autenticação

📦 Parâmetros do Corpo

ParâmetroTipoObrigatórioDescrição
promotionalEntityIdinteger✅ SimID da entidade promocional à qual o cupom será vinculado
maxQuantityUseinteger✅ SimLimite global de utilizações do cupom
maxQuantityCustomerUseinteger✅ SimLimite de utilizações por cliente
minCustomerPurchaseQuantityinteger✅ SimMínimo de pedidos realizados pelo cliente (0 = sem restrição)
maxCustomerPurchaseQuantityinteger✅ SimMáximo de pedidos realizados pelo cliente (0 = sem restrição)
allowWithPromotionboolean✅ SimPermite uso simultâneo com promoções ativas
hashstring❌ NãoCódigo do cupom (máximo 100 caracteres). Gerado automaticamente se omitido

💡 Exemplo de Requisição

1curl --request POST \
2 --url {{MAIN_URL}}/promotionals/coupons \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "promotionalEntityId": 5,
7 "hash": "verao10",
8 "maxQuantityUse": 100,
9 "maxQuantityCustomerUse": 1,
10 "minCustomerPurchaseQuantity": 0,
11 "maxCustomerPurchaseQuantity": 0,
12 "allowWithPromotion": false
13 }'

✅ Resposta de Sucesso

HTTP Status: 201 Created

1{
2 "status": true,
3 "data": {
4 "id": 7,
5 "parentCouponId": null,
6 "entity": {
7 "title": "Desconto Verão 10%",
8 "observation": null,
9 "itemField": "value",
10 "type": "percentage",
11 "target": "subtotal-shipping",
12 "active": true,
13 "tradePolicies": [1],
14 "id": 5,
15 "createdAt": "2026-03-01 09:00:00",
16 "updatedAt": "2026-03-01 09:00:00"
17 },
18 "hash": "verao10",
19 "quantityUsed": 0,
20 "maxQuantityUse": 100,
21 "maxQuantityCustomerUse": 1,
22 "minCustomerPurchaseQuantity": 0,
23 "maxCustomerPurchaseQuantity": 0,
24 "allowWithPromotion": false,
25 "scheduling": null,
26 "segmentation": null,
27 "discounts": [],
28 "createdAt": "2026-05-06 10:00:00",
29 "updatedAt": "2026-05-06 10:00:00"
30 }
31}

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código InternoHTTPDescrição
UAPPI_AUTH_INVALID401❌ O token de autenticação é inválido ou está ausente.
UAPPI_AUTH_DISABLED403❌ O usuário não possui a permissão COUPON_WRITE.
UAPPI_STORE_COUPON_HASH_ALREADY_IN_USE400❌ O hash informado já está em uso por outro cupom.
UAPPI_STORE_PROMOTIONAL_ENTITY_NOT_FOUND400❌ A entidade promocional informada não foi encontrada.

✏️ Atualização de Cupom

PUT /promotionals/coupons/{couponId}

Atualiza os dados de um cupom existente

📋 Descrição

Endpoint responsável por atualizar um cupom existente, identificado pelo couponId na URL.

A operação é um update completo — todos os campos obrigatórios devem ser enviados mesmo que não tenham sido alterados. O campo hash pode ser alterado, desde que o novo valor seja único na loja.

Caso o cupom não seja encontrado, o retorno é um erro 400 com o código UAPPI_STORE_COUPON_NOT_FOUND.

Requer os escopos COUPON_READ e COUPON_WRITE.

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
Content-Typeapplication/jsonTipo de conteúdo
AuthorizationBearer SEU_TOKEN_AQUIToken de autenticação

🔑 Parâmetros da URL

ParâmetroTipoObrigatórioDescrição
couponIdinteger✅ SimID do cupom a ser atualizado

📦 Parâmetros do Corpo

ParâmetroTipoObrigatórioDescrição
promotionalEntityIdinteger✅ SimID da entidade promocional vinculada ao cupom
maxQuantityUseinteger✅ SimLimite global de utilizações do cupom
maxQuantityCustomerUseinteger✅ SimLimite de utilizações por cliente
minCustomerPurchaseQuantityinteger✅ SimMínimo de pedidos realizados pelo cliente (0 = sem restrição)
maxCustomerPurchaseQuantityinteger✅ SimMáximo de pedidos realizados pelo cliente (0 = sem restrição)
allowWithPromotionboolean✅ SimPermite uso simultâneo com promoções ativas
hashstring❌ NãoCódigo do cupom (máximo 100 caracteres). Gerado automaticamente se omitido

💡 Exemplo de Requisição

1curl --request PUT \
2 --url {{MAIN_URL}}/promotionals/coupons/7 \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "promotionalEntityId": 5,
7 "hash": "verao10-vip",
8 "maxQuantityUse": 50,
9 "maxQuantityCustomerUse": 2,
10 "minCustomerPurchaseQuantity": 1,
11 "maxCustomerPurchaseQuantity": 0,
12 "allowWithPromotion": true
13 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "id": 7,
5 "parentCouponId": null,
6 "entity": {
7 "title": "Desconto Verão 10%",
8 "observation": null,
9 "itemField": "value",
10 "type": "percentage",
11 "target": "subtotal-shipping",
12 "active": true,
13 "tradePolicies": [1],
14 "id": 5,
15 "createdAt": "2026-03-01 09:00:00",
16 "updatedAt": "2026-03-01 09:00:00"
17 },
18 "hash": "verao10-vip",
19 "quantityUsed": 12,
20 "maxQuantityUse": 50,
21 "maxQuantityCustomerUse": 2,
22 "minCustomerPurchaseQuantity": 1,
23 "maxCustomerPurchaseQuantity": 0,
24 "allowWithPromotion": true,
25 "scheduling": null,
26 "segmentation": null,
27 "discounts": [],
28 "createdAt": "2026-05-06 10:00:00",
29 "updatedAt": "2026-05-06 11:30:00"
30 }
31}

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código InternoHTTPDescrição
UAPPI_AUTH_INVALID401❌ O token de autenticação é inválido ou está ausente.
UAPPI_AUTH_DISABLED403❌ O usuário não possui a permissão COUPON_WRITE.
UAPPI_STORE_COUPON_NOT_FOUND400❌ O cupom informado não foi encontrado.
UAPPI_STORE_COUPON_HASH_ALREADY_IN_USE400❌ O hash informado já está em uso por outro cupom.
UAPPI_STORE_PROMOTIONAL_ENTITY_NOT_FOUND400❌ A entidade promocional informada não foi encontrada.

🔁 Clonagem de Cupom

POST /promotionals/coupons/{couponId}/clone

Clona um cupom existente, gerando cópias com hashes únicos

📋 Descrição

Endpoint responsável por clonar um cupom existente, gerando uma ou mais cópias com hashes únicos derivados do cupom de origem.

Cada clone herda todas as configurações do cupom original — promotionalEntityId, limites de uso, allowWithPromotion e os descontos vinculados. O novo hash segue o formato {hashOriginal}-{8chars}.

O parâmetro preserveParent controla se os clones mantêm referência ao cupom de origem via parentCouponId: true registra o ID do original, false cria os clones sem vínculo de parentesco.

Não é possível clonar um cupom que já seja um clone — cupons com parentCouponId preenchido retornam o erro UAPPI_STORE_COUPON_IS_CLONE. A resposta retorna os dados do cupom de origem, não dos clones gerados. O limite máximo é de 50 cópias por operação.

Requer os escopos COUPON_READ e COUPON_WRITE.

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
Content-Typeapplication/jsonTipo de conteúdo
AuthorizationBearer SEU_TOKEN_AQUIToken de autenticação

🔑 Parâmetros da URL

ParâmetroTipoObrigatórioDescrição
couponIdinteger✅ SimID do cupom a ser clonado

📦 Parâmetros do Corpo

ParâmetroTipoObrigatórioDescrição
quantityinteger✅ SimNúmero de cópias a serem geradas (mínimo: 1, máximo: 50)
preserveParentboolean✅ SimIndica se os clones devem referenciar o cupom original via parentCouponId

💡 Exemplo de Requisição

1curl --request POST \
2 --url {{MAIN_URL}}/promotionals/coupons/7/clone \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "quantity": 3,
7 "preserveParent": true
8 }'

✅ Resposta de Sucesso

HTTP Status: 201 Created

> A resposta retorna os dados do cupom de origem, não dos clones gerados.

1{
2 "status": true,
3 "data": {
4 "id": 7,
5 "parentCouponId": null,
6 "entity": {
7 "title": "Desconto Verão 10%",
8 "observation": null,
9 "itemField": "value",
10 "type": "percentage",
11 "target": "subtotal-shipping",
12 "active": true,
13 "tradePolicies": [1],
14 "id": 5,
15 "createdAt": "2026-03-01 09:00:00",
16 "updatedAt": "2026-03-01 09:00:00"
17 },
18 "hash": "verao10",
19 "quantityUsed": 0,
20 "maxQuantityUse": 100,
21 "maxQuantityCustomerUse": 1,
22 "minCustomerPurchaseQuantity": 0,
23 "maxCustomerPurchaseQuantity": 0,
24 "allowWithPromotion": false,
25 "scheduling": null,
26 "segmentation": null,
27 "discounts": [],
28 "createdAt": "2026-05-06 10:00:00",
29 "updatedAt": "2026-05-06 10:00:00"
30 }
31}

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código InternoHTTPDescrição
UAPPI_AUTH_INVALID401❌ O token de autenticação é inválido ou está ausente.
UAPPI_AUTH_DISABLED403❌ O usuário não possui a permissão COUPON_WRITE.
UAPPI_STORE_COUPON_NOT_FOUND400❌ O cupom informado não foi encontrado.
UAPPI_STORE_COUPON_IS_CLONE400❌ Não é possível clonar um cupom que já é um clone.

🗑️ Exclusão de Cupom

DELETE /promotionals/coupons/{couponId}

Remove permanentemente um cupom da loja

📋 Descrição

Endpoint responsável por remover permanentemente um cupom, identificado pelo couponId na URL.

Quando o cupom removido é o único vinculado à entidade promocional, a entidade e seus dados de agendamento e segmentação também são excluídos automaticamente. Caso a entidade possua outros cupons, ela é preservada.

Quando a exclusão é bem-sucedida, o campo data retorna true.

Requer os escopos COUPON_READ e COUPON_WRITE.

📝 Parâmetros

🏷️ Headers Obrigatórios

HeaderValorDescrição
Content-Typeapplication/jsonTipo de conteúdo
AuthorizationBearer SEU_TOKEN_AQUIToken de autenticação

🔑 Parâmetros da URL

ParâmetroTipoObrigatórioDescrição
couponIdinteger✅ SimID do cupom a ser removido

💡 Exemplo de Requisição

1curl --request DELETE \
2 --url {{MAIN_URL}}/promotionals/coupons/7 \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json"

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": true
4}

⚠️ Possíveis Erros

> Os cenários abaixo representam os principais erros que podem ocorrer neste endpoint, servindo como referência para entendimento e tratamento das falhas.

Código InternoHTTPDescrição
UAPPI_AUTH_INVALID401❌ O token de autenticação é inválido ou está ausente.
UAPPI_AUTH_DISABLED403❌ O usuário não possui a permissão COUPON_WRITE.
UAPPI_STORE_COUPON_NOT_FOUND400❌ O cupom informado não foi encontrado.

Uappi é a melhor opção para o crescimento da sua loja!

;