Pular para o conteúdo principal

Wallet

Use estes endpoints para integrar aplicativos e carteiras digitais sem depender de cartão físico.

Toda operação aqui é identificada pela reference — o código do cliente no seu sistema. Para localizar uma pessoa, verificar a identidade dela ou consultar consumo consolidado, use Consumidores.

Resumo

MétodoEndpointFinalidade
GET/places/{idPlace}/customers/{reference}Consultar Wallet
POST/places/{idPlace}/customers/{reference}/checkinAbrir Wallet
PUT/places/{idPlace}/customers/{reference}Alterar consumidor
GET/places/{idPlace}/customers/{reference}/transactionsConsultar transações
POST/places/{idPlace}/customers/{reference}/transactionsRegistrar produto externo
DELETE/places/{idPlace}/customers/{reference}/transactions/{idTransaction}Estornar transação
POST/places/{idPlace}/customers/{reference}/rechargesRegistrar recarga
PUT/places/{idPlace}/customers/{reference}/balanceAtualizar saldo
POST/places/{idPlace}/customers/{reference}/checkoutEncerrar Wallet
POST/places/{idPlace}/customers/{reference}/resetReiniciar Wallet

Parâmetros e erros comuns

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idPlacestringSimCódigo do estabelecimento. Precisa estar no escopo da sua chave
referencestringSimCódigo do consumidor no seu sistema. Ver o aviso abaixo
A reference precisa ser estável para sempre

A Enjoy.it não guarda a reference como um campo: ela deriva a credencial a partir da combinação do seu código de parceiro + reference + idPlace. A mesma reference sempre aponta para a mesma credencial, e uma reference diferente cria outra.

Consequência prática: se o seu sistema mudar o código de um cliente — por recadastro, migração de base ou troca de prefixo —, ele perde o acesso ao saldo e ao extrato que estavam na credencial anterior. Escolha um identificador que nunca muda.

Todos os caminhos desta página usam reference

Nenhum endpoint aqui espera o uid da Enjoy.it. Os que usam uid — pesquisa, verificação de identidade e relatórios — estão em Consumidores.

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
4044042RFID card not found in userRfid table.Não existe Wallet aberta para essa reference
4234231Place suspended!O estabelecimento está suspenso

Consultar Wallet

Retorna o estado atual da Wallet e o consumidor vinculado a ela.

GET /places/{idPlace}/customers/{reference}

Resposta 200

CampoTipoDescrição
uidstringIdentificador do consumidor na Enjoy.it
rfidstringCredencial derivada da reference
idTabstringNúmero de comanda vinculado, quando houver
planstringprepaid ou postpaid
statusstringEstado da credencial. enable indica que ela libera consumo
accountBalancenumberSaldo disponível, em reais
hasConsumptionLimitbooleanSe true, a torneira respeita o saldo
createdAtstringData de abertura da sessão, em ISO 8601
consumerReferencestringCódigo do consumidor no seu sistema
consumptionIpnstringWebhook de consumo configurado nesta sessão
balanceIpnstringEndereço consultado para obter o saldo
openTapIpnstringWebhook de mudança de estado da torneira
broughtGlassbooleanSe o consumidor trouxe o próprio copo
glassPricenumberValor do copo, quando aplicável
qrCodestringQR Code vinculado, quando houver
customerobjetoDados do consumidor: uid, name, document, cellphone, consumerReference, email, gender, birthdate, region
{
"accountBalance": 60,
"createdAt": "2026-08-02T19:43:29.416Z",
"hasConsumptionLimit": true,
"consumerReference": "cliente-123",
"plan": "prepaid",
"status": "enable",
"uid": "5FS6DS0BDERIWG9QL6ojfuLedg23",
"customer": {
"name": "Maria Silva",
"consumerReference": "cliente-123"
}
}

Só os erros comuns.

Abrir uma Wallet

Cria a sessão do consumidor e libera o consumo.

POST /places/{idPlace}/customers/{reference}/checkin

Corpo da requisição

CampoTipoObrigatórioDescrição
planstringSimprepaid ou postpaid
consumerobjetoSimDados do consumidor. Ver tabela abaixo
hasConsumptionLimitbooleanNãoEm pré-pago use true, senão a torneira libera sem saldo
balancenumberNãoSaldo inicial em reais
bonusnumberNãoCrédito de cortesia em reais
consumptionIpnstringNãoURL chamada a cada consumo. Informe apenas se você usa webhook
balanceIpnstringNãoURL consultada pela Enjoy.it para obter o saldo antes de liberar a torneira
broughtGlassbooleanNãoIndica que o consumidor trouxe o próprio copo
glassPricenumberNãoValor do copo, quando aplicável
reopenTabstringNãoReabre uma sessão anterior em vez de criar uma nova

Campos de consumer:

CampoTipoObrigatórioDescrição
namestringSimNome apresentado no totem e nos relatórios
consumerReferencestringSim neste endpointVer aviso abaixo
cellphonestringNãoTelefone, preferencialmente com +55
documentstringNãoDocumento, apenas dígitos
emailstringNãoE-mail
genderstringNãomale, female ou other
birthdatestringNãoData de nascimento
showLeaderboardbooleanNãoAutoriza exibir o consumidor em ranking
optInsobjetoNãoPermissões de contato. Contém marketing (boolean)
regionobjetoNãoEndereço: street, postalcode, number, neighborhood, city, state
consumerReference é obrigatório só aqui

Nos check-ins por comanda e por RFID esse campo é opcional. No check-in de Wallet ele é obrigatório — sem ele a chamada falha com 400.

{
"plan": "postpaid",
"hasConsumptionLimit": false,
"consumer": {
"name": "Maria Silva",
"consumerReference": "cliente-123"
},
"consumptionIpn": "https://parceiro.example.com/enjoy/consumptions"
}

Resposta 201

Corpo vazio.

{}

Erros

StatusCódigoMensagemQuando acontece
400Missing customer reference (consumerReference)!Faltou consumer.consumerReference
4004001This RFID card has an opened consumption.Já existe sessão aberta para essa reference
4224221It was not possible to link the phone number with the document provided.Telefone e documento pertencem a cadastros diferentes

Alterar consumidor

Troca ou completa os dados do consumidor de uma sessão aberta, sem encerrá-la.

PUT /places/{idPlace}/customers/{reference}

Corpo da requisição

Os mesmos campos de consumer em Abrir uma Walletname é obrigatório.

{
"name": "Maria Silva",
"consumerReference": "cliente-123",
"email": "maria@example.com"
}

Resposta 200

Corpo vazio.

{}

Só os erros comuns.

Consultar transações

Retorna o extrato da Wallet.

GET /places/{idPlace}/customers/{reference}/transactions

Query string

ParâmetroTipoObrigatórioDescrição
startAtstringNãoInício do período em ISO 8601
finishAtstringNãoFim do período em ISO 8601

startAt e finishAt só têm efeito quando enviados juntos.

Resposta 200

Lista de transações. Os campos estão descritos em Consultar transações da comanda — o formato é idêntico.

CampoTipoDescrição
idTransactionstringIdentificador único. Use para não lançar duas vezes
totalnumberValor a lançar, em reais. Já vem calculado
typestringD consumo, C recarga, P produto do parceiro

Só os erros comuns.

Registrar produto externo

Lança na Enjoy.it um item vendido no seu sistema. A transação sensibiliza o saldo.

POST /places/{idPlace}/customers/{reference}/transactions

Corpo da requisição

CampoTipoObrigatórioDescrição
createdAtstringSimData e hora da venda em ISO 8601. Participa da identificação da transação
productstringSimDescrição do item
categorystringSimCategoria do item
quantitynumberSimQuantidade vendida
totalnumberNãoValor total da venda, em reais
sellingPricenumberNãoPreço unitário praticado
pricenumberNãoPreço de tabela
valuenumberNãoValor a debitar, quando diferente do total
skustringNãoCódigo do produto no seu catálogo
transactionReferencestringNãoReferência da venda no seu sistema
referencestringNãoReferência auxiliar
reversedbooleanNãoMarca a transação como estornada
{
"createdAt": "2026-10-20T17:35:18.417Z",
"product": "Coca-Cola lata",
"category": "Bebidas",
"transactionReference": "venda-987",
"sellingPrice": 8.5,
"quantity": 1,
"total": 8.5
}

Resposta 201

A transação criada, sempre com type: "P".

Erros

StatusCódigoMensagemQuando acontece
4004002This tab is not open.A Wallet não tem sessão aberta
4004003Insufficient funds!Saldo insuficiente para o valor lançado
4004004There is already a transaction for this customer with the createdAt provided.Reenvio da mesma venda

Estornar transação

Cancela um lançamento já registrado, devolvendo o valor ao saldo.

DELETE /places/{idPlace}/customers/{reference}/transactions/{idTransaction}

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idTransactionstringSimO idTransaction devolvido em Consultar transações

Não possui corpo.

Resposta 200

Corpo vazio.

{}

Erros

StatusCódigoMensagemQuando acontece
4044040Transaction not found!O idTransaction não pertence ao extrato dessa Wallet

Registrar recarga

Credita saldo na Wallet. Chame somente depois de o pagamento ser aprovado.

POST /places/{idPlace}/customers/{reference}/recharges

Corpo da requisição

CampoTipoObrigatórioDescrição
valuenumberSimValor creditado, em reais
paymentMethodstringNãodebit-card, credit-card, cash ou on-the-house (cortesia)
{
"value": 50,
"paymentMethod": "credit-card"
}

Resposta 201

Corpo vazio.

{}

Erros

StatusCódigoMensagemQuando acontece
404Missing value!value ausente ou não numérico. Repare que o status é 404, não 400
4004002This tab is not open.A Wallet não tem sessão aberta

Atualizar saldo

Sincroniza na Enjoy.it o saldo disponível para chope.

PUT /places/{idPlace}/customers/{reference}/balance

Query string

ParâmetroTipoObrigatórioDescrição
relativebooleanNãoCom true, o valor enviado é somado ao saldo atual em vez de substituí-lo

Corpo da requisição

CampoTipoObrigatórioDescrição
balancenumberCondicionalNovo saldo em reais, ou a variação quando relative=true
glassPricenumberCondicionalValor do copo

Pelo menos um dos dois precisa ser enviado.

{
"balance": 75.5
}

Resposta 200

Corpo vazio.

{}

Erros

StatusMensagemQuando acontece
400Missing balance or glassPrice.Corpo vazio ou sem nenhum dos dois campos

Encerrar Wallet

Encerra a sessão e bloqueia a credencial contra novas servidas.

POST /places/{idPlace}/customers/{reference}/checkout

Corpo da requisição

CampoTipoObrigatórioDescrição
productslista de objetosSimItens do seu sistema ainda não enviados. Mande [] quando não houver nenhum

Cada item usa os mesmos campos de Registrar produto externo.

{ "products": [] }

Resposta 200

Corpo vazio.

{}

Erros

StatusCódigoMensagemQuando acontece
4004002This tab is not open.A Wallet já foi encerrada ou nunca foi aberta

Reiniciar Wallet

Desassocia o ciclo atual da credencial.

POST /places/{idPlace}/customers/{reference}/reset

Corpo da requisição

CampoTipoObrigatórioDescrição
keepBalancebooleanNãoCom true, o saldo permanece disponível para o próximo ciclo

O corpo em si é obrigatório: envie ao menos {}.

{
"keepBalance": false
}

Resposta 200

Corpo vazio.

{}

Só os erros comuns.