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

# List campaign creator line items

> See the fixed, CPM, and bonus items included in a campaign creator's calculated payment.

## POST /sdk/v1/campaign-creators/line-items/query

Returns the calculated payment items for specific campaign creators or for one
campaign. Each media item includes its URL and `campaignCreatorMediaId`.

All requests require `X-Application-Id` and `X-Api-Key`.

### Choose creators

Send exactly one of:

* `campaignCreatorRecordIds`: up to 500 campaign creator record IDs.
* `campaignId`: one campaign. You can also send `page` and `limit`; `limit`
  defaults to `100` and cannot exceed `500`.

### Optional fields

* `startDate` and `endDate`: an inclusive `YYYY-MM-DD` payment range. Send both
  or neither.
* `includeNonPayable`: include items that are not currently payable and the
  reason for each. Default: `true`.

### Example request

```bash theme={null}
curl -sS "$BASE_URL/sdk/v1/campaign-creators/line-items/query" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY" \
  -d '{
    "campaignCreatorRecordIds": ["CCR_123", "CCR_456"],
    "startDate": "2026-07-01",
    "endDate": "2026-07-31",
    "includeNonPayable": true
  }'
```

To read a campaign one page at a time, use this body instead:

```json theme={null}
{
  "campaignId": "camp_123",
  "page": 1,
  "limit": 500,
  "startDate": "2026-07-01",
  "endDate": "2026-07-31"
}
```

### Response

```json theme={null}
{
  "success": true,
  "data": [
    {
      "campaignId": "camp_123",
      "campaignName": "Summer launch",
      "campaignCreatorRecordId": "CCR_123",
      "creatorProfileId": "CP_123",
      "creatorEmail": "jordan@example.com",
      "effectiveTimeZone": "America/New_York",
      "dateRange": {
        "startDate": "2026-07-01",
        "endDate": "2026-07-31"
      },
      "currency": "USD",
      "totalAmount": 550,
      "paymentBreakdown": {
        "fixed": 300,
        "cpm": 250,
        "bonus": 0,
        "total": 550
      },
      "lineItems": [
        {
          "campaignCreatorMediaId": "CCMEDIA_123",
          "url": "https://www.tiktok.com/@jordan/video/123",
          "platform": "TIKTOK",
          "uploadedAt": "2026-07-08",
          "paymentType": "CPM",
          "amount": 250,
          "currency": "USD",
          "payable": true
        },
        {
          "campaignCreatorMediaId": "CCMEDIA_456",
          "url": "https://www.instagram.com/p/example/",
          "platform": "INSTAGRAM",
          "uploadedAt": "2026-07-10",
          "paymentType": "BONUS",
          "amount": 0,
          "currency": "USD",
          "payable": false,
          "reason": "The post has not reached a bonus tier."
        }
      ]
    }
  ],
  "failures": [],
  "pagination": {
    "page": 1,
    "limit": 2,
    "total": 2,
    "totalPages": 1
  }
}
```

Each result includes the campaign's `effectiveTimeZone`, resolved from the
campaign override, agency fallback, or `UTC`. The `dateRange` and media
business dates should be interpreted in that IANA timezone.

<Note>
  Bonus tiers do not stack. If the tiers pay 10 at 1,000 views and 50 at
  10,000 views, a post with 50,000 views earns 50—not 60.
</Note>

An unknown or inaccessible creator is returned in `failures` without stopping
the rest of the request.

### Common errors

* `400`: invalid selector, more than 500 creators, or incomplete date range
* `401`: missing or invalid SDK credentials
* `404`: selected campaign not found
