Seedance 3.0 개발자 API / v1

Seedance 2.5를
내 제품 안으로.

하나의 API로 텍스트, 이미지, 참조 자료를 동영상으로 만드세요. Seedance 3.0 크레딧과 기존 작업 흐름을 그대로 사용하면서, 요청 제출부터 결과 수신까지 일관된 규격으로 연동할 수 있습니다.

계정 크레딧 공유비동기 동영상 작업멱등성 요청
POST /api/v1/videos
{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat drifting into the morning light",
  "duration": 5,
  "resolution": "720p",
  "aspectRatio": "16:9"
}
내 키, 내 크레딧, 내 애플리케이션.
01 / 연동 시작하기

몇 번의 요청으로 첫 동영상을 만드세요.

서버 환경 변수 SEADANCE_API_KEY에 키를 저장하세요. 이번 동영상에 사용할 고유한 SEADANCE_REQUEST_KEY를 설정하고(예: uuidgen으로 생성), 재시도할 때도 이 값을 유지하세요. 계정에 충분한 크레딧이 있는지 확인하세요. 이 예제는 5초 720p 동영상에 350 크레딧을 선차감합니다. 반환된 id를 저장해 작업 상태를 조회하세요.

터미널
export SEADANCE_API_KEY="sd_live_your_key"
# Keep this value for retries; choose a new value for a new video.
export SEADANCE_REQUEST_KEY="${SEADANCE_REQUEST_KEY:-$(uuidgen)}"

curl --fail-with-body "https://seedance3ai.dev/api/v1/videos" \
  -H "Authorization: Bearer $SEADANCE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SEADANCE_REQUEST_KEY" \
  --data '{
  "model": "seedance-2.5",
  "mode": "text-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5
}'

이 문서는 자동으로 생성을 실행하지 않습니다. 생성 요청을 보내면 계정의 크레딧이 사용됩니다.

서버에서 인증하세요.

모든 API 호출에는 Authorization: Bearer sd_live_…가 필요합니다. 키를 브라우저, 모바일 앱, 공개 저장소 또는 클라이언트 코드에 포함하지 마세요. 전체 키는 한 번만 표시되며, API 대시보드에서 폐기할 수 있습니다.

기본 URLhttps://seedance3ai.dev/api/v1

기본 키 권한은 업로드 및 생성용 videos:write, 모델 및 작업 상태 조회용 videos:read, 크레딧 조회용 account:read입니다. 계정의 접근 설정과 한도는 모든 키에 적용됩니다.

동영상 생성 작업을 만드세요.

POST/api/v1/videos

Content-Type: application/json을 사용하고 생성할 동영상마다 고유한 Idempotency-Key를 지정하세요. 서버가 상위 제공업체의 작업을 접수하는 데 시간이 걸릴 수 있습니다. 연결이 시간 초과되면 동일한 본문과 키로 다시 시도하세요. HTTP 202는 접수되었다는 뜻이며 완료되었다는 뜻이 아닙니다. Idempotency-Key는 공백 없는 출력 가능한 ASCII 문자 1~128자를 허용합니다.

매개변수값 및 요구 사항
modelstringseedance-2.5

필수입니다. 현재 API는 Seedance 2.5를 지원합니다.

modestringtext-to-video | image-to-video | reference-to-video

필수입니다. 입력 방식을 선택하세요. 미디어 필드는 선택한 모드와 일치해야 합니다.

promptstring3~30,000자

필수입니다. 장면, 움직임, 오디오를 설명하세요.

durationinteger4, 5, 6, 8, 10, 12, 15, 20, 25, 29, 30

필수이며 단위는 초입니다. 편집은 원본 동영상 길이를 사용하며, 요금 계산 시 초 단위로 올림합니다.

resolutionstring480p | 720p | 1080p

필수입니다. 해상도에 따라 크레딧 단가가 결정됩니다.

aspectRatiostring1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 21:9

필수입니다. 이미지로 동영상을 만들 때는 첫 프레임의 비율을 사용합니다.

firstFrameUrl / lastFrameUrlstring업로드한 자료의 publicObjectUrl

이미지로 동영상을 만들려면 첫 프레임이 필요합니다. 마지막 프레임은 선택 사항입니다.

referenceImageUrlsstring[]이미지 최대 30개

reference-to-video에 사용합니다. 모든 파일을 먼저 본인 계정에 업로드하세요.

referenceVideoUrls / referenceAudioUrlsstring[]동영상 최대 10개 / 오디오 최대 10개

동영상과 오디오는 각각 총 30초 이하여야 합니다. 생성 전에 서버에서 자료를 검증합니다.

referenceTaskTypestringreference | edit | extend

선택 사항이며 기본값은 reference입니다. edit와 extend는 reference-to-video를 사용하고 원본 동영상을 정확히 하나 제공해야 합니다.

generateAudiobooleantrue

선택 사항입니다. Seedance 2.5에는 기본 오디오 생성이 포함되며 false는 허용되지 않습니다.

batchCountinteger1

선택 사항입니다. 요청당 동영상 하나를 생성합니다.

이 필드들을 통해 Seedance 2.5의 텍스트 입력, 시작·끝 프레임, 멀티모달 참조, 동영상 편집 및 연장 기능을 사용할 수 있습니다. 현재 사용 가능한 기능과 요금은 GET /models 응답을 기준으로 확인하세요.

이미지로 동영상 생성 요청 예제
request.json
{
  "model": "seedance-2.5",
  "mode": "image-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "firstFrameUrl": "YOUR_UPLOADED_PUBLIC_OBJECT_URL"
}
참조 자료로 동영상 생성 요청 예제
request.json
{
  "model": "seedance-2.5",
  "mode": "reference-to-video",
  "prompt": "A paper boat floating through a sunlit stream, gentle camera movement",
  "aspectRatio": "16:9",
  "resolution": "720p",
  "duration": 5,
  "referenceImageUrls": [
    "YOUR_UPLOADED_IMAGE_URL"
  ],
  "referenceVideoUrls": [
    "YOUR_UPLOADED_VIDEO_URL"
  ]
}
참조 자료 사용하기

한 번 업로드하고 URL로 참조하세요.

POST /uploads에 fileName, contentType, size(바이트), kind(image, video 또는 audio)를 제출하세요. expiresAt 전에 requiredHeaders를 사용해 원본 파일 바이트를 uploadUrl로 PUT 업로드합니다. 업로드가 성공하면 생성 요청에 publicObjectUrl을 사용하세요. 자료는 동일한 계정에 속해야 하며, 임의의 외부 URL과 base64 입력은 허용되지 않습니다.

upload.mjs
// Node.js 20+ · upload once, then use publicObjectUrl
import { readFile } from "node:fs/promises";

const bytes = await readFile("./first-frame.jpg");
const signed = await fetch("https://seedance3ai.dev/api/v1/uploads", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SEADANCE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    fileName: "first-frame.jpg", contentType: "image/jpeg",
    size: bytes.length, kind: "image",
  }),
});
const upload = await signed.json();
if (!signed.ok) throw new Error(JSON.stringify(upload));
const stored = await fetch(upload.uploadUrl, {
  method: "PUT", headers: upload.requiredHeaders, body: bytes,
});
if (!stored.ok) throw new Error("Upload failed");
console.log(upload.publicObjectUrl);
// Use this URL as firstFrameUrl in an image-to-video request.

신고한 파일 크기와 콘텐츠 유형은 실제 업로드 파일과 일치해야 합니다. 업로드 URL이 만료되면 새로 요청하세요. 생성 전에 자료의 길이, 크기, 형식을 검증합니다.

완료될 때까지 작업을 확인하세요.

GET /videos/:id는 현재 작업 상태를 반환합니다. 5~10초마다 조회하고 succeeded 또는 failed가 되면 중지하세요. Retry-After가 있으면 안내된 시간만큼 기다리세요. 본인 계정에서 API로 만든 작업만 조회할 수 있습니다. 현재 연동 방식은 폴링입니다.

GET /api/v1/videos/:id
curl --fail-with-body "https://seedance3ai.dev/api/v1/videos/TASK_ID" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"
queuedprocessingsucceeded / failed
성공한 작업 예제
{
  "id": "a1b2c3d4-1234-4567-8901-abcdef123456",
  "status": "succeeded",
  "credits_reserved": 350,
  "created_at": "2026-10-27T00:00:00.000Z",
  "output": {
    "url": "https://your-result-host.example/video.mp4"
  },
  "error": null,
  "refund_status": "not_applicable"
}

동영상이 준비되기 전에는 output이 null입니다. 실패한 작업에는 error가 포함되며, refund_status로 크레딧 환불 상태를 확인할 수 있습니다. 성공한 결과는 바로 다운로드하세요. 동영상을 삭제해도 요청은 초기화되지 않습니다. 같은 Idempotency-Key로 다시 보내면 410 video_deleted가 반환되며 다시 생성되지 않습니다.

하나의 계정, 공통 잔액

연동 전에 크레딧 비용을 확인하세요.

API 생성은 웹사이트와 동일한 계정 크레딧 및 Seedance 2.5 요율을 사용합니다. 요청이 접수되면 크레딧을 선차감하고, 생성 실패 시 일회성 크레딧 잔액으로 돌려드립니다. 작업 생성 전 검증에 실패한 경우에는 과금 대상 동영상이 생성되지 않습니다.

480p

30크레딧 / 출력 1초

+ 20 크레딧 / 참조 동영상 1초

720p

70크레딧 / 출력 1초

+ 50 크레딧 / 참조 동영상 1초

1080p

160크레딧 / 출력 1초

+ 90 크레딧 / 참조 동영상 1초

비용 = 출력 길이 × 출력 단가 + 참조 동영상 길이 × 참조 단가입니다. 참조 동영상 길이는 서버에서 측정하며, 총 길이를 초 단위로 내림하여 계산합니다. 기본 오디오 생성은 포함되어 있습니다. 예를 들어 5초 720p 동영상은 350 크레딧이며, 5초 참조 동영상을 함께 사용하면 600 크레딧입니다.

모델, 요금 및 잔액 조회
curl --fail-with-body "https://seedance3ai.dev/api/v1/models" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

curl --fail-with-body "https://seedance3ai.dev/api/v1/credits" \
  -H "Authorization: Bearer $SEADANCE_API_KEY"

API 대시보드에서 사용 가능한 크레딧, 요청 기록, 계정 한도를 확인하세요. 동일한 계정으로 웹사이트 요금 페이지에서 크레딧을 충전하면 됩니다. 별도의 API 잔액이나 API 충전 엔드포인트는 없습니다. 사용 가능한 크레딧이 충분하면 활성 구독이 없어도 호출할 수 있습니다. 구독 만료 및 일회성 크레딧 규칙은 웹사이트와 동일합니다.

크레딧을 충전해도 API 요청 빈도, 동시 작업 수, 일일 한도가 늘어나거나 비활성화된 계정이 다시 활성화되지는 않습니다. 일일 한도에는 실패 후 환불된 크레딧을 포함한 모든 선차감 크레딧이 집계되며, UTC 00:00에 초기화됩니다. 더 높은 한도가 필요하면 지원팀에 문의하세요.

요금제 확인 및 크레딧 충전

안전하게 재시도하고 중복 과금을 피하세요.

생성할 동영상마다 하나의 Idempotency-Key를 사용하고, 결과가 확정될 때까지 정확히 동일한 요청 본문과 함께 보관하세요. 새 키는 새 생성 요청을 의미합니다. 오류 응답에는 error.code, error.message, request_id가 포함됩니다. 지원팀에 문의할 때 요청 ID를 함께 보내주세요.

HTTP의미조치 방법
400잘못된 요청오류 메시지, 필드, 미디어 제한을 확인한 후 다시 시도하세요.
401유효하지 않은 API 키Bearer 헤더를 확인하세요. 폐기한 키는 다시 사용할 수 없습니다.
402크레딧 부족동일한 Seedance 3.0 계정에 크레딧을 충전하세요.
403접근 거부API 접근이 비활성화되었거나 키에 필요한 권한이 없습니다.
404동영상을 찾을 수 없음현재 계정에서 이 API로 생성한 작업 ID를 사용하세요.
409요청 충돌request_in_progress이면 기다린 후 동일한 본문과 키로 다시 시도하세요. idempotency_conflict는 같은 키를 다른 본문에 재사용했다는 뜻입니다. request_expired 또는 request_previously_failed는 동영상이 제출되지 않았다는 뜻이므로, 표시된 문제를 해결한 다음 새 키를 사용하세요.
410삭제된 동영상video_deleted는 원래 요청은 처리되었지만 동영상이 삭제되었다는 뜻입니다. 해당 키로 다시 생성할 수 없습니다. 재시도를 멈추고, 새로 요금이 부과되는 생성을 의도한 경우에만 새 키를 사용하세요.
429계정 한도 초과Retry-After에 따라 대기하세요. 요청 빈도, 동시 작업 수, 일일 크레딧 한도는 모든 키가 공유합니다. 일일 한도는 UTC 00:00에 초기화됩니다.
500 / 503일시적인 서비스 오류Idempotency-Key를 유지하고 동일한 요청을 다시 시도하세요. 결과가 불확실할 때 새 키를 만들지 마세요.

제출 시 request_in_progress가 반환되면 기다린 후 같은 요청을 다시 보내세요. 시간 초과를 피하려고 새 키로 바꾸지 마세요. 실패한 작업의 환불이 아직 처리되지 않았다면 작업 ID를 보관하고 지원팀에 문의하세요.

연동할 준비가 되셨나요?

키를 만들고 첫 연동을 시작하세요.

API 대시보드 열기