For developers
An NSFW image API that renders the prompt your code sent
An NSFW image API, an uncensored image generation API, accepts adult prompts from your own software and returns the render without rewriting the wording first, which matters because a rewritten prompt fails silently: the call succeeds, the response looks normal, and the picture is not the one you asked for. Vellria exposes its whole catalog behind one REST shape with Bearer keys, asynchronous jobs you poll, and prepaid credits that refund automatically when a run fails.
23 image models, from 2 credits per image (100 credits = $1.00). New accounts created with Google get 20 credits as a gift, valid for 7 days. Is there a free option?
Why integrations break on the moderation layer
Most image APIs sit behind a rewriting step you cannot see. Your text is edited into something the provider considers safer, the edited version renders, and the response carries no field telling you the substitution happened. From inside your application everything reports success, which is the worst possible failure mode: nothing to catch, nothing to retry, and a queue of outputs that quietly do not match their inputs.
The second failure is the refusal that arrives as an error at an unpredictable rate. A prompt that worked yesterday returns a policy error today, because the moderation model changed underneath you rather than because your request did. Retrying does not help, the error is not deterministic, and code written against it accumulates special cases for a boundary nobody published.
Neither of those is a rate limit or an outage, so neither shows up in the places you would normally look. They show up as a slow loss of confidence in your own pipeline, and the usual response is a defensive layer of prompt-mangling heuristics that makes the output worse for a problem that was never yours.
See what the models make
Real outputs from the models on this page, each shown with the exact prompt that produced it. Copy a prompt, or open the model and run it yourself.

Qwen 3 Pro UncensoredText to image
Natural light portrait of a freckled woman in her thirties with auburn curls and green eyes, wearing an oversized knit sweater, sitting by a rainy cafe window, gentle smile, soft bokeh, photorealistic

Bria FIBO 1.5 UncensoredText to image
Flat vector illustration of a woman in her thirties doing yoga on a rooftop garden at sunrise, limited warm palette, clean geometric shapes, editorial magazine style, no text

Qwen 3 Pro UncensoredText to image
Cinematic interior of a 1960s jazz club, a sultry singer in her thirties in a sequined emerald gown at a vintage microphone, smoky haze, a single spotlight, band silhouettes behind her, warm tungsten film look

Bria FIBO 1.5 UncensoredText to image
Evening-wear fashion shot of a Black woman in her thirties in a backless gold sequin gown, looking over her shoulder on a grand marble staircase, warm chandelier light

Seedream 5 Flash UncensoredText to image
Mechanical wristwatch with a deep blue dial floating above rippling water, splash frozen in motion, high-speed studio product photography, no text, no logo

Bria FIBO 1.5 UncensoredText to image
Skincare serum bottle in frosted amber glass with a dropper, placed on a wet river stone among green leaves, soft natural light, commercial product photography, no text, no logo

Image
Qwen 3 Pro Uncensored
The Pro tier for the image you mean to keep; edit with up to 3 reference images.
10 credits
Image
Bria FIBO 1.5 Uncensored
4MP images in seven shapes, one price for all; edit with up to 4 references at no extra cost.
10 credits
The models for this, side by side
| Model | Sample | Price | Max size | Reference images |
|---|---|---|---|---|
| Seedream 5 Pro Uncensored | ![]() | 10 credits | 1536×1536 | Up to 10 |
| Qwen 3 Uncensored | ![]() | 8 credits | 2048×2048 | Up to 3 |
| Qwen 3 Pro Uncensored | ![]() | 10 credits | 1440×1440 | Up to 3 |
| Qwen Image Edit 2511 Uncensored | ![]() | 6 credits | 1280×960 | Up to 3 |
| Qwen Image 2.1 Uncensored | ![]() | from 7 credits | 1184×896 | Up to 10 |
| Seedream 5 Lite Uncensored | ![]() | 8 credits | 4704×2016 | Up to 10 |
| Seedream 4.5 Uncensored | ![]() | 9 credits | 2848×1600 | Up to 10 |
| Seedream 4 Uncensored | ![]() | 7 credits | 2816×1584 | Up to 10 |
| Wan 2.7 Uncensored | ![]() | 8 credits | 2K | Up to 9 |
| Bria FIBO 2.0 Uncensored | ![]() | 10 credits | 2048×2048 | Up to 4 |
| Bria FIBO 1.5 Uncensored | ![]() | 10 credits | 2048×2048 | Up to 4 |
| MiniMax H3 Image Uncensored | ![]() | 8 credits | 1184×896 | Up to 9 |
| Seedream 5 Flash Uncensored | ![]() | 8 credits | 2816×1584 | Up to 10 |
| Z-Image Turbo Uncensored | ![]() | 2 credits | 2048×2048 | None |
| Anima Uncensored | ![]() | 5 credits | 1024×1024 | Up to 1 |
| Vellria Anime Pro Spicy Uncensored | ![]() | 10 credits | 1536×1536 | Up to 10 |
| Pruna P-Image Uncensored | ![]() | 4 credits | 1024×1024 | Up to 5 |
| Flux 2 Klein 9B Uncensored | ![]() | 5 credits | 1024×1024 | Up to 3 |
| Moss Image Uncensored | ![]() | 5 credits | 1024×1024 | None |
| Jib Mix Qwen Image Uncensored | ![]() | 5 credits | 1024×1024 | None |
| Z-Image Spicy Uncensored | ![]() | 4 credits | 1152×1536 | None |
| Z-Image Spicy Pro Uncensored | ![]() | 5 credits | 1680×2520 | None |
| Qwen Image Edit Spicy Uncensored | ![]() | 10 credits | 1K | Up to 3 |
Prices and limits come from the live model catalog.
The request shape
Keys are minted in the console and travel as a Bearer token. One endpoint opens a job: name the model, hand it the prompt, add whatever that model takes. What comes back is an identifier, not a picture — the socket closes immediately, because a thirty-second render held inside an HTTP request is a timeout waiting to happen and every integration that tried it learned the same lesson.
From there you ask about the job rather than wait on it. A plain GET against that identifier answers with where the work stands: still queued, mid-render, done, or failed. Your process can die and restart between those calls without losing anything, since the job belongs to the server and not to the connection that opened it.
One habit is worth forming early: ask the catalog endpoint what exists instead of writing model identifiers into a constants file. That endpoint is what the site itself renders from and what the ledger bills against, so it moves the instant anything changes. A hard-coded list does not move, and you find out weeks later through a rejected call naming a dimension that was retired. Each model's own page reads from that endpoint as well and shows the id to send with the sizes and costs it accepts: the Seedream API, Qwen image API and MiniMax H3 image API pages are three of them.
Reference images and rate limits
Every image model in the catalog reads both ways: a prompt alone generates from scratch, and adding one or more reference images switches that same model id to editing instead. There is no separate editing-only id to look up and no text-only id that declines an attachment by mistake.
References travel through their own endpoint first. Send the file, keep the address it hands back, and name that address when you open the job. Anyone holding the address can fetch it without a session, and that is deliberate: the machine doing the rendering lives outside your account and still has to read the bytes.
Throttling is counted per account, and the rejection tells you the number of seconds to hold off. That figure exists so your retry logic can read it, which is a different design goal from a log line a human squints at after the fact.
Billing that a failed job does not punish
The ledger moves at the start of a job rather than at its end, since that is the moment the work gets commissioned. What follows from that is the part automated callers should care about: a job that dies inside the provider hands its credits straight back when it lands in the failed state. Nothing to file, nobody to email.
Nothing about pay-as-you-go credits renews on their own — an optional monthly plan is the one exception, and you choose it. A service that fires twenty calls one week and none the next pays for twenty calls if it sticks to prepaid credits, because there is no floor underneath them. Every package buys credits at the same rate, and a package buys balance and nothing else — no key is faster, no key reaches models another key cannot.
Compared with general API marketplaces
If you are weighing the fal.ai API, the Replicate API or ModelsLab for adult image work, the comparison that matters is not a feature grid but what each one does by default, as its own documents put it on 12 September 2026. fal's published schema for its FLUX.1 [dev] endpoint sets enable_safety_checker to true; switching it off needs authorization on the account, a request without that authorization is always checked, and a flagged image comes back black. ModelsLab's text-to-image reference likewise defaults safety_checker to true and swaps a flagged picture for a blank one, while its terms of service, dated 24 June 2023, hold only a general clause against illegal or harmful use and nothing written about adult content as such.
The policy documents diverge further than the parameters do. Novita's Acceptable Use Policy, in force since 5 August 2026, lists sexually explicit output among prohibited uses and describes no opt-in for adult work. Replicate's terms, last updated 1 April 2026, rule out non-consensual nudity and illegal sexual material, and section 8.6 states outright that the services can generate graphic adult content, with responsibility for it resting on the customer. Read those clauses before writing integration code, since they decide what that platform permits. Venice AI's image API, with its own safety default, is read against ours in the Venice AI alternative.
Billing is shaped differently as well. ModelsLab sells monthly plans that vary by call volume and concurrency rather than by which models you may use; fal's model page advertises no subscription or minimum commitment and prices that image model per megapixel; Novita is pay as you go and charges per image on the image models we read. Vellria sits nearest the last two: a prepaid balance, a per-image credit price listed on each model's page, and nothing that renews unless you choose one of its two optional monthly plans.
What Vellria lacks, stated as plainly. There is no SDK, so an adult image API call here is plain HTTPS with a JSON body from whatever language you write. The image and video endpoints are not OpenAI-compatible, so an OpenAI client will not drive them by swapping the base URL; the one OpenAI-compatible endpoint is chat, for the Uncensored Chat model. There are no outbound webhooks; you learn how a job ended by polling. If one of those is a requirement, Vellria is the wrong fit for that part of your stack; and if the requirement is weights you run yourself, open-source NSFW models or a hosted API sets out what that route costs.
The boundary, stated once
Nothing rewrites the prompt, and the space that opens up is genuinely wide — fictional adult work included. Some things stay shut regardless of key, balance or endpoint: identifiable real people who never agreed to appear, and the categories the terms rule out even in fiction, such as bestiality, incest, non-consent and extreme gore. Cross that line and the account goes, keys with it.
The automatic checks do not look for ordinary real people. The prompt check refuses a prompt it recognizes as sexualising a minor and keeps no list of famous names, so a well-known person is not caught either. Reference images are not screened for content: no picture is refused for who or what it shows, and there is no image_blocked refusal on this path. So the rule on ordinary real people is one to enforce inside your own product; the API will not detect it for you. The page on what an NSFW AI image generator allows carries the policy in full, and the API reference has the request bodies, status codes and error shapes. For clips rather than stills, the NSFW video API takes the same keys and the same polling.
FAQ ( 6 )






















