> ## 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.

# Get payout report data

> Get the rows, amounts, and totals behind a campaign creator's payout report as JSON.

## GET /sdk/v1/campaign-creators/:campaignCreatorRecordId/payout-report/data

Returns the same agency-view report used to generate the
[payout report PDF](/campaign-creators/payout-report), as JSON. Use it to read
each post, tracked account, and non-media line item without parsing a PDF.

All requests require `X-Application-Id`, `X-Api-Key`, and the `payouts:read`
API key scope. The campaign creator must belong to your application's agency.

### Parameters

| Parameter | Location | Description |
| - | - | - |
| `campaignCreatorRecordId` | Path | Required campaign creator record ID. |
| `startDate` | Query | Required first included activity date, in `YYYY-MM-DD` format. |
| `endDate` | Query | Required last included activity date, in `YYYY-MM-DD` format. |

Dates are inclusive and interpreted in the campaign's time zone. You can
request a single day by using the same start and end date. The range selects
payout activity, using the same rules as the PDF; it is not an upload-date filter.
Do not send `agencyId`: the API derives it from your SDK credentials.

### Example request

```bash theme={null}
curl -sS "$BASE_URL/sdk/v1/campaign-creators/CCR_123/payout-report/data?startDate=2026-07-01&endDate=2026-07-31" \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY"
```

### Response

The response is `application/json` with `{ "success": true, "data": ... }`.
`data` contains the complete report:

| Field | Contents |
| - | - |
| `metadata` | Creator and agency details, generation timestamp, activity range, paid status, invoice numbers, and view-snapshot coverage. |
| `summary` | Post counts, total paid, total payable, and totals grouped by currency. |
| `trackedAccounts` | Rows from the PDF's Tracked Accounts table. |
| `resultPosts` | Rows from the PDF's Result Posts table, in report order. |
| `nonMediaLineItems` | Non-media rows, including paid, payable, and informational entries. |

The endpoint does not paginate or truncate rows. Empty sections are empty
arrays. Reports with more than 10,000 rows across the three arrays return
`413`; request a shorter activity range.

The report is built when requested, just like the date-range PDF. Values can
change as tracking and payout activity change between requests.

### Post rows

| Fields | Contents |
| - | - |
| `rowNumber`, `postId`, `campaignCreatorMediaId` | Report row number, its string identifier, and the persistent campaign media ID. |
| `uploadDate`, `uploadDateTimeZone` | Upload timestamp and the time zone used to display it. The timestamp can be `null`. |
| `description`, `caption`, `postUrl`, `platform` | Post description, caption, link, and platform. Caption and link can be `null`. |
| `views`, `viewsAsOf` | View count and optional snapshot timestamp. The snapshot timestamp can be `null`. |
| `crossPostedWith`, `crosspostGroupKey`, `crosspost` | Linked report `postId` values, group key, and the PDF's crosspost label. The key and label can be `null`. |
| `status`, `includedInPayout` | Report status and inclusion flag. |
| `reason`, `reasons`, `reasonLinks`, `warnings` | Explanations, optional linked reports, and optional data warnings. |
| `amountsApplied` | Numeric USD amounts for `fixed`, `cpm`, `bonus`, and `total`. Each is a money object. |
| `componentDisplay` | Display text for `fixed`, `cpm`, and `bonus`, including explanations such as `No bonus achieved`. The PDF may display `--` for a component that does not apply. |
| `payoutAmount`, `totalPaid` | Payable and already-paid money objects from the report. |
| `payoutComponents`, `paidComponents` | Optional component arrays, each with `type` and an `amount` money object. |

Post `status` is `PAID`, `PAYABLE`, `PAID VIA CROSSPOST`,
`PAYABLE VIA CROSSPOST`, `NOT PAYABLE`, `NOT PAID`, or `null`.
Linked posts remain separate rows, including rows with zero amounts.

### Tracked account rows

Each row contains `accountUrl`, `platform`, `trackingStartDate`,
`trackVideosFor`, `showTrackingDuration`, and `reason`. The URL and tracking
start timestamp can be `null`. The PDF uses `showTrackingDuration` to decide
whether to display the tracking duration.

### Non-media rows

Each row contains `lineItem`, `type`, `activityDate`, `status`, `invoice`,
`amount`, and `note`. The activity timestamp and invoice can be `null`.
An optional `payCycleWindow` includes `startAt`, `endAt`, and `timeZone`.

`status` is `Paid`, `Will be paid`, or `Not included`. The line-item types are
`Bonus`, `Performance`, `Fixed`, `Platform fee`, `Rounding adjustment`, and
`Other`. Amounts can be zero or negative; preserve them when exporting rows.

### Money and totals

Money objects contain `amount` (a number in major currency units, not cents),
`currency`, and `display` (formatted text), for example:

```json theme={null}
{ "amount": 50, "currency": "USD", "display": "$50.00" }
```

Use `summary.totalPaidByCurrency` and `summary.totalPayableByCurrency` for
currency-specific totals. Do not add amounts with different currencies or
sum the display strings. `amountsApplied` is expressed in USD; other money
objects carry their own currency.

### Read rows in JavaScript

```javascript theme={null}
const url = new URL(
  `${BASE_URL}/sdk/v1/campaign-creators/${campaignCreatorRecordId}/payout-report/data`
);
url.searchParams.set('startDate', '2026-07-01');
url.searchParams.set('endDate', '2026-07-31');
const response = await fetch(url, {
  headers: { 'X-Application-Id': APP_ID, 'X-Api-Key': API_KEY }
});
const body = await response.json();
if (!response.ok) throw new Error(body.message);
for (const post of body.data.resultPosts) {
  console.log(post.rowNumber, post.postUrl, post.views, post.status, post.payoutAmount);
}
for (const item of body.data.nonMediaLineItems) {
  console.log(item.lineItem, item.status, item.amount, item.note);
}
```

### Common errors

* `400`: missing, invalid, or reversed date range; client-supplied `agencyId`
* `401`: missing or invalid SDK credentials
* `403`: missing `payouts:read` scope, SDK access disabled, or origin not allowed
* `404`: campaign creator record not found in your agency
* `413`: report exceeds 10,000 rows; use a shorter date range
* `500`: report could not be generated


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.