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.
| Parameter | Details |
|---|---|
| Protocol | OpenAI Chat Completions schema; official openai SDKs work unchanged |
| API key | Authorization: Bearer YOUR_KEY |
| Model ID | uncensored |
| Base URL | https://api.aiapisource.com/v1 |
| Methods | POST /v1/chat/completions · GET /v1/models |
| Streaming | Yes — server-sent events; the last chunk carries token usage |
| Tools / tool calls | Yes — tools, tool_choice; replies carry tool_calls, also when streaming; send results back as role: tool |
| Max output | 16,000 tokens max; 2,048 if max_tokens is not set |
| Max context | 100,000 tokens, input and output combined |
| Other parameters | temperature, top_p, stop, seed and the two penalties are passed through |
| Structured output | JSON object mode via response_format json_object |
| Rate limit | 300/min per key |
| Parallel requests | up to 8 in parallel per key |
| Request size | up to 8 MB per request |
| Response headers | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| How you pay | pay as you go from prepaid credit; nothing is charged for failed or refused requests |
| Payment | USDT (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 expiry | paid credit never expires, no subscription |
| Token prices | input $0.25 / 1M tokens, output $1.00 / 1M tokens |
| Account | sign in with Google or with e-mail + password |
| Key management | one active key per account; a new key replaces the old one |
| Content | adult content allowed; sexual content involving minors is refused |
Error reference
The type field is stable, the message is for humans. Errors cost nothing.
| HTTP | Type | What to do |
|---|---|---|
400 | bad_request | invalid JSON, empty messages, bad parameter, or prompt + max_tokens over the window — fix and resend |
401 | missing_key · invalid_key · key_revoked | check the Authorization header or use your current key |
402 | no_credit | balance is empty — top up, requests resume at once |
403 | content_blocked | refused by the content policy |
404 | not_found | only /v1/chat/completions and /v1/models exist |
413 | request_too_large | body over 8 MB |
429 | rate_limited · concurrency | slow down: rate or parallel limit reached |
503 | upstream_busy | temporary 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.