Skip to main content
POST
Text-to-video: submit a generation task from text prompt
오른쪽의 대화형 Playground는 실시간 디버깅을 지원합니다. 인증 아래에 API Key를 입력하고(형식 Bearer sk-xxx), prompt를 입력한 다음 model / seconds / metadata.resolution을 선택하고 전송하십시오. Default 그룹도 작동합니다 — 전용 그룹 전환은 필요하지 않습니다.
범위: 이 페이지는 “텍스트만으로 동영상 생성”을 다룹니다 — input_reference, application/json body는 없습니다. 참조 이미지로 생성하려면 Image-to-Video 엔드포인트를 사용하십시오(동일한 엔드포인트 + input_reference 업로드).
⚠️ 가장 흔한 세 가지 함정
  1. length 필드의 이름은 seconds(duration가 아님)이며 문자열이어야 합니다 "4" / "6" / "8". 이를 duration로 지정하면 조용히 무시되며 → 길이는 기본 4초로 되돌아갑니다(“8s를 보냈는데 4s를 받은” 함정); 숫자를 전달하면 parse_request_failed: cannot unmarshal number into Go struct field ... duration of type string로 실패합니다
  2. generateAudio를 전달하지 마십시오 — 상위 시스템이 INVALID_ARGUMENT를 반환합니다. 오디오 의도(ambient, dialogue, BGM)는 대신 prompt에 표현하십시오
  3. 1080p / 4k에서는 seconds"8"여야 합니다"4" / "6"는 상위 시스템에서 거부됩니다
3단계 비동기 흐름 — 이 페이지는 Step 1(제출)만 다룹니다
  • Step 1 (이 페이지): POST /v1/videostask_id + status: "queued"를 반환합니다
  • Step 2: GET /v1/videos/{task_id}status: "completed"이 될 때까지 폴링합니다
  • Step 3: MP4를 다운로드하는 GET /v1/videos/{task_id}/content
POST 제출 자체는 1초 미만이며 생성이 완료될 때까지 기다리지 않습니다. 전체 흐름은 아래 Python 샘플에 나와 있습니다.

코드 예시

Python (OpenAI SDK · 저수준 client.post)

파이썬 (requests)

cURL

Node.js (기본 fetch)

브라우저 JavaScript

이미 task_id가 있으십니까? 복붙 가능한 cURL 명령 2개

이미 task_id가 있다면(작업을 제출할 때 반환되었거나 콘솔 로그에서 볼 수 있습니다), 아래의 두 플레이스홀더만 바꿔서 실행합니다:
  • sk-your-api-key → APIYI 키
  • task_xxxxxxxxxxxxxxxx → 작업 ID

1. 작업 상태 확인

JSON 응답에 status: "completed"가 표시되면 다운로드할 수 있습니다. in_progress가 표시되면 몇 초 기다렸다가 다시 확인합니다.

2. 동영상 다운로드(output.mp4로 저장됨)

/content 엔드포인트에는 Authorization 헤더가 필요합니다 — URL을 브라우저 주소 표시줄에 직접 열면 401이 반환됩니다. --retry 3statuscompleted로 바뀐 직후 가끔 발생하는 400을 처리합니다(CDN 동기화 지연).

매개변수 참조

generateAudio 필드를 전달하지 마십시오! Veo 3.1은 기본적으로 오디오를 지원합니다. 이 매개변수를 전달하면 INVALID_ARGUMENT이 반환됩니다. 오디오를 제어하려면, 의도를 prompt에 작성하십시오: "waves, distant seabirds, low wind sounds".
매개변수 우선순위:
  • 길이: metadata.durationSeconds > seconds > 8(seconds를 전송하십시오; duration은 인식되지 않습니다)
  • 해상도: metadata.resolution > size > 720p
  • 화면 비율: 명시적 metadata.aspectRatio > 크기에서 추론 > 16:9

응답 형식

단계 1 - 제출 직후

단계 2 - 폴링 응답(진행 중)

단계 2 - 폴링 응답(완료됨)

⚠️ 응답 필드 주의사항
  • idtask_id는 모두 같은 값으로 반환됩니다; 하위 시스템은 task_id을 기준으로 표준화해야 합니다(기존 Reverse 채널과 호환됨)
  • CDN / 공개 URL은 반환되지 않습니다 — 응답에 video_url / data.url가 없으며, 동영상은 오직 GET /v1/videos/{task_id}/content를 통한 MP4 바이너리 스트림으로만 가져올 수 있습니다(인증 헤더 필요). 프런트엔드는 이 엔드포인트를 직접 호출할 수 없으므로 — 서버 측에서 다운로드한 뒤 자체 OSS / CDN에 다시 호스팅하십시오
  • progress는 거친 단위입니다 — 0 / 50 / 100 사이에서만 점프하므로 퍼센트 바에는 사용하지 마십시오
  • status: "failed"에는 자세한 error 필드가 포함되지 않을 수 있습니다. 보통 콘텐츠 검토 또는 매개변수 오류입니다. 그냥 다시 시도하거나 prompt를 조정하십시오
  • /contentstatuscompleted로 바뀐 직후 가끔 400을 반환합니다; 4초 후 다시 시도하십시오(위의 모든 코드 샘플에는 이 동작이 반영되어 있습니다)
이 엔드포인트는 비동기 작업 진입점입니다. 과금은 작업이 completed에 도달할 때 발생하며, 모델명 기준 요청당 과금됩니다(fast $0.3 / standard $1.2, 가격 참조). POST 제출, 폴링, 다운로드 자체는 과금되지 않으며; 실패한 작업도 과금되지 않습니다.

인증

Authorization
string
header
필수

API Key from APIYI console (Default group + Pay-per-request or Pay-as-you-go Priority Token; pure Pay-as-you-go not supported)

본문

application/json
model
enum<string>
기본값:veo-3.1-fast-generate-preview
필수

Model ID (per-request billing, duration / resolution do not affect price):

  • veo-3.1-fast-generate-preview — $0.3/request, top pick for iteration / batch generation
  • veo-3.1-generate-preview — $1.2/request, for final delivery / 4K scenarios
사용 가능한 옵션:
veo-3.1-fast-generate-preview,
veo-3.1-generate-preview
prompt
string
필수

Video generation prompt; describe in detail: scene + subject + action + camera + lighting + style.

Audio intent also goes in the prompt (e.g. "waves, distant seabirds, low wind sounds"). Do not pass generateAudio — upstream rejects with INVALID_ARGUMENT.

예시:

"A coastal lighthouse at dusk, slow push-in, waves lapping the rocks, distant seabirds, cinematic lighting, steady camera"

seconds
enum<string>
기본값:8

Video length. The field name is seconds (not duration), a string enum (not number):

  • "4" — 4 sec, 720p only
  • "6" — 6 sec, 720p only
  • "8" — 8 sec (default), required at 1080p / 4k

Sending duration instead is silently ignored → length falls back to the default 4 sec (720p returns no error but only outputs 4 sec; 1080p/4k errors with ... but got 4). Passing a number (8) returns parse_request_failed: cannot unmarshal number into Go struct field ... duration of type string.

사용 가능한 옵션:
4,
6,
8
size
enum<string>
기본값:1280x720

Output pixel dimensions; lower precedence than metadata.resolution:

  • 1280x720 / 720x1280 — 720p (default)
  • 1920x1080 / 1080x1920 — 1080p (seconds must be "8")
  • 3840x2160 / 2160x3840 — 4k (seconds must be "8", 4–6× slower render)
사용 가능한 옵션:
1280x720,
720x1280,
1920x1080,
1080x1920,
3840x2160,
2160x3840
metadata
object

Wrapper for fine-grained generation parameters. Higher precedence than the top-level size etc.:

  • Duration resolution order: metadata.durationSeconds > seconds > 8 (send seconds; duration is not recognized)
  • Resolution resolution order: metadata.resolution > size > 720p

응답

Task submitted; returns task_id and queued status

id
string

Task ID (matches task_id; downstream should standardize on task_id)

예시:

"task_xxxxxxxxxxxxxxxx"

task_id
string

Task ID for subsequent polling and download

예시:

"task_xxxxxxxxxxxxxxxx"

object
string

Object type, fixed to video

예시:

"video"

model
string

Model ID used for this task

예시:

"veo-3.1-fast-generate-preview"

status
enum<string>

Task status:

  • queued — submitted, awaiting processing
  • in_progress — generating
  • completed — done, downloadable (/v1/videos/{task_id}/content)
  • failed — failed (not billed), retry possible
사용 가능한 옵션:
queued,
in_progress,
completed,
failed
예시:

"queued"

progress
integer

Generation progress (coarse-grained, jumps only between 0 / 50 / 100, do not use for percentage bars)

예시:

0

created_at
integer

Task creation Unix timestamp (seconds)

예시:

1775025000

completed_at
integer

Task completion Unix timestamp (seconds); only present for completed status

예시:

1775025090