AI API Quickstart

Drop-in uncensored AI API compatible with the OpenAI interface: change your base_url and key, keep your code.

https://api.aiapisource.com/v1uncensored

Authentication

Use your API key in the Authorization header. The key is generated immediately after signup and can be regenerated at any time; regenerating revokes the previous key. Prepaid credit never expires, and keys do not expire independently of your credit balance.

Send requests to the dedicated endpoint:

https://api.aiapisource.com/v1

Authentication is handled via standard bearer token format.

Chat Completions Endpoint

Post to POST /v1/chat/completions with a JSON body containing the model set to uncensored and your messages. The model returns text in response to text input.

  • Context window: 100,000 tokens (prompt + completion).
  • Request body limit: 8 MB.
  • No embeddings, images, or fine-tuning endpoints are available.

Example request:

curl https://api.aiapisource.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Write a blunt product review of a cheap VPN."}]
  }'

Streaming Responses

Add "stream": true to your request to receive Server-Sent Events (SSE). The stream delivers chunks as the model generates text. The stream ends when the model completes the response or encounters an error; the fact sheet does not specify behavior for context limit mid-stream beyond the hard 100,000 token window.

Handle SSE events in your client to accumulate or process partial responses.

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)

Function Calling

The API supports tool/function calling. Define functions in the tools parameter. The model may return a tool_calls array in the response. You must execute the functions on your side and send the results back in a subsequent message.

This is standard OpenAI-compatible behavior. No abstraction layers are required.

from openai import OpenAI

client = OpenAI(base_url="https://api.aiapisource.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)

Model Information

The model ID is uncensored. It is an open-weight model run on our own GPU servers, tuned to answer without content refusals for lawful adult use. It is NOT GPT, Claude, Gemini, Grok, DeepSeek, or any other vendor's model.

Check GET /v1/models for available models. Only one model is offered.

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.aiapisource.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);

Rate Limits and Errors

Limit: 300 requests per minute per key. Hard content limit: no sexual content involving minors.

Common errors:

  • 401: Invalid or missing API key. Regenerate if needed.
  • 402: Insufficient prepaid credit. Top up from $10.
  • 429: Rate limit exceeded (300 req/min).

Prompts are not used for training. No SLA or certifications are claimed.

Under the hood: specs

Use this table to decide whether the API fits your project before you buy credit.

ParameterDetails
ProtocolOpenAI Chat Completions schema; official openai SDKs work unchanged
API keyAuthorization: Bearer YOUR_KEY
Model IDuncensored
Base URLhttps://api.aiapisource.com/v1
MethodsPOST /v1/chat/completions · GET /v1/models
StreamingYes — server-sent events; the last chunk carries token usage
Tools / tool callsYes — tools, tool_choice; replies carry tool_calls, also when streaming; send results back as role: tool
Max output16,000 tokens max; 2,048 if max_tokens is not set
Max context100,000 tokens, input and output combined
Other parameterstemperature, top_p, stop, seed and the two penalties are passed through
Structured outputJSON object mode via response_format json_object
Rate limit300/min per key
Parallel requestsup to 8 in parallel per key
Request sizeup to 8 MB per request
Response headersX-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency
How you paypay as you go from prepaid credit; nothing is charged for failed or refused requests
PaymentUSDT (TRC20) or USDC (Base), any whole amount from $10 to $500
Volume bonus+5% from $50, +10% from $100
Trial credit$0.50 of credit valid 7 days, no card needed
Credit expirypaid credit never expires, no subscription
Token pricesinput $0.25 / 1M tokens, output $1.00 / 1M tokens
Accountsign in with Google or with e-mail + password
Key managementone active key per account; a new key replaces the old one
Contentadult content allowed; sexual content involving minors is refused

Error reference

The type field is stable, the message is for humans. Errors cost nothing.

HTTPTypeWhat to do
400bad_requestinvalid JSON, empty messages, bad parameter, or prompt + max_tokens over the window — fix and resend
401missing_key · invalid_key · key_revokedcheck the Authorization header or use your current key
402no_creditbalance is empty — top up, requests resume at once
403content_blockedrefused by the content policy
404not_foundonly /v1/chat/completions and /v1/models exist
413request_too_largebody over 8 MB
429rate_limited · concurrencyslow down: rate or parallel limit reached
503upstream_busytemporary overload, retry shortly

Questions and answers

Does the API key expire?

No, API keys do not expire independently. Prepaid credit also never expires. You can regenerate your key at any time, which immediately revokes the old one.

Is token usage returned in the response?

The fact sheet does not confirm that token usage statistics are provided in the response object. It only specifies the context window size of 100,000 tokens.

When does a stream end?

The stream ends when the model completes the response or hits an error. The fact sheet does not specify that the stream ends specifically when the context limit is reached.

Your key is one form away

Create an account, copy the key, change the base URL. That is the whole setup.

Get API key