Skip to content

🪙 Documentação do Sistema de Pontos

📋 Visão Geral

O Sistema de Pontos permite configurar regras de acumulação por política comercial e realizar operações manuais de crédito e débito no saldo de clientes.

Cada regra define a quantidade de pontos gerados via o campo pointAmount, cujo comportamento varia conforme o ruleType configurado. As transações operam em lote sobre múltiplos clientes em uma única requisição.

🔄 Entidades Envolvidas

O sistema de pontos é composto por dois módulos independentes:

Regras de acumulação

Definem o comportamento de ganho de pontos. Cada regra está vinculada a uma política comercial (tradePolicyId) e ao valor decimal pointAmount — que representa pontos por unidade monetária gasta (amount-spent) ou o total de pontos a distribuir proporcionalmente (fixed).

Cada regra suporta dois módulos opcionais:

  • Agendamento (scheduling) — delimita o período de vigência da regra 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.
  • Transações manuais

    Permitem crédito (transactions/add) ou débito (transactions/remove) direto no saldo do cliente, sem passar por uma regra automática.

    A razão registrada para remoções manuais é sempre "manual".

    📌 Notas e Considerações

  • O sistema aceita no máximo 10 regras por loja. Tentativas além desse limite retornam o erro UAPPI_STORE_POINT_SYSTEM_RULE_MAX_QUANTITY.
  • Transações são operações em lote — cada item é validado individualmente. Falhas por item são embutidas no campo error da resposta; o HTTP permanece 200 independentemente de erros parciais.
  • O campo pointAmount aceita até 6 casas decimais — por exemplo, 0.5 representa meio ponto por real no modo amount-spent.

📋 Listagem de Regras do Sistema de Pontos

GET /promotionals/point-system/rules

Retorna a listagem paginada de regras do sistema de pontos cadastradas na loja

📋 Descrição

Endpoint utilizado para listar todas as regras do sistema de pontos cadastradas na loja, com suporte a paginação, filtros e ordenação.

Por padrão, os campos opcionais scheduling e segmentation retornam como null. Para carregá-los, informe-os no parâmetro fields — útil para exibir os detalhes de vigência e elegibilidade de cada regra.

Requer o escopo POINT_SYSTEM_RULE_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 regra (período de vigência)
segmentationSegmentação e regras de elegibilidade

🔍 Campos de Condição Disponíveis

CampoTipoDescrição
idintegerID da regra
namestringNome da regra
tradePolicyIdintegerID da política comercial vinculada
ruleTypestringTipo de acumulação (amount-spent ou fixed)
activebooleanStatus de ativação da regra
createdAtdatetimeData de criação
updatedAtdatetimeData da última atualização
creatorUserIdintegerID do usuário criador
creatorUserNamestringNome do usuário criador
creatorUserEmailstringE-mail do usuário criador
editorUserIdintegerID do último usuário editor
editorUserNamestringNome do último usuário editor
editorUserEmailstringE-mail do último usuário editor

🔃 Campos de Ordenação Disponíveis

CampoDescrição
idID da regra
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/point-system/rules \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "fields": ["scheduling", "segmentation"],
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": 3,
7 "tradePolicyId": 2,
8 "ruleType": "amount-spent",
9 "name": "Dobro de pontos em eletrônicos",
10 "pointAmount": 2,
11 "active": true,
12 "createdAt": "2026-03-10 08:00:00",
13 "updatedAt": "2026-03-10 08:00:00",
14 "creatorUserId": 5,
15 "creatorUserName": "Carlos Operações",
16 "creatorUserEmail": "carlos.operacoes@loja.com.br",
17 "editorUserId": 5,
18 "editorUserName": "Carlos Operações",
19 "editorUserEmail": "carlos.operacoes@loja.com.br",
20 "scheduling": null,
21 "segmentation": null
22 }
23 ],
24 "pagination": {
25 "limit": 10,
26 "offset": 0,
27 "pages": 1,
28 "registers": 1
29 }
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 POINT_SYSTEM_RULE_READ.

🔍 Detalhamento de Regra do Sistema de Pontos

GET /promotionals/point-system/rules/{pointSystemRuleId}

Retorna os dados completos de uma regra do sistema de pontos pelo seu ID

📋 Descrição

Endpoint utilizado para carregar os dados completos de uma regra do sistema de pontos no painel administrativo, identificada pelo pointSystemRuleId na URL.

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

Caso a regra não seja encontrada, o retorno é um erro 400 com o código UAPPI_STORE_POINT_SYSTEM_RULE_NOT_FOUND.

Requer os escopos POINT_SYSTEM_RULE_READ e POINT_SYSTEM_RULE_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
pointSystemRuleIdinteger✅ SimID da regra do sistema de pontos

🗂️ Campos Disponíveis (fields)

CampoDescrição
schedulingAgendamento da regra com período de vigência
segmentationSegmentação e regras de elegibilidade

💡 Exemplo de Requisição

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

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "id": 3,
5 "tradePolicyId": 2,
6 "ruleType": "amount-spent",
7 "name": "Dobro de pontos em eletrônicos",
8 "pointAmount": 2,
9 "active": true,
10 "createdAt": "2026-03-10 08:00:00",
11 "updatedAt": "2026-03-10 08:00:00",
12 "creatorUserId": 5,
13 "creatorUserName": "Carlos Operações",
14 "creatorUserEmail": "carlos.operacoes@loja.com.br",
15 "editorUserId": 5,
16 "editorUserName": "Carlos Operações",
17 "editorUserEmail": "carlos.operacoes@loja.com.br",
18 "scheduling": null,
19 "segmentation": null
20 }
21}

⚠️ 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 as permissões POINT_SYSTEM_RULE_READ e POINT_SYSTEM_RULE_WRITE.
UAPPI_STORE_POINT_SYSTEM_RULE_NOT_FOUND400❌ A regra do sistema de pontos solicitada não foi encontrada.

➕ Criação de Regra do Sistema de Pontos

POST /promotionals/point-system/rules

Permite criar uma nova regra de acumulação de pontos na loja

📋 Descrição

Endpoint responsável por criar uma nova regra de acumulação de pontos, vinculada a uma política comercial (tradePolicyId).

O campo ruleType define a lógica de acumulação da regra:

  • amount-spent — o cliente acumula pontos proporcionalmente ao valor gasto. O campo pointAmount define quantos pontos são gerados por unidade monetária. Aceita até 6 casas decimais — por exemplo, 0.5 representa meio ponto por real.
  • fixed — o pointAmount define o total de pontos que o grupo de pedidos vai receber, distribuído proporcionalmente ao subtotal segmentado de cada pedido.

Os campos schedulingId e segmentationId associam respectivamente um agendamento e uma segmentação à regra. O valor null indica ausência de vínculo.

Limite de regras: a plataforma suporta no máximo 10 regras por loja. Ao atingir esse limite, a criação é bloqueada com o erro UAPPI_STORE_POINT_SYSTEM_RULE_MAX_QUANTITY.

Após a criação, a resposta retorna a regra com os campos scheduling e segmentation sempre carregados (podendo ser null).

Requer os escopos POINT_SYSTEM_RULE_READ e POINT_SYSTEM_RULE_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
tradePolicyIdinteger✅ SimID da política comercial à qual a regra será vinculada
ruleTypestring✅ SimTipo de acumulação. Valores aceitos: amount-spent ou fixed
namestring✅ SimNome descritivo da regra (máximo 255 caracteres)
pointAmountdecimal✅ SimQuantidade de pontos da regra (até 6 casas decimais). Para amount-spent: pontos por unidade monetária gasta. Para fixed: total de pontos a distribuir proporcionalmente
activeboolean✅ SimDefine se a regra está ativa
schedulingIdinteger ou null❌ NãoID do agendamento a ser associado à regra
segmentationIdinteger ou null❌ NãoID da segmentação a ser associada à regra

💡 Exemplo de Requisição

1curl --request POST \
2 --url {{MAIN_URL}}/promotionals/point-system/rules \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "tradePolicyId": 2,
7 "ruleType": "amount-spent",
8 "name": "Dobro de pontos em eletrônicos",
9 "pointAmount": 2,
10 "active": true,
11 "schedulingId": null,
12 "segmentationId": null
13 }'

✅ Resposta de Sucesso

HTTP Status: 201 Created

1{
2 "status": true,
3 "data": {
4 "id": 3,
5 "tradePolicyId": 2,
6 "ruleType": "amount-spent",
7 "name": "Dobro de pontos em eletrônicos",
8 "pointAmount": 2,
9 "active": true,
10 "createdAt": "2026-05-05 09:00:00",
11 "updatedAt": "2026-05-05 09:00:00",
12 "creatorUserId": 5,
13 "creatorUserName": "Carlos Operações",
14 "creatorUserEmail": "carlos.operacoes@loja.com.br",
15 "editorUserId": 5,
16 "editorUserName": "Carlos Operações",
17 "editorUserEmail": "carlos.operacoes@loja.com.br",
18 "scheduling": null,
19 "segmentation": null
20 }
21}

⚠️ 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 POINT_SYSTEM_RULE_WRITE.
UAPPI_STORE_POINT_SYSTEM_RULE_MAX_QUANTITY400❌ O limite de 10 regras por loja foi atingido.
UAPPI_STORE_SCHEDULING_NOT_FOUND404❌ O agendamento informado em schedulingId não foi encontrado.
UAPPI_STORE_SEGMENTATION_NOT_FOUND404❌ A segmentação informada em segmentationId não foi encontrada.

✏️ Atualização de Regra do Sistema de Pontos

PUT /promotionals/point-system/rules/{pointSystemRuleId}

Atualiza os dados de uma regra do sistema de pontos existente

📋 Descrição

Endpoint responsável por atualizar uma regra do sistema de pontos, identificada pelo pointSystemRuleId na URL.

Todos os campos do corpo são substituídos integralmente — a operação é um update completo, não parcial. Todos os campos obrigatórios devem ser enviados mesmo que não tenham sido alterados.

O campo ruleType define a lógica de acumulação da regra:

  • amount-spent — o cliente acumula pontos proporcionalmente ao valor gasto. O campo pointAmount define quantos pontos são gerados por unidade monetária.
  • fixed — o pointAmount define o total de pontos que o grupo de pedidos vai receber, distribuído proporcionalmente ao subtotal segmentado de cada pedido.

Caso o schedulingId ou segmentationId informado não exista na plataforma, o endpoint retorna o erro correspondente antes de persistir qualquer alteração.

Se a regra não for encontrada, o retorno é um erro 400 com o código UAPPI_STORE_POINT_SYSTEM_RULE_NOT_FOUND.

Requer os escopos POINT_SYSTEM_RULE_READ e POINT_SYSTEM_RULE_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
pointSystemRuleIdinteger✅ SimID da regra a ser atualizada

📦 Parâmetros do Corpo

ParâmetroTipoObrigatórioDescrição
tradePolicyIdinteger✅ SimID da política comercial vinculada à regra
ruleTypestring✅ SimTipo de acumulação. Valores aceitos: amount-spent ou fixed
namestring✅ SimNome descritivo da regra (máximo 255 caracteres)
pointAmountdecimal✅ SimQuantidade de pontos da regra (até 6 casas decimais). Para amount-spent: pontos por unidade monetária gasta. Para fixed: total de pontos a distribuir proporcionalmente
activeboolean✅ SimDefine se a regra está ativa
schedulingIdinteger ou null❌ NãoID do agendamento a ser associado à regra
segmentationIdinteger ou null❌ NãoID da segmentação a ser associada à regra

💡 Exemplo de Requisição

1curl --request PUT \
2 --url {{MAIN_URL}}/promotionals/point-system/rules/3 \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "tradePolicyId": 2,
7 "ruleType": "amount-spent",
8 "name": "Triplo de pontos em eletrônicos",
9 "pointAmount": 3,
10 "active": true,
11 "schedulingId": null,
12 "segmentationId": null
13 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

1{
2 "status": true,
3 "data": {
4 "id": 3,
5 "tradePolicyId": 2,
6 "ruleType": "amount-spent",
7 "name": "Triplo de pontos em eletrônicos",
8 "pointAmount": 3,
9 "active": true,
10 "createdAt": "2026-03-10 08:00:00",
11 "updatedAt": "2026-05-05 10:30:00",
12 "creatorUserId": 5,
13 "creatorUserName": "Carlos Operações",
14 "creatorUserEmail": "carlos.operacoes@loja.com.br",
15 "editorUserId": 7,
16 "editorUserName": "Marina Gestão",
17 "editorUserEmail": "marina.gestao@loja.com.br",
18 "scheduling": null,
19 "segmentation": null
20 }
21}

⚠️ 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 POINT_SYSTEM_RULE_WRITE.
UAPPI_STORE_POINT_SYSTEM_RULE_NOT_FOUND400❌ A regra do sistema de pontos solicitada não foi encontrada.
UAPPI_STORE_SCHEDULING_NOT_FOUND404❌ O agendamento informado em schedulingId não foi encontrado.
UAPPI_STORE_SEGMENTATION_NOT_FOUND404❌ A segmentação informada em segmentationId não foi encontrada.

🗑️ Exclusão de Regra do Sistema de Pontos

DELETE /promotionals/point-system/rules/{pointSystemRuleId}

Remove permanentemente uma regra do sistema de pontos da plataforma

📋 Descrição

Endpoint responsável por remover permanentemente uma regra do sistema de pontos, identificada pelo pointSystemRuleId na URL.

Ao excluir a regra, seus vínculos com agendamento e segmentação também são removidos automaticamente.

Caso a regra não seja encontrada, o endpoint retorna erro 400 com o código UAPPI_STORE_POINT_SYSTEM_RULE_NOT_FOUND. Quando a exclusão é bem-sucedida, o campo data retorna true.

Requer os escopos POINT_SYSTEM_RULE_READ e POINT_SYSTEM_RULE_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
pointSystemRuleIdinteger✅ SimID da regra a ser removida

💡 Exemplo de Requisição

1curl --request DELETE \
2 --url {{MAIN_URL}}/promotionals/point-system/rules/3 \
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 POINT_SYSTEM_RULE_WRITE.
UAPPI_STORE_POINT_SYSTEM_RULE_NOT_FOUND400❌ A regra do sistema de pontos solicitada não foi encontrada.

➕ Adição de Pontos em Lote

PUT /promotionals/point-system/transactions/add

Credita pontos manualmente no saldo de um ou mais clientes em uma única operação

📋 Descrição

Endpoint responsável por creditar pontos manualmente no saldo de clientes, processando múltiplos itens em uma única requisição.

O array transactions aceita até 100 itens por chamada. Cada item é validado individualmente — falhas por item são embutidas no campo error da resposta, e o HTTP permanece 200 independentemente de erros parciais.

Os campos orderId, reason e available são gerenciados internamente e não devem ser enviados na requisição. Eles estarão presentes na resposta com valores calculados pelo sistema.

Requer o escopo POINT_SYSTEM_TRANSACTION_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
transactionsarray✅ SimLista de transações a processar (máximo 100 itens)
transactions.*.customerIdinteger✅ SimID do cliente que receberá os pontos
transactions.*.amountdecimal✅ SimQuantidade de pontos a creditar (maior que zero, até 6 casas decimais)
transactions.*.expiresAtstring ou null❌ NãoData de expiração dos pontos. null indica que os pontos nunca expiram

💡 Exemplo de Requisição

1curl --request PUT \
2 --url {{MAIN_URL}}/promotionals/point-system/transactions/add \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "transactions": [
7 {
8 "customerId": 42,
9 "amount": 150,
10 "expiresAt": "2026-12-31 23:59:59"
11 },
12 {
13 "customerId": 87,
14 "amount": 75,
15 "expiresAt": null
16 }
17 ]
18 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

O array retornado contém todos os itens enviados, incluindo os que falharam. Itens com erro possuem o campo error preenchido com o código do problema — os demais têm error como null.

1{
2 "status": true,
3 "data": [
4 {
5 "customerId": 42,
6 "orderId": null,
7 "amount": 150,
8 "error": null,
9 "expiresAt": "2026-12-31 23:59:59",
10 "available": true
11 },
12 {
13 "customerId": 87,
14 "orderId": null,
15 "amount": 75,
16 "error": null,
17 "expiresAt": null,
18 "available": true
19 }
20 ]
21}

⚠️ Exemplo com erro parcial

Quando um ou mais itens falham, a resposta HTTP ainda é 200. O campo error identifica o problema no item específico:

1{
2 "status": true,
3 "data": [
4 {
5 "customerId": 999,
6 "orderId": null,
7 "amount": 50,
8 "error": "UAPPI_STORE_CUSTOMER_NOT_FOUND",
9 "expiresAt": null,
10 "available": true
11 }
12 ]
13}

⚠️ 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.

Erros globais (bloqueiam toda a requisição):

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 POINT_SYSTEM_TRANSACTION_WRITE.
Erros por item (embutidos no campo error de cada item na resposta):

Código InternoDescrição
UAPPI_STORE_CUSTOMER_NOT_FOUND❌ O cliente informado em customerId não foi encontrado.
UAPPI_STORE_POINT_SYSTEM_INVALID_VALUE❌ O valor de amount deve ser maior que zero.
UAPPI_STORE_POINT_SYSTEM_INVALID_EXPIRATION_DATE❌ A data em expiresAt deve ser maior que a data atual.

➖ Remoção de Pontos em Lote

PUT /promotionals/point-system/transactions/remove

Debita pontos manualmente do saldo de um ou mais clientes em uma única operação

📋 Descrição

Endpoint responsável por debitar pontos manualmente do saldo de clientes, processando múltiplos itens em uma única requisição.

O array transactions aceita até 100 itens por chamada. Cada item é validado individualmente — falhas por item são embutidas no campo error da resposta, e o HTTP permanece 200 independentemente de erros parciais.

O campo reason na resposta sempre retorna "manual" para este endpoint — é gerenciado internamente e não deve ser enviado. O campo orderId também é interno e não deve ser incluído na requisição.

Requer o escopo POINT_SYSTEM_TRANSACTION_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
transactionsarray✅ SimLista de transações a processar (máximo 100 itens)
transactions.*.customerIdinteger✅ SimID do cliente que terá pontos debitados
transactions.*.amountdecimal✅ SimQuantidade de pontos a debitar (maior que zero, até 6 casas decimais; não pode exceder o saldo do cliente)

💡 Exemplo de Requisição

1curl --request PUT \
2 --url {{MAIN_URL}}/promotionals/point-system/transactions/remove \
3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \
4 --header "Content-Type: application/json" \
5 --data '{
6 "transactions": [
7 {
8 "customerId": 42,
9 "amount": 30
10 },
11 {
12 "customerId": 87,
13 "amount": 10
14 }
15 ]
16 }'

✅ Resposta de Sucesso

HTTP Status: 200 OK

O array retornado contém todos os itens enviados, incluindo os que falharam. Itens com erro possuem o campo error preenchido — os demais têm error como null. O campo reason sempre retorna "manual".

1{
2 "status": true,
3 "data": [
4 {
5 "customerId": 42,
6 "orderId": null,
7 "amount": 30,
8 "error": null,
9 "reason": "manual"
10 },
11 {
12 "customerId": 87,
13 "orderId": null,
14 "amount": 10,
15 "error": null,
16 "reason": "manual"
17 }
18 ]
19}

⚠️ Exemplo com erro parcial

Quando um ou mais itens falham, a resposta HTTP ainda é 200. O campo error identifica o problema no item específico:

1{
2 "status": true,
3 "data": [
4 {
5 "customerId": 999,
6 "orderId": null,
7 "amount": 10,
8 "error": "UAPPI_STORE_CUSTOMER_NOT_FOUND",
9 "reason": "manual"
10 }
11 ]
12}

⚠️ 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.

Erros globais (bloqueiam toda a requisição):

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 POINT_SYSTEM_TRANSACTION_WRITE.
Erros por item (embutidos no campo error de cada item na resposta):

Código InternoDescrição
UAPPI_STORE_CUSTOMER_NOT_FOUND❌ O cliente informado em customerId não foi encontrado.
UAPPI_STORE_POINT_SYSTEM_INVALID_VALUE❌ O valor de amount deve ser maior que zero.
UAPPI_STORE_POINT_SYSTEM_INVALID_SUBTRACTED_AMOUNT❌ O valor a debitar excede o saldo disponível do cliente.

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

;