> ## Documentation Index
> Fetch the complete documentation index at: https://evolink.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Seedance 2.5 Draft-to-Video 초안을 최종 비디오로 변환

> - 완료된 Seedance 2.5 초안(생성 시 `draft: true`를 전달한 작업)을 동일한 내용의 1080p 최종 비디오로 변환합니다
- `model`, `source_task_id`, `output_format`, `callback_url`의 네 필드만 허용됩니다. 프롬프트, 소재, 길이, 화면 비율, 랜덤 시드, 오디오 설정은 모두 초안에서 이어받습니다. 다시 전달할 필요가 없으며, 전달해서도 안 됩니다. 이 외의 필드를 전달하면 400 파라미터 오류가 반환됩니다
- 초안의 `draft_expires_at` 이전에 변환 요청을 제출하세요. 기본 유효기간은 초안 완료 후 24시간이며, 실제 기한은 작업 조회에서 반환되는 `draft_expires_at`을 기준으로 합니다
- 시스템은 요청을 접수할 때와 생성 요청을 전송하기 전에 유효기간을 확인합니다. 대기 중에 유효기간이 만료되면 변환 작업이 실패하고 해당 변환 요금이 환불되므로, 대기 시간을 고려하여 여유 있게 제출하세요
- 유효기간 내에는 같은 초안을 여러 번 변환할 수 있으며, 변환할 때마다 별도로 과금됩니다
- 비동기 처리 방식으로, 반환된 작업 ID로 [조회하세요](/ko/api-manual/task-management/get-task-detail). 조회 결과에는 `source_task_id`가 포함됩니다
- 생성된 비디오 링크의 유효기간은 24시간입니다. 가능한 빨리 저장하세요

**과금 규칙:**
- 초안과 별도로 과금되며, 해상도는 항상 `1080p`로 계산됩니다
- 출력 길이는 원본 초안에 기록된 실제 생성 길이를 사용합니다. 실제 값이 없으면 원본 작업에 기록된 유효 출력 길이를 사용합니다
- 초안에 비디오 입력이 없으면 과금 대상 길이는 출력 길이입니다. 비디오 입력이 있으면(Reference-to-Video, Video Edit, Video Extend 포함) 과금 대상 길이는 `출력 길이 + max(입력 비디오 길이, 출력 길이)`이며, 0.1초 단위로 올림합니다
- 초안에서 콘텐츠 필터를 비활성화한 경우(`content_filter: false`), 최종 비디오에도 +10%(`1.1x`) 요금이 적용됩니다
- 변환에 실패하면 해당 변환 요금은 환불되지만, 초안 요금은 환불되지 않습니다



## OpenAPI

````yaml ko/api-manual/video-series/seedance2.5/seedance-2.5-draft-to-video.json POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Seedance 2.5 Draft-to-Video API
  description: 완료된 Seedance 2.5 초안을 동일한 내용의 1080p 최종 비디오로 변환합니다
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.evolink.ai
    description: 프로덕션 환경
security:
  - bearerAuth: []
tags:
  - name: 비디오 생성
    description: AI 비디오 생성 관련 API
paths:
  /v1/videos/generations:
    post:
      tags:
        - 비디오 생성
      summary: Seedance 2.5 Draft-to-Video 초안을 최종 비디오로 변환
      description: >-
        - 완료된 Seedance 2.5 초안(생성 시 `draft: true`를 전달한 작업)을 동일한 내용의 1080p 최종 비디오로
        변환합니다

        - `model`, `source_task_id`, `output_format`, `callback_url`의 네 필드만
        허용됩니다. 프롬프트, 소재, 길이, 화면 비율, 랜덤 시드, 오디오 설정은 모두 초안에서 이어받습니다. 다시 전달할 필요가
        없으며, 전달해서도 안 됩니다. 이 외의 필드를 전달하면 400 파라미터 오류가 반환됩니다

        - 초안의 `draft_expires_at` 이전에 변환 요청을 제출하세요. 기본 유효기간은 초안 완료 후 24시간이며, 실제
        기한은 작업 조회에서 반환되는 `draft_expires_at`을 기준으로 합니다

        - 시스템은 요청을 접수할 때와 생성 요청을 전송하기 전에 유효기간을 확인합니다. 대기 중에 유효기간이 만료되면 변환 작업이
        실패하고 해당 변환 요금이 환불되므로, 대기 시간을 고려하여 여유 있게 제출하세요

        - 유효기간 내에는 같은 초안을 여러 번 변환할 수 있으며, 변환할 때마다 별도로 과금됩니다

        - 비동기 처리 방식으로, 반환된 작업 ID로
        [조회하세요](/ko/api-manual/task-management/get-task-detail). 조회 결과에는
        `source_task_id`가 포함됩니다

        - 생성된 비디오 링크의 유효기간은 24시간입니다. 가능한 빨리 저장하세요


        **과금 규칙:**

        - 초안과 별도로 과금되며, 해상도는 항상 `1080p`로 계산됩니다

        - 출력 길이는 원본 초안에 기록된 실제 생성 길이를 사용합니다. 실제 값이 없으면 원본 작업에 기록된 유효 출력 길이를
        사용합니다

        - 초안에 비디오 입력이 없으면 과금 대상 길이는 출력 길이입니다. 비디오 입력이 있으면(Reference-to-Video,
        Video Edit, Video Extend 포함) 과금 대상 길이는 `출력 길이 + max(입력 비디오 길이, 출력
        길이)`이며, 0.1초 단위로 올림합니다

        - 초안에서 콘텐츠 필터를 비활성화한 경우(`content_filter: false`), 최종 비디오에도 +10%(`1.1x`)
        요금이 적용됩니다

        - 변환에 실패하면 해당 변환 요금은 환불되지만, 초안 요금은 환불되지 않습니다
      operationId: createSeedance25DraftToVideo
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoGenerationRequest'
            examples:
              basic:
                summary: 1080p 최종 비디오로 변환(MP4)
                value:
                  model: seedance-2.5-draft-to-video
                  source_task_id: task-unified-1774857405-abc123
              mov:
                summary: 1080p 최종 비디오로 변환 (MOV)
                value:
                  model: seedance-2.5-draft-to-video
                  source_task_id: task-unified-1774857405-abc123
                  output_format: mov
      responses:
        '200':
          description: 최종 비디오 변환 작업 생성 성공
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoGenerationResponse'
        '400':
          description: 요청 파라미터가 잘못되었거나 원본 작업이 변환 가능한 초안이 아닙니다
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_parameter:
                  summary: 허용되지 않는 필드가 전달되었습니다
                  value:
                    error:
                      code: invalid_parameter
                      message: >-
                        prompt is not allowed for seedance-2.5-draft-to-video:
                        the final video reuses the draft's prompt, assets,
                        duration, ratio, seed and audio settings
                      type: invalid_request_error
                invalid_source_task:
                  summary: 원본 작업이 초안이 아닙니다
                  value:
                    error:
                      code: invalid_source_task
                      message: >-
                        source_task_id must reference a completed Seedance 2.5
                        draft (draft=true) task
                      type: invalid_request_error
        '401':
          description: 미인증, Token이 유효하지 않거나 만료됨
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: unauthorized
                  message: Invalid or expired token
                  type: authentication_error
        '402':
          description: 할당량 부족, 충전 필요
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: insufficient_quota
                  message: Insufficient quota. Please top up your account.
                  type: insufficient_quota
        '403':
          description: 접근 권한 없음
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: model_access_denied
                  message: >-
                    Token does not have access to model
                    seedance-2.5-draft-to-video
                  type: invalid_request_error
        '404':
          description: 원본 작업이 없거나 현재 계정에 속하지 않습니다
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                source_task_not_found:
                  summary: 원본 작업을 찾을 수 없습니다
                  value:
                    error:
                      code: source_task_not_found
                      message: Source task not found
                      type: invalid_request_error
        '409':
          description: 초안이 아직 완료되지 않았거나 변환에 필요한 정보가 없습니다
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                source_task_not_ready:
                  summary: 초안이 아직 완료되지 않았습니다
                  value:
                    error:
                      code: source_task_not_ready
                      message: >-
                        The draft task has not completed yet; query it until
                        status is completed
                      type: invalid_request_error
                source_task_metadata_unavailable:
                  summary: 변환에 필요한 정보가 없습니다
                  value:
                    error:
                      code: source_task_metadata_unavailable
                      message: >-
                        The draft task is missing the metadata required for
                        conversion
                      type: invalid_request_error
        '410':
          description: 초안의 유효기간이 만료되었습니다
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                draft_task_expired:
                  summary: draft_expires_at이 지났습니다
                  value:
                    error:
                      code: draft_task_expired
                      message: >-
                        The draft expired at 2026-09-23T17:19:36Z and can no
                        longer be converted
                      type: invalid_request_error
        '429':
          description: 요청 빈도 초과
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: rate_limit_exceeded
                  message: Too many requests, please try again later
                  type: rate_limit_error
        '500':
          description: 서버 내부 오류
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: internal_error
                  message: Internal server error
                  type: api_error
        '503':
          description: 원본 서비스 또는 작업 정보를 일시적으로 사용할 수 없습니다
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                source_channel_unavailable:
                  summary: 원본 서비스를 사용할 수 없습니다
                  value:
                    error:
                      code: source_channel_unavailable
                      message: >-
                        The service that generated this draft is currently
                        unavailable; please retry later
                      type: invalid_request_error
                source_task_metadata_unavailable:
                  summary: 원본 작업 정보를 일시적으로 읽을 수 없습니다
                  value:
                    error:
                      code: source_task_metadata_unavailable
                      message: Source task is temporarily unavailable
                      type: invalid_request_error
components:
  schemas:
    VideoGenerationRequest:
      type: object
      required:
        - model
        - source_task_id
      properties:
        model:
          type: string
          description: 비디오 생성 모델 이름
          enum:
            - seedance-2.5-draft-to-video
          default: seedance-2.5-draft-to-video
          example: seedance-2.5-draft-to-video
        source_task_id:
          type: string
          description: |-
            완료된 Seedance 2.5 초안 작업의 Task ID

            **확인 방법:** 초안 생성 요청(`draft: true`)의 응답에서 반환된 `id` 필드

            **조건:**
            1. 작업이 현재 계정에 속해야 합니다
            2. 작업 모델이 Seedance 2.5의 다섯 가지 생성 모델 중 하나여야 합니다
            3. 작업 생성 시 `draft: true`를 전달했어야 합니다
            4. 작업 상태가 `completed`여야 합니다
            5. 현재 시각이 작업 조회 결과의 `draft_expires_at`보다 이전이어야 합니다
          example: task-unified-1774857405-abc123
        output_format:
          type: string
          description: >-
            출력 컨테이너 형식, 기본값은 `mp4`


            **선택 가능한 값:**

            - `mp4`: H.264 인코딩으로 호환성이 가장 좋고 표준 색상 정밀도를 제공하며, 기본값입니다

            - `mov`: H.264 + yuv444p 크로마 서브샘플링 + PCM 오디오로 색 재현력이 높아 색보정·키잉·합성 등
            후반 작업에 적합합니다. 브라우저 내 재생이 지원되지 않을 수 있으므로 다운로드 후 VLC / mpv / ffplay로
            재생하세요. 추가 요금 없음


            초안의 출력 형식은 이어받지 않습니다. `mov`가 필요하면 여기에서 지정하세요
          enum:
            - mp4
            - mov
          default: mp4
          example: mp4
        callback_url:
          type: string
          description: >-
            작업 완료 후 HTTPS 콜백 주소


            **콜백 시점:**

            - 작업 완료(completed) 또는 실패(failed) 시 트리거

            - 과금 확인 완료 후 전송


            **보안 제한:**

            - HTTPS 프로토콜만 지원

            - 내부 네트워크 IP 주소로의 콜백 금지(127.0.0.1, 10.x.x.x, 172.16-31.x.x,
            192.168.x.x 등)

            - URL 길이는 `2048`자를 초과할 수 없습니다


            **콜백 메커니즘:**

            - 타임아웃: `10`초

            - 실패 시 최대 `3`회 재시도(실패 후 각각 `1`/`2`/`4`초 후 재시도)

            - 콜백 응답 본문 형식은 작업 조회 API 반환 형식과 동일

            - 2xx 상태 코드를 성공으로 간주하며, 다른 상태 코드는 재시도를 트리거합니다
          format: uri
          example: https://your-domain.com/webhooks/video-task-completed
      additionalProperties: false
    VideoGenerationResponse:
      type: object
      properties:
        created:
          type: integer
          description: 작업 생성 타임스탬프
          example: 1761313744
        id:
          type: string
          description: 작업 ID
          example: task-unified-1774857405-abc123
        model:
          type: string
          description: 실제 사용된 모델 이름
          example: seedance-2.5-draft-to-video
        object:
          type: string
          enum:
            - video.generation.task
          description: 작업의 구체적 유형
        progress:
          type: integer
          description: 작업 진행률 (0-100)
          minimum: 0
          maximum: 100
          example: 0
        status:
          type: string
          description: 작업 상태
          enum:
            - pending
            - processing
            - completed
            - failed
          example: pending
        task_info:
          $ref: '#/components/schemas/VideoTaskInfo'
          description: 비디오 작업 상세 정보
        type:
          type: string
          enum:
            - text
            - image
            - audio
            - video
          description: 작업의 출력 유형
          example: video
        usage:
          $ref: '#/components/schemas/VideoUsage'
          description: 사용량 및 과금 정보
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: 오류 코드 식별자
            message:
              type: string
              description: 오류 설명 정보
            type:
              type: string
              description: 오류 유형
    VideoTaskInfo:
      type: object
      properties:
        can_cancel:
          type: boolean
          description: >-
            작업 취소 가능 여부입니다. Seedance 2.5는 사용자의 작업 취소를 지원하지 않으므로 항상 `false`를
            반환합니다.
          example: false
        estimated_time:
          type: integer
          description: 예상 완료 시간(초)
          minimum: 0
          example: 165
        video_duration:
          type: integer
          description: >-
            작업 생성 응답의 길이 필드(초)입니다. 이 엔드포인트는 현재 작업 생성 시 `0`을 반환하며, 이는 실제 생성된 비디오
            길이가 아닙니다. 원본 초안의 길이를 참고하세요. 완료 후 [작업
            조회](/ko/api-manual/task-management/get-task-detail)에서 최상위
            `video_duration` 필드가 반환되면 해당 값을 사용하세요.
          example: 0
    VideoUsage:
      type: object
      description: 사용량 및 과금 정보
      properties:
        billing_rule:
          type: string
          description: 과금 규칙
          enum:
            - per_call
            - per_token
            - per_second
          example: per_second
        credits_reserved:
          type: number
          description: 예상 소비 크레딧 수
          minimum: 0
          example: 50
        user_group:
          type: string
          description: 사용자 그룹 카테고리
          example: default
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |-
        ##모든 API는 Bearer Token 인증이 필요합니다##

        **API Key 얻기:**

        [API Key 관리 페이지](https://evolink.ai/dashboard/keys)에서 API Key를 받으세요

        **요청 헤더에 다음을 추가하세요:**
        ```
        Authorization: Bearer YOUR_API_KEY
        ```

````