A discount on premium plans when you sign up Get your discount

blog/guides·Aug 28, 2026·5 min·by the eroq team

The uncensored alternative to the OpenAI API — same shape, no wall

Your OpenAI integration works until the content fails the filter. eroq keeps the request shape and swaps the policy — uncensored chat, images and voice.


Every character or story product hits the same commit eventually: the OpenAI integration works beautifully, the product grows, and then the refusals start — mid-scene, unpredictably, on exactly the fiction your users signed up for (the horror campaign, the heist gone wrong, the villain with real menace). The filter isn't a bug; it's OpenAI's policy working as intended. It's just not your policy.

The fix doesn't require a rewrite. It requires an API that kept the shape and changed the rules.

Three strings

eroq follows the OpenAI request convention on every surface that has one — chat/completions, images/generations, audio/speech. Migrating an existing integration is, almost always, literally this:

- baseURL: "https://api.openai.com/v1"
+ baseURL: "https://eroq.ai/v1"
- apiKey: process.env.OPENAI_API_KEY
+ apiKey: process.env.EROQ_API_KEY
- model: "gpt-4o-mini"
+ model: "eroq-rp-mini"

Messages array, streaming SSE chunks, usage block, error envelope — the shapes your code already handles. The docs even serve every page as raw markdown for your copilot, and the quickstart is genuinely five minutes.

What actually changes

The policy becomes yours to rely on. Dark, violent and provocative fiction renders in character — horror, crime, war, satire — and the boundary is a four-paragraph written policy (fiction only; nothing involving minors, no real identifiable people without consent, nothing illegal), enforced at the account level rather than by a filter deciding mid-scene. You can quote our policy inside your own terms; try quoting a filter's mood.

The pricing becomes flat. OpenAI bills tokens; character products have the industry's heaviest chatters. On eroq a completion is 1 or 3 credits regardless of length, images are 10, and failed generations refund themselves. Your scariest power user becomes a multiplication, not a variance.

The models are specialists. RP+ and RP mini aren't general assistants with the guardrails off — they're roleplay-tuned: persona hold at depth, repetition damping at high sampling temperatures, a context field for character sheets, a texting mode for DM products.

The stack goes past chat. Image generation with uncensored models, async video with Motion One as the uncensored engine, voice both ways — and the eroq Store: object storage and a CDN built into generation, under the same written policy as the models.

Privacy becomes a switch. Send private: true on the image and video endpoints (or turn on Private mode in the Studio) and eroq keeps no file and no library entry, and the usage ledger shows stars where the prompt would be. eroq's own models retain nothing upstream; the third-party video engines and Flash Image / Flux Image may log prompts at their provider. Outside Private mode, prompts are kept in the ledger for billing and abuse handling — and your creations stay private until you publish them.

What honestly doesn't change

General-purpose intelligence isn't the trade: keep OpenAI (or any mainstream API) for your summaries, embeddings and tool-calling — many customers run both, routed by task. eroq takes the seat where the filter was the problem, not every seat.

The migration checklist

  1. Key in hand — 50 free credits, no card.
  2. Swap the three strings behind a feature flag; run your worst-refused prompts first — that's the test that matters.
  3. Wire 402 handling to your top-up flow (flat prepaid credits, so "out of budget" is a product event, not an invoice surprise).
  4. Move persona/system blocks into the context field when you're ready — cleaner transcripts, same behavior.

FAQ

Can I use the OpenAI SDK with eroq?

For the surfaces that have an OpenAI convention, yes — point the client at https://eroq.ai/v1 with your eroq key. chat/completions takes the same messages array and streams the same SSE chunk shape, images/generations and audio/speech follow suit, and the usage block and error envelope are the ones your code already handles.

Which eroq model replaces a general chat model?

RP mini at 1 credit a completion for volume, RP+ at 3 for the turns that carry a scene. Both are roleplay specialists rather than general assistants — they hold a persona at depth and answer in a chosen register, and they will not write your unit tests.

Does eroq support embeddings, tool calling or function calls?

No. There are no embeddings and no tool-calling surface — eroq covers chat, images, video, speech, transcription, storage and the studio resources around them. This is a seat-swap, not a replacement: keep a mainstream API for retrieval, agents and structured tool use, and route the content work here.

What happens when a request breaks policy?

On the image and video endpoints it returns an explicit content_blocked error, uncharged, which you can branch on like any other code. In chat, RP+ and RP mini are eroq's own engines with no filter layered on top, so dark scenes render rather than stall. Either way the limits are written down and absolute (fiction only; nothing involving minors, no real identifiable people without consent, nothing illegal), enforced at the account level, and quotable in your own terms of service.

Do I need separate keys for chat, images and video?

No. One key reaches every modality and spends from one workspace balance, so there is no per-service provisioning step and no second invoice to reconcile. Keys carry the role of the member who created them, which is how a workspace keeps a production key and a teammate's scratch key on different ceilings.

How do rate limits work?

Per minute, and multiplied from the Creator plan upward rather than replaced by a separate quota — Hobby raises your credits and clip length but leaves the per-minute ceiling alone. Over the line you get a 429 with rate_limit_exceeded and a Retry-After header saying how many seconds to wait, so a client can back off on the header instead of guessing. The rate-limit reference has the current numbers.

The whole point is that step 2 takes an afternoon, and the refusal alerts in your error tracker go quiet the same day.

Tagsalternativesapiuncensored

Make this with the models behind the post — start with 50 free credits , or browse every engine and its price .