EN ▾

OpenAI-compatible uncensored API

Uncensored LLM API Documentation

Drop-in uncensored LLM API with OpenAI-compatible endpoints. Start sending requests in minutes with our prepaid token system.

Claim trial key

Authentication and Base URL

Use your API key with the base URL HTTPS://api.grokapinsfw.com/v1. Every request requires the Authorization header.

curl https://api.grokapinsfw.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Send a message now"}]
  }'

Create keys via Google or email on the dashboard. One key per account, no phone verification needed.

First Chat Completion Request

Send POST requests to /v1/chat/completions. The model ID is "uncensored".

from openai import OpenAI

client = OpenAI(base_url="https://api.grokapinsfw.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)

Text in, text out. No embeddings or vision support. Context window is 100,000 tokens total.

Node.js Integration

Configure your Node client with the same base URL and key.

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.grokapinsfw.com/v1", apiKey: process.env.API_KEY });

const resp = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);

Streaming returns SSE events. Use standard OpenAI SDKs without changes.

Streaming Responses

Enable streaming via SSE. Token counts appear in the final chunk.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Tell the story in second person."}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Useful for real-time UIs. Each token is billed accurately.

Function Calling and JSON Mode

Supports tool definitions and JSON strict mode. Set response_format to json_object.

from openai import OpenAI

client = OpenAI(base_url="https://api.grokapinsfw.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)

Temperature and top_p adjust creativity. Stop sequences work as expected.

Rate Limits and Errors

300 requests per minute, 8 concurrent per key. Max body size 8 MB.

401 means invalid key. 402 indicates no credit. 429 signals rate limit exceeded.

Common questions

Is this the official grok API NSFW service?

No. We are an independent provider running our own uncensored model. We use the OpenAI-compatible format.

How does billing work?

Prepaid credit only. Pay with crypto. Errors are free. No monthly fees.

What is the context window?

100,000 tokens combined. Max output is 16,000 tokens per request.

Get your API key

Register, copy your key, and update the base URL. That is all required.