Source: https://developers.tokportal.com/archive-request/
Markdown: https://developers.tokportal.com/archive-request.md

# Archive a Video

Hide one **finalized** video from the account's public profile without deleting it:

- **TikTok**: the post is set to **Only you**.
- **Instagram**: the post or Reel is **archived**.

The account's manager does it on the account. TokPortal then checks automatically that the post is no longer public before marking it archived. The video keeps its views and can be restored later on request.

**Cost:** 1 credit per video.

## Request an archive

```
POST /videos/:id/archive-request
```

The `:id` is a **video ID** (the finalized video to hide), not a bundle ID. No request body is needed.

### Prerequisites

- The video must be **finalized**
- The video must be on **TikTok or Instagram** and have a post link
- The saved account must have active TokPortal Coverage or be permanently grandfathered
- An active account manager must be available for the account (same rules as [account edit requests](https://developers.tokportal.com/edit-request) and [ad code requests](https://developers.tokportal.com/ad-code-request))
- No other archive request can be open for the same video, and a video is archived only once
- You need at least **1 credit** in your balance

Coverage validation, manager assignment, the 1-credit debit and request creation commit atomically. A failed prerequisite never creates a request and never charges.

The request appears directly in the manager's Calendar on the current day, under the account. It is not a marketplace task.

```bash
curl -X POST https://app.tokportal.com/api/ext/videos/{video_id}/archive-request \
  -H "X-API-Key: sk_xxx"
```

### Response (201)

```json
{
  "data": {
    "archive_request_id": "uuid",
    "video_id": "uuid",
    "status": "pending",
    "platform": "tiktok",
    "archived": false,
    "created_at": "2026-10-20T10:22:00Z",
    "submitted_at": null,
    "archived_at": null,
    "cancelled_at": null
  },
  "credits_charged": 1,
  "credits_remaining": 1240
}
```

Send the `X-TokPortal-Dry-Run: true` header to validate the request (ownership, Coverage, manager, duplicates) without charging or creating anything. See [Sandbox](https://developers.tokportal.com/sandbox).

## Get / poll the status

```
GET /videos/:id/archive-request
```

Returns the latest archive request for the video, or `null` when none exists. `archived` becomes `true` once TokPortal has verified the post is no longer public.

```bash
curl https://app.tokportal.com/api/ext/videos/{video_id}/archive-request \
  -H "X-API-Key: sk_xxx"
```

### Response (200)

```json
{
  "data": {
    "archive_request_id": "uuid",
    "video_id": "uuid",
    "status": "finalized",
    "platform": "tiktok",
    "archived": true,
    "created_at": "2026-10-20T10:22:00Z",
    "submitted_at": "2026-10-20T11:04:00Z",
    "archived_at": "2026-10-20T11:12:00Z",
    "cancelled_at": null
  }
}
```

## Statuses

| Status                | Meaning                                                                                                     |
| --------------------- | ----------------------------------------------------------------------------------------------------------- |
| `pending`             | Request created, the manager has to archive the video                                                       |
| `in_review`           | The manager archived it; TokPortal is checking that the post is no longer public (usually about 10 minutes) |
| `pending_corrections` | The post was still public; the manager has to do it again                                                   |
| `finalized`           | Verified archived. `archived` is `true`. Terminal                                                           |
| `cancelled`           | TokPortal cancelled the request and refunded the credit                                                     |

> **TIP: How the check works**
> TokPortal only checks after the manager confirms. Two concordant checks a few minutes apart are required before a request is finalized or sent back, so a temporary platform glitch never decides on its own.

### Errors

| Code                                | Status | When                                                                             |
| ----------------------------------- | ------ | -------------------------------------------------------------------------------- |
| `VIDEO_ARCHIVE_VIDEO_NOT_FOUND`     | 404    | Video ID not found                                                               |
| `VIDEO_ARCHIVE_NOT_OWNED`           | 403    | Video belongs to another user                                                    |
| `VIDEO_ARCHIVE_VIDEO_NOT_FINALIZED` | 409    | Video is not finalized                                                           |
| `VIDEO_ARCHIVE_NO_POST_URL`         | 409    | The finalized video has no post link                                             |
| `PLATFORM_NOT_AVAILABLE`            | 400    | The video is not on TikTok or Instagram                                          |
| `MANAGED_ACCOUNT_TASK_BLOCKED`      | 409    | Coverage is inactive or the account is banned, revealed or otherwise unavailable |
| `VIDEO_ARCHIVE_NO_CM`               | 409    | No active account manager can receive the request                                |
| `VIDEO_ARCHIVE_NO_ORDER`            | 409    | No active manager or non-cancelled support order can be resolved                 |
| `VIDEO_ARCHIVE_ALREADY_EXISTS`      | 409    | An archive request is already open for this video                                |
| `VIDEO_ARCHIVE_ALREADY_ARCHIVED`    | 409    | The video is already archived                                                    |
| `INSUFFICIENT_CREDITS`              | 402    | Fewer than 1 credit available                                                    |

> **NOTE: Dashboard**
> In the dashboard, open the account's **Videos** tab and choose **Archive video** in the options of a finalized video, or use **Archive** in the video's sheet on the Calendar. Archived videos show the **Archived** status everywhere.
