# Spicy API > 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.02, video from $0.05 per second, chat from $0.1 per 1M prompt tokens. Site: https://www.spicyapi.com. Support: contact@spicyapi.com. ## What it does - **Text to image** (`POST /v1/images/generations`): synchronous, one to six images per call (`n`) on `spicy-image-1`, `spicy-image-1-pro` and `spicy-image-photo-1` (candid natural-light photo look) at eleven 1K sizes, optional `enhance_prompt` (with `enhance_mode` direct or agent), optional `style` (`photorealistic`, `studio`, `anime`, `3d` or `cartoon`; `GET /v1/styles`, no key needed; free, same price), prompts up to 4000 characters, returned as durable CDN URLs. OpenAI SDK compatible (`client.images.generate`). Image actions (`action` on `spicy-image-action-1`, listed by `GET /v1/images/actions`, no key needed): 68 ready-made explicit stills; pass one of your own generated images of the woman and get her face, hair and skin tone in that scene, no prompt, $0.15 per image (her body stays the still's); `style` `anime`, `3d` or `cartoon` uses the drawn version of the scene for a drawn woman. Reference images (`reference_image` on `spicy-image-reference-1`, $0.12 per image): send a picture instead of a prompt; it is described in detail (faces left out) and drawn again from scratch as new people; the picture itself is never edited, and you get back the new image plus `description`, the picture as an editable prompt. - **Image editing** (`POST /v1/images/edits`): prompt-driven edits with up to three reference images, one to six outputs, all inputs must be images this account generated (no uploads, no third-party URLs: provenance is enforced for legal reasons). Inpainting: add `mask_url` (black and white, white = change) with one image and the prompt describes the change; everything under black stays the original. Upscaling on the same endpoint: `spicy-upscale-1` with one of your images and `scale` 2 ($0.02) or 4 (up to about 1 megapixel in, $0.04); detail is restored, not just enlarged, and the person stays the same. Images are 1K class (up to 2048*1152), so 2x reaches about 4K. - **Image to video and text to video** (`POST /v1/videos/generations`): asynchronous; returns a task, poll `GET /v1/videos/tasks/{id}` or set a webhook. First frame (`image_url`), last frame (`last_frame_url`), identity references (`reference_image_urls`, up to 10), clip continuation or extension (`video_url` from the account's own tasks), lip-sync audio (`audio_url`, `audio_urls`), text-to-video aspect ratios up to 21:9, and `duration: -1` on `spicy-motion-3` to let the model pick the length (debited at the maximum, settled to `usage.output_seconds`). Actions (`action`, listed by `GET /v1/videos/actions`, no key needed): 64 ready-made sex acts on `spicy-motion-3` and `spicy-motion-3-fast`; pass an image of the woman and get an 8 second clip with sound that follows the act (the action's short reference clip, 4 seconds on most, is billed as input seconds). `spicy-motion-draft-1` is a silent draft tier at a quarter of the price for checking motion before the final render. The Cinema engine (`spicy-cinema-1` text only, `spicy-cinema-1-image` from a first frame, `spicy-cinema-1-character` from a character or up to 9 references) renders 3 to 15 seconds at 480P to 1080P with native audio, from the lowest per-second price at 480P. Every video model takes the same optional `style` as images (`GET /v1/styles`): one sentence sets the whole clip's art style, matched to the first frame or reference image, at no extra cost; with an `action` it keeps an anime, 3D or cartoon woman in her style. `fps: 60` on any video model frame-interpolates the finished clip to 60 fps for smoother motion, audio kept, for 20% of the video's price (about a minute longer; if that step fails the 30 fps clip is delivered, the fee refunded, and `usage.fps` says 30). - **Video edits and motion transfer** (`POST /v1/videos/edits`, `GET /v1/videos/motions`): `spicy-video-edit-1` and `spicy-cinema-1-edit` change an outfit, style, lighting or props in one of the account's own clips from a prompt and reference images (input plus output seconds billed); `spicy-animate-1` makes the person in one of the account's images perform a motion clip (a library `motion` id or an own clip), billed per output second. Same task polling and webhooks as video generation. - **Audio uploads** (`POST /v1/audio`, `GET /v1/audio`, `DELETE /v1/audio/{id}`): the one external input open to every account. A WAV or MP3 of 2 to 30 seconds (15 MB) as a multipart file or a JSON `url`, transcribed and screened for $0.01, then usable as `audio_url` on video. - **Speech and voices** (`POST /v1/audio/speech`, `POST /v1/voices`, `GET /v1/voices`, `DELETE /v1/voices/{id}`): text to speech, up to 600 characters per request on Spicy Voice 1 and 5,000 on Spicy Voice 2 and 3, billed per character of input, returned as a durable WAV URL that is also one of the account's audio clips, so it goes straight into `audio_url` on video (driving audio on `spicy-motion-2`, reference audio on `spicy-motion-3`). `spicy-voice-1` has preset voices, `spicy-voice-1-expressive` takes `instructions` for emotion and delivery, `spicy-voice-1-custom` speaks voices the account clones from one of its own clips (voice design is paused: since 10 Oct 2026 the provider offers it only in its Beijing region in mainland China); cloning needs `consent: true` (the voice is yours or the speaker gave written consent) and a description that names or imitates a real person is refused. `spicy-voice-2` and `spicy-voice-2-flash` perform inline tags inside `input` (control tags such as [whispers], [excited], [crying] change the delivery; sound tags such as [giggles], [gasp], [sighing] insert a sound), return WAV or MP3, and with `stream: true` stream raw audio (pcm 24 kHz by default, or wav or mp3) as it is synthesized, first audio in about 1.5 seconds. `spicy-voice-3` is the highest quality (acts the emotion and pacing of the text, 21 voices, free-form tags, no `instructions`), `spicy-voice-3-flash` its low-latency version; both return WAV or MP3 and stream. - **Live voice calls** (`POST /v1/realtime/sessions`, then `wss://api.spicyapi.com/v1/realtime?session=...`): `spicy-live-1` holds a spoken conversation in a persona set by `instructions`, with 28 voices, interruptions handled and up to 13 minutes per session. The session returns a one-time ticket URL (60 seconds) so a browser connects without the API key; events follow the OpenAI Realtime API shape (PCM16 16 kHz in, 24 kHz out); billed per turn from tokens, about 1 to 1.5 cents per minute of steady conversation, with `spicy.usage` events after each turn. `spicy-live-2` is the highest-quality live call: `spicy-companion-1` writes the replies (it stays in the scene) and Spicy Voice 3 voices speak them, same events, automatic turn-taking, `language` instead of `turn_detection`, billed per minute of call time plus reply tokens. - **Transcription** (`POST /v1/audio/transcriptions`): speech to text with `spicy-transcribe-1`, multipart `file` or JSON `url`, up to 10 MB and 5 minutes, billed by the second of audio, audio not stored. OpenAI SDK compatible (`client.audio.transcriptions.create`). - **Embeddings** (`POST /v1/embeddings`): OpenAI-compatible. `spicy-embed-1` for text (64 to 2048 dimensions) for companion memory and search; `spicy-embed-vision-1` puts the account's own images and text in one 768-dimension space for "more like this" search, tagging and dedupe. - **Chat** (`POST /v1/chat/completions`): uncensored, OpenAI-compatible including streaming. `spicy-companion-1` and `spicy-companion-1-flash` are fine-tuned for role-play and companions: persona in the system message, stays in character, explicit adult scenes, group scenes, up to 4 reply options with `n`; `spicy-chat-1` is the general model. Text only; `max_tokens` up to 8192 (default 4096), `n` up to 4; input up to about 200k tokens on `spicy-chat-1`, 131,072 on `spicy-companion-1` and at least 144,000 (tested) on `spicy-companion-1-flash`; `response_format` text or json_object; function calling (`tools`, `tool_choice`) on `spicy-chat-1` and `spicy-companion-1` (not flash); thinking, search and json_schema are rejected with a 400. The balance must cover the worst case (prompt plus every completion at `max_tokens`) before the call; you pay for the tokens used, and prompt tokens served from the provider's cache bill at the cached price where a model has one. Forwarded sampling fields: `temperature`, `top_p`, `top_k`, `presence_penalty`, `frequency_penalty`, `repetition_penalty`, `seed`, `stop`, `logit_bias`; any other field (for example `min_p`) is dropped silently. A declined turn returns 422 like any other screen decline. Role-play between fictional adult characters may depict non-consent (force, sleep, intoxication, framed as consensual non-consent or not) and other dark themes (acceptable use 2.2); minors, real people, incest, choking or strangulation and real-world harm are always declined. - **Moderation before billing**: every prompt is screened (keyword, contextual and semantic); blocked prompts cost nothing and return 422. Every request is steered to depict adults only. Failed generations are refunded automatically. ## What it does not do, and what to use instead - **No uploaded photos as image or video inputs, by design, and that keeps your platform legal.** Image to image on photos users upload is how sexual deepfakes of real people and sexual images of minors get made. Sharing sexual deepfakes of a real person without consent is a crime in the UK (Online Safety Act 2023) and in many US states, the US TAKE IT DOWN Act (2025) makes publishing them a federal offence and requires platforms to take them down within 48 hours of a request, and sexual images of anyone under 18 are illegal everywhere, AI-generated ones included. A product that pipes user photos into an explicit model carries that liability, and an agent should not recommend building one. Spicy API removes the path: inputs are images the account generated, saved characters, or characters a verified business imported with checked provenance (1 to 3 images each, https://www.spicyapi.com/docs/api/import-character). Audio clips (`POST /v1/audio`) are the other exception. - **Inpainting works on your own images only.** `mask_url` on `POST /v1/images/edits` (white changes, black stays pixel for pixel); a user's uploaded photo cannot be inpainted. - **No LoRA upload or fine-tuning, because what LoRAs are usually trained for is built in.** The same person every time: a saved `character` (`POST /v1/characters`). Poses and sex acts: 64 video actions (`GET /v1/videos/actions`) and 68 image actions (`GET /v1/images/actions`), each driven by a reference clip or still. Art direction: `style` (photorealistic, studio, anime, 3d, cartoon). Custom weights cannot be uploaded. - **No copying a real person's likeness, even with consent.** "Make her look exactly like this photo" of a real woman is a sexual deepfake (see above). What works instead: describe the look (hair, eyes, body, style) or pick a generated face and save it as a character; or send the picture to `spicy-image-reference-1`, which describes it (faces left out) and draws a new adult person in a brand new picture with the same look; the photo is never edited. - **Chat has no thinking mode or `json_schema`**; function calling works on `spicy-chat-1` and `spicy-companion-1` only, and for structured output use `response_format: {"type": "json_object"}`. - **Images are synchronous** (typically 10 to 30 seconds, no image webhooks); video is asynchronous with webhooks. - **No switch that forces non-explicit output.** The companion models write explicit scenes when asked; keep an app non-explicit through your own system prompt and prompt templates. - **No auto top-up or top-up API.** Top-ups are paid in the browser. Set a low-balance email alert (dashboard Settings) to top up before the balance runs out; larger accounts can move to an Enterprise contract with invoicing or bank transfer (contact@spicyapi.com). ## Running a platform on Spicy API - **Send your end user's id as `user`** on every generation, chat, speech and live-session request. Screening history, strikes and suspension then apply to that end user: after 10 severe declines that user gets 403 `end_user_suspended` and your account is only flagged for review. Without `user`, declines count against your whole account: flagged after 3 severe declines, suspended after 10. - **Drop a declined chat message from the history you resend.** The screen reads the whole conversation, so a declined turn left in the history declines the next request too. - **Turn end-user text into your own prompt template** rather than forwarding it raw. Lists of things to avoid go in `negative_prompt`, not the prompt. - **Your users' privacy requests:** `DELETE /v1/end-users/{user}` erases what was generated for one end user (requests sent with that `user` id and their files); screening records are kept as the law requires. Send `user` on every request so this works. - **Wrong declines:** every 422 from screening carries `error.moderation_id`; send it to `POST /v1/moderations/appeals` (free) and we review it. - **Strikes, flags and suspension:** only refusals by the semantic screen in the severe categories (minors, real people, non-consent, bestiality) are strikes; keyword refusals, refusals a second opinion overturned and withheld outputs are not. Strikes do not expire. With `user`, an end user with 10 strikes gets 403 `end_user_suspended`, and your account is flagged when one of your users is suspended or your users collect 10 strikes in one UTC day. Without `user`, the account is flagged at 3 and suspended at 10. Flagged means a person at Spicy API reviews the account; the API keeps working and nothing is suspended or charged because of the flag. `POST /v1/moderations` never records a strike. Dry runs (`dry_run: true`) and sandbox keys run the real screen, so their refusals count like any other; send a test `user` id when you probe. Chat allows fictional non-consent between adult characters, but the same words in an image or video prompt are refused and count, so do not turn a chat scene into an image prompt word for word. - **Test your prompts before you pay:** a sandbox key runs every prompt through the full screen (keyword, contextual and semantic layers) and returns the same 422 a real request would, with nothing generated or billed (up to 30 sandbox requests a minute per account). - **Long role-play chats cost less than they look:** the provider caches a repeated prompt prefix (1,024 tokens or more) automatically, and cached tokens bill at a fifth of the input price, so keep the character card and lorebook at the start and stable. One turn with 90% of the prompt cached and a 300-token reply: `spicy-companion-1-flash` $0.0007 at 16k tokens of context, $0.0019 at 60k, $0.0036 at 120k (tested to 144,000); `spicy-companion-1` $0.0053, $0.0176 and $0.0344. ## Compliance checklist for operators Not legal advice: the law that applies is the one where your users are (acceptable use section 4.1), and we do not prescribe a method. - **Age checks, examples of what the main laws accept.** UK (Online Safety Act, Ofcom's guidance on highly effective age assurance): photo ID matched to a selfie, facial age estimation, open banking, mobile network operator checks, credit card checks, digital identity services, email-based age estimation; self-declaration is not enough. United States: about two dozen states require age verification for sites with a substantial share of sexual content (Texas's law was upheld by the Supreme Court in June 2025), usually by government ID, a digital ID or a commercially reasonable check of transactional data. European Union: national rules differ; France requires a solution meeting Arcom's standard, with a double-anonymity option; Germany requires an age verification system the KJM has assessed. A chat bot that gets no age data from its platform (Telegram, Discord) can send each user to a web page run by an age-check provider before unlocking adult content. - **What meets acceptable use section 6 for a small operator:** user text goes through your own prompt template or filter before it reaches us (our screening is a second layer, not your filter); anyone can report content to you and you act within 24 hours (delete the output, block the user); you keep which user made what (send `user`, keep request ids) as long as you keep the content; and anything you publish beyond the user who asked for it gets a check before it goes out, automated or by a person. `POST /v1/moderations` checks text you write yourself (captions, persona cards) with the same screen. - **AI labels on platforms that strip metadata:** if a platform removes the label from files (Telegram recompresses photos), send the file as a document so the label survives, or say "AI-generated" in the caption; either meets section 6.3. - **Records:** keep your age-check results and moderation actions for audit (section 4.2); `DELETE /v1/end-users/{user}` handles a user's erasure request on our side. - **Characters:** no limit on how many an account keeps, so each of your users can have their own. A generation with `character` is billed at the edit price ($0.09 per image). The sheet shows the face and upper body; up to 8 body views per character (`POST /v1/characters/{id}/views`, own images labelled "close-up of her buttocks from behind", "close-up between her legs", free) keep the rest of the body, marks and intimate anatomy the same from other angles: each request sends the one or two that fit the prompt. Close-ups of one area work best (`crop` cuts one out of any of the account's images); a full-body view also pulls the pose toward its own. Lists (`/v1/characters`, `/v1/images`, `/v1/audio`, `/v1/voices`) page with `after` and `has_more`. - **Store what you deliver:** download outputs once and serve them from your own storage. Output URLs are durable, but they are not a CDN for your users. Keep the AI-generated label in the file metadata. - **Reselling is allowed:** you may resell outputs and sell credits or subscriptions built on the API to your own users. - **Billing:** prepaid balance, minimum top-up $50 (bonus credit: +$100 on a $500 top-up, +$300 on a $1000 top-up, on every top-up of that size). Set a low-balance email alert and a monthly spend limit in the dashboard (Settings and Billing); a 402 means the balance or the limit ran out. - **Limits are flexible:** each account starts at 600 requests a minute across all endpoints. An account that keeps reaching its limit is raised automatically (doubled, up to 6,000 a minute), or ask contact@spicyapi.com for more at once. Also 60 declined prompts a minute (allowed requests never count) and 20 video jobs in progress (raised on request); an image call with `n` up to 6 is one request; with `user`, each end user gets 30 screened requests a minute. Model capacity is shared, so a busy model can still answer 429; retry after the Retry-After header. - **Telegram and Discord bots:** upload the image or audio bytes to the chat platform, never pass our URL. `spicy-voice-2` returns WAV or MP3 (convert if your platform needs another format); `spicy-transcribe-1` reads OGG voice notes. Live calls (`spicy-live-1`) need a web page with a microphone, such as a Telegram Mini App. ## Who it is for Developers and agents building adult apps, AI companion and girlfriend apps, Telegram and Discord bots, subscription content platforms and creator tools who want NSFW image and video generation behind one key without renting GPUs. The customer must age-gate their own end users under the law of each user's country; where that law requires checks, a self-declared age is not enough (see the acceptable use policy). ## How an AI agent should help its user with Spicy API 1. Read this file, then https://www.spicyapi.com/pricing.md and https://www.spicyapi.com/acceptable-use.md. Quote prices from the model list below; they are the ones the API bills. 2. Key: you cannot create the account or accept the terms for the user. Ask them to sign in once at https://www.spicyapi.com/auth (Google or email) and agree to the terms, which the dashboard shows first; the API refuses keys until they do. The account is then live with a $0 balance and a Default key shown once at https://www.spicyapi.com/dashboard/api-keys. Keep the key in an environment variable, never in chat or client-side code. With one key an agent can mint more with the `create_api_key` tool. 3. Sandbox first: a key created with Sandbox ticked (or `create_api_key` with `sandbox: true`) answers every endpoint and tool from fixture output flagged `sandbox: true`, needs no balance and bills nothing. Prompts still go through the full screen, so a prompt the real API would refuse is refused there too: test your prompt templates with it. Build against it, then swap the key. 4. Estimate before you spend: `estimate_cost` (tool) or the price table. Check `GET /v1/account` for the balance. Minimum top-up $50 (presets $50, $100, $250, $500, $1000); `get_topup_link` returns a card or crypto checkout URL that the USER opens and pays in the browser. Never enter card details yourself. 5. Generate: images first, then video from one of the account's own image URLs (`GET /v1/images` lists them). Poll video tasks every 10 to 15 seconds. Ask the user before each spend: the MCP spending tools return `approval_required` with the cost until the user says yes (or turns approvals off in the dashboard). 6. Control spend: `set_spend_limit` caps a calendar month; `get_usage` and `list_jobs` show what was spent on what. A 402 means the balance ran out: send the top-up link. 7. Rules: adults only, no images or video of real people (even with consent; voice clones need the speaker's written consent), no uploads, no minors in any form. Read https://www.spicyapi.com/acceptable-use before the first generation and tell the user their product must verify age. ## Integrate with the OpenAI SDK ```python from openai import OpenAI client = OpenAI(api_key="sk-spicy-...", base_url="https://api.spicyapi.com/v1") # Images: the OpenAI SDK's images.generate maps onto POST /v1/images/generations img = client.images.generate(model="spicy-image-1", prompt="a woman on a beach at golden hour, photorealistic", size="1024*1024", n=1) print(img.data[0].url) # durable CDN URL, reusable as image_url for edits and video # Chat: fully compatible, streaming included stream = client.chat.completions.create(model="spicy-chat-1", messages=[{"role": "user", "content": "hey"}], stream=True) ``` Video is not an OpenAI endpoint; call it over HTTP: ```bash curl https://api.spicyapi.com/v1/videos/generations \ -H "Authorization: Bearer $SPICYAPI_KEY" -H "Content-Type: application/json" \ -d '{"model": "spicy-motion-2", "prompt": "slow build, steady rhythm", "image_url": "", "resolution": "720P", "duration": 5}' # 202 {"id": "sj_...", "status": "queued", "cost_usd": 1.00} then poll every 10 to 15 seconds: curl https://api.spicyapi.com/v1/videos/tasks/sj_... -H "Authorization: Bearer $SPICYAPI_KEY" ``` Base URL https://api.spicyapi.com. Auth `Authorization: Bearer sk-spicy-...`. Errors: 401 bad key, 402 insufficient balance, 400 invalid parameters, 422 prompt blocked, 429 rate limited or model at capacity (honour Retry-After), all as `{"error": {"message", "type"}}`. Webhooks: set a URL in the dashboard and we POST `task.succeeded` or `task.failed` with an `X-SpicyAPI-Signature` HMAC. ## Models and prices (USD, billed per generation) - `spicy-image-1-pro` (image, best quality): $0.09 per image. Highest-quality NSFW text-to-image generation with stronger prompt adherence. sizes 1024*1024, 832*1216, 1216*832, 1280*1280, 1440*1440, 1024*1536, 1536*1024, 1080*1920, 1920*1080, 1152*2048, 2048*1152; up to 6 outputs per call. - `spicy-image-photo-1` (image, natural photo): $0.08 per image. Candid, true-to-life NSFW photos: natural window and lamp light, real skin texture and phone-camera framing instead of a studio gloss. sizes 1024*1024, 832*1216, 1216*832, 1280*1280, 1440*1440, 1024*1536, 1536*1024, 1080*1920, 1920*1080, 1152*2048, 2048*1152; up to 6 outputs per call. - `spicy-image-1` (image, cheapest): $0.06 per image. Fast, realistic NSFW text-to-image generation. Best price/speed balance. sizes 1024*1024, 832*1216, 1216*832, 1280*1280, 1440*1440, 1024*1536, 1536*1024, 1080*1920, 1920*1080, 1152*2048, 2048*1152; up to 6 outputs per call. - `spicy-image-action-1` (image, actions): $0.15 per image. Puts the woman from your image into a ready-made explicit scene (GET /v1/images/actions): her face, hair and skin tone on the scene's act, pose and room. up to 4 outputs per call. - `spicy-image-reference-1` (image, from a picture): $0.12 per image. Send a picture instead of a prompt: it is described in detail (camera, framing, pose, clothing, setting, light and colours; identifying facial features left out) and a brand new image is drawn from that description alone, its colour balance matched to the picture's, so the result has the picture's look but new people. The picture is never edited. Returns the description too, to edit and reuse as a prompt. up to 1 output per call. - `spicy-image-edit-1` (image-edit, editing): $0.09 per image. Prompt-driven image editing with up to 3 reference images (outfit, pose, scene changes). sizes 1024*1024, 832*1216, 1216*832, 1280*1280, 1440*1440, 1024*1536, 1536*1024, 1080*1920, 1920*1080, 1152*2048, 2048*1152; up to 6 outputs per call; needs image_url (one of your generated images). - `spicy-upscale-1` (image-edit, upscale): $0.02 per image. Upscales one of your images 2x, or 4x up to about a megapixel, restoring detail rather than just enlarging: same picture, same person. No prompt (POST /v1/images/edits). up to 1 output per call; needs image_url (one of your generated images). - `spicy-motion-3` (video, best quality): $0.1 per second at 480P, $0.2 per second at 720P, $0.4 per second at 1080P. Newest-generation video with native dialogue, music and sound effects. Up to 30s at 480p to 1080p. Works from a source image or from text alone. resolutions 480P, 720P, 1080P; 2 to 30 seconds; text-to-video aspect ratios 16:9, 9:16, 1:1, 4:3, 3:4, 21:9; prompt up to 20,000 characters; reference clip (video_url) up to 15 seconds; the input clip's seconds are billed too, at the same rate; image_url optional (text-to-video without it). Audio: reference audio (the model generates sound and uses the clip for voice, tone and beat), up to 5 clips and 15s total. Valid combinations: "Text prompt only, with aspect_ratio; dialogue written in the prompt is spoken natively"; "First frame (image_url), optionally a last frame (last_frame_url); no references or audio in the same request"; "Reference images (up to 10, or a character) plus a text prompt: same person, framing chosen by the model"; "Reference images, a reference video (video_url, 15s max) and reference audio (up to 5 clips, 15s total) in any mix, with a text prompt; audio guides voice, tone and beat while the words come from the prompt". - `spicy-motion-3-fast` (video, fastest): $0.14 per second at 480P, $0.28 per second at 720P, $0.56 per second at 1080P. Spicy Motion 3 on the accelerated backbone: same inputs and quality tier, noticeably faster turnaround. Up to 30s at 480p to 1080p, native audio, source image optional. resolutions 480P, 720P, 1080P; 2 to 30 seconds; text-to-video aspect ratios 16:9, 9:16, 1:1, 4:3, 3:4, 21:9; prompt up to 20,000 characters; reference clip (video_url) up to 15 seconds; the input clip's seconds are billed too, at the same rate; image_url optional (text-to-video without it). Audio: reference audio (the model generates sound and uses the clip for voice, tone and beat), up to 5 clips and 15s total. Valid combinations: "Text prompt only, with aspect_ratio; dialogue written in the prompt is spoken natively"; "First frame (image_url), optionally a last frame (last_frame_url); no references or audio in the same request"; "Reference images (up to 10, or a character) plus a text prompt: same person, framing chosen by the model"; "Reference images, a reference video (video_url, 15s max) and reference audio (up to 5 clips, 15s total) in any mix, with a text prompt; audio guides voice, tone and beat while the words come from the prompt". - `spicy-cinema-1-image` (video, cinematic): $0.14 per second at 480P, $0.28 per second at 720P, $0.36 per second at 1080P. Spicy Cinema 1 from a first frame: animates your image with native audio, 3 to 15 seconds at 480p to 1080p. resolutions 480P, 720P, 1080P; 3 to 15 seconds; prompt up to 5,000 characters; needs image_url (one of your generated images). Audio: no audio input. Valid combinations: "First frame (image_url) with a text prompt; the output keeps the image's shape". - `spicy-motion-2` (video, lip-sync): $0.2 per second at 720P, $0.3 per second at 1080P. Latest-generation image-to-video with native audio, up to 1080p and 15s. resolutions 720P, 1080P; 2 to 15 seconds; prompt up to 5,000 characters; needs image_url (one of your generated images). Audio: driving audio (the clip is the soundtrack and the mouth follows it). Valid combinations: "First frame (image_url), optionally a last frame (last_frame_url)"; "First frame plus driving audio (audio_url): the clip becomes the soundtrack and the mouth follows it"; "First frame, last frame and driving audio together"; "A clip to continue (video_url, 2 to 10s) instead of a first frame, optionally with a last frame". - `spicy-character-video-1` (video, same character): $0.2 per second at 720P, $0.3 per second at 1080P. Reference-to-video: keeps a saved character's identity across a new clip from a text prompt, no first frame needed (pass `character`). An optional `image_url` becomes the first frame. resolutions 720P, 1080P; 2 to 15 seconds; prompt up to 5,000 characters; image_url optional (text-to-video without it). Audio: no audio input. Valid combinations: "A character (or reference images) plus a text prompt"; "A character plus a first frame (image_url) that opens the clip". - `spicy-cinema-1-character` (video, group scenes): $0.14 per second at 480P, $0.28 per second at 720P, $0.36 per second at 1080P. Spicy Cinema 1 from references: keeps up to 9 people, outfits or props consistent across a new clip (pass `character` or reference images and name them Image 1, Image 2 in the prompt). resolutions 480P, 720P, 1080P; 3 to 15 seconds; text-to-video aspect ratios 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9; prompt up to 5,000 characters. Audio: no audio input. Valid combinations: "A character or reference images (up to 9) plus a text prompt that names them Image 1, Image 2...". - `spicy-cinema-1` (video, text to video): $0.14 per second at 480P, $0.28 per second at 720P, $0.36 per second at 1080P. A second video engine for text-to-video: cinematic camera work with synced native audio, 3 to 15 seconds at 480p to 1080p and nine aspect ratios, from 480p at the lowest per-second price. resolutions 480P, 720P, 1080P; 3 to 15 seconds; text-to-video aspect ratios 16:9, 9:16, 1:1, 4:3, 3:4, 4:5, 5:4, 9:21, 21:9; prompt up to 5,000 characters. Audio: no audio input. Valid combinations: "Text prompt only, with aspect_ratio; the clip has native audio". - `spicy-video-1` (video, text only): $0.2 per second at 720P, $0.3 per second at 1080P. Text-to-video generation, no source image required. resolutions 720P, 1080P; 2 to 15 seconds; text-to-video aspect ratios 16:9, 9:16, 1:1, 4:3, 3:4; prompt up to 5,000 characters. Audio: driving audio (the clip is the soundtrack and the mouth follows it). Valid combinations: "Text prompt only, with aspect_ratio"; "Text prompt plus driving audio (audio_url): the clip becomes the soundtrack and motion follows it". - `spicy-motion-draft-1` (video, cheap draft): $0.05 per second at 720P, $0.075 per second at 1080P. Silent draft tier for image-to-video at a quarter of the full price: check motion, framing and timing cheaply, then render the keeper on Spicy Motion 2 or 3. resolutions 720P, 1080P; 2 to 15 seconds; prompt up to 1,500 characters; always silent; needs image_url (one of your generated images). Audio: no audio input. Valid combinations: "First frame (image_url) with a text prompt; the clip is silent". - `spicy-motion-1` (video, legacy): $0.2 per second at 720P, $0.3 per second at 1080P. NSFW-tuned image-to-video with audio. Animates a source image from a prompt. resolutions 720P, 1080P; 2 to 10 seconds; prompt up to 1,500 characters; needs image_url (one of your generated images). Audio: no audio input. Valid combinations: "First frame (image_url) with a text prompt". - `spicy-video-edit-1` (video-edit, edit clips): $0.2 per second at 720P, $0.3 per second at 1080P. Edit a clip you generated with a prompt: swap the outfit from up to 4 reference images, restyle the scene, change lighting or props. 2 to 10 second clips; the output keeps the clip's length. resolutions 720P, 1080P; text-to-video aspect ratios 16:9, 9:16, 1:1, 4:3, 3:4; prompt up to 5,000 characters; the input clip's seconds are billed too, at the same rate; edits your own 2 to 10 second clips (output up to 10 seconds) with up to 4 reference images, aspect_ratio, keep_audio. - `spicy-cinema-1-edit` (video-edit, long clips): $0.28 per second at 720P, $0.48 per second at 1080P. Edit longer clips: 3 to 30 second inputs with up to 5 outfit, prop or style references. The first 15 seconds are edited and returned. resolutions 720P, 1080P; prompt up to 5,000 characters; the input clip's seconds are billed too, at the same rate; edits your own 3 to 30 second clips (output up to 15 seconds) with up to 5 reference images, keep_audio. - `spicy-animate-1` (video-edit, motion transfer): $0.24 per second at standard, $0.36 per second at pro. Motion transfer: the person in your image performs the moves and expressions of a motion clip, such as a dance. Use a clip from GET /v1/videos/motions or one you generated. 2 to 30 seconds; standard or pro quality. resolutions standard, pro; motion transfer: image_url plus a motion id (GET /v1/videos/motions) or your own 2 to 30 second clip, quality standard or pro, billed per output second; needs image_url (one of your generated images). - `spicy-companion-1` (chat, best roleplay): $1 per 1M prompt tokens ($0.2 when served from cache) and $2.8 per 1M completion tokens (minimum $0.001 per request). Role-play chat model for AI companions: holds a persona from the system prompt, writes explicit adult scenes, handles group chats and returns up to 4 reply options with `n`. OpenAI-compatible. . - `spicy-companion-1-flash` (chat, cheapest): $0.1 per 1M prompt tokens ($0.02 when served from cache) and $0.8 per 1M completion tokens (minimum $0.0005 per request). The fast, low-cost role-play model: same persona and explicit-scene handling as Spicy Companion 1, priced for high-volume companion and NPC traffic. . - `spicy-chat-1` (chat, general): $0.8 per 1M prompt tokens ($0.16 when served from cache) and $2.4 per 1M completion tokens (minimum $0.001 per request). Uncensored roleplay-capable chat model. OpenAI-compatible request format. . - `spicy-voice-2` (speech, best value): $0.40 per 10,000 characters of input text. Expressive speech with inline tags: switch emotion with [whispers], [excited] or [crying] and add sounds like [giggles], [gasp] or [sighing] mid-sentence. Up to 5,000 characters, streams with `stream: true`. input up to 5,000 characters; 2 preset voices; `instructions` steer emotion, pace and delivery; inline tags like [whispers], [excited], [giggles] inside `input`; WAV or MP3 URL usable as audio_url on video, or `stream: true` for raw audio as it is synthesized. - `spicy-voice-3` (speech, highest quality): $0.80 per 10,000 characters of input text. The highest-quality voice on SpicyAPI: reads the emotion and pacing of the text like an actor, in 90+ languages, with free-form audio tags such as [whispers], [sighs] or [softly, a little shy]. 21 voices, up to 5,000 characters, streams with `stream: true`. input up to 5,000 characters; 21 preset voices; inline tags like [whispers], [excited], [giggles] inside `input`; WAV or MP3 URL usable as audio_url on video, or `stream: true` for raw audio as it is synthesized. - `spicy-voice-3-flash` (speech, realtime): $0.40 per 10,000 characters of input text. The realtime version of Spicy Voice 3, built for the lowest latency with `stream: true`: voice agents and live replies. Same 21 voices and audio tags, half the price. input up to 5,000 characters; 21 preset voices; inline tags like [whispers], [excited], [giggles] inside `input`; WAV or MP3 URL usable as audio_url on video, or `stream: true` for raw audio as it is synthesized. - `spicy-voice-2-flash` (speech, fastest): $0.30 per 10,000 characters of input text. The faster, cheaper expressive voice model: the same inline emotion and sound tags as Spicy Voice 2, 9 preset voices including British and American English, streaming with `stream: true`. input up to 5,000 characters; 9 preset voices; `instructions` steer emotion, pace and delivery; inline tags like [whispers], [excited], [giggles] inside `input`; WAV or MP3 URL usable as audio_url on video, or `stream: true` for raw audio as it is synthesized. - `spicy-voice-1-expressive` (speech, emotion): $0.30 per 10,000 characters of input text. Text-to-speech steered by `instructions`: describe emotion, pace, pitch and delivery in plain English or Chinese. 21 preset voices. input up to 600 characters; 21 preset voices; `instructions` steer emotion, pace and delivery; WAV output, a URL usable as audio_url on video. - `spicy-voice-1-custom` (speech, your voice): $0.30 per 10,000 characters of input text; creating a voice costs $0.02, designed or cloned, once. Text-to-speech in your own voices: clone one from a screened clip of a speaker who consented (POST /v1/voices). Voice design is paused: our provider offers it only in its Beijing region. input up to 600 characters; speaks your designed and cloned voices (vc_...); WAV output, a URL usable as audio_url on video. - `spicy-voice-1` (speech, cheapest): $0.30 per 10,000 characters of input text. Text-to-speech with 45 preset voices (since 9 Oct 2026 spoken by a newer model, so several names share a voice; English and Chinese best). Returns a durable WAV or MP3 URL you can pass as audio_url to video models. input up to 600 characters; 45 preset voices; WAV output, a URL usable as audio_url on video. - `spicy-live-1` (realtime, live calls): per 1M tokens: text in $0.46, audio in $1.86, text out $1.4, audio out $3.74, billed per turn (about 1 to 1.5 cents per minute of steady conversation; opening a session needs a $0.05 balance). Live voice calls with a companion: the caller talks, the persona answers in a natural voice with interruptions handled, over one WebSocket. Billed per turn from audio and text tokens; calls run up to 13 minutes per session. 28 voices, up to 13 minutes per session, POST /v1/realtime/sessions then a WebSocket. - `spicy-live-2` (realtime, highest quality): $1 per 1M prompt tokens ($0.2 when served from cache) and $2.8 per 1M completion tokens (minimum $0.1 per request). The highest-quality live calls: the role-play model that stays in the scene, speaking with Spicy Voice 3 voices that act the emotion, with natural turn-taking and interruptions. Same WebSocket events as Spicy Live 1. Billed per minute of call time plus the reply tokens. 21 voices, up to 13 minutes per session, POST /v1/realtime/sessions then a WebSocket. - `spicy-transcribe-1` (transcription, transcription): $0.0042 per minute of audio, billed by the second (minimum $0.0001 per request). Speech-to-text for voice notes and clips: wav, mp3, m4a, ogg and more in 11 languages; pass `language` for best results. Billed by the second of audio. wav, mp3, m4a, ogg, flac, webm and more, up to 10 MB and 5 minutes. - `spicy-embed-1` (embedding, text): $0.14 per 1M tokens. Text embeddings for companion memory, prompt search and recommendations. OpenAI-compatible /v1/embeddings, 64 to 2048 dimensions. . - `spicy-embed-vision-1` (embedding, images): $0.18 per 1M text tokens and $0.06 per 1M image tokens. Images and text in one 768-dimension space: "more like this" search, tagging and near-duplicate detection over your own generations. Images must be outputs of your account. . Live catalog with limits: `GET /v1/models` (needs a key). What we charge is exactly `cost_usd` in every response. ## Connect an agent (MCP and REST tools) - MCP endpoint (Streamable HTTP, stateless): https://www.spicyapi.com/api/mcp, header `Authorization: Bearer sk-spicy-...`. Claude Code: `claude mcp add --transport http spicyapi https://www.spicyapi.com/api/mcp --header "Authorization: Bearer sk-spicy-..."`. Cursor, Codex and any URL-plus-headers client: same URL and header. OAuth 2.1 clients (Claude custom connectors, ChatGPT, directory scanners) need only the URL: the endpoint advertises its authorization server, the user signs in and consents in the browser, and the token it returns is an API key they can revoke in the dashboard. - Tools: list_models, estimate_cost, get_account, list_images, list_characters, create_character, delete_character, generate_image, edit_image, generate_video, edit_video, list_motions, list_actions, list_image_actions, list_styles, upload_audio, list_audio, delete_audio, generate_speech, transcribe_audio, create_embeddings, list_voices, create_voice, delete_voice, get_job, list_jobs, get_usage, create_api_key, revoke_api_key, get_topup_link, set_spend_limit, read_acceptable_use. Spending tools are guarded: without `approval_token` they return `{error: "approval_required", summary, approval_token}`; show the summary, get a yes, call again with the token. The account can turn approvals off at https://www.spicyapi.com/dashboard/api-keys. - REST mirror: `POST https://www.spicyapi.com/api/v1/tools/{tool_name}` with the same header and a JSON body of arguments; `GET https://www.spicyapi.com/api/v1/tools` lists them with schemas. Also reachable as https://api.spicyapi.com/v1/tools/{tool_name}. - OpenAPI 3.1 for everything (OpenAI-compatible endpoints plus the tools): https://www.spicyapi.com/openapi.json - Skills (SKILL.md files with the whole workflow): https://www.spicyapi.com/skills/index.json - Rate limit on the agent surfaces (MCP and the REST tool mirror): 60 requests per minute per key. The API itself starts each account at 600 per minute and raises it automatically for accounts that keep reaching it (up to 6,000), or on request. ## Pages - Home: https://www.spicyapi.com - Pricing: https://www.spicyapi.com/pricing - Docs: https://www.spicyapi.com/docs, API reference https://www.spicyapi.com/docs/api - Connect an agent (MCP, OAuth, approvals, sandbox, skills): https://www.spicyapi.com/docs/mcp - Guide, custom sex actions (pick an action, pass your image, optional scene prompt): https://www.spicyapi.com/docs/pov-video - OpenAI SDK with a base URL swap: https://www.spicyapi.com/openai-compatible-nsfw-api - Chat apps (tested setup guides for the companion models): SillyTavern https://www.spicyapi.com/docs/integrations/sillytavern, JanitorAI https://www.spicyapi.com/docs/integrations/janitorai, KoboldAI Lite https://www.spicyapi.com/docs/integrations/koboldai-lite, RisuAI https://www.spicyapi.com/docs/integrations/risuai, Agnai https://www.spicyapi.com/docs/integrations/agnai, Chatbox https://www.spicyapi.com/docs/integrations/chatbox, TypingMind https://www.spicyapi.com/docs/integrations/typingmind, Open WebUI https://www.spicyapi.com/docs/integrations/open-webui; any other OpenAI-compatible app: https://www.spicyapi.com/docs/integrations - Fit guides (one page per business type with the verdict, models, architecture, cost per user, limits and compliance): AI girlfriend and companion apps https://www.spicyapi.com/docs/guides/ai-girlfriend-app, Role-play chat sites https://www.spicyapi.com/docs/guides/roleplay-chat-site, NSFW image generation sites https://www.spicyapi.com/docs/guides/nsfw-image-site, Character video platforms https://www.spicyapi.com/docs/guides/character-video-platform, Telegram and Discord companion bots https://www.spicyapi.com/docs/guides/telegram-companion-bot, AI influencer and AI model agencies https://www.spicyapi.com/docs/guides/ai-influencer-agency; all: https://www.spicyapi.com/docs/guides - Examples: https://www.spicyapi.com/examples; proof of consistency and the image tools (one character in ten scenes and a video, reference, upscale and inpaint before and after, non-explicit): https://www.spicyapi.com/examples#evidence - Status (live checks every 5 minutes): https://www.spicyapi.com/status - Legal: https://www.spicyapi.com/acceptable-use, https://www.spicyapi.com/terms-of-service, https://www.spicyapi.com/privacy-policy, https://www.spicyapi.com/dmca, https://www.spicyapi.com/data-protection (terms version 2026.10.06) Every page above is also available as markdown: append `.md` to the path or send `Accept: text/markdown`. ## API reference (markdown) - [List Models](https://www.spicyapi.com/docs/api/list-models.md): `GET /v1/models`, List every model available to your account. - [Get Account](https://www.spicyapi.com/docs/api/get-account.md): `GET /v1/account`, Read your balance and account status. - [Create Image](https://www.spicyapi.com/docs/api/create-image.md): `POST /v1/images/generations`, Generate images from a text prompt. - [Edit Image](https://www.spicyapi.com/docs/api/edit-image.md): `POST /v1/images/edits`, Edit an image you generated earlier, guided by a prompt. One to six outputs per call. - [List Images](https://www.spicyapi.com/docs/api/list-images.md): `GET /v1/images`, List the images your account has generated. - [List Styles](https://www.spicyapi.com/docs/api/list-styles.md): `GET /v1/styles`, The art styles for `style` on image and video generation. No key needed. - [Check a Prompt](https://www.spicyapi.com/docs/api/moderations.md): `POST /v1/moderations`, Run a prompt or conversation through the same screen the generation endpoints use, without generating. - [Erase an End User](https://www.spicyapi.com/docs/api/erase-end-user.md): `DELETE /v1/end-users/{user}`, Erase what was generated for one of your users, for their privacy requests. - [Report a Wrong Decline](https://www.spicyapi.com/docs/api/moderation-appeals.md): `POST /v1/moderations/appeals`, Tell us a declined request should have been allowed. - [Create Character](https://www.spicyapi.com/docs/api/create-character.md): `POST /v1/characters`, Save a reusable identity from your own generated images, to get the same person again across images, edits and video. - [Import Character](https://www.spicyapi.com/docs/api/import-character.md): `POST /v1/characters/import`, Bring an existing AI-generated character over from your own platform. Only for verified businesses with an open import window. - [List Characters](https://www.spicyapi.com/docs/api/list-characters.md): `GET /v1/characters`, Your saved characters, newest first. - [Delete Character](https://www.spicyapi.com/docs/api/delete-character.md): `DELETE /v1/characters/{id}`, Remove a saved character. Its reference sheet stays in your image library. - [Add Character View](https://www.spicyapi.com/docs/api/add-character-view.md): `POST /v1/characters/{id}/views`, Add one of your own images of this person from another angle (from behind, a pose, a close-up), so the body stays the same in every shot. - [Delete Character View](https://www.spicyapi.com/docs/api/delete-character-view.md): `DELETE /v1/characters/{id}/views/{view_id}`, Remove a body view from a character. The image stays in your library. - [Create Speech](https://www.spicyapi.com/docs/api/create-speech.md): `POST /v1/audio/speech`, Turn text into speech. Returns a durable audio URL you can pass straight to video generation as `audio_url`, or streams the audio as it is synthesized. - [Create Transcription](https://www.spicyapi.com/docs/api/create-transcription.md): `POST /v1/audio/transcriptions`, Turn speech into text: voice notes, clips and call recordings. - [Create Voice](https://www.spicyapi.com/docs/api/create-voice.md): `POST /v1/voices`, Clone a voice from one of your clips with the speaker's consent (voice design is paused). Custom voices are spoken by `spicy-voice-1-custom`. - [List Voices](https://www.spicyapi.com/docs/api/list-voices.md): `GET /v1/voices`, Every preset voice with the models that speak it, then your designed and cloned voices, newest first. - [Delete Voice](https://www.spicyapi.com/docs/api/delete-voice.md): `DELETE /v1/voices/{id}`, Delete one of your designed or cloned voices. - [Upload Audio](https://www.spicyapi.com/docs/api/upload-audio.md): `POST /v1/audio`, Upload a short audio clip for lip-sync and audio-guided video. The clip is transcribed and screened before it can be used. - [List Audio](https://www.spicyapi.com/docs/api/list-audio.md): `GET /v1/audio`, Your audio clips, uploaded and generated, newest first. - [Delete Audio](https://www.spicyapi.com/docs/api/delete-audio.md): `DELETE /v1/audio/{id}`, Forget a clip so it can no longer be used as a video input. - [Create Video](https://www.spicyapi.com/docs/api/create-video.md): `POST /v1/videos/generations`, Start a video generation. Returns a task to poll. - [Get Video Task](https://www.spicyapi.com/docs/api/get-video-task.md): `GET /v1/videos/tasks/{id}`, Check a video task and collect the finished clip. - [Edit Video](https://www.spicyapi.com/docs/api/create-video-edit.md): `POST /v1/videos/edits`, Edit a clip you generated from a prompt (outfit, style, lighting, props), or transfer a clip's motion onto the person in one of your images. Returns a task to poll. - [List Motions](https://www.spicyapi.com/docs/api/list-motions.md): `GET /v1/videos/motions`, The curated motion clips for motion transfer on `spicy-animate-1`. No key needed. - [List Actions](https://www.spicyapi.com/docs/api/list-actions.md): `GET /v1/videos/actions`, The ready-made sex acts for `action` on `spicy-motion-3` and `spicy-motion-3-fast`. No key needed. - [List Image Actions](https://www.spicyapi.com/docs/api/list-image-actions.md): `GET /v1/images/actions`, The ready-made explicit stills for `action` on `spicy-image-action-1`. No key needed. - [Create Chat Completion](https://www.spicyapi.com/docs/api/chat-completions.md): `POST /v1/chat/completions`, OpenAI-compatible uncensored chat and role-play, with streaming. - [Create Embeddings](https://www.spicyapi.com/docs/api/create-embeddings.md): `POST /v1/embeddings`, Turn text, or images from your own library, into vectors for memory, search, recommendations and near-duplicate detection. OpenAI-compatible. - [Create Live Call Session](https://www.spicyapi.com/docs/api/create-realtime-session.md): `POST /v1/realtime/sessions`, Start a live voice call with a companion: returns a one-time WebSocket URL your client (a browser too) connects to, without ever seeing your API key. - [Live Call WebSocket](https://www.spicyapi.com/docs/api/realtime-websocket.md): `GET /v1/realtime`, The call itself: a WebSocket (wss://) opened with the session ticket. Send microphone audio, receive the persona's voice and transcripts as JSON events. ## Optional - Everything in one file: https://www.spicyapi.com/llms-full.txt - OpenAPI: https://www.spicyapi.com/openapi.json - Sitemap: https://www.spicyapi.com/sitemap.xml