개요
VEO 3.1 Official은 Google Veo 3.1을 위한 APIYI의 공식 릴레이 채널입니다. Google AI Studio의veo-3.1-generate-preview / veo-3.1-fast-generate-preview 비동기 엔드포인트로의 투명한 패스스루를 제공하며, 모델 ID, 응답 필드 및 제한 사항이 업스트림과 동일합니다. 요청당 과금 방식, Default 그룹에서 호출 가능 — 현재 이용 가능한 가장 진입 장벽이 낮은 공식 품질의 Veo 3.1 채널입니다.
Default 그룹 + 요청당 과금 또는 종량제 우선 tokens(전용 그룹 불필요, 순수 종량제는 지원되지 않음). 가장 간편한 도입 방식으로 공식 수준의 품질이 필요한 광고 숏폼, 이커머스 에셋, 소셜 미디어 콘텐츠 및 제품 데모에 적합합니다.텍스트 투 비디오 API
POST /v1/videos, 텍스트만으로 동영상 생성 — JSON 요청 본문, 가장 간단한 진입점입니다.이미지 투 비디오 API
POST /v1/videos + 정적 이미지를 클립으로 제작하기 위한 input_reference multipart 업로드.공식 vs 리버스
비주얼 API 테스트
비동기 작업 조회 / 다운로드
AI 에이전트로 연동 구현하기
이 프롬프트를 복사하여 Codex / Claude Code / Cursor에 붙여넣으십시오
이 프롬프트는 먼저 이 페이지의 일반 텍스트 버전을 가져온 후(모든 문서 URL 끝에 .md 추가), 프로젝트의 자체 기술 스택에 맞춰 코드를 작성합니다. 비동기 폴링, MP4를 직접 다운로드해야 한다는 점, 단계별 타임아웃, 엄격한 4K 제약 조건이 이미 요구 사항에 반영되어 있습니다.
Integrate / troubleshoot VEO 3.1 Official text-to-video and image-to-video in this project.
Read the docs before you touch code: fetch https://docs.apiyi.com/en/api-capabilities/veo-3-1-official/overview.md for the plain-text version of this page. For finer parameter detail, append
.mdt …
- Use the three-step async flow, not a synchronous wait. This channel is async only:
POST /v1/videossubmits the job and returns atask_id, then poll …
총 10가지 요구 사항이 있습니다. 아래 버튼을 사용하여 전체 프롬프트를 복사하십시오.
이 프롬프트가 방지해 주는 문제점
이 프롬프트가 방지해 주는 문제점
왜 APIYI의 VEO 3.1 공식 채널인가요?
Google 공식 / Vertex AI 채널을 그대로 대체할 수 있으며, 온보딩 마찰, 안정성, 비용 측면에서 프로덕션 시나리오에 맞게 최적화되어 있습니다:공식 패스스루 · 동일한 Model ID
veo-3.1-generate-preview / veo-3.1-fast-generate-preview)가 업스트림과 정확히 일치하며, 요청 및 응답 필드와 제약 조건도 일대일로 대응됩니다.마찰 없는 온보딩 · 그룹 전환 불필요
Default 그룹에서 요청당 결제 또는 종량제 Priority Tokens로 동작합니다(순수 종량제는 지원되지 않습니다). 별도 그룹 전환이 필요 없습니다; 기존 요청당 결제 Tokens는 그대로 사용할 수 있습니다 — Veo 3.1을 위한 가장 마찰이 적은 공식 품질 채널입니다.무제한 동시 실행 수 · 프로덕션 규모
요청당 과금 · Google보다 60% 이상 저렴
veo-3.1-fast-generate-preview $0.3/req, veo-3.1-generate-preview $1.2/req — 4/6/8초 및 720p/1080p/4k 전 구간 동일합니다. Google의 공식 8초 1080p와 비교하면 62–68% 절감됩니다, 충전 보너스를 더해 추가 절감할 수 있으며; 실패한 작업은 과금되지 않습니다.전 세계 무마찰 접근
api.apiyi.com에 직접 연결할 수 있습니다. Google AI Studio / Vertex AI 해외 접속 설정은 완전히 건너뛸 수 있습니다.전문 지원 · 엔터프라이즈 온보딩
주요 기능
네이티브 동기화 오디오
유연한 4 / 6 / 8초 길이
seconds 문자열 enum: "4" / "6" / "8". 요청별 과금이며, 길이는 가격에 영향을 주지 않습니다. 1080p / 4k 등급에는 "8"이 필요합니다.세 가지 해상도 등급
720p / 1080p / 4k, 요청별 요금이 동일합니다. 가로(16:9)와 세로(9:16)를 자유롭게 전환할 수 있습니다.정확한 지시 준수
이미지-투-비디오(input_reference)
비동기 작업 모델
task_id이 반환됩니다. 상태를 별도로 조회하고 최종 동영상을 다운로드하십시오 — 일괄 관리 및 실패 시 재개 흐름에 적합합니다.OpenAI 호환 프로토콜
base_url=https://api.apiyi.com/v1 + Bearer 인증을 사용합니다. 원시 HTTP 또는 OpenAI SDK의 저수준 client.post()를 통해 작동합니다.실패는 무료입니다
status=completed 작업만 과금됩니다.가격
APIYI는 요청당 과금 방식을 사용합니다. 지원되는 지속 시간/해상도 조합 내에서는 정액 요금이며, 더 길거나 더 높은 해상도 출력에 대한 추가 요금은 없습니다.ai.google.dev/gemini-api/docs/pricing의 공개 요율에 따르면, Google의 공식 Veo 3.1은 초당 과금하며, 아래 할인율은 8초 동영상을 기준으로 계산되었습니다.
- 지속 시간(4/6/8초), 해상도(720p/1080p/4k), 또는
input_reference제공 여부와 무관하게, 모델명 기준으로 요청당 과금됩니다 — 4K를 선택해도 720p와 요금은 동일합니다 - 비동기 모드에서는 생성 실패 / 콘텐츠 정책 거부 / 용량 오류가 모두 과금되지 않습니다
- Top-Up Promotions의 충전 보너스 단계는 실효 비용을 추가로 낮춥니다
- 4K 렌더링은 4–6배 더 느리고 파일은 약 10배 더 큽니다 — 일상 사용에는 1080p를 기본값으로 사용하십시오
- Google의 공식 4K 요금은 $0.30/초(빠름) / $0.60/초(표준)이며, 즉 8초에 $2.40 / $4.80입니다(출처:
ai.google.dev/gemini-api/docs/pricing)
그룹 설정
VEO 3.1 Official은Default 그룹(1x)에서 작동하며, 전용 그룹 전환이 필요하지 않습니다. Token의 과금 모드는 요청당 과금 또는 우선 종량제여야 합니다 — 순수 종량제는 지원되지 않습니다(콘솔에서 필요 시 Token 모드를 전환하십시오).
기술 사양
API 엔드포인트
핵심 매개변수
seconds (비디오 길이)
길이 필드의 이름은 **seconds**이며(duration이 아니라), 반드시 문자열이어야 합니다("4" / "6" / "8"). 숫자를 전달하면 다음이 반환됩니다:
metadata.durationSeconds > seconds > 8
metadata.resolution (해상도 단계)
metadata.resolution > size > 720p
⚠️ generateAudio를 전달하지 마십시오
Veo 3 / 3.1은 오디오를 기본적으로 인식하지만, generateAudio 매개변수는 전달하면 안 됩니다. 업스트림은 INVALID_ARGUMENT로 거부합니다. 오디오를 제어하려면 의도를 prompt에 작성하십시오:
“해 질 무렵의 해안 등대; 파도, 멀리서 들리는 바닷새, 낮은 바람 소리, 영화 같은 분위기”
모범 사례
필요에 따른 모델 선택
- 반복 작업 / 일괄 미리보기 →
veo-3.1-fast-generate-preview(요청당 $0.3) - 최종 납품 / 4K →
veo-3.1-generate-preview(요청당 $1.2) - 동일한 prompt와 시드로 둘 다 실행한 후 직접 확인하여 선택하십시오.
먼저 4초로 검증
seconds: "4"(으)로 시작하여 카메라 연출과 스타일을 먼저 검증하십시오 (렌더링 60–90초, $0.3). 스타일이 확정되면 8초 또는 1080p로 확장하십시오.동기 대기가 아닌 비동기 폴링 사용
task_id 수신 → status: "completed" 상태가 될 때까지 8–10초마다 GET /v1/videos/{task_id} 폴링 → /content에서 다운로드합니다. webhook은 지원되지 않으며 폴링만 가능합니다.티어별 클라이언트 타임아웃 설정
- 720p / 1080p: 3분 하드 타임아웃
- 4K: 10분 하드 타임아웃
- POST 제출 (multipart): 최소 30초
완료 즉시 다운로드
status이(가) completed(으)로 바뀌면 즉시 자체 OSS / CDN으로 다운로드하십시오. 원격 복사본은 약 24시간 동안만 보관되므로 원격 task_id에 장기적으로 의존하지 마십시오. /content 엔드포인트는 status(으)로 바뀐 직후 간혹 400을 반환할 수 있습니다. 4초 후 재시도하십시오 (샘플 클라이언트에는 이 로직이 기본 구현되어 있습니다). 동일한 엔드포인트에서 502이(가) 반환되는 것은 제공업체에서 파일을 가져올 수 없음을 의미하므로 재시도해도 해결되지 않습니다.prompt에 오디오 의도 포함
generateAudio을(를) 전달하지 마십시오 (INVALID_ARGUMENT이(가) 반환됩니다). 환경음, 대사, BGM의 경우 prompt에 다음과 같이 직접 설명하십시오: “waves, distant seabirds, low wind sounds”.클라이언트 측 요청 제한 설정
오류 코드 및 재시도
- POST 제출 타임아웃: 30초 (멀티파트 업로드는 더 필요할 수 있습니다)
- 폴링 간격: 8–10초, 최대 대기 시간: 720p/1080p 3분, 4K 10분
- 5xx 및
failed에 대한 지수 백오프 재시도 (1–2회 시도 권장) /content에서 400 반환 시 최대 약 30초 동안 4초마다 재시도/content에서 발생하는400과502을(를) 서로 다르게 처리:400은(는) 재시도 시 해결되나,502은(는) 해결되지 않습니다. 2회 시도 후 중단하고 작업을 실패로 표시한 뒤task_id을(를) 보관하십시오.
FAQ
공식 채널 vs Reverse 채널 — 어떤 차이가 있나요? Reverse 채널은 계속 사용할 수 있나요?
공식 채널 vs Reverse 채널 — 어떤 차이가 있나요? Reverse 채널은 계속 사용할 수 있나요?
veo-3.1-generate-preview / veo-3.1-fast-generate-preview)과 일치하며, 요청당 $0.3 / $1.2로 과금되고 비동기 엔드포인트만 지원합니다.Reverse(기존 VEO 3.1): Google Flow에 대한 리버스 엔지니어링 접근 방식입니다. 모델 ID는 veo-3.1-fast / veo-3.1 / -fl 시리즈이며, 요청당 $0.15부터 시작하여 더 저렴하고 스트리밍 동기 및 비동기 모드를 모두 지원하며, 프레임 투 비디오(첫 프레임/마지막 프레임)도 지원합니다.전체 공식 vs Reverse 결정 매트릭스를 확인하십시오. 두 채널 모두 계속 제공되므로 비즈니스 요구에 맞게 선택하시면 됩니다.length 필드는 초 단위인가요, duration인가요? 그리고 왜 문자열이어야 하나요?
length 필드는 초 단위인가요, duration인가요? 그리고 왜 문자열이어야 하나요?
seconds입니다(문자열 "4" / "6" / "8"). 이름을 duration로 지정하면 인식되지 않고 조용히 무시되어 기본값인 4초로 되돌아가며, 이는 “8초를 요청했는데 4초만 생성되는” 문제의 근본 원인입니다.문자열이어야 하는 이유: 백엔드 Go 구조체에서 이 필드(내부명 duration)를 string로 선언하고 있어, 숫자를 전달하면 디코더 계층에서 parse_request_failed: cannot unmarshal number into Go struct field ... duration of type string 오류로 거부됩니다(해당 에러의 duration는 백엔드 내부 필드명이며, 요청 시에는 seconds를 전달해야 합니다). 명심하십시오: seconds를 사용하고 값을 따옴표로 감싸 전달해야 합니다: "4" / "6" / "8".대화 / 환경음 / BGM은 어떻게 추가하나요? generateAudio를 전달할 수 있나요?
대화 / 환경음 / BGM은 어떻게 추가하나요? generateAudio를 전달할 수 있나요?
generateAudio 매개변수는 전달해서는 안 됩니다(업스트림에서 INVALID_ARGUMENT를 반환합니다). 소리를 제어하려면 원하는 내용을 prompt에 직접 작성하십시오:“Coastal lighthouse at dusk; waves, distant seabirds, low wind sounds, cinematic atmosphere”
fast vs standard — 어떤 것을 선택해야 하나요? fast가 실제로 더 빠른가요?
fast vs standard — 어떤 것을 선택해야 하나요? fast가 실제로 더 빠른가요?
- 동일한 매개변수 설정 시 렌더링 시간은 거의 동일합니다(720p 8초 측정 기준: fast 83초, standard 78초). fast는 더 빠른 것이 아니라 더 저렴한 것입니다($0.3 vs $1.2).
- 기본적으로
veo-3.1-fast-generate-preview사용을 권장합니다. - 최종 납품용이거나 디테일의 정밀도 및 물리 법칙 일관성이 중요한 경우
veo-3.1-generate-preview로 전환하십시오. - 프로덕션 환경에서 A/B 테스트: 동일한 prompt와 seed로 둘 다 실행한 후 육안으로 직접 비교하여 선택하십시오.
4K를 사용할 가치가 있나요?
4K를 사용할 가치가 있나요?
- 요청당 가격이 동일하다는 점은 매력적으로 보일 수 있습니다.
- 하지만 렌더링 속도가 4~6배 느립니다(720p 80초 → 4K 350초).
- 파일 크기가 약 10배 커져(720p 4MB → 4K 40MB) 대역폭 및 스토리지 비용이 크게 증가합니다.
- 대부분의 재생 환경에서는 1080p로도 시각적으로 충분합니다.
veo-3.1-generate-preview를 사용하고, seconds="8"를 설정(필수)한 후 클라이언트 타임아웃을 10분 이상으로 지정하여 백그라운드 비동기 작업으로 실행하십시오.작업 완료 시점은 어떻게 알 수 있나요? webhook이 지원되나요?
작업 완료 시점은 어떻게 알 수 있나요? webhook이 지원되나요?
- webhook은 지원되지 않으며,
GET /v1/videos/{task_id}폴링만 지원합니다. - 권장 폴링 주기: 8초(실측상 충분하며 요청 제한에 걸리지 않습니다).
- 실측 소요 시간: 720p / 1080p 기준 60
115초, 4K 기준 56분. - 클라이언트 타임아웃: 720p/1080p는 3분, 4K는 10분 권장.
GET /content 호출 시 400 또는 502 오류가 발생합니다 — 완전히 다르게 처리해야 합니다
GET /content 호출 시 400 또는 502 오류가 발생합니다 — 완전히 다르게 처리해야 합니다
400: 잠시 대기하십시오. status 상태가 completed로 바뀐 직후 /v1/videos/{task_id}/content를 호출하면 동영상 파일 동기화가 아직 완료되지 않아 간혹 400이 반환될 수 있습니다. 이 상태는 최대 약 20초간 지속되므로 4초 간격으로 최대 30초 정도 재시도하십시오(제공되는 예제 클라이언트는 이미 이 처리가 적용되어 있습니다). curl을 사용할 때는 --retry 옵션이 400 에러를 기본적으로 재시도하지 않으므로 -f --retry-all-errors를 추가해야 합니다.502: 재시도해도 해결되지 않습니다. 응답 바디는 {"error":{"message":"Upstream service returned status 502"}} 형태를 띱니다. 생성 자체는 성공하여 GET /v1/videos/{task_id}가 progress: 100와 함께 status: "completed"를 정상 반환하지만, 공급자 측에서 해당 동영상 파일을 가져오지 못하는 상태입니다. 실측 결과 몇 시간 후에도 여전히 502 상태로 유지되므로 스스로 복구되지 않습니다. 무제한 재시도 루프를 작성하지 마십시오.대처 방법:- 최대 2회만 재시도하고, 계속 502 상태라면 해당 작업을 실패로 처리하십시오.
task_id를 보관하고 당사에 문의하십시오 — 생성 작업에 대해 이미 과금되었으므로, 확인 후 처리해 드립니다.- 새 작업으로 다시 제출하면 일반적으로 정상적으로 동영상이 생성되며, prompt를 수정할 필요는 없습니다.
completed 상태를 보고하기 전에 동영상 파일을 가져올 수 있는지 먼저 확인합니다. 파일을 가져올 수 없으면 작업은 status: "failed" 상태가 되고(사유는 error.message에 기재됨) 과금은 자동으로 환불 처리되므로, 다운로드할 수 없는 동영상에 대해 비용이 청구되지 않습니다. 다만 완전히 배제할 수는 없으므로, GET /v1/videos/{task_id}가 completed를 반환한다고 해서 동영상을 반드시 가져올 수 있다는 뜻은 아닙니다. 이 둘을 별개의 성공 검정 단계로 취급하십시오.동영상 직접 URL을 얻을 수 있나요? 프론트엔드에서 엔드포인트를 직접 호출할 수 있나요?
동영상 직접 URL을 얻을 수 있나요? 프론트엔드에서 엔드포인트를 직접 호출할 수 있나요?
video_url(인증이 필요 없는 직접 링크)와 expires_at(완료 시점 기준 약 24시간 후의 타임스탬프)가 포함될 수도 있습니다. 하지만 모든 작업에서 제공되는 것은 아니며, 만료되면 작동하지 않으므로 영구적인 주소로 배포해서는 안 됩니다.동영상을 가져오는 표준 방식: status: "completed" 이후에 GET /v1/videos/{task_id}/content를 호출하여 MP4 바이너리 스트림을 다운로드하십시오(Authorization: Bearer 헤더 필요). 이 방식은 모든 작업에서 항상 정상 작동합니다.표준 프로덕션 패턴:- 백엔드에서 작업 완료 즉시 MP4를 다운로드 → 자체 OSS / CDN으로 업로드
- 최종 사용자에게는 자체 CDN URL 제공
- 프론트엔드
<video>태그에/content주소를 직접 지정하지 마십시오 — 브라우저는 인증 헤더를 포함할 수 없어 401 오류가 발생합니다.video_url가 제공되는 경우 즉시 미리보기 용도로는 활용할 수 있습니다.
동영상은 서버에 얼마나 오래 보관되나요? 즉시 다운로드해야 하나요?
동영상은 서버에 얼마나 오래 보관되나요? 즉시 다운로드해야 하나요?
expires_at 필드에 명시된 대로 약 24시간 동안 보관됩니다(필드가 없는 경우 24시간으로 간주하십시오). 작업 완료 즉시 다운로드하여 로컬에 저장할 것을 강력히 권장합니다 — 원격 task_id나 video_url에 장기적으로 의존하지 마십시오. 만료 후에는 둘 다 작동하지 않습니다.진행률이 왜 불연속적으로 건너뛰나요?
진행률이 왜 불연속적으로 건너뛰나요?
progress 필드는 세분화되어 있지 않으며, 몇 가지 고정된 단계(예: 0 / 10 / 30 / 50 / 100) 사이를 껑충껑충 건너뜁니다. 백분율 진행 상태 바로 표시하는 데 사용하지 마십시오. 로딩 스피너를 사용하거나 “경과 시간 / 예상 시간”을 직접 계산하여 표시하는 것을 권장합니다.생성에 실패해도 과금되나요?
생성에 실패해도 과금되나요?
status=completed 작업에 대해서만 과금됩니다. failed / 취소 / 콘텐츠 정책 위반으로 인한 거부 / 매개변수 오류 등은 모두 비용이 청구되지 않습니다. 실제 동영상이 출력되지 않으면 과금도 발생하지 않습니다.seed를 사용하면 완전히 동일한 동영상을 재현할 수 있나요?
seed를 사용하면 완전히 동일한 동영상을 재현할 수 있나요?
88888) + 동일한 매개변수로 fast를 두 번 실행했을 때 파일 크기는 9.81MB vs 9.25MB였으며 md5 값도 완전히 다르고 렌더링 시간에도 차이가 있었습니다.그렇다고 seed가 무의미한 것은 아닙니다: 동일한 seed의 결과물들은 서로 유사하게 군집을 형성하며(5회 실행 테스트에서 그룹 내 파일 크기 편차는 6%에 불과), 서로 다른 seed는 체계적인 차이를 보입니다(그룹 간 편차 +36.8%). 시사점:- “일관된 느낌”을 원함 → seed 고정
- “다양한 변형 탐색”을 원함 → prompt를 수정하는 대신 seed 변경
- “완벽히 동일한 재현”을 원함 → 재현 시도를 멈추고 mp4 파일을 직접 보관
여러 장의 참조 이미지를 전달할 수 있나요? 첫 프레임/마지막 프레임 지정은 가능한가요?
여러 장의 참조 이미지를 전달할 수 있나요? 첫 프레임/마지막 프레임 지정은 가능한가요?
input_reference로 고정되어 있고, 원격 URL은 불가능하며 파일 또는 base64 형식만 지원합니다.Google 업스트림 Veo 3.1은 다중 참조 / 첫-마지막 프레임 / 동영상 확장을 지원하지만, 본 채널에서는 지원하지 않습니다. 첫 프레임/마지막 프레임 지정이 필요한 경우 VEO 3.1 (Reverse) -fl 시리즈를 사용하십시오.동시 실행 수 제한이나 QPS 제한이 있나요?
동시 실행 수 제한이나 QPS 제한이 있나요?
동영상에 워터마크나 출처 메타데이터가 포함되어 있나요?
동영상에 워터마크나 출처 메타데이터가 포함되어 있나요?
- 눈에 보이는 워터마크는 없습니다.
- 단, MP4 메타데이터에 내장된 Google C2PA 콘텐츠 자격 증명(Content Credentials)(Google C2PA Media Services 발행,
urn:c2pa:...포맷)이 포함되어 있습니다. 일반 사용자의 눈에는 보이지 않으나, C2PA 도구(예: Adobe Content Authenticity)를 통해 “Veo로 생성됨”을 검증할 수 있습니다. - 재배포가 필요한 환경에서는 이 점을 참고하시기 바라며, 일반적인 재생에는 영향을 주지 않습니다.
공식 OpenAI SDK를 직접 사용할 수 있나요?
공식 OpenAI SDK를 직접 사용할 수 있나요?
Bearer 인증 + /v1/...)을 따르지만, OpenAI 공식 SDK는 videos.create 메서드를 제공하지 않습니다(/v1/videos는 커스텀 경로입니다). OpenAI SDK의 저수준 client.post() 메서드를 사용하거나 순수 HTTP 요청을 사용하십시오. 순수 HTTP 요청을 사용하는 것이 가장 간단합니다 — Text-to-Video Playground의 코드 예제를 참고하십시오.관련 문서
- 텍스트-투-비디오 플레이그라운드 —
POST /v1/videos(JSON) 인터랙티브 디버거 + 5개 언어 코드 샘플 - 이미지-투-비디오 플레이그라운드 —
POST /v1/videos(multipart) +input_reference사용법 - 공식 vs 리버스 결정 매트릭스 — VEO 3.1 (Reverse)와의 차이점
- 충전 프로모션 — 보너스 등급 및 적격 채널
- API 매뉴얼 — 일반적인 호출 규칙, 타임아웃 및 재시도 안내
- Google 공식 모델 페이지:
ai.google.dev/gemini-api/docs/models/veo-3.1-generate-preview - Google 동영상 생성 문서:
ai.google.dev/gemini-api/docs/video