> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://fastpix.com/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fastpix.com/docs/_mcp/server.

# Review flagged media

## What you're building

A review queue where the expensive part is the judgement, not the investigation.

Moderation returns a confidence score, and scores in the middle are exactly the cases a classifier cannot settle. The same few seconds of footage can be acceptable in a documentary and unacceptable in a promotional clip. A slur quoted in order to condemn it is not the same act as a slur directed at someone. Those distinctions are why the item was escalated, so sending a reviewer the score and nothing else asks them to do a job they have not been equipped for.

Two things make a review queue work. The reviewer must be able to watch media that is not published, which means short-lived signed access rather than making it public. And they must open on the flagged moment with context already assembled, rather than scrubbing a forty minute asset to work out what they are looking at.

\


## Prerequisites

* A FastPix account with an active workspace ([Activate your account](/getting-started/activate-your-account))
* A signing key for signed playback ([Generate JWTs for secure media](/video-security/generate-jwts-for-secure-media))
* Thresholds that define your review band. See [Content moderation](/in-video-ai/detect-nsfw-content-and-profanity).

\


## Keep the media reviewable but unpublished

Media created with `accessPolicy` set to `private` has no public route to a viewer. It can still be played, but only through a signed token your application issues, which is exactly the property a review queue needs. Create it with playback closed exactly as in [Gate uploads before publishing](/in-video-ai/gate-uploads-before-publishing#create-the-media-with-playback-closed).

Do not create a public playback ID for anything in review. Publishing is the outcome of the review, not its starting point.

If the asset was already public when a finding arrived, revoke it first and review afterwards:

```bash
curl --request DELETE \
  --url 'https://api.fastpix.com/v1/on-demand/{mediaId}/playback-ids?playbackId={playbackId}' \
  --user '{Access_Token}:{Secret_Key}'
```

The media and its moderation history are untouched, so the decision stays reversible.

\


## Build the review task from the finding

A review task is not a link to a video. Assemble it from the moderation result so the reviewer starts with the facts:

| What to include                                | Why the reviewer needs it                                   |
| ---------------------------------------------- | ----------------------------------------------------------- |
| The flagged `segments`, with `start` and `end` | So they open on the moment instead of searching for it      |
| The `categories` and their scores              | So they know what the system thought and how strongly       |
| The `modality` of each segment                 | Whether the concern is what is shown or what is said        |
| The policy provision being applied             | So decisions stay consistent between reviewers              |
| The decision options and a reason field        | So the outcome is recorded as data, not as a free-text note |

Order the queue by risk rather than by arrival time. A single high-confidence self-harm finding deserves attention before a backlog of borderline profanity, and a queue sorted by timestamp buries it.

\


## Give the reviewer time-limited access

Generate a signed playback token scoped to the reviewer's session, with an expiry short enough that a leaked link is not a lasting exposure. See [Generate JWTs for secure media](/video-security/generate-jwts-for-secure-media) and [Secure media access with JWTs](/video-security/secure-media-access-with-jwts).

Point the player at the flagged timestamp so the reviewer lands on the moment. On a long asset this single detail is most of the throughput difference, and it also limits how much distressing material a reviewer sits through to reach a decision they could make in ten seconds.

\


## Give the reviewer enough context to decide

Context is what separates a correct decision from a fast one. Everything below is already available for the same media, and assembling it into the review task costs the reviewer nothing to read.

* A [video summary](/in-video-ai/generate-a-video-summary) tells them what the content is before they press play, so they know whether this is a lecture, a match report or an advertisement.
* [Chapters](/in-video-ai/generate-video-chapters) show where the flagged moment sits in the structure. A violent scene forty minutes into a documentary and the same scene opening a promotional clip are different decisions.
* An [attributed transcript](/in-video-ai/generate-an-attributed-transcript) gives the words around a flagged audio segment, which resolves most spoken findings without watching anything. It also names the speaker, which matters when only one participant in a recording is responsible.
* [Named entities](/in-video-ai/extract-named-entities-from-a-video) identify the people, organisations and products that appear, which is what turns a generic judgement into a specific one.

These support the decision rather than replacing the policy. A reviewer overriding your thresholds because the summary sounded reasonable is a tuning signal, not a precedent.

\


## Record the decision and act

Each outcome maps to a concrete action:

| Decision        | Action                                                                                                   |
| --------------- | -------------------------------------------------------------------------------------------------------- |
| Approve         | Create a public playback ID                                                                              |
| Keep restricted | Leave it private. No call needed                                                                         |
| Needs an edit   | Send to remediation, see [Fix flagged content and publish](/in-video-ai/fix-flagged-content-and-publish) |
| Reject          | Leave it private and notify the contributor with the specific finding                                    |
| Escalate        | Route to a second reviewer with the first reviewer's note attached                                       |

Publishing is a single call:

```bash
curl --request POST \
  --url https://api.fastpix.com/v1/on-demand/{mediaId}/playback-ids \
  --user '{Access_Token}:{Secret_Key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "accessPolicy": "public"
  }'
```

Record the decision against the automated call that preceded it. Comparing the two over time is how you learn where your thresholds are wrong, and it is the only basis on which they should be retuned. A high reversal rate on one category means that threshold is set badly, not that reviewers are being difficult.

\


## Handling appeals

An appeal attaches to the original review record rather than opening a new case, so the full history of a decision reads as one narrative.

Give the second reviewer the original finding, the policy applied at the time, the first reviewer's reasoning, and whatever the contributor said in response. Assessing an appeal against the rules as they existed then, rather than as they exist now, is what makes the outcome defensible.

Keeping media restricted rather than deleting it is what makes an appeal possible at all. Deletion forecloses the outcome.

\


## What to watch for

* **Set a deadline on the pending state.** Build a timeout into your pipeline and route anything still pending when it expires straight to a reviewer, rather than leaving an asset held.
* **Keep review tokens short.** A signed URL for a reviewer should outlive the review and nothing more.
* **Measure reversal rate, not queue volume.** Volume tells you how busy the queue is. Reversal rate tells you whether your thresholds are right.
* **Escalation band width is a business decision.** Widening it sends more to humans and catches more. Narrowing it cuts cost and misses more. Choose it deliberately rather than inheriting a default.
* **Reviewers see the worst content you hold.** Opening on the flagged moment, and showing the transcript where the finding is audio, limits unnecessary exposure.

\


#### Frequently asked questions

Keep the media on a private access policy and issue a short-lived signed playback token for the reviewer's session. The media stays unavailable to everyone else, and the token expires on its own.

The flagged segments with their start and end times, the categories and scores, the modality of each finding, the policy being applied, and the decision options. Add the summary, chapters, transcript and named entities so the reviewer has context without scrubbing the asset.

Attach the appeal to the original review record and give the second reviewer the original finding, the policy as it stood at the time, and the first reviewer's reasoning. Keep the media restricted rather than deleting it, since deletion removes the option to reverse.

Compare reviewer decisions against the automated call that escalated them. A category with a high reversal rate has a badly set threshold. Retune per category rather than adjusting one global sensitivity.

\


## What's next

* Put the gate in front of the queue: [Gate uploads before publishing](/in-video-ai/gate-uploads-before-publishing).
* Act on what a reviewer approves with edits: [Fix flagged content and publish](/in-video-ai/fix-flagged-content-and-publish).
* Understand the categories and scores behind a finding: [Content moderation](/in-video-ai/detect-nsfw-content-and-profanity).