Skip to content
Cuddler Platform
Apply

API reference

Every endpoint and object of the Cuddler Platform API v1.

Base URL: https://api.cuddler.ai/v1 · Auth: Authorization: Bearer cud_sk_live_… · Format: JSON, snake_case

The live, machine-readable definition is the OpenAPI document at https://api.cuddler.ai/v1/openapi.json; a compact summary for coding assistants is at https://api.cuddler.ai/v1/llms.txt. If this page and the OpenAPI document ever disagree, the OpenAPI document wins.

Endpoints

MethodPathTest keysReturns
GET/v1/modelsYesA list of model objects
GET/v1/models/{id}YesA model object
POST/v1/videos/estimateYesAn estimate object
POST/v1/videosNo202 and a video object
GET/v1/videosNoA list of video objects
GET/v1/videos/{id}NoA video object
POST/v1/videos/{id}/cancelNoA video object
POST/v1/uploadsNoAn upload object, with upload_url
POST/v1/uploads/{id}/completeNoAn upload object
GET/v1/uploads/{id}NoAn upload object
GET/v1/balanceYesA balance object
GET/v1/usageYesA usage object

Every response carries X-Request-Id. Errors use the error envelope.

Models

GET /v1/models

Lists the models, their capabilities and prices, with enabled saying whether your organization may use each one. Returns { "object": "list", "data": [model, …] }.

GET /v1/models/{id}

id is seedance-2.5, seedance-2.0 or seedance-2.0-mini (coming soon: listed with enabled: false until it launches). Returns a model object, or 404 not_found.

Videos

POST /v1/videos/estimate

Prices a planned job. Nothing is created or charged.

Body fieldTypeNotes
modelstringRequired.
durationintegerRequired. 4–30, within the model's range.
resolutionstringDefault 720p.
aspect_ratiostringDefault 16:9.
input_video_secondsnumberDefault 0, up to 300. Seconds of reference video the job will include.

POST /v1/videos

Creates a video job. Header Idempotency-Key is required. The body fields are listed in Models and parameters. Answers 202 with the video (status is queued, already running when a slot was free, or already failed if it could not be submitted — the model refused it, or the submission was not confirmed: error.code says which; nothing is charged), or 200 with the original video and Idempotent-Replayed: true when the same key and body were already used.

GET /v1/videos

Lists your organization's videos, newest first.

QueryNotes
statusOptional: queued, running, succeeded, failed or canceled.
limit1–100, default 20.
cursornext_cursor from the previous page.

Returns { "object": "list", "data": [video, …], "next_cursor": string | null }.

GET /v1/videos/{id}

Returns the video. A fresh output.url is signed on every call.

POST /v1/videos/{id}/cancel

Cancels a queued video and releases its hold. Returns the video with status: "canceled", or 409 not_cancelable if it is no longer queued.

Uploads

POST /v1/uploads

Header Idempotency-Key is required.

Body fieldTypeNotes
kindstringimage, video or audio.
content_typestringA supported type for the kind (Uploads).
bytesintegerThe exact file size.
filenamestringOptional, up to 200 characters.

Returns the upload with upload_url and upload_headers: PUT the file there before expires_at.

POST /v1/uploads/{id}/complete

Checks and prepares the uploaded file. Returns the upload with status ready or rejected.

GET /v1/uploads/{id}

Returns the upload.

Account

GET /v1/balance

Returns the balance object.

GET /v1/usage

QueryNotes
fromRequired. UTC date, YYYY-MM-DD, inclusive.
toRequired. UTC date, inclusive; at most 366 days after from.

Returns the usage object.

Objects

Video

FieldTypeNotes
object"video"
idstringvid_…
statusstringqueued, running, succeeded, failed or canceled
modelstring
promptstring
durationintegerRequested seconds
resolutionstring
aspect_ratiostring
generate_audioboolean
created_atstringISO 8601
started_atstring or nullWhen rendering started
completed_atstring or nullWhen the job reached a final state
queue_positioninteger or nullJobs ahead in your queue (queued only)
estimateobjecttokens, usd, hold_usd
usageobject or nulltokens, usd, usd_micros (succeeded only)
outputobject or nullurl, url_expires_at, retained_until, width, height, duration, has_audio, last_frame_url
errorobject or nullcode, message (failed only)
metadataobjectYour string pairs
price_versionstringThe price list the job is billed at
api_key_idstringThe key that created the job

Estimate

FieldTypeNotes
object"estimate"
model, resolution, aspect_ratio, duration, input_video_secondsEcho of the request
tokensintegerEstimated tokens
usdstringEstimated charge
usd_microsintegerThe same, in millionths of a dollar
hold_usdstringWhat a job would hold from the balance
usd_per_secondstring16:9 display figure
price_versionstring

Upload

FieldTypeNotes
object"upload"
idstringupl_…
kindstringimage, video or audio
statusstringpending, ready, rejected or expired
content_typestring
bytesinteger
upload_urlstringOnly right after create
upload_headersobjectOnly right after create
expires_atstringUpload deadline while pending; deletion time once ready
rejection_reasonstringOnly when rejected
created_atstring

Model

FieldTypeNotes
object"model"
id, display_namestring
min_duration, max_durationintegerSeconds
resolutions, aspect_ratiosarray of strings
max_reference_images, max_reference_videos, max_reference_audios, max_referencesinteger
audio_only_referencebooleanWhether an audio reference may be used on its own
native_audiotrue
enabledbooleanFor your organization
pricingarrayPer resolution: usd_per_million_tokens, usd_per_million_tokens_with_video_input, usd_per_second
price_versionstring

Balance

FieldTypeNotes
object"balance"
currency"usd"
total_usd, held_usd, available_usdstringSee Pricing and billing
daily_limit_usd, spent_today_usdstringUTC day
expires_atstring or null12 months after the latest top-up

Usage

FieldTypeNotes
object"usage"
from, tostringThe requested range
totalbucketusd, tokens, seconds, videos_succeeded, videos_failed
by_dayarrayBuckets with date
by_modelarrayBuckets with model and resolution
by_keyarrayBuckets with api_key_id and api_key_name

Event

FieldTypeNotes
object"event"
idstringevt_…, for de-duplication
typestringvideo.succeeded, video.failed, video.canceled, balance.low or balance.depleted
created_atstring
dataobjectA video object or a balance object

Error

FieldTypeNotes
codestringSee the error codes
messagestring
detailsanyOptional
request_idstringMatches X-Request-Id