Skip to main content
Doubao Seedance에서 본인이 확인한 에셋을 참조하려면 먼저 Doubao 실존 인물 에셋 사용 가이드를 읽어보세요.

빠른 시작

비디오 생성은 항상 비동기입니다. 예제는 wan2.6-t2v와 초 단위 정수 duration을 사용합니다.

비동기 미디어 모델을 찾고 Schema를 가져오는 방법

검색 절차는 두 단계입니다. 먼저 공개 모델 카탈로그에서 비동기 API를 지원하는 텍스트 이미지 또는 텍스트 비디오 모델을 가져옵니다. 그런 다음 모델의 model_id를 사용해 해당 엔드포인트의 요청 Schema를 가져옵니다.

비동기 API를 지원하는 모델 목록 조회

모델 카탈로그는 Playground와 같은 데이터 소스를 사용합니다. 텍스트 이미지 모델에는 type=image_generation, 텍스트 비디오 모델에는 type=video를 사용하세요. schema_checked=true를 추가하면 요청 Schema가 게시되고 검토된 모델만 반환됩니다.
두 요청은 같은 API를 사용합니다. 현재 type 필터는 하나의 값만 허용하므로 모델 유형별로 요청하세요. 응답 구조는 {success, message, data}입니다. 비동기 미디어 연동과 관련된 data 필드는 다음과 같습니다.

단일 모델의 요청 Schema 조회

지원 필드, 열거형 및 숫자 범위는 모델마다 다를 수 있습니다. 이미지 또는 비디오 요청을 보내기 전에 다음 공개 API를 사용하여 선택한 모델의 사용 가능한 엔드포인트와 요청 JSON Schema를 조회하세요.
응답의 modality는 image 또는 video입니다. endpoints 배열의 각 항목은 사용 가능한 호출 프로토콜 하나를 설명합니다. 같은 모델에서 /ai/v1 엔드포인트와 OpenAI 호환 /v1 엔드포인트가 함께 반환될 수 있습니다. OpenAI 호환 엔드포인트는 최신 모델을 아직 지원하지 않을 수 있으므로 /ai/v1 엔드포인트를 우선 사용하세요. 비동기 작업 API에는 path가 /ai/v1/images/generations 또는 /ai/v1/videos인 항목을 선택한 후 해당 request.schema를 사용하세요. endpoints 배열의 위치에 의존하지 마세요. 다음 명령은 각 비동기 작업 엔드포인트의 요청 Schema를 직접 추출합니다.
모델이 없거나 검색 가능한 엔드포인트가 없으면 404 model_not_found를 반환합니다. 엔드포인트 데이터를 일시적으로 사용할 수 없으면 500 endpoints_unavailable를 반환합니다.

비디오 작업을 생성하는 방법

비디오 요청은 항상 비동기이며, Prefer: wait로 동기 대기로 전환할 수 없습니다. 표준 프로토콜은 정수 duration을 초 단위로 사용합니다.

비디오 표준 필드

input_references 항목 구조:
type은 image_url, video_url 또는 audio_url일 수 있습니다. frame_images 항목 구조:
frame_type은 first_frame 또는 last_frame일 수 있습니다.

미디어 작업 객체

이미지 및 비디오 전용 API는 다음 구조를 반환합니다.
미디어 output 항목:

상태 설명

상태가 completed, failed 또는 cancelled로 바뀔 때까지 클라이언트에서 15초마다 조회할 수 있습니다. 15초는 클라이언트 폴링 권장 간격이며 서버 프로토콜 제한이 아닙니다.

미디어 작업을 조회하는 방법

미디어 상세 조회

미디어 상세 API는 갱신된 작업 상태를 반환할 수 있으므로, 미디어 폴링에는 해당 이미지 또는 비디오 상세 API를 사용하세요.

미디어 목록 조회

생성 응답을 잃은 경우 해당 미디어 목록에서 작업 ID를 찾을 수 있습니다.
미디어 목록은 조회 시점의 작업 스냅샷을 반환하며 작업 상태를 직접 갱신하지 않습니다.

통합 작업 API를 사용하는 방법

통합 작업 API는 다음 필터를 지원합니다.
통합 작업 상세:
미디어 작업의 통합 output 항목:
단일 결과물은 /ai/v1/tasks/{id}/content로 직접 요청하세요. 다중 결과물 작업은 /ai/v1/tasks/{id}/content/{result_id}를 요청해야 하며, 결과 ID를 지정하지 않으면 400 result_id_required가 반환됩니다.
통합 작업 목록, 상세 및 콘텐츠 API는 작업을 생성한 Bearer Token에 따라 격리됩니다. 같은 계정의 다른 API Key로는 해당 작업을 읽을 수 없습니다.

미디어 결과를 다운로드하는 방법

비디오 다운로드

결과는 만료될 수 있으며 다운로드 횟수 제한이 적용될 수 있습니다. 만료된 경우 410 artifact_expired, 다운로드 횟수 제한을 초과한 경우 429 too_many_downloads가 반환됩니다.

Webhook 사용 방법

비동기 이미지 및 비디오는 작업 단위 Webhook을 지원합니다.
webhook_url은 최대 512자이며 로컬 호스트, 사설망 또는 기타 제한된 주소를 가리킬 수 없습니다. webhook_events_filter를 생략하면 플랫폼은 completed, failed, cancelled를 전송합니다. 명시적으로 전달하는 경우 배열은 비어 있거나 중복될 수 없으며 webhook_url과 함께 사용해야 합니다. 요청에 webhook_url을 전달하지 않으면 비동기 이미지 및 비디오는 계정에 설정된 기본 콜백 주소를 사용하려고 시도합니다. 유효하지 않은 계정 기본 주소는 무시되며 작업 생성을 차단하지 않습니다.

콜백 요청

results는 결과가 저장된 경우에만 표시되며 다운로드에는 여전히 Bearer Token이 필요합니다.

재시도 및 중복 제거

플랫폼은 최소 한 번 전달 방식을 사용하므로 동일한 이벤트가 중복 전송될 수 있습니다.
  • HTTP 2xx는 수신 성공을 의미합니다.
  • HTTP 5xx, 네트워크 오류 또는 타임아웃은 재시도를 유발합니다.
  • HTTP 3xx 및 4xx는 재시도하지 않습니다.
  • 최대 6회 전달하며, 재시도 간격은 순서대로 1, 4, 16, 64, 256초입니다.
수신 측은 event_id를 저장하고 동일한 이벤트를 다시 받으면 즉시 2xx를 반환해야 합니다.
작업 단위 Webhook 자체에는 별도의 서명 키가 없습니다. 서명 검증이 필요하면 계정 단위 Webhook 구독을 설정하고 작업 상세 조회를 결과 확인 방법으로 유지하세요.

오류 응답 및 오류 코드

이 절은 /ai/v1/videos/* 및 동영상 작업에 적용됩니다. 이미지 오류는 이미지 API를 참조하세요.
  • 현재 요청 실패: HTTP 상태가 2xx가 아니면 현재 생성, 조회 또는 다운로드 요청이 실패한 것입니다. HTTP 요청 실패를 참조하세요.
  • 작업 실행 실패: 조회는 HTTP 200을 반환하지만 작업의 status=failed이며 원인은 작업 내 error에 기록됩니다. 작업 실행 실패를 참조하세요.
  • 목록의 개별 결과 읽기 실패: 목록은 HTTP 200을 반환하지만 일부 작업에 output_error가 포함됩니다. 목록의 개별 결과 읽기 실패를 참조하세요.
아래 표의 message 열은 API가 반환하는 영어 메시지이며, 설명 열은 의미와 조치 방법을 안내합니다. 매개변수 검증 오류에는 일반 메시지를 표시하며, 실제 응답에는 구체적인 필드와 제약 조건이 포함될 수 있습니다. 클라이언트는 code로 오류 유형을 판단하고 message 전체 문자열의 일치 여부에 의존하지 않아야 합니다.

HTTP 5xx 오류 신고

요청이 HTTP 5xx를 반환하면 error.tid를 첨부하여 신고해 주세요.

HTTP 요청 실패

동영상 생성 요청 후 생성 결과는 작업 상태를 통해 반환됩니다. 아래 HTTP 상태는 현재 요청 자체가 실패한 경우에 적용됩니다.

요청 매개변수 및 미디어 입력

크기 제한
  • 미디어 크기: 동영상 작업이 한도를 초과하면 media_too_large를 반환하며 참조 이미지를 업로드할 때도 같은 코드를 사용합니다. 구체적인 한도는 오류 메시지 또는 error.details.max_bytes를 확인하세요.
  • 전체 요청 크기: request_too_large는 텍스트, 매개변수 및 인라인 미디어 인코딩을 포함한 HTTP 본문이 32 MiB를 초과했음을 의미합니다. URL만 전송하면 링크 자체가 본문에 포함되며, 링크가 가리키는 파일은 모델의 미디어 제한을 충족해야 합니다.
  • 실제 크기: error.details.actual_bytes는 전체 크기가 확인된 경우에만 제공됩니다. URL에서 미디어를 읽다가 읽기 한도에 도달해 중단되면 이 필드가 생략될 수 있습니다.
지원 형식 선택한 모델에 따라 다릅니다. 먼저 error.details.allowed_mime_types 또는 오류 메시지의 형식 목록을 확인하세요. 목록이 없으면 모델의 Schema를 참조하세요. 메시지의 자리표시자
  • {media_kind}: 실제 미디어 유형입니다. 유형이 확인되면 invalid_media_data 및 media_url_unreachable 메시지에도 image 또는 video가 사용됩니다.
  • {max_bytes}: 바이트 단위 한도입니다.
  • {allowed_formats}: 허용되는 형식 목록입니다. 형식 오류 메시지에 Use one of: {allowed_formats}.가 추가될 수 있습니다.

생성 요청 및 반환 결과

계정 및 권한

서비스 가용성 및 요청 속도 제한

provider_unavailable은 모델 프로바이더의 장애가 명확히 확인되었음을 의미합니다. 일반적인 429 또는 4xx만으로 계정 할당량, 콘텐츠 심사 또는 매개변수 문제를 확인할 수 없습니다.

작업 조회 및 결과 다운로드

작업 실행 실패

작업이 생성된 후 발생한 생성 실패는 status=failed와 작업 내 error로 표시됩니다. 조회가 성공하면 HTTP 200을 반환합니다.
미디어 입력 오류는 실패한 Task에도 나타날 수 있으며 코드의 의미는 위 입력 오류 표와 같습니다. 이 경우에도 조회 성공 시 HTTP 상태는 200입니다. 크기 오류의 message는 submit a new task.로 끝나며 미디어 크기를 줄여 새 작업을 제출하도록 안내합니다. provider_empty_output은 사용 가능한 동영상 결과가 없음이 확인되었음을 의미합니다. result_delivery_failed는 생성 결과가 있지만 저장 또는 전달에 실패했음을 의미합니다. 후자의 경우 지원팀에 먼저 문의하여 기존 결과를 확인하세요.

목록의 개별 결과 읽기 실패

이미지 및 동영상 작업 목록의 일부 행에 output_error가 포함될 수 있습니다.
이 필드는 이번 조회에서 해당 행의 결과를 읽지 못했음을 의미합니다. 목록은 HTTP 200을 반환하고 해당 행은 output=[]가 됩니다. 기존 id, status, error 및 페이지네이션은 유지되며 정상적으로 읽을 수 있는 다른 작업에는 영향이 없습니다. status=completed여도 output_error를 확인한 후 결과를 읽을 수 있는지 판단하세요. output_error.tid를 제공하여 지원팀에 문의하세요. 해당 필드에 tid가 없으면 현재 응답 헤더의 요청 ID를 제공할 수 있습니다. 이 오류는 작업 상태나 요금을 변경하지 않으며 Webhook을 발생시키지 않습니다. 이미지 및 동영상 목록은 이미 가져온 expires_at을 유지합니다. 통합 /ai/v1/tasks 목록의 읽기 실패 행은 expires_at=null을 반환할 수 있지만 결과에는 기존 보관 기간이 그대로 적용됩니다. 이 처리는 개별 행의 결과를 읽을 수 없고 사용 가능한 대체 결과도 없는 경우에만 적용됩니다. 통합 tasks API에서 목록 전체 조회가 실패하면 HTTP 오류를 반환하며, 상세 조회에서 같은 장애가 발생하면 HTTP 500을 반환합니다. 관련 문서: 이미지 API · 동영상 API · 비동기 작업

전체 예제

작업을 만들고 폴링한 뒤 MP4 결과를 다운로드합니다.