쿠키를 사용합니다. 쿠키와 브라우저 저장소는 로그인 상태를 유지하고 환경설정을 기억합니다. 동의하시면 사이트 이용 방식도 측정합니다. 언제든지 할 수 있습니다. 자세한 내용은 쿠키 정책을 참고하세요.

동영상 생성(비동기 작업)

엔드포인트

동영상 생성(비동기 작업)

POST /videos로 동영상 생성 작업을 만들고 GET /videos/{id}로 상태를 폴링한 뒤 결과를 내려받는 비동기 흐름을 설명합니다. 잔액 확인, 과금 방식, 오류 코드도 함께 다룹니다. 결과를 내려받는 예제 코드도 포함합니다.

플레이그라운드에서 사용해 보기

Veo 3.1, Sora 2 Pro, Kling, Seedance, Runway, Wan, Hailuo 등으로 동영상을 생성합니다. 동영상 생성에는 수십 초에서 몇 분이 걸리므로 비동기 작업으로 실행됩니다. 작업을 만들고, 상태를 폴링한 다음, 결과를 내려받습니다.

단계요청
1. 생성POST /api/v1/videos
2. 폴링GET /api/v1/videos/{id}
3. 다운로드GET /api/v1/videos/{id}/content?index=0

작업 만들기

POST https://api14.com/api/v1/videos
파라미터타입필수설명
modelstring예동영상 모델 ID. 예: google/veo-3.1-fast.
promptstring예동영상에서 일어나는 내용.
durationnumber아니요길이(초). 기본값은 모델이 지원하는 첫 번째 길이입니다.
resolutionstring아니요예: 720p, 1080p. 모델이 지원해야 합니다.
aspect_ratiostring아니요예: 16:9, 9:16.
generate_audioboolean아니요지원되는 경우 사운드트랙을 생성합니다(기본값 true).
imagestring아니요URL 또는 data: URI로 된 첫 프레임(이미지 투 비디오).

모델별로 지원하는 길이, 해상도, 화면 비율은 GET /videos/models(공개) 또는 모델 페이지에서 확인하세요.

잔액 확인

작업을 제출하기 전에 게이트웨이는 요청한 해상도(및 오디오 옵션)의 초당 가격에 길이를 곱해 가격을 추정합니다. 잔액이 추정치보다 적으면 요청은 402 insufficient_balance로 실패하고 아무것도 시작되지 않습니다.

응답

{
  "id": "vid_01JABCDEF",
  "status": "queued",
  "polling_url": "/api/v1/videos/vid_01JABCDEF"
}

작업 폴링

GET https://api14.com/api/v1/videos/{id}
{
  "id": "vid_01JABCDEF",
  "status": "completed",
  "generation_id": "gen-1791100000-abc",
  "unsigned_urls": ["/api/v1/videos/vid_01JABCDEF/content?index=0"],
  "usage": { "cost": 1.2 }
}
status의미
queued제공자를 기다리는 중.
in_progress렌더링 중.
completed완료. unsigned_urls에 결과물이 나열됩니다.
failed, cancelled, expired결과물 없이 종료되었습니다. error를 확인하세요. 요금은 청구되지 않습니다.

5–10초마다 폴링하세요. 작업을 만든 계정만 조회할 수 있으며, 다른 ID는 404 not_found를 반환합니다.

결과 다운로드

GET https://api14.com/api/v1/videos/{id}/content?index=0

API 키로 동영상 바이트(보통 video/mp4)를 반환합니다. 출력 URL은 항상 게이트웨이를 가리키며 업스트림 제공자를 직접 가리키지 않습니다. 파일이 아직 준비되지 않았거나 만료되었다면 content_unavailable이 반환됩니다.

예제

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

// Video generation is asynchronous: submit, then poll until completed.
let job = await client.post("/videos", { body: {
  "model": "google/veo-3.1-fast",
  "prompt": "A drone shot over turquoise ocean waves at sunrise",
  "duration": 8,
  "resolution": "720p",
  "aspect_ratio": "16:9"
} });
while (!["completed", "failed"].includes(job.status)) {
  await new Promise((r) => setTimeout(r, 5000));
  job = await client.get(`/videos/${job.id}`);
}
console.log(job.status, job.unsigned_urls);

과금

작업이 completed에 도달했을 때 제공자의 실제 비용으로 한 번만 과금됩니다. 실패, 취소, 만료된 작업은 무료입니다. 작업은 백그라운드에서도 완료되므로, 폴링하지 않은 작업도 정산되어 사용량에 표시됩니다.

오류

상태코드발생 조건
402insufficient_balance잔액이 작업의 추정 가격보다 적습니다.
403plan_required요금제에 동영상 모델이 포함되어 있지 않습니다.
404model_not_found / not_found알 수 없는 모델이거나 내 작업 ID가 아닙니다.
502upstream_unavailable상태를 읽을 수 없습니다. 재시도하세요.

오류를 참고하세요.