Skip to main content

Confirm Payout Intent

Submit the required fields to confirm and execute a payout intent.

POSThttps://api.zenpayz.com/payment/api/v1/payout-intents/{intentId}/confirm
Bearer · API key

Request

Path Parameters

ParameterTypeDescription
intentId
REQUIRED
stringPayout intent ID

Headers

HeaderDescription
Authorization
REQUIRED
Bearer {api_key}
X-Signature
REQUIRED
HMAC-SHA256 signature
X-Timestamp
REQUIRED
ISO 8601 timestamp
X-Secret-Salt
REQUIRED
Secret salt for HMAC validation
Content-Type
REQUIRED
application/json

Body Parameters

The body should contain the fields listed in the requiredFields array from the create intent response. Always check requiredFields — the exact fields vary by currency, country, and the TSP selected by smart routing.

Always use requiredFields

When you create a payout intent, the response includes a requiredFields array that tells you exactly which fields are needed to confirm. Some fields may be required for one currency but optional for another. Never hardcode assumptions — always read requiredFields from the create response.

Fiat Payout Fields

ParameterTypeDescription
beneficiaryAccount
OPTIONAL
stringBank account number (5-34 characters)
beneficiaryEmail
OPTIONAL
stringBeneficiary email address
beneficiaryBankCode
OPTIONAL
stringBank code in Sulifu format (e.g. dp_axisbank_in, dp_hdfcbank_in, dp_sboi_in)
beneficiaryIfsc
OPTIONAL
stringIFSC code for Indian banks (e.g. HDFC0001234)
beneficiaryName
OPTIONAL
stringFull name of the beneficiary
beneficiaryMobile
OPTIONAL
stringBeneficiary phone number with country code
beneficiaryAddress
OPTIONAL
stringStreet address
beneficiaryCity
OPTIONAL
stringCity
beneficiaryState
OPTIONAL
stringState or province
beneficiaryPostalCode
OPTIONAL
stringPostal/ZIP code
beneficiaryAccountType
OPTIONAL
stringAccount type: CHECKING or SAVINGS
beneficiaryDocumentId
OPTIONAL
stringGovernment-issued document ID (required in some regions)

Crypto Payout Fields

ParameterTypeDescription
chain
OPTIONAL
stringBlockchain network: tron, ethereum, bitcoin, solana, etc.
walletAddress
OPTIONAL
stringDestination wallet address
walletMemo
OPTIONAL
stringMemo or destination tag (for XRP, XLM, etc.)

Common Optional Fields

ParameterTypeDescription
customerId
OPTIONAL
stringCustomer ID for tracking
customerEmail
OPTIONAL
stringCustomer email
customerPhone
OPTIONAL
stringCustomer phone number

Example: INR Bank Transfer

For INR payouts, the following fields are typically required:

{
"beneficiaryAccount": "1234567890",
"beneficiaryEmail": "rajesh@example.com",
"beneficiaryBankCode": "dp_axisbank_in",
"beneficiaryAddress": "123 Main Street",
"beneficiaryCity": "Mumbai",
"beneficiaryState": "Maharashtra",
"beneficiaryPostalCode": "400001",
"beneficiaryName": "Rajesh Kumar",
"beneficiaryMobile": "+919876543210",
"beneficiaryIfsc": "HDFC0001234"
}

Example: Crypto (USDT) Payout

{
"chain": "tron",
"walletAddress": "TXyz123abc456def789ghi"
}

Response

Success (200 OK)

{
"success": true,
"data": {
"intentId": "poi_mnblh1o5_e8190e32",
"status": "processing",
"payoutId": "payout_1774778823937_17298d89",
"externalPayoutId": "po6efbc8502da51774842226226",
"amount": "100.00000000",
"currency": "INR",
"processingFee": "0.00000000",
"totalDebitedAmount": "100.00000000",
"confirmedAt": "2026-03-29T10:07:05.144Z"
},
"message": "Payout intent confirmed",
"error": null,
"meta": {
"request_id": "req_xxxxx",
"timestamp": "2026-03-29T10:07:05.148Z",
"processing_time_ms": 1515,
"api_version": "v1",
"endpoint": "POST /payout-intents/{intentId}/confirm",
"user_type": "merchant"
}
}

Response Fields

ParameterTypeDescription
intentId
OPTIONAL
stringThe payout intent ID
status
OPTIONAL
stringIntent status (processing)
payoutId
OPTIONAL
stringInternal payout ID for tracking
externalPayoutId
OPTIONAL
stringTSP transaction ID — use this to match with webhook callbacks
amount
OPTIONAL
stringPayout amount
currency
OPTIONAL
stringPayout currency
processingFee
OPTIONAL
stringProcessing fee charged
totalDebitedAmount
OPTIONAL
stringTotal amount debited from wallet (amount + fee)
confirmedAt
OPTIONAL
stringISO 8601 timestamp of confirmation
Linking confirm response to webhooks

The externalPayoutId in the confirm response matches the transactionId in webhook callbacks. Use this to link the payout intent confirmation to the webhook status updates:

  • Confirm response: intentId + payoutId + externalPayoutId
  • Webhook callback: intentId + payoutId + transactionId (same as externalPayoutId)

Error Responses

CodeHTTPMessage
PAYOUT_INTENT_CONFIRM_FAILED400Missing required fields, expired intent, or insufficient wallet balance
VALIDATION_ERROR400Invalid field values (e.g. unsupported bank code)
NOT_FOUND404Intent not found or does not belong to this merchant
Common Errors
  • "Required bank_code in extra field" — You're missing beneficiaryBankCode in your confirmation payload. Check requiredFields from the create response.
  • "Beneficiary address fields required" — For non-USDT payouts, address fields (beneficiaryAddress, beneficiaryCity, beneficiaryState, beneficiaryPostalCode) are mandatory.
  • "Unsupported bank code" — Use the ZenPays bank code format: dp_{bankname}_in (e.g. dp_hdfcbank_in, dp_axisbank_in, dp_sboi_in). The available codes are listed in the options array of the beneficiaryBankCode field in requiredFields.

Examples

curl -X POST "https://api.zenpayz.com/payment/api/v1/payout-intents/poi_mnblh1o5_e8190e32/confirm" \
-H "Authorization: Bearer zp_test_xxxxx" \
-H "X-Timestamp: 2026-03-29T10:07:00.000Z" \
-H "X-Signature: a1b2c3d4e5f6..." \
-H "X-Secret-Salt: your_secret_salt" \
-H "Content-Type: application/json" \
-d '{
"beneficiaryAccount": "1234567890",
"beneficiaryEmail": "rajesh@example.com",
"beneficiaryBankCode": "dp_axisbank_in",
"beneficiaryAddress": "123 Main Street",
"beneficiaryCity": "Mumbai",
"beneficiaryState": "Maharashtra",
"beneficiaryPostalCode": "400001",
"beneficiaryName": "Rajesh Kumar",
"beneficiaryMobile": "+919876543210",
"beneficiaryIfsc": "HDFC0001234"
}'