API Documentation for Uncensored Video Tools
Get started with the uncensored video API in minutes. This guide covers authentication, request formats, streaming, and pricing for building text-driven video pipelines.
Base URL and Authentication
The API uses the standard OpenAI-compatible base URL. Send requests to https://api.uncensoredvideo.top/v1. Authentication relies on a single API key generated during signup. Include it in the Authorization header as a Bearer token. New accounts receive an immediate key via Google login or email registration. No phone number is required. The key remains active until manually replaced; prepaid credit does not expire.
First Request
Send a POST request to /v1/chat/completions with the model ID uncensored. The model accepts text input and returns text output. It does not generate images or video directly. Use this endpoint to draft prompts, extract metadata, or write scripts for your video pipeline.
curl https://api.uncensoredvideo.top/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."}]
}'This request sends a simple prompt to the model. The response contains the generated text, which you can then pass to your video generation tool. The model is tuned to avoid refusals for lawful adult content, ensuring your creative workflow remains uninterrupted.
Python SDK Integration
Use the official OpenAI Python SDK. Set the base_url and api_key to match the uncensored video API endpoints. This allows you to use familiar methods like client.chat.completions.create. The SDK handles JSON serialization automatically. Configure parameters like temperature and top_p to control creativity. The model ID is always uncensored. You can stream responses or request JSON mode for structured data extraction.
from openai import OpenAI
client = OpenAI(base_url="https://api.uncensoredvideo.top/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)This code snippet demonstrates a standard completion call. It works with any OpenAI-compatible client. Adjust the max_tokens parameter to control output length. The default max output is 2,048 tokens unless specified otherwise.
Node.js SDK Usage
Install the OpenAI Node.js package. Initialize the client with the base URL https://api.uncensoredvideo.top/v1 and your API key. Use the same chat.completions endpoint as in Python. The Node SDK supports async/await patterns for clean integration. You can send multiple messages in a conversation history to maintain context. The model supports function calling, allowing you to define tools for metadata extraction.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.uncensoredvideo.top/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);This example shows how to make a request. The response object contains the generated content. You can parse the output for use in your video production workflow. Ensure you handle errors appropriately, as network issues or invalid keys may occur.
Streaming Responses
Enable streaming by setting stream: true in your request. The API returns a Server-Sent Events (SSE) stream. Each chunk contains partial text. The final chunk includes usage statistics, such as token counts. Streaming reduces perceived latency for long scripts or detailed metadata. It allows your application to display progress in real time. This is ideal for interactive tools or live transcription services.
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)This stream processes chunks as they arrive. The usage data in the last chunk helps you track costs accurately. Errors during streaming may interrupt the flow, so implement retry logic if needed. The model supports up to 100,000 tokens in the context window.
Limits, Errors, and Context
The context window is 100,000 tokens total. Max output per request is 32,000 tokens. You can make 300 requests per minute and 8 concurrent requests per key. Request bodies must be under 8 MB. Errors include 401 for invalid keys and 429 for rate limits. 402 indicates insufficient credit. Prepaid credit is charged only for real token usage. Errors and refusals are free. Credit never expires. No card is needed for the $0.50 trial. Claim this credit with one click on your API key page. Top up with USDT or USDC.
Capabilities and limits
Everything the endpoint can and cannot do, in one place — check it before you top up.
| Spec | Value |
|---|---|
| Compatibility | OpenAI-compatible: any OpenAI SDK or client works — change the base URL and the key |
| Model ID | uncensored |
| Base URL | https://api.uncensoredvideo.top/v1 |
| API key | Bearer token in the Authorization header |
| Methods | POST /v1/chat/completions · GET /v1/models |
| Max output | up to the rest of the 100,000-token window; max_tokens optional (no separate cap) |
| Other parameters | temperature, top_p, stop, seed, presence_penalty, frequency_penalty |
| JSON mode | response_format: {"type": "json_object"} |
| Context window | 100,000 tokens, input and output combined |
| SSE streaming | Supported (stream: true), usage included at the end |
| Tools / tool calls | Supported: tools + tool_choice, tool_calls in the reply (streamed too), tool results as role: tool messages |
| Parallel requests | up to 8 in parallel per key |
| Request size | 8 MB request body |
| Rate limit | 300/min per key |
| Headers | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| Top-up | crypto: USDT on TRON or USDC on Base, $20–$500, any whole sum |
| Free trial | $0.50 of credit valid 7 days, no card needed · Trial key: 2 parallel requests, 60 req/min; full limits (8 and 300) after first top-up |
| Credit expiry | paid credit never expires, no subscription |
| Volume bonus | +5% on $50+, +10% on $100+, +15% on $200+ |
| Token prices | input $0.15 / 1M tokens, output $0.50 / 1M tokens |
| How you pay | prepaid credit, charged by real token usage; errors and refusals are free |
| Account | sign in with Google or with e-mail + password |
| Content | adult content allowed; sexual content involving minors is refused |
| Key management | one key per account, regenerate any time (the old one stops working) |
Error codes
Every error is JSON with a type you can switch on. You are never charged for an error.
| Status | Type | Reason |
|---|---|---|
400 | bad_request | malformed request or too long for the context window |
401 | missing_key · invalid_key · key_revoked | no key, wrong key, or a key replaced by a newer one |
402 | no_credit | out of credit; add credit and retry |
403 | content_blocked | refused by the content policy |
404 | not_found | unknown endpoint |
413 | request_too_large | request body larger than 8 MB |
429 | rate_limited · concurrency | slow down: rate or parallel limit reached |
503 | upstream_busy | model busy — retry in a few seconds |
Questions and answers
What is the context window size?
The context window is 100,000 tokens, including both prompt and completion. The maximum output per request is 32,000 tokens. If max_tokens is not set, the limit is 2,048 tokens.
How do I handle rate limits?
You are limited to 300 requests per minute and 8 concurrent requests per key. If you exceed these limits, the API returns a 429 status code. Implement exponential backoff in your client to handle retries gracefully.
What happens if I run out of credit?
Requests fail when credit is insufficient. The API returns a 402 status code. Prepaid credit is charged only for actual token usage. Errors and refusals do not consume credit. Credit never expires, so you can top up whenever needed.
Your key is one form away
Create an account, copy the key, change the base URL. That is the whole setup.