Secure API v1
Postman Style API Documentation
Use Bearer token authentication. Generate your token from Callback & Token, then call these endpoints from your approved server IP.
Base URL
https://api.zepay.money/api/v1
Required Header
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
Content-Type: application/json
Payout Security
Single request body
New beneficiary auto-submits for approval
client_ref is unique/idempotent
Token is IP whitelisted
Only your own approved beneficiary can be paid
Webhook / Callback
Secure Transaction Callback
Add your HTTPS callback URL from Callback & Token. ZEPAY sends transaction updates by POST JSON for Payout.
{
"Content-Type": "application/json",
"User-Agent": "ZEPAY-Callback/1.0",
"X-Zepay-Event": "transaction.updated",
"X-Zepay-Timestamp": "1779012345",
"X-Zepay-Signature": "HMAC_SHA256_SIGNATURE",
"X-Zepay-Signature-Algo": "HMAC-SHA256"
}
{
"event": "transaction.updated",
"product": "payout",
"status": "success",
"client_ref": "PO123456789",
"txnid": "SYSTEM_TXN_ID",
"refno": "BANK_RRN",
"amount": 1000,
"charge": 5,
"gst": 0.9,
"tds": 0,
"balance": 9500,
"message": "Transaction Successfull",
"timestamp": "2026-05-17T03:30:00+05:30"
}
signature = hash_hmac('sha256', timestamp + '.' + raw_json_body, YOUR_ACTIVE_API_TOKEN)
Method: POST
Body: raw JSON
Verify X-Zepay-Signature before processing
Return HTTP 200 after receiving callback
Applies to all secure v1 APIs
Common Security Responses
Every endpoint is protected by Bearer token, IP whitelist, active API user, and token status checks.
Missing token
HTTP 401
{
"http_status": 401,
"success": false,
"code": "AUTH_TOKEN_MISSING",
"message": "Authorization Bearer token is required."
}
Invalid token
HTTP 401
{
"http_status": 401,
"success": false,
"code": "AUTH_TOKEN_INVALID",
"message": "Invalid API token."
}
IP not allowed
HTTP 403
{
"http_status": 403,
"success": false,
"code": "IP_NOT_ALLOWED",
"message": "Request IP is not allowed for this API token."
}
Token inactive
HTTP 403
{
"http_status": 403,
"success": false,
"code": "IP_INACTIVE",
"message": "Please contact ZEPAY. Your API IP is inactive."
}
Invalid API user
HTTP 403
{
"http_status": 403,
"success": false,
"code": "API_USER_INVALID",
"message": "API user is not valid."
}
Account blocked
HTTP 403
{
"http_status": 403,
"success": false,
"code": "ACCOUNT_BLOCKED",
"message": "API user account is blocked."
}
2 endpoints
Getting Started & Wallet
Token setup, request IP check, and wallet balance.
GET
https://api.zepay.money/api/v1/ip
Check Request IP
Use this before token generation to confirm your server IP.
No body required
{
"success": true,
"code": "TXN",
"message": "IP fetched successfully.",
"data": {
"ip": "127.0.0.1"
}
}
GET
https://api.zepay.money/api/v1/wallet/balance
Wallet Balance
Fetch API user main wallet balance.
No body required
{
"success": true,
"code": "TXN",
"message": "Balance fetched successfully.",
"data": {
"main_wallet": 1000
}
}
1 endpoints
Payout API
Single-body bank payout API with beneficiary details, approval safety, and idempotent client_ref.
POST
https://api.zepay.money/api/v1/payout
Create Payout
Secure single-body payout API. Send beneficiary bank details and payout details in one protected request. If beneficiary is new, it is created for approval and the same request can be retried after approval.
{
"client_ref": "PO1785632845",
"amount": 1000,
"mode": "IMPS",
"remark": "Vendor settlement",
"beneficiary": {
"name": "Receiver Name",
"account": "1234567890",
"ifsc": "IFSC0000001",
"bank": "BANK NAME"
}
}
Success
HTTP 200
{
"http_status": 200,
"success": true,
"code": "TXN",
"message": "Transaction Successfull",
"data": {
"statuscode": "TXN",
"txnid": "SYSTEM_TXN_ID",
"beneficiary": {
"beneficiary_id": 12,
"account": "XXXXXX7890"
}
}
}
New beneficiary approval required
HTTP 202
{
"http_status": 202,
"success": false,
"code": "BENEFICIARY_APPROVAL_REQUIRED",
"message": "Beneficiary created and sent for approval. Retry the same payout request after approval.",
"data": {
"beneficiary_id": 12,
"beneficiary_status": "pending",
"client_ref": "PO123456789",
"approval_required": true
}
}
Beneficiary not approved
HTTP 403
{
"http_status": 403,
"success": false,
"code": "BENEFICIARY_NOT_APPROVED",
"message": "Payout beneficiary is not approved yet.",
"data": {
"beneficiary_id": 12,
"status": "pending"
}
}
Duplicate client_ref
HTTP 409
{
"http_status": 409,
"success": false,
"code": "DUPLICATE_CLIENT_REF",
"message": "client_ref already exists.",
"data": []
}
Beneficiary limit exceeded
HTTP 429
{
"http_status": 429,
"success": false,
"code": "BENEFICIARY_LIMIT_EXCEEDED",
"message": "Maximum 5 payout beneficiaries are allowed.",
"data": []
}
Profile incomplete
HTTP 422
{
"http_status": 422,
"success": false,
"code": "PROFILE_INCOMPLETE",
"message": "Mobile, email, and address are required before payout.",
"data": []
}
Payout route unavailable
HTTP 422
{
"http_status": 422,
"success": false,
"code": "PAYOUT_ROUTE_UNAVAILABLE",
"message": "Payout route is not available for this mode or amount.",
"data": []
}
Validation error
HTTP 422
{
"http_status": 422,
"success": false,
"code": "VALIDATION_ERROR",
"message": "The client ref field is required.",
"data": {
"errors": {
"client_ref": [
"The client ref field is required."
]
}
}
}
1 endpoints
Status API
Check final or current transaction state using your own client_ref.
GET
https://api.zepay.money/api/v1/transactions/{client_ref}
Transaction Status
Check transaction status with your client_ref.
No body required
{
"success": true,
"code": "TXN",
"message": "Transaction Status Found",
"data": {
"status": "success",
"txnid": "SYSTEM_TXN_ID",
"refno": "OPERATOR_REF"
}
}