> ## Documentation Index
> Fetch the complete documentation index at: https://www.dropfans.io/developers/llms.txt
> Use this file to discover all available pages before exploring further.

# Moderation & statuses

> Nothing posted through the API skips review — every status enum and lifecycle in one place.

- Source: https://www.dropfans.io/developers/concepts/moderation-and-statuses
- Section: Concepts
- OpenAPI: https://www.dropfans.io/developers/openapi.json

Everything created through the API runs the same review pipeline as the dashboard: captions and names go through the prohibited-word filter, media rides the NSFW pipeline. The API cannot bypass review — by design.

## The enum

`moderationStatus` on vault items, posts and drops is one of:

| Value | Meaning |
| --- | --- |
| `PENDING` | In review. **Normal, not an error** — it clears by itself. |
| `APPROVED` | Cleared. Usable and visible. |
| `FLAGGED` | Held for human review. May still become APPROVED. |
| `REJECTED` | Refused. Will not go live. |

## Vault item lifecycle

Upload → `PENDING` → `APPROVED`, `FLAGGED` or `REJECTED`. Two things to know:

- [GET /vault](https://www.dropfans.io/developers/reference/list-vault.md) returns only approved items by default. Pass `includePending=true` to see items still in review — those come back with their `moderationStatus` and an **empty `filePath`** until approved.
- Review takes real minutes. Upload, then poll the list rather than assuming instant availability.

## Video processing is separate from moderation

A video must first finish **processing** on the CDN (encode, thumbnails), then it enters **moderation**. [POST /vault/video-status](https://www.dropfans.io/developers/reference/video-status.md) reports processing only: `{ isReady, isProcessing, isFailed }`. `isReady: true` does not mean approved — check the vault list for `moderationStatus` after processing completes.

## Drop status — derived from its items

A drop’s status is computed from its vault items: any `REJECTED` or `FLAGGED` item wins, else any `PENDING` item makes the drop `PENDING`, else it is `APPROVED`. As of this release the status is computed correctly **at creation** — a drop built from approved items is born `APPROVED` and can be attached to a post immediately. Read it back with [GET /drops/{id}](https://www.dropfans.io/developers/reference/get-drop.md).

## Post status and `live`

Posts carry the same enum plus `live` — true only when the post is `APPROVED` **and** its publish time has passed. A scheduled, approved post is not live yet. Text posts with clean captions usually approve instantly; media posts stay `PENDING` until every image clears.

## The word filter

- [POST /posts](https://www.dropfans.io/developers/reference/create-post.md): a caught caption returns `422 { "error": …, "matchedWord": "…" }` — rewrite and retry once.
- [POST /drops](https://www.dropfans.io/developers/reference/create-drop.md): a caught `name` or `description` returns `400 { "error": …, "field": "…", "matchedWord": "…" }`.

## Polling guidance

Poll [GET /posts/{id}](https://www.dropfans.io/developers/reference/get-post.md) or the vault list every 30–60 seconds while something is `PENDING`, and stop on any terminal state. Budget it against your [rate tier](https://www.dropfans.io/developers/concepts/rate-limits.md).

Next: [Money & units](https://www.dropfans.io/developers/concepts/money-and-units.md) or [Pagination & batch limits](https://www.dropfans.io/developers/concepts/pagination.md).

---

Previous: [Pagination & batch limits](https://www.dropfans.io/developers/concepts/pagination.md) · Next: [Money & units](https://www.dropfans.io/developers/concepts/money-and-units.md) · All pages: [llms.txt](https://www.dropfans.io/developers/llms.txt)
