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/payout to list payouts. It takes exactly one query parameter:
Query Parameters:
merchantIds(required): Comma-separated list of merchant IDs (UUIDs) to list payouts for.
There are no further filters and no pagination — the endpoint returns up to the 100 most recent payouts for the given merchants. To find one specific payout, use Get Payout by ID or the merchant-reference search (below). For ongoing status tracking, rely on webhooks rather than polling this list.
Example Request:
Response — a JSON array of full payout records. Alongside the identifiers and routing metadata, each record carries its complete state history:
Each record includes:
transactionId: Unique transaction identifiermerchantReference: Your provided merchant referencecurrentState/previousStates: Current state name and the ordered list of prior statestransactionStates: Detailed history of state transitionsamount,currency,paymentLocation,paymentMethodId,transactionType: What was paid out, where, and howprocessorReference,financialTransactionReference: Processor-side referencesbatchPayoutId: Batch identifier, present when the payout was part of a batch
Note this is a fuller shape than the single-payout response below, which reports only the current state.
Get Payout by ID
Use GET https://api.crisscross.money/v1/payout/{transactionId} to retrieve detailed information about a specific payout by its transaction ID.
Example Request:
Response: The payout’s current state — the same shape returned when you initiate a payout and delivered on payout webhooks (see Response Fields below).
Note: To find a payout by your own reference instead, use
GET /v1/payout/search?merchantIds=...&merchantReference=....
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.completed- Payout was successfully delivered to the recipientpayout.failed- Payout failed (e.g. invalid recipient account)payout.errored- Payout encountered a retryable errorpayout.cancelled- Payout was cancelledpayout.expired- Payout expired
There is no creation event — notifications begin when the payout first reaches a reportable state change. Note that payout.errored is not terminal: an errored payout can retry and later emit payout.completed or another terminal event. The payload is the full transaction object, the same one returned when you poll for status.
For event types and payload examples, see Webhook Events. For setup and delivery, see Webhooks.
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
The single-payout response — returned by Initiate Payout and Get Payout by ID, and delivered on payout webhooks — includes:
transactionId: Unique transaction identifierstatus: Current statusmessage: Human-readable status messagemerchantReference: Your provided merchant referencepaymentMethodId: Payment method (e.g.banktransfer,mobilemoney)authState: State detail object —stateandtransitionedAtalways; on failures and errors alsomessageandcode(take the failure reason from here)processorName,processorReference,financialTransactionReference: Processor details, once assignedbatchPayoutId: Batch identifier, present when the payout is part of a batch
Best Practices
- Implement webhooks for real-time status updates rather than polling the list endpoint (see Webhooks for setup)
- Store payout
transactionIds so you can look payouts up directly by ID - Reconcile against your own references with
GET /v1/payout/search?merchantIds=...&merchantReference=... - Monitor failed payouts and take the failure reason from
authState.codeandauthState.message
For detailed API documentation, see the Payouts API Reference.