탐색으로 건너뛰기

Gemini Omni 1.2 Flash

텍스트, 첫 프레임, 첫·마지막 프레임, 또는 최대 10장의 참조 이미지와 3개의 참조 영상으로 720p, 1080p 또는 4K의 3~15초 사운드 포함 영상을 만드는 Google의 정식 출시 영상 모델입니다.

  • Gemini Omni 1.1 Flash와 비교하면 클립 길이가 최대 10초가 아니라 15초이고, 참조 이미지 간 인물과 장면의 일관성이 높으며, 립싱크와 여러 인물의 대화가 더 자연스럽고, 카메라 움직임을 더 세밀하게 제어할 수 있습니다.
  • 비동기: 생성 호출은 작업 ID를 반환하며, 작업이 성공하면 영상이 준비됩니다.
  • 모델 ID 하나로 네 가지 입력을 받습니다. 텍스트만, images의 첫 프레임 하나 또는 첫·마지막 프레임, 또는 최대 10개의 reference_images와 선택적인 최대 3개의 reference_videos입니다. 프레임과 참조는 함께 쓸 수 없습니다.
  • 16:9 또는 9:16의 3~15초 클립. duration은 초 단위 정수입니다.
  • 모든 영상에는 사운드트랙이 포함됩니다. 끄는 스위치는 없으며, 참조 오디오는 받지 않습니다.
  • 요청한 해상도와 초 수로 과금됩니다. 실패한 작업은 비용이 들지 않습니다.
POST/v1/videos/tasks실행해 보기

API Explorer에서 이 모델을 엽니다. BeatAPI API 키를 입력해 작업을 만드세요. 실제 호출이며 본인 잔액에서 과금됩니다.

엔드포인트와 인증

POST https://api.beatapi.io/v1/videos/tasks

Authorization string 필수

BeatAPI API 키를 Bearer <BEATAPI_API_KEY>로 보내세요. 키는 대시보드에서 만듭니다. 키는 서버에 보관하고, 브라우저나 모바일 앱에 포함하지 마세요.

본문은 Content-Type: application/json과 함께 JSON으로 보냅니다. Idempotency-Key는 선택 사항입니다. 논리적 요청마다 고유한 값(최대 255자)을 보내고, 완전히 같은 본문을 재시도할 때만 다시 사용하세요. 24시간 안에 같은 키와 본문으로 재시도하면 첫 응답을 Idempotent-Replayed: true와 함께 다시 반환하고, 같은 키에 다른 본문을 보내면 409 idempotency_conflict를 반환합니다. 2xx 이외의 응답은 저장되지 않으므로 400이나 402 이후의 재시도는 다시 실행됩니다.

요청 처리 방식

1

작업 만들기

아래 파라미터를 엔드포인트로 POST하세요. 201은 작업이 접수되었고 가격만큼 잔액이 보류되었다는 뜻이며, 작업은 백그라운드에서 실행됩니다. data.id를 저장하세요.

2

완료 기다리기

status가 succeeded 또는 failed가 될 때까지 GET /v1/tasks/{task_id}를 호출하고, 호출 사이에 data.poll_after_seconds만큼 기다리세요(이미지 5초, 영상 8초). 또는 task.succeeded와 task.failed에 대한 웹훅을 등록하세요. 처리 시간 초과로 중단된 작업은 이벤트를 보내지 않으므로 폴링은 대비책으로 유지하세요.

3

결과 저장하기

succeeded이면 모든 data.output.media[].url을 다운로드해 필요한 파일을 저장하세요. BeatAPI는 결과 URL을 얼마 동안 사용할 수 있는지 보장하지 않습니다. failed이면 data.error_code와 data.error_message를 확인하세요. 보류된 금액은 잔액으로 돌아왔으며, data.retryable은 같은 요청을 다시 보내면 성공할 수 있는지 알려 줍니다.

입력 모드

모드필수 입력참고
텍스트로 영상 생성model, promptimages, reference_images, reference_videos를 보내지 않습니다.
첫 프레임model, prompt, images(링크 1개)이 이미지에서 영상이 시작됩니다.
첫 프레임과 마지막 프레임model, prompt, images(링크 2개)첫 번째 링크로 영상이 시작되고 두 번째 링크로 끝납니다. 순서대로입니다.
참조 이미지와 영상model, prompt, reference_images(링크 1~10개)원하면 reference_videos를 최대 3개까지 추가할 수 있습니다. 참조 영상에는 참조 이미지가 하나 이상 필요합니다. images와 함께 쓸 수 없습니다.

요청 파라미터

model string 필수

실행할 모델입니다.

값: gemini-omni-1.2-flash

값이 잘못된 경우

  • 누락: "model" is required
  • 이 엔드포인트에 이미지 모델을 보낸 경우: "model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint

prompt string 필수

영상에서 일어나는 일: 동작, 카메라, 배경, 원하는 대사나 소리.

길이: 1–5000자

  • 길이는 문자 수로 계산합니다(한중일 문자 하나는 1자).
  • 참조를 쓸 때는 각 참조에서 무엇을 가져올지 프롬프트에 적으세요. 예: “첫 번째 참조 이미지의 여성”, “참조 영상의 카메라 움직임”.

값이 잘못된 경우

  • 누락: "prompt" is required
  • 비어 있거나 한도보다 긴 경우: "prompt" has an unsupported length
  • 문자열이 아닌 경우: "prompt" must be a string

images string[] 선택

프레임: 링크 하나는 첫 프레임, 링크 두 개는 순서대로 첫 프레임과 마지막 프레임입니다. 선택 사항이며, 텍스트로 영상을 생성하거나 참조를 보낼 때는 생략하세요.

항목 수: 1–2
각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.

  • 각 링크는 공개 https:// URL이어야 합니다.
  • 영상의 시작이나 끝이 아니라 참고할 이미지라면 reference_images를 사용하세요.

값이 잘못된 경우

  • 링크가 2개 초과: "images" accepts at most 2 items
  • 빈 배열: "images" requires at least 1 item
  • 배열이 아닌 경우: "images" must be an array
  • https:// 링크가 아닌 경우: "images[0]" must be a public HTTPS URL
  • reference_images 또는 reference_videos와 함께 보낸 경우: Cannot combine "images" with reference inputs in one task

reference_images string[] 선택

영상에 사용할 인물, 제품, 스타일, 배경 이미지 1~10장.

항목 수: 1–10
각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.

  • 각 링크는 공개 https:// URL이어야 합니다.
  • reference_videos를 보낼 때는 항상 필요합니다.

값이 잘못된 경우

  • 링크가 10개 초과: "reference_images" accepts at most 10 items
  • 빈 배열: "reference_images" requires at least 1 item
  • 배열이 아닌 경우: "reference_images" must be an array
  • images와 함께 보낸 경우: Cannot combine "images" with reference inputs in one task

reference_videos string[] 선택

새 영상이 따라 할 움직임, 카메라 워크, 피사체가 담긴 영상 클립 1~3개.

항목 수: 1–3
각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.

  • 각 링크는 MP4, MOV, WebM 파일로 연결되는 공개 https:// URL이어야 합니다.
  • reference_images에 링크가 하나 이상 있을 때만 사용할 수 있습니다.
  • 참조 영상은 가격에 영향을 주지 않으며, 새 영상의 초 수만큼 지불합니다.

값이 잘못된 경우

  • reference_images 없이 보낸 경우: Gemini Omni 1.2 Flash "reference_videos" need at least one image in "reference_images"
  • 링크가 3개 초과: "reference_videos" accepts at most 3 items
  • images와 함께 보낸 경우: Cannot combine "images" with reference inputs in one task

duration integer 선택기본값: 5

영상 길이(초)이며 정수입니다.

기본값: 5
범위: 3–15

  • 생략하면 5가 사용되어 과금됩니다.
  • 초 단위로 과금되므로(과금 참고) 가격을 좌우하는 주요 요소입니다.

값이 잘못된 경우

  • 3~15 범위 밖, 정수가 아님, 또는 문자열로 보낸 경우: "duration" is outside its supported range

aspect_ratio string 선택기본값: 16:9

영상 모양: 가로 16:9 또는 세로 9:16.

허용 값: 16:9, 9:16
기본값: 16:9

  • 생략하면 16:9가 사용됩니다.
  • 프레임에도 적용되므로 첫 프레임의 모양에 맞게 고르세요.

값이 잘못된 경우

  • 목록에 없는 값: "aspect_ratio" must be one of: [16:9 9:16]

resolution string 선택기본값: 720p

출력 해상도입니다. 한 단계 올라갈 때마다 초당 가격이 높아집니다.

허용 값: 720p, 1080p, 4k
기본값: 720p

  • 생략하면 720p가 사용됩니다.
  • 4k와 4K는 같은 등급입니다.

값이 잘못된 경우

  • 목록에 없는 값(예: 480p 또는 720P): "resolution" must be one of: [720p 1080p 4k 4K]

게이트웨이는 작업을 만들기 전에 다음 조합도 검사합니다.

  • images는 참조 입력과 함께 쓸 수 없습니다
  • images는 프레임입니다. 하나는 첫 프레임, 두 개는 순서대로 첫 프레임과 마지막 프레임입니다
  • reference_videos에는 reference_images에 이미지가 하나 이상 필요합니다
  • 오디오 스위치는 없으며, 참조 오디오는 지원하지 않습니다

입력 미디어 제한

게이트웨이는 작업을 만들기 전에 모든 입력을 읽고, 아래 제한을 벗어난 입력은 해당 입력을 명시한 400 bad_request로 거부합니다. 과금되지 않습니다.

미디어작업 생성 전에 검사하는 제한
이미지각각 최대 20 MB
영상각각 최대 64 MB
  • 게이트웨이는 작업을 만들기 전에 연결된 각 파일의 크기를 검사합니다. 제한을 넘는 파일은 해당 파일을 명시한 400(예: images[0] is 25.0 MB; this model takes images up to 20 MB.)으로 거부되며 비용은 청구되지 않습니다.
  • 호스트가 4xx 오류로 응답하거나 빈 파일을 가리키는 링크도 같은 방식으로 거부됩니다: <field>[<n>] could not be downloaded: <reason>.
  • 작업 생성 후 모델이 사용할 수 없는 링크는 작업을 실패시키며(보통 bad_request), 해당 작업은 전액 환불됩니다.
  • 로컬 파일이 있다면 POST /v1/files로 업로드하고 반환된 data.url을 전달하세요.

이 모델이 받지 않는 필드

다음 필드를 보내면 무시되지 않고 과금 전에 거부됩니다.

  • reference_audios, generate_audio, seed, quality, sound, task_type, output_format, watermark 및 다른 영상 모델의 필드 → field "generate_audio" is not supported by model gemini-omni-1.2-flash(보낸 필드 포함). 사운드트랙은 항상 생성되며 끌 수 없습니다.
  • 영상 엔드포인트가 전혀 모르는 필드 → unknown field: <name>.

요청 예시

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.2-flash",
"prompt": "A dramatic product reveal of a glass water bottle, slow orbiting camera, soft studio reflections",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p"
}'

텍스트로 영상 생성

텍스트만으로 만드는 5초 720p 가로 클립입니다.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.2-flash",
"prompt": "A dramatic product reveal of a glass water bottle, slow orbiting camera, soft studio reflections",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p"
}'

첫 프레임

이미지 한 장에서 시작하는 5초 720p 클립입니다.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.2-flash",
"prompt": "The singer turns toward the camera and smiles, hair moving in the breeze, warm spotlights",
"images": [
"https://cdn.beatapi.io/samples/neon-singer.png"
],
"duration": 5,
"resolution": "720p"
}'

첫 프레임과 마지막 프레임

첫 번째 이미지에서 두 번째 이미지로 이어지는 8초 1080p 클립입니다.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.2-flash",
"prompt": "The camera pulls away from the singer and glides across the stage to the bottle on a table",
"images": [
"https://cdn.beatapi.io/samples/neon-singer.png",
"https://cdn.beatapi.io/samples/smart-bottle.png"
],
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "1080p"
}'

참조 이미지와 참조 영상

참조 이미지 두 장과 참조 영상 하나로 만드는 8초 720p 세로 클립입니다.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.2-flash",
"prompt": "The singer from the first reference image lifts the bottle from the second toward the camera, following the camera move of the reference video",
"reference_images": [
"https://cdn.beatapi.io/samples/neon-singer.png",
"https://cdn.beatapi.io/samples/smart-bottle.png"
],
"reference_videos": [
"https://your-cdn.example.com/clips/source.mp4"
],
"duration": 8,
"aspect_ratio": "9:16",
"resolution": "720p"
}'

응답

작업 생성(201)

작업 객체입니다. 작업이 성공할 때까지 output는 null입니다. ‘실행 중’으로 표시된 필드는 작업이 끝나면 사라집니다.

{
"data": {
"id": "task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ",
"object": "task",
"task_kind": "video",
"capability_id": "gemini-omni-1.2-flash",
"capability_version": 1,
"media_type": "video",
"model": "gemini-omni-1.2-flash",
"status": "queued",
"stage": "queued",
"created_at": 1791993600,
"updated_at": 1791993600,
"completed_at": null,
"poll_after_seconds": 8,
"output": null,
"usage": {
"credits_reserved": 0.245,
"credits_settled": 0,
"credits_refunded": 0,
"credits_charged": 0.245,
"billable_duration_seconds": 5
},
"request_id": "req_5f0c2a9e4b7d4e31",
"error_code": null,
"error_message": null
}
}
필드타입설명
data.idstring작업 ID: task_ 뒤에 영문자와 숫자 32자가 붙습니다. 폴링과 웹훅 이벤트 매칭에 사용합니다.
data.objectstring항상 task.
data.task_kindstringimage 또는 video.
data.capability_idstring보낸 모델 ID입니다.
data.capability_versioninteger모델의 계약 버전으로, 현재 1입니다.
data.media_typestringimage 또는 video.
data.modelstring보낸 모델 ID입니다(capability_id와 같음).
data.statusstringqueued, processing, succeeded 또는 failed. 마지막 두 개만 최종 상태입니다.
data.stagestringstatus와 같은 값으로, 오래된 클라이언트를 위해 유지합니다.
data.created_atinteger작업 생성 시각(Unix 초)입니다.
data.updated_atinteger마지막 변경 시각(Unix 초)입니다.
data.completed_atinteger | null작업 완료 시각(Unix 초)입니다. 실행 중에는 null입니다.
data.poll_after_secondsinteger실행 중: 다음 폴링까지 기다릴 시간입니다(이미지 5, 영상 8).
data.typical_secondsobject실행 중이며 최근 작업이 충분할 때: 최근 window 동안 samples개 작업의 p50 및 p90 완료 시간(초)입니다.
data.outputobject | null결과입니다. status가 succeeded가 될 때까지 null입니다. 아래 출력 필드를 참고하세요.
data.usage.credits_reservednumber작업 생성 시 잔액에서 보류한 USD 금액입니다.
data.usage.credits_chargednumber이 작업의 비용(USD)입니다. 실패한 작업에서는 0입니다.
data.usage.credits_settlednumber최종 청구 금액(USD)입니다. 작업이 성공하면 설정되고, 그렇지 않으면 0입니다.
data.usage.credits_refundednumber잔액으로 환불된 금액(USD)입니다. 실패한 작업에서는 환불이 기록되면 보류 금액과 같아집니다.
data.usage.billable_duration_secondsinteger영상만 해당: 가격 산정의 기준이 되는 초입니다. 모델이 길이를 보고하지 않으면 없습니다.
data.request_idstring요청 ID입니다. 지원팀에 문의할 때 함께 알려 주세요.
data.error_codestring | null실패 코드입니다. 작업이 실패하지 않았다면 null입니다.
data.error_messagestring | null무엇이 잘못되었고 무엇을 바꿔야 하는지 설명합니다. 작업이 실패하지 않았다면 null입니다.

완료된 작업

GET /v1/tasks/{task_id}는 HTTP 200과 함께 status: "succeeded", 그리고 data.output에 결과를 반환합니다.

{
"data": {
"id": "task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ",
"object": "task",
"task_kind": "video",
"capability_id": "gemini-omni-1.2-flash",
"capability_version": 1,
"media_type": "video",
"model": "gemini-omni-1.2-flash",
"status": "succeeded",
"stage": "succeeded",
"created_at": 1791993600,
"updated_at": 1791993690,
"completed_at": 1791993690,
"output": {
"media": [
{
"type": "video",
"url": "https://media.beatapi.io/outputs/task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ/0.mp4",
"mime_type": "video/mp4"
}
],
"r2_url": "https://media.beatapi.io/outputs/task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ/0.mp4"
},
"usage": {
"credits_reserved": 0.245,
"credits_settled": 0.245,
"credits_refunded": 0,
"credits_charged": 0.245,
"billable_duration_seconds": 5
},
"request_id": "req_5f0c2a9e4b7d4e31",
"error_code": null,
"error_message": null
}
}

출력 필드

필드타입설명
output.mediaobject[]생성된 파일입니다. 이 모델은 사운드트랙이 있는 영상 하나를 만듭니다.
output.media[].typestring항상 video.
output.media[].urlstring저장된 영상의 HTTPS 링크입니다. 내려받아 보관하세요. 보관 기간은 보장하지 않습니다.
output.media[].mime_typestringvideo/mp4.
output.r2_urlstring이전 클라이언트를 위해 다시 넣은 영상 URL입니다. 대신 media를 읽으세요.

실패한 작업

실패한 작업도 GET /v1/tasks/{task_id}에서는 HTTP 200입니다. 실패 정보는 본문에 있습니다. 보류 금액이 전액 환불되므로 과금되지 않습니다.

{
"data": {
"id": "task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ",
"object": "task",
"task_kind": "video",
"capability_id": "gemini-omni-1.2-flash",
"capability_version": 1,
"media_type": "video",
"model": "gemini-omni-1.2-flash",
"status": "failed",
"stage": "failed",
"created_at": 1791993600,
"updated_at": 1791993690,
"completed_at": 1791993690,
"output": null,
"usage": {
"credits_reserved": 0.245,
"credits_settled": 0,
"credits_refunded": 0.245,
"credits_charged": 0,
"billable_duration_seconds": 5
},
"retryable": true,
"request_id": "req_5f0c2a9e4b7d4e31",
"error_code": "processing_failed",
"error_message": "The task failed during processing on our side. Retry; a failed task is refunded."
}
}
필드타입설명
data.error_codestringbad_request, content_policy_violation(요청 수정 필요) 또는 processing_unavailable, processing_timeout, processing_failed, result_transfer_failed(나중에 재시도) 중 하나입니다. 오류를 참고하세요.
data.error_messagestring문제와 해결 방법을 설명하는 문장입니다.
data.retryableboolean실패한 작업에만 있습니다. 같은 요청을 다시 보내면 성공할 수 있을 때 true입니다.
data.usageobject환불이 기록되면(보통 작업이 실패하는 시점): credits_charged와 credits_settled는 0이고, credits_refunded는 credits_reserved와 같습니다.

전체 예시

작업을 만들고, 서버의 폴링 안내에 따라 기다린 뒤 결과 URL을 출력합니다. 환경 변수에 BEATAPI_API_KEY를 설정하고 requests를 설치하세요.

import os
import time
import uuid
import requests
API = "https://api.beatapi.io"
HEADERS = {"Authorization": f"Bearer {os.environ['BEATAPI_API_KEY']}"}
def create_task(body: dict) -> dict:
# One Idempotency-Key per logical request: a retry with the same key cannot create a second task.
headers = {**HEADERS, "Idempotency-Key": str(uuid.uuid4())}
for attempt in range(3):
response = requests.post(f"{API}/v1/videos/tasks", headers=headers, json=body, timeout=60)
if response.status_code in (429, 503) and attempt < 2:
time.sleep(int(response.headers.get("Retry-After", 10)))
continue
break
try:
payload = response.json()
except ValueError: # an edge error page is not JSON
response.raise_for_status()
raise
if not response.ok:
error = payload["error"]
raise RuntimeError(f"{response.status_code} {error['code']}: {error['message']} (request_id={error.get('request_id')})")
return payload["data"]
def wait_for_task(task_id: str, timeout_seconds: int = 1800) -> dict:
deadline = time.monotonic() + timeout_seconds
while time.monotonic() < deadline:
response = requests.get(f"{API}/v1/tasks/{task_id}", headers=HEADERS, timeout=30)
if response.status_code == 429 or response.status_code >= 500:
time.sleep(int(response.headers.get("Retry-After", 10)))
continue
response.raise_for_status()
task = response.json()["data"]
if task["status"] in ("succeeded", "failed"):
return task
time.sleep(task.get("poll_after_seconds", 5))
raise TimeoutError(f"task {task_id} is still running; keep polling later")
task = create_task({
"model": "gemini-omni-1.2-flash",
"prompt": "A dramatic product reveal of a glass water bottle, slow orbiting camera, soft studio reflections",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p"
})
print("created", task["id"])
task = wait_for_task(task["id"])
if task["status"] == "failed":
raise SystemExit(f"{task['error_code']}: {task['error_message']}")
for item in task["output"]["media"]:
print(item["url"])

과금

  • 가격은 요청한 해상도와 초 수(duration, 생략하면 5)에 따라 정해집니다. 1080p는 720p보다, 4K는 1080p보다 초당 가격이 높습니다. 입력 방식, aspect_ratio, 프레임이나 참조 수는 가격에 영향을 주지 않습니다.
  • 아래 표는 해상도별 영상 1초 가격입니다. 클립 가격은 이 요금에 duration을 곱한 값입니다.
  • 가격은 작업 생성 시 보류되며, data.usage.billable_duration_seconds에 기준이 된 초 수가 표시됩니다.
  • 실패한 작업은 제출 후 콘텐츠 검수에서 거부된 경우를 포함해 전액 환불됩니다.

현재 정가이며 가격 페이지와 같습니다. 별도 할인 계약이 있는 계정은 더 적게 지불하며, 실제 청구 금액은 항상 작업의 data.usage에서 확인할 수 있습니다.

옵션정가(USD)
1초 · 720p$0.049
1초 · 1080p$0.0728
1초 · 4K$0.1463

자주 발생하는 오류

오류 또는 증상원인해결 방법
400 Cannot combine "images" with reference inputs in one task한 요청에 images의 프레임과 reference_images 또는 reference_videos의 참조를 함께 보냈습니다.images의 프레임 또는 참조 중 하나만 보내세요.
400 Gemini Omni 1.2 Flash "reference_videos" need at least one image in "reference_images"참조 이미지 없이 참조 영상을 보냈습니다.reference_images에 링크를 하나 이상 추가하세요.
400 "images" accepts at most 2 items프레임이 두 개를 넘습니다.첫 프레임, 또는 첫 프레임과 마지막 프레임을 보내세요. 다른 이미지는 reference_images에 넣으세요.
400 "reference_images" accepts at most 10 items참조 이미지가 10장을 넘습니다.최대 10개까지 보내세요.
400 "duration" is outside its supported range3 미만, 15 초과, 소수 또는 문자열입니다.3~15 사이의 정수를 보내세요(예: 8).
400 "resolution" must be one of: [720p 1080p 4k 4K]480p 또는 720P 같은 대문자.720p, 1080p 또는 4k를 보내세요.
400 "aspect_ratio" must be one of: [16:9 9:16]1:1, 21:9 또는 이 모델이 제공하지 않는 다른 비율.16:9 또는 9:16을 보내세요.
400 field "reference_audios" is not supported by model gemini-omni-1.2-flash참조 오디오, generate_audio 및 다른 영상 모델의 필드는 거부됩니다.해당 필드를 삭제하세요. 모든 영상에 사운드트랙이 생성됩니다.
작업이 bad_request와 함께 failed모델이 가져오거나 사용할 수 없는 링크(비공개 또는 만료된 링크, 잘못된 종류의 파일).실제 이미지나 영상의 공개 HTTPS 링크를 사용하거나 POST /v1/files로 업로드하세요. 실패한 작업은 환불되었습니다.
작업이 content_policy_violation과 함께 failed프롬프트, 입력 또는 결과가 콘텐츠 검수에서 거부되었습니다.프롬프트나 입력을 바꾸세요. 그대로 재시도하면 다시 실패하며, 비용은 청구되지 않습니다.
402 insufficient_credits잔액이 요청에 보류되는 가격보다 적습니다. 4K의 긴 클립이 가장 비쌉니다.충전하거나, duration을 줄이거나, 더 낮은 resolution을 사용하세요.

HTTP 오류 요약

작업이 생성되기 전의 오류는 2xx가 아닌 응답으로 오며 과금되지 않습니다. error.code 또는 error.retryable로 분기하세요. message에 문제가 표시됩니다. 전체 목록과 재시도 정책은 오류에 있습니다.

{
"error": {
"code": "bad_request",
"message": "\"prompt\" is required",
"retryable": false,
"request_id": "req_5f0c2a9e4b7d4e31"
}
}
HTTP 상태error.code조치
400bad_request, content_policy_violation요청을 수정하세요. 메시지에 해당 필드가 표시됩니다. 그대로 재시도하지 마세요.
401missing_api_key, invalid_api_key(오래된 클라이언트에서는 unauthorized가 보일 수 있음)유효한 키를 Authorization: Bearer <key>로 보내세요.
402insufficient_credits충전하거나 키 한도를 올린 뒤 다시 보내세요.
403forbidden이 키나 계정으로는 이 모델을 사용할 수 없습니다(예: 무료 크레딧은 일부 모델만 지원). 그대로 재시도하지 마세요.
404not_foundGET /v1/tasks/{task_id}에서: 이 키의 계정에 해당 작업이 없습니다. ID를 확인하세요.
409idempotency_conflict새 Idempotency-Key를 사용하거나, 이 키를 쓴 첫 요청이 끝날 때까지 기다리세요.
429rate_limit_exceededRetry-After에 표시된 시간(또는 error.retry_after_seconds초)만큼 기다린 뒤 재시도하세요.
500internal_error백오프를 적용해 재시도하고, 계속되면 request_id와 함께 지원팀에 문의하세요.
503processing_unavailable, processing_timeout, processing_failed, result_transfer_failed과금되지 않았습니다. 지수 백오프를 적용해 재시도하세요.

인증

AuthorizationBearer

API 키를 Authorization: Bearer <BEATAPI_API_KEY>로 보내세요.

헤더

Idempotency-Keystring선택 사항<=255 characters

본문은 Content-Type: application/json과 함께 JSON으로 보냅니다. Idempotency-Key는 선택 사항입니다. 논리적 요청마다 고유한 값(최대 255자)을 보내고, 완전히 같은 본문을 재시도할 때만 다시 사용하세요. 24시간 안에 같은 키와 본문으로 재시도하면 첫 응답을 Idempotent-Replayed: true와 함께 다시 반환하고, 같은 키에 다른 본문을 보내면 409 idempotency_conflict를 반환합니다. 2xx 이외의 응답은 저장되지 않으므로 400이나 402 이후의 재시도는 다시 실행됩니다.

요청

This endpoint expects an object.
modelenum필수

실행할 모델입니다.

값: gemini-omni-1.2-flash

값이 잘못된 경우

  • 누락: "model" is required
  • 이 엔드포인트에 이미지 모델을 보낸 경우: "model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
허용된 값:
promptstring필수1-5000 characters

영상에서 일어나는 일: 동작, 카메라, 배경, 원하는 대사나 소리.

길이: 1–5000자

  • 길이는 문자 수로 계산합니다(한중일 문자 하나는 1자).
  • 참조를 쓸 때는 각 참조에서 무엇을 가져올지 프롬프트에 적으세요. 예: “첫 번째 참조 이미지의 여성”, “참조 영상의 카메라 움직임”.

값이 잘못된 경우

  • 누락: "prompt" is required
  • 비어 있거나 한도보다 긴 경우: "prompt" has an unsupported length
  • 문자열이 아닌 경우: "prompt" must be a string
aspect_ratioenum선택 사항기본값 16:9

영상 모양: 가로 16:9 또는 세로 9:16.

허용 값: 16:9, 9:16

기본값: 16:9

  • 생략하면 16:9가 사용됩니다.
  • 프레임에도 적용되므로 첫 프레임의 모양에 맞게 고르세요.

값이 잘못된 경우

  • 목록에 없는 값: "aspect_ratio" must be one of: [16:9 9:16]
허용된 값:
durationinteger선택 사항3-15기본값 5

영상 길이(초)이며 정수입니다.

기본값: 5

범위: 3–15

  • 생략하면 5가 사용되어 과금됩니다.
  • 초 단위로 과금되므로(과금 참고) 가격을 좌우하는 주요 요소입니다.

값이 잘못된 경우

  • 3~15 범위 밖, 정수가 아님, 또는 문자열로 보낸 경우: "duration" is outside its supported range
imageslist of strings선택 사항

프레임: 링크 하나는 첫 프레임, 링크 두 개는 순서대로 첫 프레임과 마지막 프레임입니다. 선택 사항이며, 텍스트로 영상을 생성하거나 참조를 보낼 때는 생략하세요.

항목 수: 1–2

각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.

  • 각 링크는 공개 https:// URL이어야 합니다.
  • 영상의 시작이나 끝이 아니라 참고할 이미지라면 reference_images를 사용하세요.

값이 잘못된 경우

  • 링크가 2개 초과: "images" accepts at most 2 items
  • 빈 배열: "images" requires at least 1 item
  • 배열이 아닌 경우: "images" must be an array
  • https:// 링크가 아닌 경우: "images[0]" must be a public HTTPS URL
  • reference_images 또는 reference_videos와 함께 보낸 경우: Cannot combine "images" with reference inputs in one task
reference_imageslist of strings선택 사항

영상에 사용할 인물, 제품, 스타일, 배경 이미지 1~10장.

항목 수: 1–10

각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.

  • 각 링크는 공개 https:// URL이어야 합니다.
  • reference_videos를 보낼 때는 항상 필요합니다.

값이 잘못된 경우

  • 링크가 10개 초과: "reference_images" accepts at most 10 items
  • 빈 배열: "reference_images" requires at least 1 item
  • 배열이 아닌 경우: "reference_images" must be an array
  • images와 함께 보낸 경우: Cannot combine "images" with reference inputs in one task
reference_videoslist of strings선택 사항

새 영상이 따라 할 움직임, 카메라 워크, 피사체가 담긴 영상 클립 1~3개.

항목 수: 1–3

각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.

  • 각 링크는 MP4, MOV, WebM 파일로 연결되는 공개 https:// URL이어야 합니다.
  • reference_images에 링크가 하나 이상 있을 때만 사용할 수 있습니다.
  • 참조 영상은 가격에 영향을 주지 않으며, 새 영상의 초 수만큼 지불합니다.

값이 잘못된 경우

  • reference_images 없이 보낸 경우: Gemini Omni 1.2 Flash "reference_videos" need at least one image in "reference_images"
  • 링크가 3개 초과: "reference_videos" accepts at most 3 items
  • images와 함께 보낸 경우: Cannot combine "images" with reference inputs in one task
resolutionenum선택 사항기본값 720p

출력 해상도입니다. 한 단계 올라갈 때마다 초당 가격이 높아집니다.

허용 값: 720p, 1080p, 4k

기본값: 720p

  • 생략하면 720p가 사용됩니다.
  • 4k와 4K는 같은 등급입니다.

값이 잘못된 경우

  • 목록에 없는 값(예: 480p 또는 720P): "resolution" must be one of: [720p 1080p 4k 4K]
허용된 값:

응답

작업 객체입니다. 작업이 성공할 때까지 output는 null입니다. ‘실행 중’으로 표시된 필드는 작업이 끝나면 사라집니다.

오류

400
Bad Request Error
401
Unauthorized Error
402
Payment Required Error
403
Forbidden Error
409
Conflict Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error