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

# Fix flagged content and publish

\


## What you're building

A remediation path that sits between publish and delete.

Most moderation decisions are binary because most moderation results are asset-level: a verdict with no timing. A FastPix moderation result is a list of moments, each with a modality, a start time, an end time, and the categories that triggered it. That turns a takedown into an edit list.

The pattern is the same every time. Read the segment, pick the transform that matches its modality and category, produce a corrected asset, run moderation again on that asset, and publish the corrected version while the original stays restricted. Because moderation and media transforms run on the same platform, the whole loop happens without moving the file between tools.

## Prerequisites

* A FastPix account with an active workspace ([Activate your account](/getting-started/activate-your-account))
* Your **Access Token ID** and **Secret Key**
* A media asset with a completed moderation result to work from. See [Getting started with moderation](/in-video-ai/getting-started-with-moderation).
* Thresholds chosen for your audience. See [Content moderation](/in-video-ai/detect-nsfw-content-and-profanity) for what the scores mean.

\


## Read the segments, not just the verdict

Fetch the result and work from the [`moderation.segments`](/in-video-ai/getting-started-with-moderation#understand-the-moderation-response) array. Each entry tells you what to fix and where.

```bash
curl --request GET \
  --url https://api.fastpix.com/v1/ai/{mediaId}/moderation \
  --user '{Access_Token}:{Secret_Key}'
```

```json
{
  "moderation": {
    "verdict": "unsafe",
    "modalities": ["video", "audio"],
    "scores": {
      "violence": 0.8661,
      "profanity": 0.5
    },
    "segments": [
      { "modality": "video", "start": 54, "end": 81, "riskScore": 0.8661, "categories": { "violence": 0.8661 } },
      { "modality": "audio", "start": 88.19, "end": 98.53, "riskScore": 0.5, "categories": { "profanity": 0.5 } }
    ]
  }
}
```

Two findings in a long asset, twenty seconds apart in effect. The whole-media verdict says `unsafe`, but only about thirty-seven seconds of content actually caused it. Removing the asset discards everything else.

\


## Choose the transform that matches the finding

The `modality` tells you which track to act on, and the `categories` tell you how aggressive the fix needs to be.

| Finding                                              | Typical fix                              | Guide                                                                                                                                                                   |
| ---------------------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Audio profanity or a harmful statement, visuals fine | Replace or cover the audio for that span | [Replace a video's audio track](/video-on-demand/replace-a-videos-audio-track), [Overlay audio on a video timeline](/video-on-demand/overlay-audio-on-a-video-timeline) |
| A short visual moment, surrounding content valuable  | Remove the flagged interval              | [Remove unwanted video segments](/video-on-demand/remove-unwanted-video-segments)                                                                                       |
| Only part of the asset is approved                   | Publish that range as its own clip       | [Clip and trim videos](/video-on-demand/clip-and-trim-videos)                                                                                                           |
| Several approved ranges, scattered findings          | Clip the safe ranges and join them       | [Merge and stitch videos](/video-on-demand/merge-and-stitch-videos)                                                                                                     |

For the example above, the audio finding at 88.19 to 98.53 is a candidate for an audio overlay, and the visual finding at 54 to 81 is a candidate for segment removal. Use the segment times directly as the interval for the transform.

\


## Re-run moderation on the corrected asset

A transform produces a new media asset, and that asset has not been moderated. Run moderation on it before it goes anywhere near an audience.

```bash
curl --request POST \
  --url https://api.fastpix.com/v1/ai/{mediaId}/moderation \
  --user '{Access_Token}:{Secret_Key}'
```

```json
{
  "success": true,
  "data": {
    "id": "c695988b-ff84-42ae-bb21-10f284fedb0e"
  }
}
```

Wait for `video.media.ai.moderation.ready` on the new asset, then confirm the result is clear. Treat this as a fresh decision rather than an amendment to the original one. Two reasons: an edit can miss part of a finding, and cutting one interval changes what sits either side of the cut, which occasionally produces a new adjacency that reads worse than the original.

\


## Publish the corrected version

Once the corrected asset clears, give it a public playback ID and leave the original restricted.

```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"
  }'
```

Keep the original rather than deleting it. It is the evidence behind the decision, the source for a different edit if your policy changes, and what an appeal is assessed against. Recording the original media ID in the corrected asset's `metadata` keeps the two linked.

\


## Serving several markets from one master

The same finding set can produce more than one corrected version, because different markets and standards draw the line in different places.

Rather than re-reviewing the asset per market, apply your per-market rules to the one set of segments. A market that tolerates the violence finding at 0.8661 but not the profanity at 0.5 gets one edit. A market with the opposite tolerance gets another. Each is a separate asset with its own playback ID and its own moderation record, produced from a single analysis of the source.

\


## What to watch for

* **Publish on a confirmed result, not on silence.** Release the corrected version when the re-check comes back clear, not when nothing has come back. Build a timeout into your pipeline and escalate anything still pending when it expires.
* **Every corrected version needs its own moderation run.** A transform output inherits nothing from its source, including its moderation status.
* **Audio findings sit on transcript timing.** Give the span a small margin on each side when replacing or overlaying audio, so a word is not clipped mid-syllable.
* **Removing an interval shifts everything after it.** Timestamps from the original result do not map onto the corrected asset. Always work from the new asset's own result.
* **Not every finding should be fixed.** Remediation suits localised findings in otherwise sound content. An asset with findings spread across most of its duration is a rejection, not an edit.

\


#### Frequently asked questions

Yes. Each segment in the moderation result carries a `start` and `end` time and a `modality`, so you can remove the interval, clip an approved range, replace or overlay audio, or stitch safe sections together, then run moderation again before publishing.

Yes. A transform produces a new media asset with no moderation history. Run moderation on it and treat the outcome as a new decision, since an edit can partially miss a finding or create a new adjacency at the cut.

Keep it restricted rather than deleting it. The original is the evidence behind the decision, the source for any future edit, and what an appeal is judged against.

Yes. Apply per-market rules to the same segment list and generate a separate corrected asset for each market. Each version carries its own playback ID and its own moderation record, from a single analysis of the source.

\


## What's next

* Put the gate in front of this workflow: [Gate uploads before publishing](/in-video-ai/gate-uploads-before-publishing).
* Send an uncertain finding to a person first: [Review flagged media](/in-video-ai/review-flagged-media).
* Review the categories and score bands behind a finding: [Content moderation](/in-video-ai/detect-nsfw-content-and-profanity).