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

# Exclude media from payments

> Keep posts tracked while excluding them from fixed-rate or CPM and bonus calculations, and undo those exclusions.

Use payment exclusions to keep warm-up posts tracked without including them in
the corresponding payment calculations. Fixed-rate and performance exclusions
are independent: apply both when a post should contribute to neither.

All requests require `X-Application-Id`, `X-Api-Key`, and the `campaigns:write`
scope. No request body or idempotency key is required.

## Endpoints

All four endpoints use `POST`:

| Path | Effect |
| - | - |
| `/sdk/v1/campaign-media/:campaignCreatorMediaId/exclude-fixed-rate` | Exclude the media from applicable fixed-rate calculations. |
| `/sdk/v1/campaign-media/:campaignCreatorMediaId/unexclude-fixed-rate` | Undo its fixed-rate exclusion. |
| `/sdk/v1/campaign-media/:campaignCreatorMediaId/exclude-performance` | Exclude the media from CPM and bonus calculations. |
| `/sdk/v1/campaign-media/:campaignCreatorMediaId/unexclude-performance` | Undo its CPM and bonus exclusion. |

### Path parameter

`campaignCreatorMediaId` is the ID of a tracked post or account returned by
[Campaign media](/campaign-media.md). It must contain 1–128 characters. Grade
resolves the campaign from this media ID and checks that it belongs to your
agency. Do not supply `agencyId` or `campaignId` in the body or query string.

### Exclude a warm-up post

```bash theme={null}
curl --fail-with-body -sS \
  "$BASE_URL/sdk/v1/campaign-media/CCMEDIA_123/exclude-fixed-rate" \
  -X POST \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY"

curl --fail-with-body -sS \
  "$BASE_URL/sdk/v1/campaign-media/CCMEDIA_123/exclude-performance" \
  -X POST \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY"
```

Check each response: the two operations are separate requests. Neither changes
the post's eligibility score or stops tracking. These exclusions do not require
score-based payment filtering to be enabled.

### Undo an exclusion

Use the corresponding `unexclude-` endpoint for the same media ID:

```bash theme={null}
curl --fail-with-body -sS \
  "$BASE_URL/sdk/v1/campaign-media/CCMEDIA_123/unexclude-performance" \
  -X POST \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY"
```

To undo both exclusions, also call `unexclude-fixed-rate`.

### Response

Fixed-rate endpoints return `isFixedRateExcluded`; performance endpoints return
`isPerformanceExcluded`. The flag is `true` after excluding and `false` after
undoing the exclusion.

```json theme={null}
{
  "success": true,
  "data": {
    "campaignCreatorMediaId": "CCMEDIA_123",
    "campaignId": "camp_123",
    "campaignCreatorRecordId": "CCR_123",
    "isAccount": false,
    "isPerformanceExcluded": true
  }
}
```

Grade refreshes the affected creator's payment summaries after a change.

## Payment and account behavior

* An account exclusion also applies to its linked posts. To re-include an
  individual post, first undo the corresponding exclusion on its parent account.
* Undoing an account exclusion preserves exclusions set on individual posts.
* Exclusions change payment eligibility; they do not reverse existing payments
  or cancel a creator-level flat fee that is independent of individual posts.
* Undoing an exclusion restores eligibility under the existing payment terms.
  It does not start a new earnings window: earlier tracked activity can become
  payable. Other eligibility rules, including scores and contract dates, still
  apply.
* Completed campaigns are read-only. Deleted or retired media cannot be changed
  through these endpoints.

## Common errors

| Status | Meaning |
| - | - |
| `400` | Invalid media ID, client-supplied `agencyId` or `campaignId`, or undo requested when the media is not directly excluded (`NOT_EXCLUDED`). |
| `401` | Missing or invalid SDK credentials. |
| `403` | The API key lacks `campaigns:write`. |
| `404` | Media is unavailable or belongs to another agency. |
| `409` | The campaign is completed, the media is already excluded (`ALREADY_EXCLUDED`), or its parent account is still excluded (`ACCOUNT_EXCLUDED`). |

Repeating an exclusion returns `409` with `ALREADY_EXCLUDED`; repeating an undo
returns `400` with `NOT_EXCLUDED`. These responses leave the existing state
unchanged.


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