Short answer: shortlist endpoints by task and by the content label the live catalogue gives each one, then test your own briefs a few times each and count usable results, not finished tasks. An endpoint labelled "softened" returns a successful, billed task with a toned-down image, so a green status proves nothing. And SpicyAPI does not scan requests or results, so the checks that keep your product within the law and your own rules are yours to build. Labels and prices below are from early October 2026; the live uncensored image generation API catalogue is the source of truth.
What the content labels mean for an integration
Each image endpoint in the catalogue carries one of four labels. Of the 59 image endpoints live in the catalogue, 40 are labelled uncensored, 3 softened, 12 filtered and 4 carry no label (background removal, upscaling and similar utilities).
| Label | What the API does with a brief beyond the model's limits | What you must handle |
|---|---|---|
| Uncensored | The model declares no content filter and SpicyAPI forwards the request without adding a scan. | Your own checks before and after the call. |
| Softened | The task succeeds and is billed, but the image comes back toned down. | Review the output; the status code will not tell you. |
| Filtered | The model refuses. The task ends failed with errorCode: "content_rejected". | Show a neutral message and do not retry unchanged. A refusal is normally not charged; a few model pages say they charge it, so read the page. |
| No label | Not measured. | Do not assume either way. |
The label belongs to an endpoint, not a family: Wan 2.7 Pro text-to-image is softened while its edit endpoint is uncensored, so a benchmark that mixes the two compares two different promises. It is also informational only: it tells you what to expect, not what is guaranteed.
Because there is no platform scan, the unconditional rules in the content and usage policy become your product's job: nothing sexualised involving a minor, no intimate depiction of an identifiable real person without documented consent (face-swap included), no impersonation. Put age checks, consent records for any real-person input, and a way for users to report content in front of the call. The longer version is in building on a less restrictive model.
Shortlist by the job, then by label and price
Write one sentence for your first workflow, for example "edit a licensed fashion image, changing only the backdrop". It tells you which task you need; tasks are separate catalogue entries with separate fields. Prices are the lowest "from" price on each page; resolution, references and options change the final amount.
| Endpoint | Tasks | Label | From | Page says it is for |
|---|---|---|---|---|
| Qwen Image 3.0 | text-to-image, edit | Uncensored | $0.03 | Editing one to three reference images, including retyping text already in the frame |
| Seedream 5.0 Pro | text-to-image, edit | Uncensored | $0.036 | Assembling a frame from up to ten reference images with a role named for each |
| Z-Image Spicy | text-to-image | Uncensored | $0.0124 | Text-to-image at exact pixel dimensions, prompt expansion off unless you switch it on |
| Prefect Pony XL | text-to-image | Uncensored | $0.015 | Anime and illustration stills from tag-style prompts |
| Wan 2.7 Pro | text-to-image, edit | Softened (text-to-image) | $0.075 | One large-canvas image, 2k by default, up to 4k; filtering differs by endpoint |
| Krea 2 Medium | text-to-image | Softened | $0.03 | One image from a long prompt in five common ratios, PNG by default; no seed to re-steer a miss |
| Nano Banana 2 | text-to-image, edit | Filtered | $0.036 | Editing with up to fourteen reference images, 0.5K to 4K |
This is a shortlist, not a ranking. For a product that needs unfiltered output, start from the uncensored rows that match your task. A softened row works only when your briefs sit well inside its limits; a filtered row suits the safe-for-work half of a mixed product. Prefect Pony XL expects comma-separated tags and seven fixed sizes, so feed it tag-style prompts rather than sentence briefs written for a photoreal model.
Each model page links a test report, for example Z-Image Spicy and Seedream 5.0 Pro, with real outputs at every content level and a median time (about 18 s for Z-Image Spicy, about 70 s for Seedream 5.0 Pro). Read them first, then measure the wait from creating a task to a downloadable result from your own servers.
Test your own briefs, not a polite stand-in
Write the briefs at the intensity your product will actually offer, with fictional adult characters or inputs you are authorised to use. A safe-for-work stand-in set can pass a softened endpoint, because softening only shows up when a brief goes beyond the model's limits. Keep the briefs in a private test repository, not in tickets or public documents. Run each fixture three times: enough to expose instability, cheap enough to repeat after a change.
| ID | Fixture | What it tells you |
|---|---|---|
| 01 | Your most common brief, at its normal intensity | The baseline useful-result rate |
| 02 | The same brief at the highest intensity you will allow | Whether the endpoint refuses, softens or delivers at the top of your range |
| 03 | Three harmless paraphrases of fixture 01 | Whether a wording change flips the outcome |
| 04 | An authorised source image with one named edit (backdrop, wardrobe colour, lighting) | Whether the edit lands and the protected parts survive |
| 05 | The same edit with two reference images, each given a named role | Whether extra references help or blur the result, and what they add to the price |
| 06 | The frame shape you will publish (for example 9:16) | Whether composition holds at your real size |
| 07 | A brief your own app must stop | That your preflight blocks it and no task is created |
| 08 | A request cut off right after submission | That your client recovers the existing task instead of paying twice |
Agree a written pass rule before the run: subject and composition match the brief, protected regions of an edit are unchanged, intensity is not tamer than asked, and no anatomy or lettering flaw a customer would notice. Record two numbers per candidate: useful-result rate (outputs that pass, divided by tasks that finished) and cost per useful result (total spend divided by the same count), which makes a cheap-but-softened endpoint comparable with a dearer-but-reliable one. For a fuller scoring rubric, use the image API benchmark guide.
Try a fixture in the Playground first
- Open a shortlisted endpoint's page, for example Z-Image Spicy text-to-image, and log in with a funded account. The form is on the page.
- Paste fixture 01 into Prompt and set the frame size (Width and Height here; other endpoints use an aspect-ratio or size field).
- Read the price under the form, press Run, and repeat the run twice more to see the spread.
- Run fixtures 02 and 03 the same way, then judge each result against your pass rule before you write any code.

Film frames passing through a projector to form one finished image.
Then script the same test
Once a fixture behaves in the Playground, run it from a file. A quote is free: it validates the exact body you would send, creates nothing and holds no funds.
spicyapi tasks quote --model alibaba/z-image-spicy/text-to-image --input-file fixture-01.jsonCreate the task from the same file with tasks create; retries, polling and results are in the Tasks docs and the CLI docs.
Or let an Agent run it. With the MCP server an assistant quotes through spicyapi_task_quote, and npx skills add spicyapi-ai/spicy-skill installs the Agent Skill that has it read the live schema before each call.
Five facts change how you build the test harness:
- A quote is the cheapest test. Run every fixture through it before the first paid run, and re-check each endpoint's label in CI, because labels can change.
- Each endpoint accepts only its own field names; unknown fields are rejected. Output size alone is spelled three ways: Z-Image takes
aspect_ratio, Prefect Pony XL a singlesize, Z-Image Spicywidthandheight. Build one adapter per endpoint from its live schema, not one shared request. - Reference images can raise the price. Each one beyond the first adds to a Seedream 5.0 Pro quote, so quote the exact body with the real number of reference images.
succeededdoes not mean usable. It only means the model returned something; review each result against your pass rule, which is where softened images are caught. Refusals are normally not charged.- A create that times out may still exist. Re-send it with the same Idempotency-Key instead of paying twice; that is fixture 08.
Download links and generated files expire, so copy approved images to your own storage with the task reference beside them (media retention post). For polling versus webhooks, see the polling versus webhooks guide.
Making the choice
Drop endpoints that do not publish the task your first workflow needs. Drop those that fail fixtures 07 and 08. Compare the rest on useful-result rate and cost per useful result across the same briefs. Prefer the uncensored endpoint with the best rate for your intensity range; keep a softened or filtered endpoint only where its limits suit the brief, and say so in your product copy rather than promising "anything". A fallback must pass the same fixtures.
FAQ
Is an uncensored endpoint automatically the better choice for my API?
No. It means no declared filter, not that it follows your brief or costs less per usable image.
How do I know a softened endpoint toned my image down?
Compare fixture 02 against fixture 01: a softened endpoint keeps the subject but drops the intensity you asked for. Nothing in the task response flags it.
Does a refusal cost anything?
Normally not: failed tasks release the full hold. A few model pages say certain refusals are charged, so check the task's cost before assuming it was free.
Can I test with real customer photos?
Not at first. Use authorised or synthetic inputs. Any real-person input needs documented consent for the specific edit and distribution, and anything involving a minor is never allowed.
Does a finished task mean I can show the image to users?
No. A finished task only means the model returned something. Check it against your pass rule, which is also where a softened result gets caught, and copy approved images to your own storage before you deliver them.
How often should I re-run the checks?
Before launch, and after any model, label, price or schema change.












