Skip to content

🎯 Documentação de Promoções

📋 Visão Geral

Uma promoção é o registro que ativa um desconto na plataforma, vinculando uma entidade promocional a regras específicas de uso.

Ela controla se o desconto pode ser utilizado via cupom (allowCoupon) e se o benefício é multiplicado por item (multiplyItem).

Toda promoção exige uma entidade promocional pré-existente como base de configuração. A entidade define o formato, o campo avaliado e o alvo do desconto.

A promoção adiciona as regras de elegibilidade e uso sobre essa base.

Campos opcionais — scheduling, segmentation, discounts e seals — não são retornados por padrão. Para carregá-los, informe o parâmetro fields na requisição.

🔄 Entidades Envolvidas

Cada promoção está obrigatoriamente vinculada a uma Entidade Promocional, que define o comportamento base do desconto — incluindo itemField, type e target.

Os campos opcionais da promoção representam módulos independentes:

  • Agendamento (scheduling): define o período de vigência da promoção com datas de início e fim.
  • Segmentação (segmentation): determina quais clientes ou contextos de venda são elegíveis, por meio de regras combinadas por operador lógico.
  • Descontos (discounts): detalha os valores aplicados por entidade — inclui itemAmount e value.
  • Selos (seals): lista os IDs de selos de produto vinculados à promoção, gerenciados pelo endpoint link-seals.

📋 Listagem de Promoções

GET /promotionals/promotions

Retorna a listagem paginada de promoções cadastradas na loja

📋 Descrição

Endpoint utilizado para carregar todas as promoções cadastradas na plataforma, com suporte a paginação, filtros e campos opcionais.

É consumido principalmente pelo painel administrativo para exibir a lista de promoções disponíveis na loja, permitindo ao lojista gerenciar campanhas ativas e inativas.

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

  • scheduling — Agendamento da promoção (datas de início e fim).
  • segmentation — Segmentação de elegibilidade com regras combinadas.
  • discounts — Detalhes dos descontos aplicados por entidade.
  • seals — IDs dos selos de produto vinculados à promoção.

Requer o escopo PROMOTION_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 da promoção com datas de início e fim
segmentationSegmentação e regras de elegibilidade combinadas
discountsDescontos associados à promoção por entidade
sealsIDs dos selos de produto vinculados

🔎 Campos de Condição Disponíveis

CampoTipoDescrição
userIdintegerID do usuário associado à promoção
tradePolicyIdintegerID da política comercial vinculada à entidade promocional
allowCouponbooleanFiltra promoções que permitem ou não ativação por cupom
targetstringAlvo do desconto. Valores: subtotal, shipping, subtotal-shipping
typestringFormato do desconto. Valores: value, percentage
activebooleanFiltra entidades ativas ou inativas
titlestringNome de identificação da entidade promocional
createdAtstringData de criação da promoção
updatedAtstringData da última atualização da promoção

🔃 Campos de Ordenação Disponíveis

CampoDescrição
promotionIdID da promoção
titleNome da entidade promocional
createdAtData de criação
updatedAtData da última atualização

💡 Exemplo de Requisição

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

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "registers": [
5 {
6 "id": 5,
7 "entity": {
8 "title": "Desconto de verão para produtos selecionados",
9 "observation": null,
10 "itemField": "value",
11 "type": "percentage",
12 "target": "subtotal",
13 "active": true,
14 "tradePolicies": [2],
15 "id": 3,
16 "createdAt": "2026-01-10 09:00:00",
17 "updatedAt": "2026-01-15 14:30:00"
18 },
19 "allowCoupon": false,
20 "multiplyItem": true,
21 "quantityUsed": 0,
22 "scheduling": null,
23 "segmentation": null,
24 "discounts": null,
25 "seals": null,
26 "createdAt": "2026-01-20 11:00:00",
27 "updatedAt": "2026-01-20 11:00:00"
28 }
29 ],
30 "pagination": {
31 "limit": 10,
32 "offset": 0,
33 "pages": 1,
34 "registers": 1
35 }
36 }
37}

⚠️ 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 permissão para acessar este recurso.

🔍 Detalhamento de Promoção

GET /promotionals/promotions/{promotionId}

Retorna os dados completos de uma promoção específica

📋 Descrição

Endpoint utilizado para carregar os dados completos de uma promoção específica no painel administrativo, identificada pelo promotionId na URL.

Caso a promoção não seja encontrada, o endpoint retorna erro 404 com o código UAPPI_STORE_PROMOTION_NOT_FOUND.

Por padrão, scheduling, segmentation, discounts e seals retornam como null. Para carregá-los, informe-os no parâmetro fields — útil para exibir detalhes completos da promoção em telas de edição.

  • scheduling — Agendamento com datas de início e fim.
  • segmentation — Segmentação e regras de elegibilidade combinadas.
  • discounts — Detalhes dos descontos por entidade.
  • seals — Array de IDs de selos de produto vinculados (int[]).

Requer o escopo PROMOTION_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
promotionIdinteger✅ SimID da promoção a ser consultada

🗂️ Campos Disponíveis (fields)

CampoDescrição
schedulingAgendamento da promoção com datas de início e fim
segmentationSegmentação e regras de elegibilidade combinadas
discountsDescontos associados à promoção por entidade
sealsArray de IDs de selos de produto vinculados

💡 Exemplo de Requisição

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

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "id": 7,
5 "entity": {
6 "title": "Desconto de verão para produtos selecionados",
7 "observation": null,
8 "itemField": "value",
9 "type": "percentage",
10 "target": "subtotal-shipping",
11 "active": true,
12 "tradePolicies": [1],
13 "id": 5,
14 "createdAt": "2026-02-10 09:00:00",
15 "updatedAt": "2026-02-12 14:30:00"
16 },
17 "allowCoupon": false,
18 "multiplyItem": false,
19 "quantityUsed": 0,
20 "scheduling": null,
21 "segmentation": {
22 "id": 9,
23 "operator": "and",
24 "sellerId": null,
25 "userForAllSellers": false,
26 "rules": [
27 {
28 "id": 18,
29 "ruleType": "customer-age",
30 "ruleOperator": "greater",
31 "ruleValue": 25,
32 "entityMap": null,
33 "createdAt": "2026-02-12 14:30:00",
34 "updatedAt": "2026-02-12 14:30:00"
35 }
36 ],
37 "entityMap": null
38 },
39 "discounts": [
40 {
41 "entityId": 7,
42 "entity": "promotion",
43 "itemAmount": 1,
44 "value": 15
45 }
46 ],
47 "seals": [3, 8],
48 "createdAt": "2026-02-12 14:30:00",
49 "updatedAt": "2026-02-12 14:30:00"
50 }
51}

⚠️ 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_STORE_PROMOTION_NOT_FOUND404❌ A promoção solicitada não foi encontrada.

➕ Criação de Promoção

POST /promotionals/promotions

Permite criar uma nova promoção na loja

📋 Descrição

Endpoint responsável por criar uma nova promoção, vinculando-a a uma entidade promocional existente.

A entidade informada em promotionalEntityId deve existir na plataforma. Caso contrário, o endpoint retorna erro 404 com o código UAPPI_STORE_PROMOTIONAL_ENTITY_NOT_FOUND.

Após a criação, a promoção é retornada com os campos segmentation e discounts carregados automaticamente, e seals retorna null por padrão.

Requer os escopos PROMOTION_READ e PROMOTION_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 a ser vinculada
allowCouponboolean✅ SimDefine se a promoção pode ser ativada por cupom
multiplyItemboolean✅ SimDefine se o desconto é multiplicado por item elegível

💡 Exemplo de Requisição

1curl --request POST \
2 --url {{MAIN_URL}}/promotionals/promotions \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "promotionalEntityId": 3,
7 "allowCoupon": false,
8 "multiplyItem": true
9 }'

✅ Resposta de Sucesso

HTTP Status: 201 Created

1{
2 "status": true,
3 "data": {
4 "id": 8,
5 "entity": {
6 "title": "Desconto de verão para produtos selecionados",
7 "observation": null,
8 "itemField": "value",
9 "type": "percentage",
10 "target": "subtotal",
11 "active": true,
12 "tradePolicies": [2],
13 "id": 3,
14 "createdAt": "2026-01-10 09:00:00",
15 "updatedAt": "2026-01-15 14:30:00"
16 },
17 "allowCoupon": false,
18 "multiplyItem": true,
19 "quantityUsed": 0,
20 "scheduling": null,
21 "segmentation": {
22 "id": 9,
23 "operator": "and",
24 "sellerId": null,
25 "userForAllSellers": false,
26 "rules": [],
27 "entityMap": null
28 },
29 "discounts": [],
30 "seals": null,
31 "createdAt": "2026-05-04 10:15:00",
32 "updatedAt": "2026-05-04 10:15:00"
33 }
34}

⚠️ 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_STORE_PROMOTIONAL_ENTITY_NOT_FOUND404❌ A entidade promocional informada não foi encontrada.

✏️ Atualização de Promoção

PUT /promotionals/promotions/{promotionId}

Permite atualizar uma promoção existente na loja

📋 Descrição

Endpoint responsável por atualizar os dados de uma promoção existente, identificada pelo promotionId na URL.

O sistema valida tanto a existência da promoção quanto da entidade promocional informada. Caso qualquer um dos registros não seja encontrado, o endpoint retorna erro 404 com o código correspondente.

Os mesmos campos disponíveis na criação estão disponíveis na atualização.

A resposta retorna a promoção com segmentation e discounts carregados automaticamente.

Requer os escopos PROMOTION_READ e PROMOTION_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
promotionIdinteger✅ SimID da promoção a ser atualizada

📦 Parâmetros do Corpo

ParâmetroTipoObrigatórioDescrição
promotionalEntityIdinteger✅ SimID da entidade promocional vinculada
allowCouponboolean✅ SimDefine se a promoção pode ser ativada por cupom
multiplyItemboolean✅ SimDefine se o desconto é multiplicado por item elegível

💡 Exemplo de Requisição

1curl --request PUT \
2 --url {{MAIN_URL}}/promotionals/promotions/8 \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "promotionalEntityId": 3,
7 "allowCoupon": true,
8 "multiplyItem": false
9 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "id": 8,
5 "entity": {
6 "title": "Desconto de verão para produtos selecionados",
7 "observation": null,
8 "itemField": "value",
9 "type": "percentage",
10 "target": "subtotal",
11 "active": true,
12 "tradePolicies": [2],
13 "id": 3,
14 "createdAt": "2026-01-10 09:00:00",
15 "updatedAt": "2026-01-15 14:30:00"
16 },
17 "allowCoupon": true,
18 "multiplyItem": false,
19 "quantityUsed": 0,
20 "scheduling": null,
21 "segmentation": {
22 "id": 9,
23 "operator": "and",
24 "sellerId": null,
25 "userForAllSellers": false,
26 "rules": [],
27 "entityMap": null
28 },
29 "discounts": [
30 {
31 "entityId": 3,
32 "entity": "promotion",
33 "itemAmount": 1,
34 "value": 10
35 }
36 ],
37 "seals": null,
38 "createdAt": "2026-05-04 10:15:00",
39 "updatedAt": "2026-05-04 11:00:00"
40 }
41}

⚠️ 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_STORE_PROMOTION_NOT_FOUND404❌ A promoção solicitada não foi encontrada.
UAPPI_STORE_PROMOTIONAL_ENTITY_NOT_FOUND404❌ A entidade promocional informada não foi encontrada.

🏷️ Vinculação de Selos à Promoção

PUT /promotionals/promotions/{promotionId}/link-seals

Associa ou desassocia selos de produto a uma promoção

📋 Descrição

Endpoint responsável por gerenciar o vínculo entre selos de produto e uma promoção, identificada pelo promotionId na URL.

O endpoint sempre retorna HTTP 200, mesmo quando erros ocorrem em selos individuais. Falhas por selo são embutidas na resposta nos campos errorCode e errorMessage de cada item — não interrompem a operação.

Para desvincular todos os selos de uma promoção, envie {"seals": {}} ou omita o campo seals completamente.

O campo seals é um objeto onde as chaves são IDs de selos (inteiros) e os valores são booleanos: {"seals": {"4": true, "7": true}}.

Requer os escopos PROMOTION_READ e PROMOTION_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
promotionIdinteger✅ SimID da promoção cujos selos serão gerenciados

📦 Parâmetros do Corpo

ParâmetroTipoObrigatórioDescrição
sealsobject❌ NãoObjeto com IDs de selos mapeados para booleano. Omitir ou enviar vazio remove todos os vínculos
seals.*boolean✅ Sim (por item)Valor booleano para cada ID de selo

💡 Exemplo de Requisição

1curl --request PUT \
2 --url {{MAIN_URL}}/promotionals/promotions/8/link-seals \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "seals": {
7 "4": true,
8 "7": true
9 }
10 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

A resposta é um array com um item por selo processado. Cada item contém os campos errorCode e errorMessage — quando null, indica sucesso para aquele selo.

1{
2 "status": true,
3 "data": [
4 {
5 "promotionalPromotionId": 8,
6 "productSealId": 4,
7 "updatedAt": "2026-05-04 11:30:00",
8 "errorCode": null,
9 "errorMessage": null
10 },
11 {
12 "promotionalPromotionId": 8,
13 "productSealId": 7,
14 "updatedAt": "",
15 "errorCode": "UAPPI_STORE_SEAL_NOT_FOUND",
16 "errorMessage": "The requested seal was not found."
17 }
18 ]
19}

⚠️ 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_STORE_PROMOTION_NOT_FOUND404❌ A promoção solicitada não foi encontrada. Retornado quando a promoção em si não existe — erros por selo individual são embutidos no array de resposta.

🗑️ Exclusão de Promoção

DELETE /promotionals/promotions/{promotionId}

Remove permanentemente uma promoção da plataforma

📋 Descrição

Endpoint responsável por remover permanentemente uma promoção, identificada pelo promotionId na URL.

Caso a promoção não seja encontrada, o endpoint retorna erro 404 com o código UAPPI_STORE_PROMOTION_NOT_FOUND.

Quando a exclusão é realizada com sucesso, o campo data retorna true.

Requer os escopos PROMOTION_READ e PROMOTION_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
promotionIdinteger✅ SimID da promoção a ser removida

💡 Exemplo de Requisição

1curl --request DELETE \
2 --url {{MAIN_URL}}/promotionals/promotions/8 \
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_STORE_PROMOTION_NOT_FOUND404❌ A promoção solicitada não foi encontrada.

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

;