Moderation & statuses
Nothing posted through the API skips review — every status enum and lifecycle in one place.
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 returns only approved items by default. Pass
includePending=trueto see items still in review — those come back with theirmoderationStatusand an emptyfilePathuntil 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 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}.
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: a caught caption returns
422 { "error": …, "matchedWord": "…" }— rewrite and retry once. - POST /drops: a caught
nameordescriptionreturns400 { "error": …, "field": "…", "matchedWord": "…" }.
Polling guidance#
Poll GET /posts/{id} or the vault list every 30–60 seconds while something is PENDING, and stop on any terminal state. Budget it against your rate tier.
Next: Money & units or Pagination & batch limits.
Questions? [email protected]
