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

# Manage campaign media

> Freeze performance payments, restore media, restart account tracking, and edit metrics.

All writes below require `campaigns:write`. IDs must belong to the API key's agency. Completed campaigns return `409` with `code: "CAMPAIGN_COMPLETED"`; reopen the campaign before editing. Deleted or retired media cannot be edited, except a soft-deleted row can be restored explicitly.

## Freeze and unfreeze performance

`POST /sdk/v1/campaign-media/:campaignCreatorMediaId/freeze-performance`

```json theme={null}
{ "notes": "Warm-up period", "pausedAt": "2026-10-01T00:00:00Z" }
```

Both fields are optional; omitting `pausedAt` uses the current time. This opens a performance-pause window for CPM and performance bonuses. Tracking continues. Fixed-rate eligibility is controlled by [payment exclusions](/campaign-media/payment-exclusions.md).

`POST /sdk/v1/campaign-media/:campaignCreatorMediaId/unfreeze-performance`

```json theme={null}
{ "unpausedAt": "2026-10-15T00:00:00Z" }
```

Omit `unpausedAt` to resume at the current time. This closes the pause window; it does not erase its history. The same platform validation and grouped-media rules apply.

> [!NOTE]
>
> To make a warm-up post ineligible for both fixed and performance payments, use both payment-exclusion operations. Setting a score to zero is not a substitute for payment eligibility.

## Restore deleted media

`POST /sdk/v1/campaign-media/:campaignCreatorMediaId/restore` with `{}` restores a soft-deleted row using its original ID and history. Restoring an account also restores its eligible discovered posts under the platform's restore rules. Media limits still apply. Tracking-retired rows cannot be restored through this operation.

## Restart account tracking

`POST /sdk/v1/campaign-media/:campaignCreatorMediaId/restart-tracking`

```json theme={null}
{ "effectiveFrom": "2026-10-01T00:00:00Z" }
```

Use an account media ID. This restarts account tracking from the supplied instant using the same history-preserving rules as the platform. It can retire old child posts and schedule account discovery; it is not a generic refresh button. Existing payout and approval protections still apply.

## Change account tracking settings

`PATCH /sdk/v1/campaign-media/:campaignCreatorMediaId/tracking-settings`

```json theme={null}
{ "trackStartAt": "2026-10-01", "trackForValue": 30, "trackForUnit": "DAYS" }
```

All three fields are required. `trackForUnit` is `DAYS` or `MONTHS`; `trackForValue` is a positive integer. The platform applies the settings to the account and eligible child posts while preserving protected history.

## Enter manual analytics

`PUT /sdk/v1/campaign-media/:campaignCreatorMediaId/manual-analytics`

```json theme={null}
{ "views": 12000, "likes": 650, "comments": 48, "shares": 20, "bookmarks": 10 }
```

Provide at least one metric. Values must be integers from `0` through `9007199254740991` (JavaScript's maximum safe integer); larger values return `400`. Counts above the 32-bit integer limit are supported. Use a post ID, not an account. The operation writes a manual snapshot, recalculates affected summaries, and uses the existing platform rules for omitted metrics. Review the resulting analytics before sending a payout.

Successful writes return `{ "success": true, "data": ... }` with the operation's result and, where applicable, a message. These operations do not send a payout.


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