- Base URL
- https://api.seedanceapis.com/v1
- Model
- uncensored
Seedance API: Prompts and scripts over one endpoint
Get started with the Seedance API in minutes. Use our OpenAI-compatible endpoint to generate uncensored scripts and captions for your creative pipeline.
Prerequisites: Install the SDK
Before sending your first request, ensure you have the official OpenAI SDK for your preferred language installed. This API uses the standard chat/completions protocol, so any OpenAI-compatible client works. For Python, install the package via pip. For Node.js, use npm. You only need the client library; no extra dependencies are required for basic text generation or tool calling.
Authentication: Setting Your API Key
Authentication is handled via a simple Bearer token. Create an account on the Get API key page to receive your unique key. No credit card is required for the trial. Store this key in an environment variable or your application's config file. The key grants access to the uncensored model and is tied to your prepaid credit balance. Regenerate the key anytime from your dashboard if needed.
Sending a Chat Completion Request
Make a POST request to the base URL. The model field must be set to uncensored. Include your system prompt to define the role, and user messages for the content generation. This endpoint handles scriptwriting, captioning, and post-processing text tasks efficiently.
curl https://api.seedanceapis.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 for Real-Time Output
For long scripts or real-time captioning, enable streaming by setting stream: true. The API returns a Server-Sent Events (SSE) stream of partial completions. This allows your application to display text as it is generated, improving perceived latency. Handle the stream chunks in your SDK to update the UI incrementally.
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)
Using Tool Calling for Structured Data
The API supports function calling to extract structured data from text or generate JSON output. Define your tool schemas in the request. The model will respond with structured arguments that your code can execute. This is ideal for post-processing steps where you need specific fields from generated scripts or metadata.
from openai import OpenAI
client = OpenAI(base_url="https://api.seedanceapis.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)
Understanding Limits and Quotas
Watch for standard HTTP status codes. A 401 error means your API key is invalid or expired. A 402 error indicates insufficient prepaid credit; top up to continue. A 429 error signals rate limiting, capped at 300 requests per minute per key. The context window is 100,000 tokens total. Requests exceeding 8 MB will be rejected.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.seedanceapis.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);Specs at a glance
The numbers below are the real limits of this API, not marketing. Compare them with what your app needs.
| Parameter | Details |
|---|---|
| Protocol | OpenAI-compatible: any OpenAI SDK or client works — change the base URL and the key |
| Model | uncensored |
| Methods | POST /v1/chat/completions · GET /v1/models |
| API key | Authorization: Bearer YOUR_KEY |
| Base URL | https://api.seedanceapis.com/v1 |
| Completion length | 16,000 tokens max; 2,048 if max_tokens is not set |
| Function calling | Supported: tools + tool_choice, tool_calls in the reply (streamed too), tool results as role: tool messages |
| Streaming | Supported (stream: true), usage included at the end |
| Sampling parameters | temperature, top_p, stop, seed, presence_penalty, frequency_penalty |
| JSON mode | JSON object mode via response_format json_object |
| Max context | 100,000 tokens, input and output combined |
| Requests per minute | 300/min per key |
| Concurrency | 8 requests at the same time per key |
| Response headers | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| Max body | 8 MB request body |
| Price | $0.25 per 1M input tokens · $1.00 per 1M output tokens |
| Trial credit | $0.50 of credit valid 7 days, no card needed |
| Credit expiry | paid credit never expires, no subscription |
| Billing | prepaid credit, charged by real token usage; errors and refusals are free |
| Volume bonus | +5% from $50, +10% from $100 |
| Payment | crypto: USDT on TRON or USDC on Base, $10–$500, any whole sum |
| Account | sign in with Google or with e-mail + password |
| Key management | one key per account, regenerate any time (the old one stops working) |
| Content | adult content allowed; sexual content involving minors is refused |
Error codes
Every error is JSON with a type you can switch on. You are never charged for an error.
| Code | Type | Meaning |
|---|---|---|
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 | 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 | body over 8 MB |
429 | rate_limited · concurrency | over 300/min or 8 parallel — back off and retry |
503 | upstream_busy | temporary overload, retry shortly |
Questions and answers
Does the Seedance API generate images or video?
No. This is a text-completion API. It provides the uncensored LLM layer for scripts, captions, and post-processing. You must use separate tools for image or video generation.
What is the uncensored model's context window?
The model supports a 100,000 token context window, including both the input prompt and the generated output. This allows for extensive scriptwriting or document analysis in a single request.
How do I check my credit balance?
You can view your remaining prepaid credit in your account dashboard. If you receive a 402 error, your balance is too low for the request. Top-ups start at $10.
Your key is one form away
Create an account, copy the key, change the base URL. That is the whole setup.