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
400—validação do payloadCampo obrigatório ausente ou com tipo errado
403—Not authorized to interact with this place (idPlace)A chave não tem acesso a esse estabelecimento
404—ItemNotFoundExceptionO 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
403—This 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
403—This 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.