Pular para o conteúdo principal

Comandas

Use estes endpoints quando o operador conhece o número impresso da comanda, mas não precisa ler seu chip RFID. A Enjoy.it mantém o vínculo entre idTab e RFID.

Resumo

MétodoEndpointFinalidade
GET/places/{idPlace}/tabs/{idTab}Consultar uma comanda
GET/places/{idPlace}/tabsListar comandas abertas
POST/places/{idPlace}/tabs/{idTab}/checkinAbrir uma comanda
PUT/places/{idPlace}/tabs/{idTab}/customersAlterar consumidor
GET/places/{idPlace}/tabs/{idTab}/transactionsConsultar transações
POST/places/{idPlace}/tabs/{idTab}/transactionsRegistrar produto externo
DELETE/places/{idPlace}/tabs/{idTab}/transactions/{idTransaction}Estornar transação
POST/places/{idPlace}/tabs/{idTab}/rechargesRegistrar recarga
PUT/places/{idPlace}/tabs/{idTab}/balanceAtualizar saldo
PUT/places/{idPlace}/tabsTrocar a comanda
POST/places/{idPlace}/tabs/{idTab}/checkoutEncerrar a comanda
POST/places/{idPlace}/tabs/{idTab}/resetReiniciar a comanda

Parâmetros e erros comuns

Valem para todos os endpoints desta página, e por isso não se repetem em cada um.

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
idPlacestringSimCódigo do estabelecimento. Precisa estar no escopo da sua chave
idTabstringSimNúmero impresso na comanda. A API completa com zeros à esquerda: 6 vira 006

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
4044041idTab not found!O número da comanda não existe no cadastro da loja
4044042RFID card not found in userRfid table.A comanda existe, mas não há credencial ativa vinculada a ela
4234231Place suspended!O estabelecimento está suspenso

Consultar uma comanda

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

GET /places/{idPlace}/tabs/{idTab}

Resposta 200

CampoTipoDescrição
idTabstringNúmero da comanda
rfidstringCódigo do chip resolvido a partir do número
uidstringIdentificador do consumidor na Enjoy.it
planstringprepaid ou postpaid
statusstringEstado da credencial. enable indica que ela libera consumo
accountBalancenumberSaldo disponível, em reais
hasConsumptionLimitbooleanSe true, a torneira respeita o saldo. Vem false quando não definido
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 a operação cobra por ele
qrCodestringQR Code vinculado, quando houver
customerobjetoDados do consumidor. Ausente se não houver consumidor vinculado

Campos de customer:

CampoTipoDescrição
uidstringIdentificador do consumidor na Enjoy.it
namestringNome
documentstringDocumento
cellphonestringTelefone
consumerReferencestringCódigo do consumidor no seu sistema
emailstringE-mail
genderstringmale, female ou other
birthdatestringData de nascimento em ISO 8601
regionobjetoEndereço: street, postalcode, number, neighborhood, city, state
{
"accountBalance": 120,
"createdAt": "2026-08-02T19:43:29.416Z",
"hasConsumptionLimit": true,
"consumerReference": "cliente-123",
"idTab": "006",
"plan": "prepaid",
"rfid": "4623227593",
"status": "enable",
"uid": "5FS6DS0BDERIWG9QL6ojfuLedg23",
"customer": {
"name": "Maria Silva",
"cellphone": "+5511999999999",
"consumerReference": "cliente-123"
}
}

Só os erros comuns.

Listar comandas abertas

Retorna todas as comandas com sessão aberta no estabelecimento.

GET /places/{idPlace}/tabs

Query string

ParâmetroTipoObrigatórioDescrição
sourcesstringNãoFiltra por origem. Aceita vários valores separados por vírgula
lastTransactionAfterstringNãoData em ISO 8601. Retorna apenas comandas com consumo posterior a ela

Resposta 200

Lista de objetos no mesmo formato de Consultar uma comanda.

[
{
"idTab": "006",
"rfid": "4623227593",
"plan": "prepaid",
"accountBalance": 120,
"status": "enable"
}
]

Erros

StatusMensagemQuando acontece
400Invalid lastTransactionAfterA data enviada não é reconhecida como data válida

Abrir uma comanda

Vincula o consumidor à comanda e libera o consumo. É o check-in.

POST /places/{idPlace}/tabs/{idTab}/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 a operação cobra por ele
reopenTabstringNãoReabre uma sessão anterior em vez de criar uma nova
rfidstringNãoFixa o chip a ser usado, em vez de resolver pelo número da comanda

Campos de consumer:

CampoTipoObrigatórioDescrição
namestringSimNome apresentado no totem e nos relatórios
consumerReferencestringNãoRecomendado. O código do consumidor no seu sistema
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
{
"plan": "postpaid",
"hasConsumptionLimit": false,
"consumer": {
"name": "Maria Silva",
"cellphone": "+5511999999999",
"consumerReference": "cliente-123"
},
"consumptionIpn": "https://parceiro.example.com/enjoy/consumptions"
}

Resposta 201

Corpo vazio. Só entregue a comanda ao consumidor depois de receber este 201.

{}

Erros

StatusCódigoMensagemQuando acontece
4004001This RFID card has an opened consumption.A comanda já tem sessão aberta. Faça o checkout antes
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 já aberta, sem encerrá-la.

PUT /places/{idPlace}/tabs/{idTab}/customers

Corpo da requisição

Os mesmos campos de consumer em Abrir uma comandaname é 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 comanda: consumos de chope, recargas e produtos lançados pelo parceiro.

GET /places/{idPlace}/tabs/{idTab}/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. Informar só um deles é o mesmo que não filtrar.

GET /places/P-PDV/tabs/006/transactions?startAt=2026-08-01T00:00:00.000Z&finishAt=2026-08-02T23:59:59.999Z

Resposta 200

Lista de transações, ordenada por createdAt.

CampoTipoDescrição
idTransactionstringIdentificador único. Use para não lançar duas vezes
createdAtstringData e hora da transação, em ISO 8601
totalnumberValor a lançar, em reais. Já vem calculado
productstringDescrição do item
skustringCódigo do produto. Pode ser configurado na Enjoy.it com o código do seu catálogo
mlServednumberVolume servido. Ausente em produtos e recargas
sellingPricenumberPreço por mililitro no consumo de chope
quantitynumberQuantidade, em produtos lançados pelo parceiro
typestringD consumo, C recarga, P produto do parceiro
reversedbooleanSe true, a transação foi estornada e não deve ser cobrada
bonusnumberParte do valor paga com crédito de cortesia
paymentMethodstringMeio de pagamento, em recargas
billingstringInformação de faturamento
acknowledgedbooleanSe você já deu baixa nesta transação
acknowledgedAtstringData da baixa, em ISO 8601
acknowledgeReferencestringReferência do lançamento no seu sistema, enviada na baixa
idTapstringTorneira onde o consumo aconteceu
idTabstringNúmero da comanda
rfidstringChip da credencial
idPlacestringEstabelecimento
uidstringConsumidor na Enjoy.it. Com createdAt, identifica a transação
consumerReferencestringCódigo do consumidor no seu sistema
transactionReferencestringReferência enviada por você ao registrar
planstringprepaid ou postpaid
documentstringDocumento do consumidor
categorystringCategoria, em produtos do parceiro
[
{
"idTransaction": "980a69f4-d629-5571-8a9f-99aa0293e4d6",
"createdAt": "2026-08-02T19:43:29.416Z",
"product": "IPA da Casa",
"sku": "IPA-001",
"mlServed": 320,
"sellingPrice": 0.04,
"total": 12.8,
"type": "D",
"reversed": false,
"acknowledged": false,
"idTap": "T-01",
"idTab": "006",
"rfid": "4623227593",
"idPlace": "P-PDV",
"uid": "5FS6DS0BDERIWG9QL6ojfuLedg23"
}
]

Só os erros comuns.

Registrar produto externo

Lança na Enjoy.it um item vendido no seu PDV. A transação sensibiliza o saldo do consumidor, o que em pré-pago dispensa o PUT .../balance daquela venda.

POST /places/{idPlace}/tabs/{idTab}/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",
"sku": "COCA350",
"sellingPrice": 8.5,
"quantity": 1,
"total": 8.5
}

Resposta 201

A transação criada, no mesmo formato de Consultar transações, sempre com type: "P". Os campos mlServed e idTap não se aplicam e vêm ausentes.

Erros

StatusCódigoMensagemQuando acontece
4004002This tab is not open.A comanda 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. Normalmente é a proteção contra duplicidade funcionando

Estornar transação

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

DELETE /places/{idPlace}/tabs/{idTab}/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 comanda
aviso

O estorno é uma operação financeira. Depois de receber sucesso, não repita a chamada; em caso de timeout, consulte o extrato e confira o campo reversed antes de tentar de novo.

Registrar recarga

Credita saldo na comanda. Chame somente depois de o pagamento ser aprovado pelo seu adquirente.

POST /places/{idPlace}/tabs/{idTab}/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. Só apresente o novo saldo ao consumidor depois deste 201.

{}

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 comanda não tem sessão aberta

Atualizar saldo

Sincroniza na Enjoy.it o saldo que o consumidor ainda tem disponível para chope.

PUT /places/{idPlace}/tabs/{idTab}/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": 200
}

Resposta 200

Corpo vazio.

{}

Erros

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

Trocar a comanda

Transfere a sessão para outro cartão, preservando consumos e saldo. Use quando o consumidor perder ou danificar a comanda.

PUT /places/{idPlace}/tabs

Corpo da requisição

CampoTipoObrigatórioDescrição
currentIdTabstringSimNúmero da comanda em uso. Completado com zeros à esquerda
newIdTabstringSimNúmero da comanda que passará a valer. Precisa estar livre
{
"currentIdTab": "006",
"newIdTab": "021"
}

Resposta 200

Corpo vazio.

{}

Erros

StatusMensagemQuando acontece
400Missing currentIdTab or newIdTab.Faltou um dos dois campos
400The current tab is not in use.A comanda de origem não tem sessão aberta
400The new tab is already in use.A comanda de destino já está com outro consumidor

Encerrar a comanda

Encerra a sessão e bloqueia a comanda contra novas servidas. Chame quando o consumidor for embora.

POST /places/{idPlace}/tabs/{idTab}/checkout

Corpo da requisição

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

Cada item de products usa os mesmos campos de Registrar produto externo.

{
"products": [
{
"createdAt": "2026-10-20T17:35:18.417Z",
"product": "Coca-Cola lata",
"category": "Bebidas",
"transactionReference": "venda-987",
"sellingPrice": 8.5,
"quantity": 1,
"total": 8.5
}
]
}
aviso

Não repita aqui produtos já enviados por Registrar produto externo — seriam lançados duas vezes.

Resposta 200

Corpo vazio. Só libere o consumidor e reutilize o cartão depois deste 200.

{}

Erros

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

Reiniciar a comanda

Desassocia o ciclo atual da credencial, deixando o cartão pronto para outro uso.

POST /places/{idPlace}/tabs/{idTab}/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.