Seedance API — no API key, pay per call
Access Seedance 2.0 and Seedance 2.0 Fast text-to-video without an account or API key. Your code pays in USDC on Base via HTTP 402 — exact price quoted before every charge.
Endpoint pricing
Live quotes always at api.x402-video.com. The 402 response quotes the exact USDC amount before you pay — never a surprise charge.
| Endpoint | Output | Price |
|---|---|---|
POST /generate/seedance-fast/5s-720p |
5s 720p MP4 | ~$0.45 / call |
POST /generate/seedance/5s-720p |
5s 720p MP4 (highest quality) | ~$0.56 / call |
POST /generate/seedance-fast/custom |
4–15s, 480p/720p, optional audio | $0.13–$1.49 |
POST /generate/seedance/custom |
4–15s, up to 1080p, optional audio | $0.27–$4.62 |
Custom body fields: prompt, duration (4–15 s), resolution ("480p"|"720p"|"1080p"), ratio, seed, generate_audio, camera_fixed. Rejected requests (403/429/503) are never charged.
Try it with curl — see the raw 402 flow
No client library needed to understand the protocol. Run this command and observe the 402 payment challenge before any charge occurs.
Step 1 — POST your prompt (no payment yet)
curl -i -X POST https://api.x402-video.com/generate/seedance-fast/5s-720p \
-H 'Content-Type: application/json' \
-d '{"prompt":"a corgi surfing a wave at sunset"}'
Response — HTTP 402 Payment Required
HTTP/1.1 402 Payment Required
content-type: application/json
{
"x402Version": 1,
"accepts": [{
"scheme": "exact",
"network": "base",
"asset": "USDC",
"maxAmountRequired": "450000",
"payTo": "0x7f3a…c21e",
"description": "Seedance 2.0 Fast · 5s 720p MP4"
}]
}
The gateway quoted the exact USDC amount before any payment occurred. An x402 client (like @x402/fetch) signs the EIP-3009 authorization and retries automatically. Gasless for you — the facilitator submits the transaction on-chain.
TypeScript / Node.js — @x402/fetch
Install once, then every call auto-handles the 402 → sign → retry loop. No HTTP boilerplate required.
npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme, toClientEvmSigner } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.BUYER_PRIVATE_KEY as `0x${string}`);
const signer = toClientEvmSigner(account);
const client = new x402Client().register("eip155:*", new ExactEvmScheme(signer));
const fetchPay = wrapFetchWithPayment(fetch, client);
// 402 → sign USDC payment → retry all happens automatically:
const res = await fetchPay("https://api.x402-video.com/generate/seedance-fast/5s-720p", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ prompt: "a corgi surfing a wave at sunset" }),
});
const { job_id } = await res.json();
// Poll until done (free endpoint):
let video;
while (true) {
const status = await fetch(`https://api.x402-video.com/jobs/${job_id}`).then(r => r.json());
if (status.status === "succeeded") { video = status.video_url; break; }
if (status.status === "failed" || status.status === "cancelled") throw new Error(status.status);
await new Promise(r => setTimeout(r, 5000)); // poll every 5s
}
// Download video_url within 24h — link expires after that
FAQ
What is x402 and why does it replace an API key?
x402 is an open protocol that uses the HTTP 402 status code to quote and settle payments inline with each request. Instead of registering for an API key and pre-paying a subscription, your code holds a small wallet of USDC on Base and pays the exact quoted amount per call. No account, no billing page, no rate-limit tiers — just per-request USDC settlement.
What do I need to get started?
Node 20+ (for @x402/fetch) and roughly $1 of USDC on the Base network. Generate a wallet keypair locally (see the getting-started guide), fund it with USDC from Coinbase/Binance/OKX on the Base network, and you're ready. You do not need ETH — payments are gasless for the buyer.
How fast does Seedance generation take?
Generation is asynchronous and typically completes in 1–3 minutes. Your first call returns a job_id; poll GET /jobs/:id (free, no auth) until status is succeeded, then download video_url. The link expires ~24h after delivery, so store the file promptly.
What if generation fails — am I charged?
Prompts are screened before payment — rejected requests (403) are never charged. Rate-limit (429) and capacity (503) responses also happen pre-payment. If on-chain settlement fails, the job is cancelled and you are not charged. If the upstream model fails after successful payment, contact us with your job_id — every outcome is in an audit log.
Which network and token is used?
USDC on Base (eip155:8453). The 402 quote always specifies the exact asset, amount, and recipient — you can verify before signing. Payments are EIP-3009 authorizations signed locally; only the signature travels over the network.
Resources
- x402-video.com — main landing page
- Getting Started Guide — zero to first video in 5 minutes
- api.x402-video.com/llms.txt — machine-readable catalog (for AI agents)
- api.x402-video.com/openapi.json — OpenAPI spec with x-payment-info pricing
- docs.x402.org — x402 protocol documentation
- Pricing calculator — interactive live quotes for custom parameters