spicyapi-com Moderation API

The Moderation API from spicyapi-com — 2 operation(s) for moderation.

Operations 2

POST /v1/moderations Check a Prompt #
POST /v1/moderations/appeals Report a Wrong Decline #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/spicyapi-com:spicyapi-com-moderation-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

spicyapi-com-moderation-api-openapi.yml Raw ↑
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