Base URL: http://localhost:4000
Authentication header for protected endpoints:
Authorization: Bearer <jwt_token>
Idempotency header for funding and bundle purchase:
x-idempotency-key: <unique-key>
Request:
{
"fullName": "Kwame Mensah",
"email": "kwame@example.com",
"phone": "233501234567",
"password": "StrongPass123"
}
Request:
{
"email": "kwame@example.com",
"password": "StrongPass123"
}
Returns active JWT identity.
Returns wallet available and locked balance.
Headers:
Request:
{
"amount": 50,
"momoNumber": "233501234567",
"provider": "MTN"
}
Response:
Provider callback endpoint.
Callback auth:
x-hubtel-signature or x-signaturex-expresspay-signature or x-signaturex-callback-token header must match PAYMENT_CALLBACK_TOKENsignature field can match tokenPAYMENT_CALLBACK_PROVIDER:
AUTO (default): Hubtel or ExpressPay signature accepted, then token fallbackHUBTEL: only Hubtel signatureEXPRESSPAY: only ExpressPay signatureTOKEN: only token-based callback authRequest:
{
"externalReference": "PAY-xxxx",
"status": "SUCCESS",
"providerReference": "SIM-xxxx",
"reason": "optional",
"signature": "callback_secret_token"
}
Paystack webhook payload is also accepted:
{
"event": "charge.success",
"data": {
"reference": "PAY-xxxx",
"status": "success",
"id": 123456
}
}
Signature options:
x-callback-token headerx-hubtel-signature HMAC SHA256x-expresspay-signature HMAC SHA256x-paystack-signature HMAC SHA512 of raw request bodyOn SUCCESS:
On FAILED:
Outbound payment-initiation requests are signed.
METHOD|PATH|TIMESTAMP|NONCE|JSON_BODYX-Client-Id, X-Timestamp, X-Nonce, X-SignatureMETHOD|PATH|TIMESTAMP|JSON_BODYAuthorization: Bearer <API_KEY>, X-Timestamp, X-SignaturePAYSTACK_WEBHOOK_SECRET (or PAYSTACK_SECRET_KEY fallback)x-paystack-signatureReturns available bundle catalog grouped by network.
Headers:
Request:
{
"network": "MTN",
"bundleCode": "MTN_1GB",
"phoneNumber": "233501234567"
}
Flow:
failed_refundedReturns user transaction history.
All require admin role.
List users.
List all transactions.
View failed and refund-related transactions.
Request:
{
"transactionId": "uuid",
"reason": "Customer escalation case"
}
Rules:
Service health check.