KozeKoze
블로그로 돌아가기
지도 시간2026年6月28日·管理员

동영상 생성 API 호출 문서

Kozeai는 OpenAI Sora와 호환되는 비디오 생성 인터페이스를 제공하며, 비동기 작업 모드를 사용합니다. 먼저 작업을 제출하여 `task_id`를 얻은 다음, 작업 상태를 주기적으로 확인하고 작업이 완료되면 비디오 콘텐츠를 다운로드합니다.

비디오 생성 API 호출 문서

kozeai는 OpenAI Sora와 호환되는 비디오 생성 인터페이스를 제공하며, **비동기 작업** 모드를 사용합니다. 먼저 작업을 제출하여 `task_id`를 획득한 후, 작업 상태를 주기적으로 확인하고, 작업이 완료되면 비디오 콘텐츠를 다운로드합니다.

인증

모든 요청은 `Authorization: Bearer `을 사용하여 인증됩니다.

콘솔에서 API 토큰을 생성한 후 이 코드를 사용하세요.

export KOZEAI_API_KEY='sk-your-token'
export KOZEAI_BASE_URL='https://api.kozeai.com'

인터페이스 개요

<표> <머리글> 메서드 경로 목적 <본문> POST /v1/videos/generations 비디오 작업 생성 GET /v1/videos/{task_id} 작업 상태 조회 GET /v1/videos/{task_id}/content 온라인 재생 또는 다운로드 mp4

제출 인터페이스에서 반환되는 task_12345 형식의 작업 ID는 현재 사용자에게만 해당됩니다.


1. 비디오 작업 생성

curl "$KOZEAI_BASE_URL/v1/videos/generations" \

-H "Authorization: Bearer $KOZEAI_API_KEY" \

-H "Content-Type: application/json" \

-d '{
"model": "video-ds-2.0",

"prompt": 

요청 매개변수

)
매개변수 유형 필수 설명
모델 문자열 비디오 모델 이름(예: video-ds-2.0
프롬프트 문자열 비디오 콘텐츠 설명
정수 아니요 업스트림 모델 지원 범위에 따른 비디오 재생 시간(초)
화면 비율 문자열 아니요 화면 비율, 일반적으로 9:16, 16:9, 1:1
이미지 배열 아니요 참조 이미지 URL 또는 base64
비디오 배열 아니요 참조 비디오 URL
오디오 배열 아니요 참조 오디오 URL

업스트림 모델에 따라 지원하는 매개변수가 다를 수 있습니다.

명시되지 않은 매개변수는 상위 프로토콜에 따라 전달됩니다.

이미지 기반 비디오(참조 이미지 포함)

참조 이미지를 기반으로 비디오를 생성하려면 images 배열을 전달하세요.

curl "$KOZEAI_BASE_URL/v1/videos/generations" \

-H "Authorization: Bearer $KOZEAI_API_KEY" \

-H "Content-Type: application/json" \

-d {

모델: video-ds-2.0,
프롬프트: 참조 이미지 스타일을 사용하여 부드러운 제품 비디오를 만드세요,
: 15,

화면 비율: 9:16,

이미지: ["https://example.com/input.png"],

"videos": ["https://example.com/input.mp4"],

"audios": ["https://example.com/input.mp3"]

}'

  • images는 이미지 URL 또는 base64를 지원합니다.
  • videos / audios는 선택적인 참조 자료입니다.
  • 채팅 자동 완성 인터페이스(본문 끝부분 참조)를 통해 호출할 경우, 이미지를 메시지에 첨부하기만 하면 됩니다.
  • 시스템에서 자동으로 images 매개변수로 변환합니다.

응답 (제출 성공)

{
"id": "task_12345",

"task_id": "task_12345",

"object": "video",

"model": 'video-ds-2.0',

'상태': '대기 중',

'진행률': 0,

'생성 시간': 

}

상태 값: 대기 중 (대기열에 있음), 진행 중 (진행 중), 완료됨 (완료됨), 실패됨 (실패).


2. 작업 상태 폴링

제출에서 반환된 id를 사용하여 3~5초 간격으로 폴링하세요.

curl "$KOZEAI_BASE_URL/v1/videos/task_12345" \

-H "Authorization: Bearer $KOZEAI_API_KEY"

응답(생성 중)

{
"id": 'task_12345',

'object': 'video',

'model': 'video-ds-2.0',

'status': 'in_progress',

'progress': 45,

'created_at': 1751000000
}

응답 (완료)

{
'id': 'task_12345',

'object': 'video',

'model': 'video-ds-2.0',

'status': &34;완료&34;,

&34;진행률&34;: 100,

&34;생성 시간&34;: 1751000000,

완료 후, `metadata.content_url`에는 바로 접속 가능한 비디오 주소가 제공됩니다. 아래 콘텐츠 인터페이스를 사용하여 다운로드할 수도 있습니다.

응답(실패)

{
'id': 'task_12345',

'object': 'video',

'status': 'failed',

'error': { 'message': '실패 사유' }
}

3. 비디오 콘텐츠 다운로드

curl -L "$KOZEAI_BASE_URL/v1/videos/task_12345/content" \

-H "Authorization: Bearer $KOZEAI_API_KEY" \

-o result.mp4

  • 작업이 완료되지 않은 경우(대기열에 있거나 생성 중인 경우) 409 Conflict 오류를 반환합니다.
  • 요청 헤더를 사용하여 분할 다운로드/드래그 앤 드롭 재생을 지원합니다.
  • 를 반환합니다.

전체 예제

JavaScript (fetch + polling)

const BASE = process.env.KOZEAI_BASE_URL;

const KEY = process.env.KOZEAI_API_KEY;

const headers = { Authorization: `Bearer ${KEY}` };

// 1. 작업 제출
const submit = await fetch(`${BASE}/v1/videos/generations`, {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },

body: JSON.stringify({
model: video-ds-2.0,

prompt: 유리 위에 놓인 향수병의 부드러운 광고 영상,

seconds: 15,

aspect_ratio: 9:16,

}),
});

const task = await submit.json();

const taskId = task.id;

// 2. 완료될 때까지 폴링
async function 폴링() {
while (true) {
const res = await fetch(`${BASE}/v1/videos/${taskId}`, { headers });

const data = await res.json();
if (data.status === 'completed') return data;
if (data.status === 'failed') throw new Error(data.error?.message || 'failed');
await new Promise((r) => setTimeout(r, 5000));

}
}
const done = await poll();

// 3. 비디오 주소 가져오기
console.log('비디오 주소:', done.metadata?.content_url

|| `${BASE}/v1/videos/${taskId}/content`);

Python (요청 + 폴링)

import os, time, requests

BASE = os.environ["KOZEAI_BASE_URL"]
KEY = os.environ["KOZEAI_API_KEY"]
headers = {"Authorization": f"Bearer {KEY}"}

# 1. 작업 제출
resp = requests.post(
f"{BASE}/v1/videos/generations",
headers=headers,
json={
"model": "video-ds-2.0",
"prompt": "따뜻한 햇살 속을 달리는 고양이의 영화 같은 9:16 영상",

: 15,

종횡비: 9:16,

},
)
task_id = resp.json()[id]

# 2. 폴링
while True:

data = requests.get(f{BASE}/v1/videos/{task_id}, headers=headers).json()
if data["status"] == "completed":

if data["status"] == "failed":

raise RuntimeError(data.get("error", {}).get("message", "failed"))

time.sleep(5)

# 3. 다운로드
mp4 = requests.get(f{BASE}/v1/videos/{task_id}/content, headers=headers)
with open(&34;result.mp4, &34;wb) as f: f.write(mp4.content)


채팅 자동 완성 인터페이스에서 호출됨(호환 사용)

비디오 모델은 다음을 통해서도 호출할 수 있습니다. /v1/chat/completions를 통해 채팅 클라이언트의 재사용을 용이하게 합니다.

요청 시 `model`에 비디오 모델 이름을 전달하기만 하면 시스템에서 자동으로 비디오 작업으로 변환합니다.
curl $KOZEAI_BASE_URL/v1/chat/completions

\ -H Authorization: Bearer $KOZEAI_API_KEY \ -H Content-Type: application/json \ -d { Model: } `

returns "video-ds-2.0

, "messages: [{"role: "user, "content: "햇살 아래 달리는 고양이, 영화 같은 영상, 9:16}] }

채팅 완료를 반환합니다.

형식은 `message.content`이며, 작업 상태와 `/v1/videos/{task_id}` 링크가 포함됩니다. 이 링크를 클릭하면 작업이 완료되면 영상이 재생됩니다. 채팅 로비 페이지에서 이 메서드를 사용합니다.

두 진입점(/v1/videos/generations/v1/chat/completions)은 동일한 작업 시스템을 공유하므로 서로 충돌하지 않습니다. 직접 통합하려면 표준 `/v1/videos/*` 인터페이스를 사용하는 것이 좋습니다.


오류 코드

상태 코드 의미
401 토큰이 없거나 만료되었거나 유효하지 않습니다
403 잔액이 부족하거나 현재 그룹에 이 모델에 대한 권한이 없습니다
404 작업 ID가 존재하지 않거나 현재 사용자에게 속하지 않거나 모델이 구성되지 않았습니다.
409 비디오 콘텐츠를 준비하지 못했습니다(작업이 아직 진행 중입니다). 대기열/생성 중)
429 속도 제한 트리거
502 상위 공급자가 실패했거나 유효하지 않은 결과를 반환했습니다

동영상 생성 API 호출 문서 | Koze AI