Payout Flow
Send money to customers and vendors.
import { ValidationError, ZenPays } from 'zenpays'
async function processPayout() {
const zenpays = new ZenPays({
apiKey: process.env.ZENPAYS_API_KEY!,
})
// 1. Check available payout methods
const methods = await zenpays.payouts.getMethods()
console.log('Available payout methods:', methods.map(m => m.type).join(', '))
// 2. Check wallet balance
const balance = await zenpays.wallet.getBalance('USD')
console.log('Available balance:', balance)
// 3. Create payout
const payout = await zenpays.payouts.create({
customerId: 'cust_xxx',
amount: 10000, // $100.00
currency: 'USD',
payoutMethod: 'bank_transfer',
beneficiaryDetails: {
name: 'John Doe',
email: 'john@example.com',
bankName: 'Chase Bank',
accountNumber: '123456789',
accountType: 'checking',
routingNumber: '021000021',
},
description: 'Withdrawal request',
idempotencyKey: 'payout_unique_123', // Prevent duplicates
})
console.log('Payout created:', payout.id)
console.log('Status:', payout.status)
// 4. Monitor payout status
const waitForPayout = async (payoutId: string): Promise<boolean> => {
const p = await zenpays.payouts.get(payoutId)
switch (p.status) {
case 'completed':
console.log('Payout completed!')
console.log('Processed at:', p.processedAt)
return true
case 'failed':
console.log('Payout failed:', p.failureReason)
return false
case 'processing':
console.log('Payout processing...')
break
default:
console.log('Payout status:', p.status)
}
await new Promise(resolve => setTimeout(resolve, 5000))
return waitForPayout(payoutId)
}
return waitForPayout(payout.id)
}
// Retry a failed payout
async function retryFailedPayout(payoutId: string) {
const zenpays = new ZenPays({
apiKey: process.env.ZENPAYS_API_KEY!,
})
const payout = await zenpays.payouts.get(payoutId)
if (payout.status !== 'failed') {
console.log('Payout is not failed, cannot retry')
return
}
console.log('Retrying payout:', payoutId)
const retried = await zenpays.payouts.retry(payoutId)
console.log('Retry status:', retried.status)
}
// Get customer payouts
async function getCustomerPayouts(customerId: string) {
const zenpays = new ZenPays({
apiKey: process.env.ZENPAYS_API_KEY!,
})
const { data, total } = await zenpays.payouts.listByCustomer(customerId, {
limit: 10,
})
console.log(`Found ${total} payouts for customer ${customerId}:`)
data.forEach((p) => {
console.log(` ${p.id}: ${p.amount} ${p.currency} - ${p.status}`)
})
}
// Get payout analytics
async function getPayoutAnalytics() {
const zenpays = new ZenPays({
apiKey: process.env.ZENPAYS_API_KEY!,
})
const analytics = await zenpays.payouts.getAnalytics('30d')
console.log('Payout Analytics (30 days):')
console.log(' Total volume:', analytics.totalVolume)
console.log(' Total count:', analytics.totalCount)
console.log(' Success rate:', analytics.successRate, '%')
console.log(' Avg processing time:', analytics.averageProcessingTime, 'seconds')
}
processPayout()