Content policy
What gets refused, why resending fails, and your duty to label AI ads.
Read as MarkdownWhat RiffAds refuses to make, and what you must do with what it makes.
One check on every path
REST, MCP, the CLI, the app and workflow runs all run the same check. Refused on one, refused on all. The check runs before anything is charged, so a refusal carries credits_charged: 0.
What is checked
| Input | When |
|---|---|
| Script | On submit |
| Free text fields (prompt, brief, lyrics, headline, instruction) | On submit |
| Uploaded images | When the upload is finalized, before use |
| Import URLs | Before anything is fetched |
Text is matched against a fixed rule list. A model pass can sit on top for wording the list misses.
| Category | Result |
|---|---|
| Sexual content involving minors | Refused |
| Explicit sexual content | Refused |
| Credible violence and threats | Refused |
| Illicit goods | Refused |
| Hate | Refused |
| Self harm | Warning, job runs |
| Impersonation | Warning, job runs |
Video and audio are not scanned
Uploads return content_checked: false for video and audio. Nothing reads their contents. Don't tell your users they were reviewed.
What a refusal looks like
{
"error": {
"ok": false,
"code": "moderation_blocked",
"message": "This request was refused by our content policy. Change the wording or the input; sending it again unchanged will be refused again.",
"retryable": false,
"credits_charged": 0
}
}- One sentence. No category, no internal id. There is nothing to reverse engineer.
- A refused file names its
ast_id. That file can never be used. Upload a different one. - An upload still being scanned returns
input_not_ready. That one is retryable.
Resending fails
The rule list gives the same answer to the same words, forever. Repeats get blocked:
| Refused by | Refusals | Then | For |
|---|---|---|---|
| The rule list | 2 | Refused without checking | 30 days |
| A model | 3 | Paused | about 1 hour |
A blocked request returns request_blocked (429, not retryable, blocked_reason: "moderation_blocked"). Change the script or the inputs. Blocks never cross workspaces.
If checks are down, agent submits return moderation_unavailable (503, retryable). Reads still work.
Think a refusal is wrong? There is no appeal button. Change the wording. A different request gets a fresh check.
Everything is AI made
Every file RiffAds returns is AI generated or AI edited. Video, images, voice, music, scripts. That stays true with your own script or your own uploads.
The file carries no label. No watermark, no visible mark, no C2PA data. Some models may add hidden marks. RiffAds does not add, check or promise them.
Labeling is your job
RiffAds never publishes anything. You choose where the file goes, so the duty to disclose goes with you. No API, MCP or CLI response tells your agent to label. Build it into your process.
Label where law, a regulator or a platform requires it:
- EU AI Act. Transparency rules apply from 2 August 2026. Realistic content that looks like real people, places or events must be disclosed.
- Laws on deepfakes, synthetic media, political ads, and use of a person's name, image or voice.
- Advertising and consumer law, including fake reviews, testimonials and endorsements.
- Ad policies of every platform you run on.
Use a label people notice: "AI generated" or "Made with AI", or the platform's own AI label. To burn one in, use the text_overlay capability. Capabilities. Not legal advice.
Actors are not real people
- Library actors are AI. They never used, tested or recommended anything. Don't present one as a real customer, reviewer or expert.
- Making an actor from a real person's photo, or cloning a real voice? Get their written consent first. Never anyone under 18. Keep a copy.
- RiffAds does not verify who is in a photo or voice sample. Impersonation wording is a warning, not a block. The job runs. The duty is yours.
Review before you publish
Nobody at RiffAds watches output. Expect sometimes:
- Wrong, missing or mispronounced words.
- Lips out of sync. Odd faces, hands or text.
- False product details or claims, including in AI-written scripts.
- Accidental likeness to a real person or brand.
The check runs on inputs, not on the finished file. Watch, listen, read. Make sure every claim is true.
Full rules: AI Disclosure and Acceptable Use Policy. Legal.