Open AIavDocs홈
API 키는 서버의 환경 변수나 시크릿 관리 도구에 보관하세요. 브라우저 번들, Git, 로그, 스크린샷에는 절대 넣지 마세요.

공식 SDK 빠른 시작

공식 SDK는 전체 흐름(생성 → 폴링 → 다운로드)을 감싸고, 멱등 키를 자동으로 만들며 타입이 지정된 오류를 제공합니다. Node SDK는 의존성이 없고, Python SDK는 httpx에만 의존합니다. 지금은 GitHub 저장소로 제공하며, npm과 PyPI 배포는 따로 안내합니다.

Node

npm install github:openaiav/sdk-node   # npm release to be announced

import { OpenAiav } from '@openaiav/sdk'
const client = new OpenAiav({ apiKey: process.env.OPENAIAV_API_KEY })
const task = await client.generations.createAndWait({
  model: 'seedance-2.5-oa', prompt: 'She walks into the sunlight.',
  resolution: '480p', aspectRatio: 'adaptive', durationSeconds: 4,
  generateAudio: false
})
await client.generations.downloadToFile(task.id, './out.mp4')

Python

pip install git+https://github.com/openaiav/sdk-python   # PyPI release to be announced

from openaiav import OpenAiav
client = OpenAiav(os.environ["OPENAIAV_API_KEY"])
task = client.generations.create_and_wait({
    "model": "seedance-2.5-oa", "prompt": "She walks into the sunlight.",
    "resolution": "480p", "aspectRatio": "adaptive", "durationSeconds": 4,
    "generateAudio": False,
})
client.generations.download_to_file(task["id"], "./out.mp4")

4단계로 연동하기

  1. 서버의 OPENAIAV_API_KEY 환경 변수로 https://api.openaiav.com/v1/models를 호출해 현재 모델 키, 가격, reference_modes를 읽습니다.
  2. prompt, referenceMode, referenceImages를 /v1/generations로 POST합니다. 참조 이미지는 공개 HTTPS URL이며 사전 등록이 필요 없습니다. 성공하면 HTTP 201을 반환합니다.
  3. 반환된 id를 저장하고 poll_after_ms 후에 같은 GET /v1/generations/{id}를 폴링합니다. processing, result_pending, submission_unknown이면 계속 기다리고, 새 작업을 만들지 마세요.
  4. 상태가 succeeded가 되면 GET /v1/generations/{id}/content로 다운로드합니다. 전체 응답은 HTTP 200, 단일 바이트 범위는 206입니다.

인증과 멱등성

export OPENAIAV_API_KEY='oav_...'
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY  (reuse this value only when retrying this same create)"

모든 요청에 Authorization: Bearer oav_...를 보내고 키는 서버에 보관하세요. 생성에는 generation:create, 폴링과 다운로드에는 generation:read가 필요합니다. 생성 의도마다 새 Idempotency-Key(UUID)를 만들므로 샘플은 실행할 때마다 새 키를 사용합니다. 네트워크 결과가 불확실해 같은 생성을 재시도할 때만 그 키를 다시 사용하고, 한 키를 서로 다른 본문과 함께 쓰지 마세요.

요청 헤더

파라미터유형필수설명
Authorizationstring필수모든 /v1 요청은 Bearer oav_...를 사용합니다. 키는 서버에 보관하세요.
Idempotency-Keystring작업 생성 시 필수생성 의도마다 새 값(예: UUID)을 만들고, 같은 생성을 재시도할 때만 다시 사용하세요. 값과 본문이 같으면 중복 생성되거나 중복 청구되지 않습니다.
Content-TypestringPOST 요청 시 필수생성 요청은 application/json을 사용합니다.

엔드포인트

메서드경로성공권한 범위설명
GET/v1/models200유효한 API 키라면 모두 가능현재 판매 중인 모델, 가격, 해상도, 길이, reference_modes를 읽습니다. 제출하기 전에 카탈로그에서 기능을 확인하세요.
POST/v1/generation-quotes201generation:create현재 가격을 미리 보여주지만 고정하지는 않습니다. 생성 시 다시 계산하고 생성 응답의 reserved_usd를 그대로 고정 금액으로 청구합니다. 실패한 작업은 전액 환불됩니다. quoteId는 계속 허용되고 expires_at는 새로고침 권장 시각입니다.
POST/v1/generations201generation:create비동기 작업을 만듭니다. 참조 이미지와 referenceMode는 같은 JSON 요청에 담아 보내세요.
GET/v1/generations/{id}200generation:readpoll_after_ms에 따라 같은 작업이 최종 상태가 될 때까지 폴링합니다.
GET/v1/generations/{id}/content200 / 206generation:read작업이 성공하면 결과를 다운로드합니다. 단일 바이트 범위 요청은 206을 반환합니다.

1단계: 모델 기능 확인

모델 기능을 코드에 하드코딩하지 마세요. reference_modes에 나온 모드만 제출하고, 호환되지 않는 조합은 제출 전에 숨기거나 막으세요. 최소 예시는 seedance-2.5-oa로 4초, 480p, 오디오 없는 요청을 보여 줍니다.

curl --fail-with-body 'https://api.openaiav.com/v1/models' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY"

최소 공개 동영상 예시

이 예시에는 전체 흐름이 담겨 있습니다: 생성 → 같은 작업 폴링 → 다운로드. first_frame은 참조 이미지 한 장과 adaptive를 사용하고, generateAudio=false로 오디오를 요청하지 않습니다. 성공 코드는 201, 200, 200/206이며, 실패하면 먼저 HTTP를 확인한 뒤 error.code를 확인하세요.

# Keep OPENAIAV_API_KEY in an environment variable; do not paste secrets into shell history.
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY  (reuse this value only when retrying this same create)"

# 1. Create — success: HTTP 201. On failure, the response body contains error.code.
# Lost response (timeout or dropped connection)? Re-run this same command in this shell:
# the unchanged $IDEMPOTENCY_KEY returns the original task instead of creating a second one.
curl --fail-with-body --request POST 'https://api.openaiav.com/v1/generations' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY" \
  --header "Idempotency-Key: $IDEMPOTENCY_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "seedance-2.5-oa",
  "prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "adaptive",
  "durationSeconds": 4,
  "referenceMode": "first_frame",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}'

# 2. Save the returned id as TASK_ID. Poll the same id — success: HTTP 200.
curl --fail-with-body 'https://api.openaiav.com/v1/generations/TASK_ID' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY"

# Repeat step 2 after poll_after_ms until status is succeeded or failed.
# Never recreate a task whose status is submission_unknown.

# 3. After succeeded, download — success: HTTP 200 (or 206 with Range).
curl --fail-with-body --location 'https://api.openaiav.com/v1/generations/TASK_ID/content' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY" \
  --output 'result.mp4'

요청 파라미터

파라미터유형필수설명
modelstring필수GET /v1/models의 model 값을 사용하세요. 최소 동영상 예시는 seedance-2.5-oa를 사용합니다.
promptstring필수1~4000자. 멀티모달 참조에서는 배열 순서대로 @Image1, @Image2처럼 이미지를 가리킬 수 있습니다.
resolutionstring선택선택한 모델의 resolutions에 있어야 합니다. 최소 동영상 예시는 480p를 사용합니다.
aspectRatiostring선택선택한 모델의 aspect_ratios에 있어야 합니다. 모델이 시작 프레임 요청에 요구하면 adaptive를 사용하세요. image_size_options가 있는 이미지 모델은 resolution과 aspectRatio를 그 목록에서 한 쌍으로 골라야 합니다. 모든 해상도에서 모든 화면 비율을 쓸 수 있는 것은 아닙니다.
durationSecondsinteger선택동영상 길이는 durationSeconds를 카탈로그 duration_seconds 범위의 정수 초로 지정하세요. 생략하면 모델의 최소 길이를 사용합니다. 최소 예시는 4초입니다.
referenceModefirst_frame | omni_reference동영상에 참조 이미지를 쓸 때 필수reference_modes에 해당 모드를 명시한 Seedance 동영상 모델에서만 사용하세요. 요청 하나에는 모드를 하나만 선택할 수 있습니다.
referenceImagesstring[]referenceMode와 함께 입력공개 HTTPS 이미지 URL입니다. first_frame에는 이미지가 정확히 한 장 필요하며, omni_reference의 한도는 reference_images_max에서 확인하세요.
inputImagesstring[]선택이미지 → 이미지 생성에 쓰는 입력 이미지(참조 이미지)로, 이미지 모델에서만 사용합니다. 각 항목은 공개 HTTPS 이미지 URL이거나 data:image/png;base64,…, data:image/jpeg;base64,…, data:image/webp;base64,… 형식의 data URL입니다. 모델별 한도는 GET /v1/models의 input_images_max, input_image_max_bytes(이미지 한 장 기준, URL과 data URL 모두 적용), input_image_mime_types에서 확인하세요. 참조 이미지를 넣으면 청구 금액이 올라갈 수 있습니다. 동영상 참조 모드와 함께 쓰지 마세요.
generateAudioboolean선택오디오를 지원하는 동영상 모델에서는 기본값이 true입니다. 가장 저렴한 예시는 false를 명시해 보냅니다. 현재 카탈로그에는 별도의 오디오 추가 요금이 없으며, 청구는 항상 GET /v1/models를 기준으로 합니다.
outputFormatmp4 | mov선택카탈로그의 output_formats에서만 선택하세요. 최소 예시는 mp4를 사용합니다.

참조 모드

first_frame

first_frame: 참조 이미지가 첫 프레임이 되어 구도를 정합니다. referenceImages에는 정확히 하나만 보내세요. aspectRatio는 모델의 aspect_ratios에서 고르며, 카탈로그에서 제공하면 adaptive로 고정됩니다(출력은 참조 이미지를 따릅니다). first_last_frame: referenceImages를 정확히 2개 보내세요. 배열 순서대로 시작 프레임, 끝 프레임이 되며 그 사이는 모델이 채웁니다. 두 이미지의 크기가 같을 필요는 없습니다. 프레임 모드는 omni_reference와 함께 쓸 수 없습니다.

{
  "model": "seedance-2.5-oa",
  "prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "adaptive",
  "durationSeconds": 4,
  "referenceMode": "first_frame",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}

omni_reference

omni_reference: 참조 미디어는 첫 프레임이 되지 않으면서 피사체, 스타일, 장면의 일관성을 유지합니다. referenceImages 외에도 지원 모델은 referenceVideos와 referenceAudios를 받습니다. 유형별 한도는 아래 표에 있으며, 카탈로그에 선언되지 않은 유형은 제출 시 400이 반환됩니다. 프롬프트에서는 유형별 순서로 @Image1, @Video1, @Audio1처럼 가리킵니다.

{
  "model": "seedance-2.5-oa",
  "prompt": "Keep the identity and outfit from @Image1; a young woman walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "16:9",
  "durationSeconds": 4,
  "referenceMode": "omni_reference",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}

현재 호환 범위

모든 동영상 모델을 하나의 방식으로 연동합니다: 같은 엔드포인트, 같은 필드를 쓰며 모델을 바꿀 때는 model만 바꾸면 됩니다. 차이는 모두 카탈로그가 선언하며, 아래 표가 바로 그 카탈로그입니다. 모델마다 지원하는 참조 모드와 미디어 유형별 허용 개수를 보여 줍니다. 카탈로그에 선언되지 않은 기능은 제출 시 명시적으로 거부되며, 조용히 무시되지 않습니다.

카탈로그를 불러오지 않았습니다. 먼저 GET /v1/models를 호출하세요. reference_modes가 없는 모델에는 참조 모드를 제출하지 마세요.

시작 프레임 상세와 끝 프레임 이어 쓰기

시작 프레임 상세: first_frame과 omni_reference는 함께 쓸 수 없으므로 요청마다 하나만 선택합니다. 멀티모달 참조에서도 프롬프트로 참조 이미지를 첫 장면 쪽으로 유도할 수 있지만, 첫 프레임이 정확히 같아야 한다면 그 이미지를 first_frame 모드로 보내세요. Seedance 2.5의 시작 프레임 작업은 화면 비율이 adaptive로 고정됩니다(출력은 시작 프레임을 따릅니다). 끝 프레임 이어 쓰기: 생성할 때 returnLastFrame: true를 보내면, 성공한 작업이 last_frame_url(동영상과 같은 크기의 워터마크 없는 PNG, 24시간 보관)도 반환합니다. 이 URL을 다음 요청의 first_frame referenceImages로 바로 넣으면 사전 등록 없이 여러 컷을 이어 붙일 수 있습니다.

참조 동영상 요금

  • 길이를 측정할 수 있는 참조 동영상은 고정 가격으로 과금되며, 그 금액을 미리 확인할 수 있습니다. 측정할 수 없으면 요금 없이 미리보기를 거절합니다.
  • POST /v1/generation-quotes로 현재 가격을 미리 확인하세요. URL 동영상은 생성 시 다시 측정하고 가격을 계산하며 생성 응답의 reserved_usd가 실제 금액입니다. quoteId는 가격을 고정하지 않고 expires_at는 새로고침 시각만 제안합니다.
  • 모델 카탈로그는 동영상별 및 총 길이, 개수와 최소 청구 시간을 정합니다. 참조 동영상 한 개의 길이는 Seedance 2.0 시리즈가 2~15초, 그 밖의 지원 모델이 2~30초입니다. 측정된 동영상이 한도를 벗어나면 요금 없이 422 REFERENCE_DURATION_OUT_OF_RANGE를 반환합니다.
  • 공개 HTTPS MP4/MOV 직접 링크를 사용하세요. 알려진 파일 크기가 200 MiB를 넘으면 REFERENCE_VIDEO_TOO_LARGE를 반환하며 크기를 알 수 없어도 견적을 받을 수 있습니다. 비공개 URL은 REFERENCE_URL_NOT_PUBLIC, 측정 중 혼잡은 429 REFERENCE_PROBE_BUSY입니다. 콘솔 업로드 한도는 32 MiB입니다.
  • 모든 작업은 생성 시 견적 금액인 reserved_usd가 청구되며, 성공하면 그 금액 그대로이고 실패하면 전액 환불됩니다. 미리보기의 price_usd는 그 시점에 생성하면 청구될 금액과 같으며 출력 길이는 -1 대신 명시해야 합니다.
  • 공개 동영상 URL은 미리보기와 생성 시 각각 검사한 뒤 저장이나 에셋 등록 없이 생성 서비스에 직접 전달됩니다. 내용을 안정적으로 유지하세요. 업로드는 별도 경로를 사용하며 실제 인물 얼굴 제한은 그대로 적용됩니다.

이미지 모델 가격

  • 이미지 모델은 장당 가격이며 resolution과 aspectRatio에 따라 달라집니다(image_pricing.rates). gpt-image-*와 nano-banana-* 모델의 표시 가격은 짧은 프롬프트에 참조 이미지가 없는 경우의 가격입니다.
  • 이 모델들은 참조 이미지를 넣거나 프롬프트가 길면 청구 금액이 올라갑니다. 작업을 만들기 전에 같은 본문으로 POST /v1/generation-quotes를 호출하세요. 반환된 price_usd가 현재 가격 기준 해당 요청의 청구 금액입니다. 실패한 작업은 전액 환불됩니다.

폴링과 다운로드

succeeded와 failed만 최종 상태입니다. submission_unknown은 접수 여부를 확인하는 중이고 result_pending은 결과를 마무리하는 중입니다. 원래 작업 ID를 보관하고 계속 조회하며 생성 요청을 다시 보내지 마세요. 성공 후에는 Open AIav 외부 주소 대신 인증된 /content 경로를 사용하세요. 결과는 24시간 보관됩니다(상세 응답의 output_expires_at을 확인하고 만료 전에 저장하세요. 만료된 다운로드는 410 OUTPUT_EXPIRED를 반환합니다).

상태최종 상태조치
processing아니요접수되었습니다. poll_after_ms 후에 다시 폴링하세요.
result_pending아니요결과를 마무리하는 중입니다. 작업 ID를 보관하고 같은 작업을 계속 조회하세요. 다시 생성하지 마세요.
submission_unknown아니요접수 여부를 확인하고 있습니다. 생성 요청을 다시 보내지 말고, 원래 작업 ID를 보관해 계속 폴링하세요.
succeeded예성공했습니다. /content로 결과를 다운로드하세요.
failed예최종 실패했으며 금액은 전액 환불되었습니다. error_code를 확인하세요.

종료된 엔드포인트 이전

이전 /v1/assets, /v1/assets/content, /v1/assets/{id}, /v1/asset-groups, /v1/asset-groups/{id} 엔드포인트는 종료되었습니다. 해당 이전 권한 범위를 가진 유효한 키로 호출하면 HTTP 410 / ENDPOINT_RETIRED가 반환됩니다. 새로운 연동에서는 이 경로를 호출하지 말고, referenceMode와 referenceImages를 같은 생성 요청에 넣으세요.

오류 코드 참조

전체 참조: HTTP 상태, 코드, 의미, 권장 조치, SDK 오류 클래스. 이 표는 SDK의 오류 매핑과 같은 데이터를 사용하며, 알 수 없는 새 코드는 SDK가 HTTP 상태에 따라 처리합니다.

HTTP코드의미권장 조치SDK
401UNAUTHENTICATEDAPI 키가 없거나 인식할 수 없습니다.Authorization: Bearer oav_…를 보내세요. 키는 서버에 보관합니다.AuthenticationError
401INVALID_API_KEYAPI 키가 올바르지 않거나 폐기되었습니다.콘솔에서 키를 확인하세요. 필요하면 교체해 새 키를 받으세요.AuthenticationError
403INSUFFICIENT_SCOPE키에 이 작업에 필요한 권한 범위(scope)가 없습니다.생성에는 generation:create, 폴링과 다운로드에는 generation:read가 필요합니다.PermissionError
429RATE_LIMITED요청이 키의 속도 제한을 넘었습니다.Retry-After / retryAfterSeconds에 따라 기다린 뒤 다시 시도하세요. SDK는 자동으로 처리합니다.RateLimitError
400IDEMPOTENCY_KEY_REQUIRED생성 요청에는 Idempotency-Key 헤더가 필요합니다.새 요청마다 고유한 키를 만들고 재시도할 때는 같은 키를 쓰세요. SDK는 자동으로 만듭니다.InvalidRequestError
409IDEMPOTENCY_KEY_CONFLICT같은 멱등 키가 다른 본문과 함께 사용되었습니다.파라미터가 다르면 새 키를 쓰고, 재시도할 때는 키와 본문을 똑같이 유지하세요.InvalidRequestError
400MODEL_NOT_FOUND알 수 없는 모델 ID입니다.GET /v1/models의 ID를 사용하세요(예: seedance-2.5-oa).InvalidRequestError
503MODEL_NOT_AVAILABLE이 모델은 지금 호출할 수 없습니다.요금은 청구되지 않았습니다. GET /v1/models에서 모델의 status를 확인하고 나중에 다시 시도하세요.ServerError
400INVALID_PROMPT프롬프트가 비어 있거나 너무 깁니다.프롬프트는 1~4000자여야 합니다.InvalidRequestError
400INVALID_DURATIONdurationSeconds가 모델 범위를 벗어났습니다.동영상 길이를 카탈로그 범위 안의 정수 durationSeconds로 지정하세요.InvalidRequestError
400INVALID_RESOLUTION모델이 지원하지 않는 해상도입니다.카탈로그의 resolutions에서 값을 고르세요.InvalidRequestError
400INVALID_ASPECT_RATIO모델이 지원하지 않는 화면 비율입니다.카탈로그의 aspect_ratios에서 고르세요. first_frame은 adaptive로 고정되는 경우가 많습니다.InvalidRequestError
400INVALID_REFERENCE_IMAGESreferenceImages는 공개 HTTPS URL 배열이어야 합니다.작업이 끝날 때까지 읽을 수 있는 https:// 이미지 URL을 넣으세요.InvalidRequestError
400INVALID_REFERENCE_IMAGE참조 이미지 항목 중 올바른 URL이 아닌 것이 있습니다.메시지에 인덱스(referenceImages[i])가 포함되어 있으니 해당 항목을 고치세요.InvalidRequestError
400REFERENCE_IMAGE_URL_NOT_HTTPS참조 이미지 URL이 공개 HTTPS가 아닙니다.http, 사설 네트워크, data URL은 거부됩니다. 이미지를 HTTPS로 공개해 주세요.InvalidRequestError
400REFERENCE_MODE_REQUIRES_IMAGES참조 이미지 없이 referenceMode를 지정했습니다.referenceMode와 referenceImages를 함께 보내세요.InvalidRequestError
400REFERENCE_MODE_NOT_SUPPORTED모델이 요청한 참조 모드를 지원하지 않습니다.카탈로그의 reference_modes에 따라 first_frame / omni_reference를 고르세요.InvalidRequestError
400FIRST_FRAME_REQUIRES_ONE_IMAGEfirst_frame에는 참조 이미지를 정확히 한 장만 넣을 수 있습니다.이미지를 정확히 한 장만 보내세요. 여러 장이면 omni_reference를 사용하세요.InvalidRequestError
400TOO_MANY_REFERENCES참조 이미지 수가 카탈로그 한도를 넘었습니다.카탈로그의 reference_images_max를 확인하세요.InvalidRequestError
400INVALID_INPUT_IMAGESinputImages는 배열이어야 합니다.각 항목은 HTTPS URL 또는 data:image/* base64입니다.InvalidRequestError
400INVALID_INPUT_IMAGE입력 이미지 항목 중 형식이 잘못된 것이 있습니다.각 항목은 HTTPS URL 또는 data:image/* base64여야 하며, 메시지에 인덱스가 포함됩니다.InvalidRequestError
400INPUT_IMAGE_URL_NOT_HTTPS입력 이미지 URL이 HTTPS가 아닙니다.https:// URL이나 data:image/png;base64,… 같은 data URL을 사용하세요.InvalidRequestError
400INPUT_IMAGE_TOO_LARGE요청에 포함된 이미지가 10 MiB를 초과합니다.10 MiB 미만으로 압축해 보내세요. input_image_max_bytes가 있는 모델은 HTTPS URL에도 같은 한도를 적용하며, 초과하면 작업이 REFERENCE_INPUT_INVALID로 실패하고 전액 환불됩니다.InvalidRequestError
400IMAGE_INPUT_NOT_SUPPORTED모델이 이미지 입력을 받지 않습니다.input_images_max>0인 이미지 모델만 inputImages를 받습니다.InvalidRequestError
400TOO_MANY_INPUT_IMAGES입력 이미지가 너무 많습니다.카탈로그의 input_images_max를 확인하세요.InvalidRequestError
422REFERENCE_DURATION_OUT_OF_RANGE측정된 참조 동영상 길이가 모델 제한을 초과합니다.카탈로그에서 동영상별 길이, 총길이와 개수 제한을 확인하고 가격을 다시 미리 확인하세요. 요금은 부과되지 않았습니다.InvalidRequestError
422REFERENCE_DURATION_UNVERIFIED참조 동영상 길이를 측정할 수 없습니다.Range 요청을 지원하는 호스트에서 일반 MP4/MOV를 사용하세요. faststart를 권장합니다.InvalidRequestError
422REFERENCE_URL_NOT_PUBLIC참조 동영상 URL이 공개 HTTPS가 아닙니다.로그인 없이 접근할 수 있는 443 포트의 공개 HTTPS 파일 URL을 사용하세요.InvalidRequestError
422CONTENT_TYPE_MISMATCH참조 동영상 URL이 필요한 동영상 형식을 반환하지 않습니다.URL이 웹페이지나 이미지가 아닌 MP4/MOV 바이트를 반환하는지 확인하세요.InvalidRequestError
422REFERENCE_VIDEO_TOO_LARGE참조 동영상이 파일 크기 제한을 초과합니다.공개 URL은 200 MiB, 콘솔 업로드는 32 MiB까지입니다. 압축하거나 잘라서 가격을 다시 미리 확인하세요.InvalidRequestError
429REFERENCE_PROBE_BUSY동시에 측정 중인 참조 동영상이 너무 많습니다.retry_after_seconds 후 다시 시도하세요. 요금은 부과되지 않았습니다.RateLimitError
400INSUFFICIENT_BALANCE이 작업을 실행하기에 잔액이 부족합니다.지갑에서 충전하거나 코드를 등록한 뒤 다시 시도하세요.InvalidRequestError
400LEGACY_ASSET_REFERENCE_RETIRED에셋 ID 참조는 더 이상 지원하지 않습니다.같은 요청에 referenceMode + referenceImages(공개 HTTPS)를 보내세요.InvalidRequestError
404NOT_FOUND작업이 없거나 다른 계정의 작업입니다.작업 ID와 키가 같은 계정에 속하는지 확인하세요.InvalidRequestError
409OUTPUT_NOT_READY결과가 아직 준비되지 않았습니다.최종 상태가 될 때까지 poll_after_ms에 따라 작업을 계속 폴링하세요.InvalidRequestError
410OUTPUT_EXPIRED다운로드 기간(성공 후 24시간)이 끝났습니다.결과는 제때 저장하세요. 만료되면 다시 생성해야 합니다. 카운트다운 표시는 output_expires_at을 사용하세요.OutputExpiredError

이미지 작업 실패 코드

이미지 작업이 status=failed로 끝나면 error_code를 읽고 아래 표에서 확인하세요. 실패한 작업은 전액 환불됩니다. SDK는 같은 코드를 담은 GenerationFailedError를 발생시킵니다.

코드의미
CONTENT_POLICY_REJECTED콘텐츠가 검토를 통과하지 못했습니다. 수정한 뒤 다시 제출하세요.
REFERENCE_INPUT_INVALID참조의 형식, 크기와 모델 요구 사항을 확인하세요.
REFERENCE_SOURCE_UNREACHABLE참조 URL을 읽을 수 없습니다. 만료 여부를 확인하거나 다시 업로드하세요.
REFERENCE_SERVICE_UNAVAILABLE참조 처리 서비스를 이용할 수 없습니다. 작업 ID와 함께 지원팀에 문의하세요. 이미지를 바꿀 필요는 없습니다.
GENERATION_INPUT_INVALID생성 파라미터가 이 모델의 요구 사항에 맞지 않습니다.
GENERATION_RATE_LIMITED생성 서비스에 일시적으로 속도 제한이 걸렸습니다. 잠시 후 다시 시도하세요.
GENERATION_REJECTED생성 요청이 거부되었습니다. 이유를 확인하려면 작업 ID와 함께 지원팀에 문의하세요.
GENERATION_SERVICE_UNAVAILABLE생성 서비스를 일시적으로 이용할 수 없습니다.
GENERATION_FAILED작업을 완료하지 못했습니다. 작업 ID와 함께 지원팀에 문의하세요.

콘솔에서만 반환되는 코드

HTTP코드의미권장 조치
400REFERENCE_UPLOAD_NOT_FOUND업로드 참조가 없거나 만료되었거나 다른 계정의 것입니다.플레이그라운드에서 다시 업로드한 뒤 실행하세요(업로드는 잠시만 유효합니다).
429UPLOAD_QUOTA_EXCEEDED사용하지 않은 업로드가 너무 많습니다.업로드를 사용하는 작업을 실행하거나 만료될 때까지 기다리세요.
429WEBHOOK_ENDPOINT_LIMIT웹훅 엔드포인트 수가 한도에 도달했습니다.사용하지 않는 엔드포인트를 삭제하거나 비활성화하세요.
400INVALID_WEBHOOK_URL콜백 URL이 공개적으로 접근 가능한 HTTPS 주소가 아닙니다.공개 HTTPS 주소를 사용하세요. 사설 호스트와 루프백 주소는 거부됩니다.