> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.usegrade.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send campaign creator payouts

> Send calculated campaign payouts to up to 100 campaign creators in one request.

## POST /sdk/v1/campaign-creators/payouts/bulk

Sends calculated campaign payouts for up to 100 creators. Each creator is
recalculated immediately before payment so the amount cannot silently change
between preview and payment.

<Warning>
  This endpoint sends real payouts. Call
  [Preview campaign creator payouts](/campaign-creators/payout-preview) first
  and verify that `calculation.readyToPay` is `true`.
</Warning>

### Headers

* `X-Application-Id` (required)
* `X-Api-Key` (required)
* `X-Idempotency-Key` (required): a unique value for this payout request. Retry
  the same request with the same key to receive the original result without
  paying twice.

### Body

`payouts` is a non-empty array with no more than 100 items. Each item accepts:

* `campaignCreatorRecordId` (required)
* `amount` (required): the exact `payout.total` returned by the preview.
* `currency` (required): the exact `payout.currency` returned by the preview.
* `startDate` and `endDate` (optional): the same inclusive `YYYY-MM-DD` range
  used for the preview. Send both or neither.
* `confirmHighValuePayout` (optional): set to `true` when the amount exceeds
  your agency's payout confirmation threshold.

### Example request

```bash theme={null}
curl -sS "$BASE_URL/sdk/v1/campaign-creators/payouts/bulk" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY" \
  -H "X-Idempotency-Key: campaign-payout-2026-07-31-001" \
  -d '{
    "payouts": [
      {
        "campaignCreatorRecordId": "CCR_123",
        "startDate": "2026-07-01",
        "endDate": "2026-07-31",
        "amount": 600,
        "currency": "USD",
        "confirmHighValuePayout": true
      }
    ]
  }'
```

### Response

The request can contain both paid and failed items. A failure for one creator
does not hide the results for the others.

```json theme={null}
{
  "success": true,
  "paidCount": 1,
  "failedCount": 1,
  "results": [
    {
      "campaignCreatorRecordId": "CCR_123",
      "status": "PAID",
      "payoutId": "pay_123",
      "transactionId": "txn_123",
      "amount": 600,
      "currency": "USD"
    },
    {
      "campaignCreatorRecordId": "CCR_456",
      "status": "FAILED",
      "reason": "The expected payout changed. Preview the payout again."
    }
  ]
}
```

Common item failures include:

* the creator or campaign record was not found
* the payout is still calculating or has no payable amount
* the amount or currency no longer matches the current calculation
* high-value confirmation is required
* the agency wallet has insufficient available funds

### Request errors

* `400`: missing idempotency key, invalid body, or more than 100 payouts
* `401`: missing or invalid SDK credentials
* `409`: the idempotency key was reused with different data, or the original
  request is still running
* `503`: idempotency protection is temporarily unavailable
