spicyapi-com Moderation API
The Moderation API from spicyapi-com — 2 operation(s) for moderation.
The Moderation API from spicyapi-com — 2 operation(s) for moderation.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/spicyapi-com:spicyapi-com-moderation-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Spicy Moderation API
version: 1.0.0
description: 'Spicy API (also written SpicyAPI) is one REST API for uncensored image, image-editing, video, video-editing, speech, live voice call, transcription, embedding and chat generation, sold per generation from a prepaid US-dollar balance: no subscription, no GPUs to run. It is OpenAI-compatible (point the OpenAI SDK at https://api.spicyapi.com/v1 with a Spicy API key) and includes ready-made sex actions for video and role-play companion models. It has been at spicyapi.com since June 2025, is operated by Wayfinity Ltd, and is not affiliated with spicyapi.ai, an unrelated model aggregator. Images from $0.06, video from $0.05 per second. OPENAI-COMPATIBLE: point the OpenAI SDK at https://api.spicyapi.com/v1 with a Spicy API key; client.images.generate maps onto POST /v1/images/generations and client.chat.completions.create onto POST /v1/chat/completions (streaming included). client.embeddings.create maps onto POST /v1/embeddings and client.audio.transcriptions.create onto POST /v1/audio/transcriptions. Image edits take JSON with image_url (not the SDK''s multipart upload) and video (generations, edits, motion transfer) is a plain HTTP task you poll. Every response carries cost_usd, the exact amount debited. Prompts are screened before any charge (422, never billed); failed generations are refunded. Sandbox keys (created with sandbox: true) answer every endpoint from fixtures flagged sandbox: true and bill nothing. Machine-readable overview: https://www.spicyapi.com/llms.txt. MCP server for agents: https://www.spicyapi.com/api/mcp.'
contact:
name: Spicy API support
email: contact@spicyapi.com
url: https://www.spicyapi.com/docs
termsOfService: https://www.spicyapi.com/terms-of-service
servers:
- url: https://api.spicyapi.com
description: Public API host (also reachable at https://www.spicyapi.com/api).
tags:
- name: Moderation
paths:
/v1/moderations:
post:
operationId: moderations
summary: Check a Prompt
description: 'Run a prompt or conversation through the same screen the generation endpoints use, without generating. Use it to check your end users'' prompts before you spend credits, or to power a live indicator in your own UI. Blocked prompts are never charged at generation time either; this endpoint exists so you can tell users *why* before they hit submit. Flat price of $0.001 per call. Free when called from the SpicyAPI playground. The screen runs three layers: a keyword blocklist, contextual pattern rules, and a semantic classifier that returns per-category probabilities. `outcome` is `allow`, `review` (uncertain; would be declined at generation with a request to reword) or `block`.'
tags:
- Moderation
security:
- apiKey: []
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
properties:
flagged:
type: boolean
description: '`true` when `outcome` is not `allow`.'
outcome:
type: string
description: '`allow`, `review` or `block`.'
category:
anyOf:
- type: string
- type: 'null'
description: 'The category driving the outcome: `minor`, `real_person`, `non_consent`, `bestiality`, `gore`, `injection`, `keyword`, or a contextual rule code.'
categories:
type: object
description: Per-category probabilities from the semantic layer (0 to 1). Empty when a deterministic layer decided.
layer:
type: string
description: '`keyword`, `contextual` or `jev`.'
cost_usd:
type: number
description: What this call cost.
required:
- flagged
- outcome
- category
- categories
- layer
- cost_usd
example:
object: moderation
flagged: false
outcome: allow
category: null
categories:
minor: 0.03
real_person: 0.01
non_consent: 0.02
bestiality: 0
gore: 0
injection: 0.01
layer: jev
cost_usd: 0.001
'400':
description: 'Invalid parameters. Body: {error: {message, type: ''invalid_request_error''}}.'
'401':
description: Missing or invalid API key.
'402':
description: Insufficient balance. Top up in the dashboard or through the get_topup_link tool; nothing was charged.
'422':
description: Prompt blocked by moderation (acceptable use policy). Never charged.
'429':
description: Rate limited or model at capacity; retry after the Retry-After header.
requestBody:
required: true
description: Provide exactly one of `input` or `messages`.
content:
application/json:
schema:
type: object
properties:
input:
type: string
description: A generation prompt (optionally with the negative prompt appended). Up to 8000 characters.
messages:
type: array
items:
type: object
description: An OpenAI-style message array (system, user, assistant). The whole conversation is screened, including the system prompt.
required: []
/v1/moderations/appeals:
post:
operationId: moderationAppeals
summary: Report a Wrong Decline
description: Tell us a declined request should have been allowed. Every `422` from content screening carries `error.moderation_id`. Send it here when the decline looks wrong, for example when your end user disputes it. We review every report; a wrong decline gets its rule fixed, so the same request and similar ones pass next time. Free. One report per decline (sending it again returns the same report). Up to 30 reports a minute per account.
tags:
- Moderation
security:
- apiKey: []
responses:
'201':
description: Report received
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: The moderation_id reported.
status:
type: string
description: '`open` until reviewed.'
required:
- id
- status
example:
object: moderation.appeal
id: Xq3f9KcTb2LmNp8RsV4w
status: open
'400':
description: 'Invalid parameters. Body: {error: {message, type: ''invalid_request_error''}}.'
'401':
description: Missing or invalid API key.
'402':
description: Insufficient balance. Top up in the dashboard or through the get_topup_link tool; nothing was charged.
'422':
description: Prompt blocked by moderation (acceptable use policy). Never charged.
'429':
description: Rate limited or model at capacity; retry after the Retry-After header.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
moderation_id:
type: string
description: '`error.moderation_id` from the `422` response.'
reason:
type: string
description: 'Optional: what was intended, up to 1000 characters.'
required:
- moderation_id
components:
securitySchemes:
apiKey:
type: http
scheme: bearer
bearerFormat: sk-spicy-...
description: Per-account API key from https://www.spicyapi.com/dashboard/api-keys (shown once, stored hashed). Sandbox keys bill nothing.
x-openai-compatible:
baseUrl: https://api.spicyapi.com/v1
compatible:
- /v1/chat/completions
- /v1/images/generations
- /v1/models
- /v1/embeddings
- /v1/audio/transcriptions
notes: Image sizes use width*height (1024*1024). Speech returns JSON with a url unless stream is true. Live calls follow the OpenAI Realtime event shape over wss://api.spicyapi.com/v1/realtime after POST /v1/realtime/sessions. Edits and video are Spicy API specific.
x-mcp:
endpoint: https://www.spicyapi.com/api/mcp
transport: streamable-http
auth: 'Authorization: Bearer sk-spicy-...'
docs: https://www.spicyapi.com/docs
llms: https://www.spicyapi.com/llms.txt
skills: https://www.spicyapi.com/skills/index.json