Tracking Payouts
Tracking payouts is essential for monitoring transaction status, auditing, and ensuring successful delivery of funds to recipients.
Payout Status
Payouts can have the following statuses:
- PENDING: Payout has been created and is awaiting processing
- PROCESSING: Payout is currently being processed
- COMPLETED: Payout has been successfully completed
- FAILED: Payout has failed (check failure reason for details)
- CANCELLED: Payout was cancelled
Viewing Payout History
You can retrieve payout history in a few ways. Use Get Multiple Payouts for filtered lists, and Get Payout by ID for a single payout record.
Get Multiple Payouts
Use GET https://api.crisscross.money/v1/payouts/history to retrieve a list of payouts with filtering options:
Query Parameters:
currency(optional): Filter by currency code (NGN, XOF, XAF, GHS, KES, ZAR, EGP, USDT, USDC)startDate(optional): Start date for filtering (ISO 8601 format, e.g.,2024-01-15T00:00:00Z)endDate(optional): End date for filtering (ISO 8601 format, e.g.,2024-01-31T23:59:59Z)status(optional): Filter by payout status (PENDING,PROCESSING,COMPLETED,FAILED,CANCELLED)limit(optional): Maximum number of records to return (default: 50, max: 100)offset(optional): Number of records to skip (default: 0)
Date Format Examples:
- Full datetime:
2024-01-15T00:00:00Z(UTC) - With milliseconds:
2024-01-15T00:00:00.000Z(UTC) - Date range:
startDate=2024-01-15T00:00:00Z&endDate=2024-01-31T23:59:59Z
Example Request:
Response:
Response fields:
payouts: Array of payout objectstotal: Total number of payouts matching the filter criteria (use this to determine if more pages exist)
Each payout object includes:
transactionId: Unique transaction identifierstatus: Current status (PENDING,PROCESSING,COMPLETED,FAILED,CANCELLED)message: Status messagemerchantReference: Your provided merchant referencepayoutState: Object withtypefieldprocessorReference: Processor reference numbercreatedAt: Creation timestamp (ISO 8601)completedAt: Completion timestamp (ISO 8601,nullif not completed)failureReason: Reason for failure (only if status isFAILED)
Get Payout by ID
Use GET https://api.crisscross.money/v1/payouts/history/{id} to retrieve detailed information about a specific payout by its payout ID.
Example Request:
Response: Same structure as a single payout object (see Response Fields below).
Note:
GET /payouts/{payoutId}is an alternative alias for the same single-payout lookup.
Get Batch Payouts by Batch ID
Use GET https://api.crisscross.money/v1/payouts/bulk/{batchId} to retrieve the payouts that belong to a batch.
Example Request:
Example Response:
Webhooks for Real-Time Updates
Instead of polling the history endpoints, you can set up webhooks to receive real-time notifications when payout status changes. Webhooks are more efficient and provide immediate updates.
Webhook events for payouts:
payout.created- Payout was createdpayout.completed- Payout completed successfullypayout.failed- Payout failed
For webhook setup, event types, and payload examples, see the Webhooks guide.
Use Cases
- Audit Trail: Track all payout transactions for accounting and compliance
- Status Monitoring: Check if payouts have been completed successfully
- Troubleshooting: Investigate failed payouts and understand failure reasons
- Reporting: Generate reports on payout activity over time periods
- Reconciliation: Match payouts with your internal records
Response Fields
Each payout in the history response includes:
transactionId: Unique transaction identifierstatus: Current status (PENDING,PROCESSING,COMPLETED,FAILED, orCANCELLED)message: Status messagemerchantReference: Your provided merchant referencepayoutState: Object withtypefield indicating payout stateprocessorReference: Processor reference numbercreatedAt: Timestamp when payout was created (ISO 8601 format)completedAt: Timestamp when payout completed (ISO 8601 format, present if status isCOMPLETED)failureReason: Reason for failure (only present if status isFAILED)
Pagination
When retrieving multiple payouts, use limit and offset for pagination:
- First page:
limit=50&offset=0(returns first 50 payouts) - Second page:
limit=50&offset=50(returns payouts 51-100) - Third page:
limit=50&offset=100(returns payouts 101-150) - Continue until
offset >= total
Example pagination loop:
Note: The total field indicates the total number of payouts matching your filters. Use this to determine if more pages exist.
Best Practices
- Regularly check payout status to ensure timely delivery
- Monitor failed payouts and investigate
failureReasonfields - Use date range filters (
startDateandendDate) to review specific time periods (use ISO 8601 format with UTC timezone) - Use
statusfilter to find all failed payouts for investigation - Use pagination (
limitandoffset) for large result sets (see Pagination above) - Store payout IDs for easy reference and tracking
- Use the
totalfield in list responses to understand the full scope of results and determine if more pages exist - Implement webhooks for real-time status updates (see Webhooks for setup)
- Use UTC timezone for date filters to avoid timezone issues
For detailed API documentation, see the Payouts API Reference.