How we moderate

SpicyAPI generates adult content for consenting adults, and nothing else. This page describes the controls that run on every request, in the order they run. The rules themselves are in the Acceptable Use Policy.

1. No uploads, by design

The API does not accept uploaded or external images anywhere. The only images that can be edited or animated are images previously generated by the same account, verified server-side against a registry of outputs before anything is charged. A real photograph of a real person cannot enter the system, so non-consensual imagery made from someone's photo is not possible on SpicyAPI.

2. Prompt screening, three layers

Every prompt for image, edit and video generation passes through a keyword blocklist, contextual pattern rules (distress, incapacitation, age-evasion phrasing, references to named private individuals, attempts to instruct the safety system), and a semantic classifier that returns a probability for each prohibited category: apparent minors, real identifiable people (including lookalikes), non-consent, bestiality, gore and prompt injection. It reads the prompt in any language.

Any real doubt about age blocks. Other categories block at high probability and return a review outcome at moderate probability, which asks the user to reword so that subjects, ages and consent are explicit. If the classifier is unreachable the request fails with a 503 rather than proceeding unscreened. Blocked and reviewed prompts are never charged.

The screen also sees the requester's last few declined prompts, so a reworded, translated or obfuscated retry of something already refused is judged as a pattern, not as a fresh prompt. Because an API account is usually a platform serving many people, that history is kept per end user when the developer sends a user id with the request, and per account only when they do not. Any prompt that has ever produced a withheld image is refused outright, for every account, before a model runs.

3. Output image review

After an image is generated it is reviewed by a vision model before it is returned or stored as a reusable asset. Images that appear to show a minor or a recognisable real person are deleted, withheld from the response, refunded, and logged. If the review itself cannot run, the image is withheld and refunded rather than delivered unreviewed. Withheld images are hashed so the same bytes are never delivered again, and the prompt that produced them is blocked. Video tasks the model itself refuses come back with error_code: "blocked" and are refunded.

4. Chat

Chat completions are screened as a conversation, including the system prompt, so a persona that is presented as under 18 is caught even when each message looks innocuous. As with generation, an unreachable screen means a 503, not an unscreened reply. Messages that suggest a user may be at risk of self-harm are not blocked; they are flagged in the response (x-spicyapi-safety: self_harm) so that companion apps can route the person to support.

5. Account strikes

Blocks in the severe categories (minors, real people, non-consent, bestiality) count as strikes. When requests carry a userid, strikes accrue to that end user, who is refused after ten; the developer is told which user, and their account is flagged for review rather than suspended for a customer's behaviour. Without a user id, strikes accrue to the account: flagged after three, suspended after ten. At signup, developers describe what they are building; products that would require prohibited content are held for review before an API key goes live.

6. Evidence and retention

Every block, review, output withholding and classifier outage is recorded with the account, the prompt, the category probabilities and the time. Cleared requests keep their category probabilities on the request log. These records are retained for the period stated in our Privacy Policy and are what we produce to law enforcement on a valid request.

7. Reporting and takedown

Anyone, customer or not, can report content through our report form or by email to contact@spicyapi.com. Reports are classified on receipt; reports concerning a minor or a real person start a 48-hour removal clock. A takedown deletes the file from our CDN and permanently bars it from being used as an input, while the record is kept as evidence.

For developers

Screening errors carry a machine-readable code, outcome and per-category categories so your product can tell users what to change. You can also run the same screen ahead of time with POST /v1/moderations, or pass dry_run: true to any generation endpoint to get the price and the screening result without generating. Our 2257 statement and transparency report are public. See Errors & limits.