Pular para o conteúdo principal

Cupons

Cupom é um código promocional do estabelecimento: o consumidor informa o código na hora da recarga e recebe bônus, desconto ou crédito. Estes endpoints administram o cadastro dos cupons — criar, alterar, listar e acompanhar quem resgatou.

Resumo

MétodoEndpointFinalidade
GET/places/{idPlace}/vouchersListar cupons
GET/places/{idPlace}/vouchers/{idVoucher}Consultar um cupom
POST/places/{idPlace}/vouchersCriar um cupom
PUT/places/{idPlace}/vouchers/{idVoucher}Alterar um cupom
Na API o cupom se chama voucher

O caminho é /vouchers e o campo do código é idVoucher — é o nome que a API usa desde a primeira versão. Cupom e voucher são a mesma coisa aqui.

Aqui você cadastra; o resgate acontece na recarga

Não existe endpoint de resgate nesta API. O código é aplicado quando o consumidor recarrega pelo aplicativo da Enjoy.it ou pelo Enjoy PDV, e é nesse momento que todas as regras do cupom são verificadas. O que você faz por aqui é manter o cadastro e consultar os resgates, na lista uses.

Parâmetros e erros comuns

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idPlacestringSimCódigo do estabelecimento. Precisa estar no escopo da sua chave
idVoucherstringCondicionalO próprio código do cupom. Convertido para maiúsculas pela API

Erros comuns

StatusCódigoMensagemQuando acontece
400validação do payloadCampo obrigatório ausente ou com tipo errado
403Not authorized to interact with this place (idPlace)A chave não tem acesso a esse estabelecimento
404ItemNotFoundExceptionO idVoucher informado não existe

O código é global na plataforma

O idVoucher é o código digitado pelo consumidor, e ele é único em toda a Enjoy.it — não apenas dentro do seu estabelecimento. Se outro estabelecimento já usou VERAO2026, a sua criação responde 409.

Use um prefixo seu para não colidir:

EvitePrefira
PROMO10PDVX-PROMO10

Aceita letras, números, _, . e -. Como a API converte para maiúsculas, verao2026 e VERAO2026 são o mesmo cupom: mande sempre em maiúsculas para o log ficar igual ao cadastro.

Tipos de cupom

O campo type define o que o consumidor ganha, e muda o significado de value:

typeO que fazComo value é lido
bonus-rechargeBônus sobre a recargaPercentual. value: 10 em uma recarga de R$ 100 gera R$ 10 de bônus
discount-rechargeDesconto na recargaPercentual, mesma conta do bônus
creditCrédito de valor fixoReais. value: 15 credita R$ 15

Nos dois tipos percentuais, maxValue limita o bônus em reais: value: 20 com maxValue: 30 em uma recarga de R$ 500 credita R$ 30, não R$ 100.

O bônus entra como saldo de bônus da credencial, separado do saldo recarregado.

Listar cupons

Retorna os cupons do estabelecimento. Cupons com status archived não aparecem.

GET /places/{idPlace}/vouchers

Resposta 200

Lista de cupons.

CampoTipoDescrição
idVoucherstringO código do cupom
idPlacestringEstabelecimento dono do cupom
namestringNome interno da promoção
typestringbonus-recharge, discount-recharge ou credit
valuenumberPercentual ou valor, conforme o tipo
maxValuenumberTeto do bônus em reais, nos tipos percentuais
statusstringenable ou disabled
quantitynumberTotal de resgates permitidos
usesCountnumberQuantos resgates já aconteceram
useslistaUm item por resgate. Ver tabela abaixo
singleUsebooleanSe o cupom morre no primeiro resgate
multipleRedeembooleanSe o mesmo consumidor pode resgatar mais de uma vez
newUsersbooleanSe é restrito a quem nunca recarregou
redeemInAppbooleanSe pode ser resgatado no aplicativo do consumidor
redeemInPdvbooleanSe pode ser resgatado no PDV
automaticbooleanSe é oferecido automaticamente nas telas da Enjoy.it
conditionobjetoCondição sobre o valor da recarga. Ver Condição de recarga
idsTaplistaTorneiras em que o cupom vale. Vazio significa todas
startAtnumberInício da validade, em milissegundos
endAtnumberFim da validade, em milissegundos
allowedlistaConsumidores autorizados. Vazio significa todos
disallowedlistaConsumidores bloqueados

Campos de cada item de uses, allowed e disallowed:

CampoTipoDescrição
uidstringIdentificador do consumidor na Enjoy.it
documentstringDocumento do consumidor
phonestringTelefone do consumidor
createdAtstringEm uses, data e hora do resgate, em ISO 8601
[
{
"idVoucher": "PDVX-VERAO2026",
"idPlace": "P-PDV",
"name": "Verão 2026 — 10% de bônus",
"type": "bonus-recharge",
"value": 10,
"maxValue": 30,
"status": "enable",
"quantity": 500,
"usesCount": 2,
"singleUse": false,
"multipleRedeem": false,
"newUsers": false,
"redeemInApp": true,
"redeemInPdv": true,
"automatic": false,
"condition": {
"active": true,
"type": "GreaterThanOrEqualTo",
"value": 50
},
"startAt": 1767225600000,
"endAt": 1772409599000,
"uses": [
{
"uid": "5FS6DS0BDERIWG9QL6ojfuLedg23",
"document": "12345678900",
"phone": "+5511999999999",
"createdAt": "2026-08-02T19:43:29.416Z"
}
]
}
]

Só os erros comuns.

Consultar um cupom

GET /places/{idPlace}/vouchers/{idVoucher}

Resposta 200

Um objeto no mesmo formato de Listar cupons. Diferente da listagem, aqui um cupom archived também é retornado.

Erros

Além dos comuns:

StatusCódigoMensagemQuando acontece
403This voucher is from other place (idPlace)O código existe, mas pertence a outro estabelecimento

Criar um cupom

POST /places/{idPlace}/vouchers

Corpo da requisição

CampoTipoObrigatórioDescrição
idVoucherstringSimO código que o consumidor vai digitar. Ver O código é global
namestringSimNome interno da promoção
typestringSimbonus-recharge, discount-recharge ou credit
valuenumberSimPercentual ou valor, conforme o tipo. Mínimo 0
singleUsebooleanSimtrue encerra o cupom no primeiro resgate
newUsersbooleanSimtrue restringe a quem nunca fez recarga na loja
redeemInAppbooleanSimLibera o resgate no aplicativo do consumidor
redeemInPdvbooleanSimLibera o resgate no PDV
quantitynumberCondicionalTotal de resgates permitidos. Obrigatório quando singleUse é false; mínimo 1
maxValuenumberNãoTeto do bônus em reais, nos tipos percentuais
multipleRedeembooleanNãotrue permite que o mesmo consumidor resgate várias vezes. Padrão false
automaticbooleanNãoMarca o cupom para ser oferecido automaticamente nas telas da Enjoy.it. Não altera as regras de resgate
conditionobjetoNãoExige um valor mínimo ou máximo de recarga. Ver Condição de recarga
idsTaplistaNãoRestringe o cupom a torneiras específicas
startAtnumberNãoInício da validade, em milissegundos
endAtnumberNãoFim da validade, em milissegundos
allowedlistaNãoSó estes consumidores podem resgatar
disallowedlistaNãoEstes consumidores não podem resgatar

idPlace vem do caminho: se você mandar esse campo no corpo, ele é ignorado.

startAt e endAt não são ISO 8601

Estes dois campos são a exceção à regra de datas da API: eles são números em milissegundos desde 1970 (UTC), o que em JavaScript é new Date('2026-01-01T00:00:00Z').getTime(). Mandar "2026-01-01" aqui não gera erro de validação — o cupom simplesmente nunca fica válido.

Em allowed e disallowed, cada item identifica o consumidor por uid, document ou phone; qualquer um dos três serve, e basta um deles casar.

{
"idVoucher": "PDVX-VERAO2026",
"name": "Verão 2026 — 10% de bônus",
"type": "bonus-recharge",
"value": 10,
"maxValue": 30,
"quantity": 500,
"singleUse": false,
"multipleRedeem": false,
"newUsers": false,
"redeemInApp": true,
"redeemInPdv": true,
"condition": {
"active": true,
"type": "GreaterThanOrEqualTo",
"value": 50
},
"startAt": 1767225600000,
"endAt": 1772409599000
}

Resposta 201

Corpo vazio. O cupom já nasce com status enable e usesCount 0.

{}

Erros

Além dos comuns:

StatusCódigoMensagemQuando acontece
4004001Invalid idVucher (only letters and numbers)!O código tem caractere fora de letras, números, _, . e -
4094091Voucher already exists!Já existe esse código na plataforma. Escolha outro

Alterar um cupom

PUT /places/{idPlace}/vouchers/{idVoucher}

Corpo da requisição

Os mesmos campos de Criar um cupom, mais:

CampoTipoObrigatórioDescrição
statusstringNãoenable, disabled ou archived. Quando ausente, o status atual é mantido
A alteração substitui o cadastro inteiro

Não é uma alteração parcial. O cupom é regravado com o que você mandou, então todo campo opcional omitido é apagado — mandar só {"value": 15} zera condition, maxValue, idsTap, startAt, endAt, allowed e disallowed, e derruba os obrigatórios na validação.

Leia o cupom com Consultar um cupom, altere o que precisa e mande o objeto completo de volta.

uses e usesCount são preservados — o histórico de resgates não se perde.

Para encerrar uma promoção, use status: disabled bloqueia novos resgates e mantém o cupom na listagem; archived some da listagem.

Resposta 200

Corpo vazio.

{}

Erros

Além dos comuns:

StatusCódigoMensagemQuando acontece
4004001Invalid idVucher (only letters and numbers)!O código tem caractere inválido
403This voucher is from other place (idPlace)O cupom pertence a outro estabelecimento

Regras de resgate

Estas regras são avaliadas no momento do resgate, pelo aplicativo ou pelo PDV — não nos endpoints desta página. Vale conhecê-las porque são elas que definem se a promoção que você cadastrou vai funcionar como você espera:

RegraEfeito quando não é atendida
Credencial pré-pagaCupom só é resgatado em credencial prepaid
status enableCupom desabilitado não é aceito
quantityEsgotado o total de resgates, ninguém mais resgata
singleUseDepois do primeiro resgate, o cupom fecha
multipleRedeemCom false, o consumidor que já resgatou não resgata de novo
conditionA recarga fora da faixa não recebe o benefício
startAt / endAtFora da janela, o cupom não vale
idsTapEm outra torneira, o cupom não vale
allowed / disallowedFora da lista de autorizados, ou dentro da de bloqueados, não resgata
newUsersQuem já fez recarga no estabelecimento não resgata
redeemInApp / redeemInPdvO canal desabilitado não aceita o código
Mesma redeO cupom vale na loja que o criou e nas lojas da mesma empresa

Condição de recarga

condition amarra o cupom a um valor de recarga:

CampoTipoDescrição
activebooleantrue liga a condição
typestringGreaterThanOrEqualTo (recarga mínima) ou LessThanOrEqualTo (recarga máxima)
valuenumberO valor da comparação, em reais
{
"active": true,
"type": "GreaterThanOrEqualTo",
"value": 50
}

Com o exemplo acima, uma recarga de R$ 30 não recebe o bônus; uma de R$ 50 recebe.