Introdução A API REST da Poket para integrar carteira, pagamentos, depósitos, levantamentos e KYC.
A Poket (rede MedX) é uma carteira digital em Moçambique. Esta API permite a apps e sistemas externos autenticar utilizadores, consultar saldos, depositar e levantar via M-Pesa, transferir, cobrar por QR e gerir KYC/KYB. Todas as respostas são JSON; toda a comunicação é sobre HTTPS.
| Base URL | https://api.medx.co.mz |
|---|---|
| Formato | JSON (UTF-8). Uploads de KYC usam multipart/form-data. |
| Autenticação | JWT Bearer (ver Autenticação) |
| Moedas | MZN (Metical) · MEDX (token da rede) |
| Ambiente | Produção. Não há sandbox público — peça credenciais de parceiro. |
Início rápido
accessToken (JWT).Authorization: Bearer <accessToken>./api/auth/refresh quando expirar (~15 min).# 1) Login
curl -X POST https://api.medx.co.mz/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"identifier":"+258841234567","pin":"123456"}'
# 2) Usar o token
curl https://api.medx.co.mz/api/wallet \
-H 'Authorization: Bearer eyJhbGciOi...'
Autenticação
A API usa JWT. O accessToken dura ~15 minutos; use o refreshToken para renovar sem novo login. O login pode exigir OTP por SMS (configurável); a resposta indica requiresOtp.
requiresOtp:true.refreshToken por um novo accessToken.DELETE /api/auth/sessions/{id} revoga uma.Login → resposta
POST /api/auth/login
{ "identifier": "+258841234567", "pin": "123456" }
// requiresOtp = false → login direto
{
"userId": "uuid", "userType": "PERSONAL", "role": "ROLE_USER",
"token": "eyJ...", "refreshToken": "eyJ...",
"expiresIn": 900, "sessionId": "uuid", "requiresOtp": false
}
// requiresOtp = true → confirmar com /login/verify-otp { sessionId, otp }
identifier aceita email ou telefone (com ou sem +258 / +27). Números são normalizados no servidor.Convenções & erros
| Cabeçalhos | Authorization: Bearer <token> · Content-Type: application/json |
|---|---|
| Datas | ISO-8601 UTC (2026-06-09T19:45:06Z) |
| Montantes | Decimais como string/número; assetCode indica a moeda (MZN/MEDX) |
| Paginação | ?page=0&size=50 (quando aplicável) |
| Idempotência | Pagamentos usam uma reference única; repetir a mesma referência não duplica a operação |
Códigos HTTP
| Código | Significado |
|---|---|
200 / 201 | Sucesso |
400 | Pedido inválido (validação) |
401 | Token ausente/expirado |
403 | Sem permissão / KYC insuficiente |
404 | Não encontrado |
409 / 422 | Conflito / regra de negócio (ex.: saldo insuficiente, limite excedido) |
// erro típico
{ "timestamp":"2026-06-09T19:45:06Z", "status":422,
"error":"Saldo insuficiente", "path":"/api/withdrawals" }
Carteira
Cada utilizador tem carteiras por moeda (MZN, MEDX), cada uma com endereço on-chain e saldos available/locked.
/api/wallets, /api/me/wallets.)GET /api/wallet
[
{ "wallet": { "assetCode":"MZN", "blockchainAddress":"0x…" },
"balance": { "available":"1250.00", "locked":"0.00" } },
{ "wallet": { "assetCode":"MEDX", "blockchainAddress":"0x…" },
"balance": { "available":"300.00", "locked":"0.00" } }
]
Transferências
Transferência interna instantânea entre utilizadores Poket, por telefone, email ou ID.
POST /api/transfers/initiate
{ "recipient":"+258841234567", "assetCode":"MEDX",
"amount":"100.00", "description":"Pagamento" }
POST /api/transfers/confirm
{ "transferId":"uuid", "pin":"123456" } // ou { otp:"123456" }
Depósitos
Carregar a carteira via M-Pesa (C2B). O utilizador recebe um pedido de pagamento M-Pesa no telefone; ao confirmar, a carteira é creditada.
POST /api/deposits
{ "channel":"MPESA", "amount":"500.00", "msisdn":"+258841234567" }
// → { "id":"uuid", "status":"PENDING", "reference":"PR-…" }
Levantamentos
Retirar saldo para M-Pesa (B2C, instantâneo) ou conta bancária (liquidação manual). No M-Pesa o token MEDX correspondente é queimado on-chain na liquidação.
channel: MPESA | BANK).POST adiciona (NIB).// M-Pesa (instantâneo)
POST /api/withdrawals
{ "channel":"MPESA", "assetCode":"MZN", "amount":"20.00",
"payoutMsisdn":"+258851935325" }
// Banco (liquidação manual)
POST /api/withdrawals
{ "channel":"BANK", "assetCode":"MZN", "amount":"5000.00",
"bankAccountId":"uuid" }
QR & Pagamentos
Gerar QR para receber, ler QR para pagar, e pedidos de pagamento (push). Empresas têm QR estático próprio (ver Enterprise).
/reject recusa.KYC / KYB
Verificação de identidade (pessoal: níveis 1–3) e de empresa (KYB: níveis 11–13). Cada nível tem documentos exigidos e limites de transação crescentes.
multipart/form-data: documentType, documentNumber, file (PDF/JPG/PNG, ≤15 MB)./{id}/files lista ficheiros.| Pessoal | 1 BASICO · 2 VERIFICADO · 3 PREMIUM |
|---|---|
| Empresa (KYB) | 11 STARTER · 12 BUSINESS · 13 ENTERPRISE |
Enterprise
Contas de empresa (ROLE_MERCHANT) gerem colaboradores, pagamentos agendados, folha de pagamento e QR empresarial. Registo via /api/auth/register/enterprise.
POST cria, PUT/DELETE /{id} edita/desativa./{id}/pause|resume|cancel|run-now./{token}/image, /{token}/scan./search?q=, /{userId}/profile.Bridge (on-chain)
Movimentar MEDX entre a rede privada (interna) e a rede pública (on-chain).
Explorador (blockchain)
Consulta pública, só-leitura, da rede MedX.
/block/{number}, /block/latest./balance/{address}.Assets & Status
/active, /{code}.{ maintenance, message }.Histórico & Notificações
/deposits/{id}, /withdrawals/{id}.A plataforma notifica o utilizador por push (FCM) e WebSocket em eventos de depósito, transferência, levantamento e KYC.
Fluxo — Depósito M-Pesa
POST /api/deposits com {channel:"MPESA", amount, msisdn} → cria depósito PENDING.COMPLETED; consultar via GET /api/deposits/{id} ou push.Fluxo — Transferência
GET /api/transfers/recipient → confirmar o nome do destinatário.POST /api/transfers/initiate → resumo + se exige OTP/PIN.POST /api/transfers/confirm com PIN/OTP → executa instantaneamente.Fluxo — Levantamento
POST /api/withdrawals (MPESA instantâneo ou BANK manual).GET /api/withdrawals/{id} + push.Fluxo — Pagamento por QR
POST /api/qr/generate (ou QR empresarial) → mostra o QR.POST /api/qr/{token}/scan → cria um pedido de pagamento.POST /api/payment-requests/{id}/confirm (PIN).Fluxo — KYC / KYB
GET /api/kyc/me/requirements → documentos do próximo nível.POST /api/kyc/documents/upload (multipart) por cada documento.POST /api/kyc/me/submit → entra na fila de compliance.GET /api/kyc/me + push.Poket é a carteira digital da rede MedX. Esta documentação cobre a API pública de integração; endpoints de administração e operações internas não estão incluídos. Para credenciais de parceiro e suporte de integração, contacte a equipa Poket.