API v1 Referência da API
Endpoints REST autenticados via JWT Bearer. Payloads em JSON. Webhooks com HMAC obrigatório.
Base URL
https://api.ingooapp.com.br
Todos os endpoints usam HTTPS (TLS 1.3). Content-Type: application/json.
Autenticação
Após login, o servidor retorna um JWT que deve ser enviado em todo request:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...
Tokens expirados (401) devem ser renovados via /auth/refresh.
Códigos de erro
| Código | Significado |
|---|---|
| 200 / 201 | Sucesso |
| 400 | Payload inválido |
| 401 | Não autenticado |
| 403 | Sem permissão |
| 404 | Recurso não encontrado |
| 429 | Rate limit |
| 500 | Erro interno |
Body de erro:
{ "error": "Mensagem legível", "code": "ERROR_CODE" }
Rate limit
300 req/min por IP global. Rotas críticas têm bypass.
Auth
Cadastra novo usuário e envia código de verificação por e-mail.
Request
{
"name": "João Silva",
"email": "joao@example.com",
"password": "minhasenha123",
"ref": "16193" // optional, displayId of referrer
}
Response 201
{
"user": { "id": "...", "displayId": 16213, "email": "joao@example.com" },
"needsVerification": true
}
Autenticação por e-mail + senha. Retorna JWT.
Request
{ "email": "joao@example.com", "password": "minhasenha123" }
Response 200
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6...",
"user": { "id": "...", "displayId": 16213, "name": "João" }
}
Confirma código de 6 dígitos. Auto-login após sucesso.
Request
{ "email": "joao@example.com", "code": "123456" }
Envia link de reset por e-mail.
Request
{ "email": "joao@example.com" }
Perfil autenticado.
Response 200
{
"id": "...",
"displayId": 16213,
"name": "João",
"email": "joao@example.com",
"walletBalance": 47.50,
"freeMinutes": 60,
"ingooPoints": 12,
"referralCount": 2
}
Rentals
Inicia aluguel após escanear QR Code.
Request
{ "qrCode": "INGOO-B00001929R-01", "machineId": "..." }
Response 201
{
"rentalId": "...",
"powerBankId": "PB-1234",
"depositAmount": 5,
"startedAt": "2026-05-06T13:42:11Z"
}
Aluguel em andamento.
Histórico paginado.
Payments
Gera QR Code PIX + copia-cola.
Request
{ "amount": 50 }
Response 201
{
"paymentId": "MP-...",
"pixQrCode": "data:image/png;base64,...",
"pixCopyPaste": "00020126580014BR.GOV.BCB.PIX...",
"expiresAt": "2026-05-06T14:00:00Z",
"amount": 50
}
Recarga via cartão.
Saque PIX (refund FIFO).
Request
{ "amount": 30, "pixKey": "joao@example.com", "pixKeyType": "EMAIL" }
Machines
radius em metros (até 50000).
Estado em tempo real.
Friends
Envia pedido de amizade.
Request
{ "displayId": 16193 }
Amigos + pedidos.
Transferência entre amigos. Limite anti-fraude.
Request
{ "toUserId": "...", "amount": 10 }
Gamification
Ranking anual nacional.
Response 200
{
"year": 2026,
"period": "yearly",
"monthStart": "2026-01-01T00:00:00Z",
"monthEnd": "2027-01-01T00:00:00Z",
"top": [
{
"position": 1,
"userId": "...", "displayId": 1,
"name": "Diogo", "photoUrl": "...",
"city": "Rio de Janeiro",
"anonymous": false,
"total": 320.50
}
],
"me": { "position": 47, "total": 12.00 }
}
Toggle modo anônimo.
Request
{ "anonymous": true }
Webhooks
Webhooks com HMAC obrigatório:
| Provedor | URL |
|---|---|
| Stripe | POST /payments/stripe/webhook |
| Mercado Pago | POST /payments/mp/webhook |
Idempotência garantida.