loopling.ai

Documentation

Seedance API

Generate Seedance video through one asynchronous REST API.

Make a request

Send a prompt with your key. The call answers 202 at once with a queued generation. This example creates a Seedance video.

curl

curl https://loopling.ai/v1/video/generations \
  -H "Authorization: Bearer $LOOPLING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.5",
    "prompt": "A paper lantern drifting over a night harbour, slow dolly in",
    "aspect_ratio": "16:9",
    "resolution": "1080p",
    "duration": 5
  }'

Node

const res = await fetch('https://loopling.ai/v1/video/generations', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.LOOPLING_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'seedance-2.5',
    prompt: 'A paper lantern drifting over a night harbour, slow dolly in',
    aspect_ratio: '16:9',
    resolution: '1080p',
    duration: 5,
  }),
})
const generation = await res.json() // { id: 'vgen_…', status: 'queued', ink_reserved, … }

Python

import os, requests

res = requests.post(
    "https://loopling.ai/v1/video/generations",
    headers={"Authorization": f"Bearer {os.environ['LOOPLING_API_KEY']}"},
    json={
        "model": "seedance-2.5",
        "prompt": "A paper lantern drifting over a night harbour, slow dolly in",
        "aspect_ratio": "16:9",
        "resolution": "1080p",
        "duration": 5,
    },
)
generation = res.json()  # {"id": "vgen_…", "status": "queued", "ink_reserved": …}
{
  "id": "vgen_01J9X6K3M8Q2",
  "object": "video.generation",
  "status": "queued",
  "model": "seedance-2.5",
  "created_at": "2026-10-04T08:12:44Z",
  "ink_reserved": 245,
  "usd_payg_reserved": 2.45,
  "request": {
    "model": "seedance-2.5",
    "prompt": "A paper lantern drifting over a night harbour, slow dolly in",
    "aspect_ratio": "16:9",
    "resolution": "1080p",
    "duration": 5,
    "generate_audio": true
  }
}

Lifecycle

Every generation takes three calls.

StepCallReturns
SubmitPOST /v1/video/generations202 with status: "queued"
PollGET /v1/video/generations/{id}The generation, until status is succeeded or failed
DownloadGET /v1/video/generations/{id}/content302 to the MP4

Status moves from queued to running, then to succeeded or failed. Submit holds credit; delivery settles it. See Billing.

Conventions

  • Base URL https://loopling.ai/v1. HTTPS only.
  • JSON bodies with Content-Type: application/json, up to 64 KiB.
  • Every response carries X-Request-Id. Errors repeat it as error.request_id; quote it to support.
  • IDs are opaque strings. Generation IDs start with vgen_.
  • Timestamps are ISO 8601 in UTC. Fields are snake_case.
  • An unknown /v1 path answers JSON 404 not_found.

Next steps

  • Quickstart — Make your first clip: create a key, submit, poll, download.
  • Authentication — Authenticate each request with an API key in the Authorization header.
  • Create a video generation — Submit a prompt to start a video generation and hold its cost.
  • Errors — Branch on one error shape and know which codes to retry.

Explore models

loopling.ai · hello@loopling.ai · for agents · community · pricing · API · terms · privacy