curl --request POST \
--url https://payouts.api.trykarat.com/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"payouts": [
{
"payeeEmail": "jordan@example.com",
"amount": 25000,
"description": "October design work",
"referenceId": "inv_1042",
"isReimbursement": true
},
{
"recipientId": "9c1f7b2a-3d4e-4f5a-8b6c-1d2e3f4a5b6c",
"amount": 18000,
"description": "Editing — episode 12",
"referenceId": "inv_1043",
"isReimbursement": false
}
],
"idempotencyKey": "batch-2026-06-17-001"
}
'{
"data": {
"batchId": "30d6bb6e-5398-462c-a90c-7b9077f618d4",
"payouts": [
{
"id": "0fc50d45-faa8-4d09-aa2a-a9ceb282d7ae",
"payeeEmail": "jordan@example.com",
"amount": 25000,
"description": "October design work",
"referenceId": "inv_1042",
"isReimbursement": true
},
{
"id": "6ce6ca0a-31ff-4c74-89f0-87da19e8bb9d",
"payeeEmail": "casey@example.com",
"amount": 18000,
"description": "Editing — episode 12",
"referenceId": "inv_1043",
"isReimbursement": false
}
]
}
}Create a payment batch
Creates one or more payouts in a single batch. Each payout targets a recipient by either payeeEmail or recipientId (exactly one) and may independently set isReimbursement, so a batch can mix reimbursements and non-reimbursements. The flag defaults to false when omitted and affects tax reporting only; it does not change payout processing, status, or fees. Pass an idempotencyKey to safely retry the request. Pass a batch-level sourceAccountId from GET /accounts to select the account for every payout in the batch; omit it to let Karat select the default account. If the selected account becomes unavailable before execution, Karat may debit another eligible account.
curl --request POST \
--url https://payouts.api.trykarat.com/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"payouts": [
{
"payeeEmail": "jordan@example.com",
"amount": 25000,
"description": "October design work",
"referenceId": "inv_1042",
"isReimbursement": true
},
{
"recipientId": "9c1f7b2a-3d4e-4f5a-8b6c-1d2e3f4a5b6c",
"amount": 18000,
"description": "Editing — episode 12",
"referenceId": "inv_1043",
"isReimbursement": false
}
],
"idempotencyKey": "batch-2026-06-17-001"
}
'{
"data": {
"batchId": "30d6bb6e-5398-462c-a90c-7b9077f618d4",
"payouts": [
{
"id": "0fc50d45-faa8-4d09-aa2a-a9ceb282d7ae",
"payeeEmail": "jordan@example.com",
"amount": 25000,
"description": "October design work",
"referenceId": "inv_1042",
"isReimbursement": true
},
{
"id": "6ce6ca0a-31ff-4c74-89f0-87da19e8bb9d",
"payeeEmail": "casey@example.com",
"amount": 18000,
"description": "Editing — episode 12",
"referenceId": "inv_1043",
"isReimbursement": false
}
]
}
}Authorizations
Pass your API key as a bearer token: Authorization: Bearer <API_KEY>.
Body
1Show child attributes
Show child attributes
Optional key to make the request idempotent. Defaults to a server-generated request ID.
Optional ID from GET /accounts that selects the source account for every payout in the batch. The account must be an eligible open checking account owned by your organization; a malformed, unavailable, or ineligible ID returns 400. Omit this field to let Karat select the default account.
Response
The batch was created.
Show child attributes
Show child attributes