Batch Payouts let you create up to 5,000 payouts for different users with one request. The batch executes each payout independently, giving every item its own transfer, status, and idempotency guarantees while still letting you manage the workflow as a unit.Documentation Index
Fetch the complete documentation index at: https://dotsdev.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Requirements
- A Dots account with an App and API credentials.
- Each user in the batch must already exist in your workspace and be allowed to receive payouts on the selected rail.
- Every batch item must set
fund=true, which moves funds before the payout is issued. - Plan to handle partial failures by inspecting each item’s
error_codeanderror_message.
1. Build the batch payload
Each batch contains a sharedmetadata object and a list of payout items. Every item must use a unique idempotency_key; duplicates are rejected during validation.
Batch-level fields
| Field | Required | Description |
|---|---|---|
items | ✅ | Array of payout requests. Min 1, max 5,000 items. |
idempotency_key | Optional | UUID to prevent duplicate batch submissions. |
metadata | Optional | Attach custom context (string or key/value object) to the batch. |
Item fields
| Field | Required | Description |
|---|---|---|
user_id | ✅ | Target user’s ID. |
amount | ✅ | Amount in cents to pay the user. |
platform | ✅ | Rail to use (for example ach, paypal, venmo, default). |
account_id | Optional | ACH / bank account to use when a user has multiple accounts on the same rail. |
idempotency_key | ✅ | UUID to deduplicate this specific payout. Must be unique within the batch. |
fund | ✅ (true) | Batch payouts currently require true. Transfers funds before issuing the payout. |
tax_exempt | Optional | Exclude the payout from 1099 calculations. |
payout_fee_party | Optional | Override who pays fees (user or platform). |
metadata | Optional | Custom context specific to the item. Returned in results for easy reconciliation. |
2. Create the batch
UsePOST /v2/payout-batches with your App credentials. Reuse the same idempotency_key to safely retry the request.
created → processing → paying_out → completed as transfers are issued.
3. Track batch processing
Check the batch summary
PollGET /v2/payout-batches/{payout_batch_id} to monitor the batch-level status and metadata.
Retrieve per-item results
CallGET /v2/payout-batches/{payout_batch_id}/results for detailed outcomes. Set include_request=true to echo the original request payload for each item.
transfer.status to reconcile payouts that succeeded (settled / processing) versus those that require follow-up. Items that fail keep their error_code and can be retried with a new idempotency key once the underlying issue is resolved.
4. List historical batches
GET /v2/payout-batches returns paginated batches created by your App. Use limit, starting_after, and ending_before to page through older entries.
Best practices
- Use idempotency everywhere: Provide both batch- and item-level keys so you can safely retry without creating duplicate payouts.
- Handle partial failures: Inspect each item’s
error_code/error_messageand requeue only the failed items with new idempotency keys. - Monitor transfers: Subscribe to payout and transfer webhooks to track asynchronous status changes beyond the initial batch response.
- Respect rate limits: Large batches may take time to execute; poll no more than once every few seconds and back off when the batch is still
processing.
What’s next?
- Configure webhooks to receive live updates as payouts are processed.
- Review idempotency guidance to design safe retry logic.

