🚀 One API for every frontier model on FastInfra

Browse models

Transparent per-token pricing → compare providers on FastInfra

View pricing

OpenAI-compatible chat completions → start in minutes

Read the docs

⚡ Server Auction → Enterprise bare metal from $78.15/mo (173 in stock)

Browse deals

Seedance 2.0 API

Run ByteDance/Seedance-2.0 through FastInfra's API. Pay per token. Video is billed as 1,000 output tokens per second of generated video.

Pricing

Seedance 2.0 pricing

Billed per token. 1,000 output tokens = 1 second of video ($0.00/s at this list price).

Direction Price per 1M tokens
Input—
Output—
Per second of video$0.00 (1,000 output tokens)
Availability

2 routes available

Requests route to route-21 by default (lowest cost). FastInfra fails over automatically if a route is unavailable.

Route label Model ID
route-21 ByteDance/Seedance-2.0
route-03 ByteDance/Seedance-2.0
Quickstart

Call Seedance 2.0 in 30 seconds

Same FastInfra API key and base URL. POST /videos/generations (HTTP 202), then poll GET /videos/jobs/{id} — not chat completions.

Python

import base64, json, time, urllib.request

headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
req = urllib.request.Request(
    "https://api.fastinfra.ai/v1/videos/generations",
    data=json.dumps({
        "model": "ByteDance/Seedance-2.0",
        "prompt": "A woman looks at the camera and says, welcome to FastInfra.",
        "seconds": 5,
        "size": "1280x704"
    }).encode(),
    headers=headers,
    method="POST",
)
with urllib.request.urlopen(req, timeout=60) as resp:
    job = json.load(resp)

while True:
    time.sleep(2)
    poll = urllib.request.Request(
        f"https://api.fastinfra.ai/v1/videos/jobs/{job['id']}",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
    )
    with urllib.request.urlopen(poll, timeout=60) as resp:
        payload = json.load(resp)
    if payload["status"] == "completed":
        break
    if payload["status"] == "failed":
        raise SystemExit(payload.get("error") or "video job failed")

open("clip.mp4", "wb").write(base64.b64decode(payload["data"][0]["b64_json"]))

curl

curl https://api.fastinfra.ai/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ByteDance/Seedance-2.0",
    "prompt": "A woman looks at the camera and says, welcome to FastInfra.",
    "seconds": 5,
    "size": "1280x704"
  }'
# HTTP 202 — copy "id", then poll:
curl https://api.fastinfra.ai/v1/videos/jobs/JOB_ID \
  -H "Authorization: Bearer YOUR_API_KEY"
FAQ

Seedance 2.0 — common questions

How much does the ByteDance/Seedance-2.0 API cost?

On FastInfra, ByteDance/Seedance-2.0 costs $0/1M input, $0/1M output tokens ($0 per second of video). Billing is per token used, with no subscription.

Is ByteDance/Seedance-2.0 compatible with the OpenAI SDK?

Video models use the same FastInfra API key and base URL (https://api.fastinfra.ai/v1). POST https://api.fastinfra.ai/v1/videos/generations returns HTTP 202 with a job id; poll GET https://api.fastinfra.ai/v1/videos/jobs/{id} until status is completed.

How does routing work for ByteDance/Seedance-2.0?

ByteDance/Seedance-2.0 is available on 2 route(s): route-21, route-03. Requests use route-21 by default (lowest cost). FastInfra fails over automatically if a route is unavailable.