Yapay Zeka Video Üretimi
Bir metin isteminden kısa videolar oluşturun. Platform, isteği üç sağlayıcıdan birine (Kling OmniVideo, Google Veo veya OpenAI Sora) yönlendirir ve isteğe bağlı yapılandırılmış kontrolleri destekler. İsteğe bağlı parametreler atlandığında seçilen model en iyi ayarları sağlar. Sağlandıklarında, her sağlayıcının yetenek sınırlarına bağlı olarak modelin çıkarımını geçersiz kılarlar.
Video oluşturma, tüm yapay zeka yetenekleri tarafından kullanılan aynı mesaj + akış hattından geçer: 'capabilityKey: "ai.video.generate" ile bir mesaj gönderirsiniz, ardından ilerlemeyi ve nihai sonucu yayınlayan bir SSE akışına abone olursunuz.
Uç noktalar
| Method | Path | Description | Auth | Rate Limit |
|---|---|---|---|---|
| POST | /ai/sessions/:sessionId/messages | Send a message that triggers a video generation run | JWT + Entitlement | 20/min |
| GET | /ai/sessions/:sessionId/messages/:messageId/stream | SSE stream of progress and completion events | JWT + Entitlement | 20/min |
| POST | /ai/sessions/:sessionId/messages/:assistantMessageId/stop | Cancel an in-progress run | JWT + Entitlement | 30/min |
Video oluşturmak, etkin planda "ai.video.generate" yetkisini gerektirir.
Sağlayıcı Seçimi
| Provider | provider value | Strengths |
|---|---|---|
| Google Veo | veo | High fidelity, supported aspect ratios 16:9 and 9:16, fixed 8 s at 1080p / 4k |
| OpenAI Sora | sora | Up to 20 s, audio supported, image reference supported |
| Kling OmniVideo | kling | Aspect ratios 16:9, 9:16, 1:1; supports negative prompt, image and video references |
'Sağlayıcı' atlanırsa platform tarafından yapılandırılmış varsayılan sağlayıcı kullanılır. Açık ancak desteklenmeyen değerler net bir doğrulama hatası döndürüyor.
İsteğe Bağlı Parametreler
Tüm isteğe bağlı alanlar, mesaja gömülü yapılandırılmış araç girişine uygulanır. Bunları istek gövdesinin en üst düzeyine "content" ve "capabilityKey" ile birlikte gönderin, veya atlandığında modelin çıkarım yapmasına izin verin.
| Field | Type | Allowed values | Notes |
|---|---|---|---|
provider | string | kling | veo | sora | Defaults to configured provider |
aspectRatio | string | 16:9, 9:16, 1:1 | Provider-dependent; 1:1 only on Kling |
duration | number | seconds | Sora ≤ 20 s; Veo at 1080p/4k = 8 s; Kling ∈ |
size | string | WIDTHxHEIGHT | Sora only; takes priority over aspectRatio |
resolution | string | 480p, 720p, 1080p, 4k | Veo and Sora |
negativePrompt | string | free-form | Kling only |
seed | number | integer | Where supported by the provider |
generateAudio | boolean | — | Sora and Kling |
inputImageUrl | string | image URL | Reference / starting frame |
inputVideoUrl | string | video URL | Reference clip (Kling) |
referenceImages | string[] | image URLs | Multiple references |
referenceVideos | string[] | video URLs | Multiple references (Kling) |
styleTokens | string[] | free-form hints | Lighting, mood, cinematic adjectives |
model | string | provider model key | Override the default model for the chosen provider |
metadata | object | free-form | Echoed back in the completion event for client correlation |
'4:3', '3:4' ve '21:9' en boy oranları şema tarafından ileriye dönük uyumluluk için kabul edilir, ancak henüz standart kullanıcı arayüzünde gösterilmemiştir ve seçilen sağlayıcı bunları desteklemiyorsa kaldırılacaktır.
POST /ai/sessions/:sessionId/messages
Video oluşturma çalıştırmasını tetikleyen bir kullanıcı mesajı gönderin. İstek, yardımcı mesaj kimliği ve çalıştırma kimliğiyle hemen geri döner; İlerlemeyi ve son video URL'sini almak için SSE akışına abone olun.
Rica etmek
Kimlik Doğrulama: JWT Taşıyıcı jetonu + aktif AI yetkisi (ai.video.generate). Hız limiti: 20/dak.
Talep Gövdesi
| Field | Type | Required | Description |
|---|---|---|---|
content | string | Yes | Free-text prompt describing the desired video |
capabilityKey | string | Yes | Set to ai.video.generate to skip intent detection |
provider | string | No | One of kling, veo, sora |
model | string | No | Provider-specific model identifier |
aspectRatio | string | No | One of 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 |
duration | number | No | Video duration in seconds (1–60). Numeric strings are accepted and coerced (e.g. "12" → 12). |
size | string | No | Exact pixel size as WIDTHxHEIGHT (Sora) |
resolution | string | No | 480p, 720p, 1080p, or 4k |
negativePrompt | string | No | What the video should avoid; max 4000 chars |
seed | number | No | Random seed for reproducibility (integer; numeric strings coerced) |
generateAudio | boolean | No | Generate an audio track alongside the video |
inputImageUrl | string | No | http(s) URL of a reference / starting image |
inputVideoUrl | string | No | http(s) URL of a reference / starting video |
referenceImages | string[] | No | http(s) URLs of reference images |
referenceVideos | string[] | No | http(s) URLs of reference videos |
styleTokens | string[] | No | Stylistic hints (max 16 items, ≤ 64 chars each) |
metadata | object | No | Free-form metadata echoed in the completion event |
effortMode | string | No | basic, thinking, or pro — routes model selection |
idempotencyKey | string | No | Client-generated key to dedupe retries |
Kimliği doğrulanmış istek aktöre bilgi sağlar; istek gövdeleri asla "accountId", "chainerId" veya "workspaceId" içermez.
Cevap
{
"data": {
"sessionId": "550e8400-e29b-41d4-a716-446655440000",
"userMessage": {
"id": "550e8400-e29b-41d4-a716-446655440010",
"role": "user",
"content": "A serene sunset over snow-capped mountains, cinematic.",
"createdAt": "2026-05-22T10:00:00Z",
"toolCalls": []
},
"assistantMessage": {
"id": "550e8400-e29b-41d4-a716-446655440011",
"role": "assistant",
"content": "",
"createdAt": "2026-05-22T10:00:00Z",
"runId": "550e8400-e29b-41d4-a716-446655440012",
"status": "pending",
"toolCalls": [],
"modelName": "Veo",
"providerKey": "google"
},
"run": {
"id": "550e8400-e29b-41d4-a716-446655440012",
"status": "running"
},
"resolvedModel": {
"modelKey": "veo-2.0-generate-001",
"displayName": "Google Veo",
"provider": "google",
"reason": "explicit",
"requestedModelKey": null,
"missingCapabilities": []
}
}
}Hata Yanıtları
| HTTP | Meaning |
|---|---|
| 400 | Schema validation failed, or an unsupported provider value was sent |
| 401 | Missing or invalid JWT |
| 402 | Insufficient credits to reserve the requested duration |
| 400 | Capability-aware validation error — for example sending bpm with ai.video.generate returns bpm is only valid for ai.audio.generate in details.fields[0].message. See Messages: Capability Parameters. |
| 403 | Plan does not include ai.video.generate |
| 404 | sessionId not found |
| 429 | Rate limit exceeded |
Kod Örnekleri
curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "A serene sunset over snow-capped mountains, cinematic.",
"capabilityKey": "ai.video.generate"
}'curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Hand-drawn animation of a fox chasing leaves through a forest.",
"capabilityKey": "ai.video.generate",
"provider": "sora",
"aspectRatio": "9:16",
"resolution": "720p",
"duration": 12,
"generateAudio": true
}'curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"content": "Extend this clip with the same style for another 5 seconds.",
"capabilityKey": "ai.video.generate",
"provider": "kling",
"aspectRatio": "16:9",
"duration": 5,
"negativePrompt": "low quality, watermark",
"referenceImages": ["https://cdn.example.com/style-frame.png"]
}'const res = await fetch(
`${BASE_URL}/ai/sessions/${sessionId}/messages`,
{
method: "POST",
headers: {
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
content: "A timelapse of a city skyline at golden hour.",
capabilityKey: "ai.video.generate",
provider: "veo",
aspectRatio: "16:9",
resolution: "1080p",
duration: 8,
}),
},
);
const { data } = await res.json();
const { assistantMessage, run } = data;
console.log("Run id:", run.id, "stream:", assistantMessage.id);import requests
res = requests.post(
f"{BASE_URL}/ai/sessions/{session_id}/messages",
headers={
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
},
json={
"content": "A drone shot of waves crashing on a rocky shore.",
"capabilityKey": "ai.video.generate",
"provider": "sora",
"resolution": "720p",
"aspectRatio": "16:9",
"duration": 10,
},
)
body = res.json()["data"]
assistant_id = body["assistantMessage"]["id"]
run_id = body["run"]["id"]GET /ai/sessions/:sessionId/messages/:messageId/stream
Devam eden bir yardımcı mesajı için Sunucu Tarafından Gönderilen Etkinlikler akışını açın. Akış, çalıştırmanın ömrü boyunca açık kalır ve terminal olayından kısa bir süre sonra kapanır.
Rica etmek
Kimlik Doğrulama: JWT Taşıyıcı jetonu + aktif AI yetkisi. Hız limiti: 20/dak.
Cevap
Olay dizisi — video oluşturma
event: run.started
event: tool.started toolKey=media.video.generate
event: tool.progress message="Queued video generation..."
event: tool.progress message="Generating video..."
event: tool.progress message="Saving generated video..."
event: tool.completed toolKey=media.video.generate data={ videoUrl, ... }
event: message.delta (assistant prose summarising the result)
event: message.completed
event: run.settlement.completed"tool.progress" olaylarının sayısı ve zamanlaması sağlayıcıya bağlıdır; aşama etiketleri sabittir, yüzdeler değildir.
Etkinlik yükü — tool.completed
{
"eventId": 6,
"type": "tool.completed",
"runId": "550e8400-e29b-41d4-a716-446655440012",
"stepId": "tc_abc123",
"timestamp": "2026-05-22T10:00:14Z",
"payload": {
"toolKey": "media.video.generate",
"callId": "tc_abc123",
"executionMs": 12480,
"success": true,
"data": {
"success": true,
"provider": "veo",
"model": "veo-2.0-generate-001",
"videoUrl": "https://media.chainabit.com/ai-generated/...mp4",
"thumbnailUrl": null,
"duration": 8,
"aspectRatio": "16:9",
"size": null,
"resolution": "1080p",
"storageKey": "ai/generated/video/...",
"externalJobId": "veo-op-1234",
"status": "completed"
}
}
}Sağlayıcı status: "pending" döndürdüğünde (oylama penceresini aşan uzun süredir devam eden işler için tipiktir), mevcut olduğunda nihai URL'yi almak için GET /ai/sessions/:sessionId/messages/:messageId yoluyla mesajı yoklayın.
Kod Örnekleri
const stream = new EventSource(
`${BASE_URL}/ai/sessions/${sessionId}/messages/${assistantId}/stream`,
{ withCredentials: true },
);
stream.addEventListener("tool.progress", (event) => {
const { payload } = JSON.parse(event.data);
if (payload.activityType === "video_generation") {
console.log("progress:", payload.message);
}
});
stream.addEventListener("tool.completed", (event) => {
const { payload } = JSON.parse(event.data);
if (payload.toolKey === "media.video.generate") {
console.log("Video ready:", payload.data.videoUrl);
}
});
stream.addEventListener("run.settlement.completed", () => stream.close());import sseclient
import requests, json
response = requests.get(
f"{BASE_URL}/ai/sessions/{session_id}/messages/{assistant_id}/stream",
headers={"Authorization": f"Bearer {TOKEN}"},
stream=True,
)
client = sseclient.SSEClient(response)
for event in client.events():
if event.event == "tool.completed":
payload = json.loads(event.data)["payload"]
if payload["toolKey"] == "media.video.generate":
print("video:", payload["data"]["videoUrl"])
breakPOST /ai/sessions/:sessionId/messages/:assistantMessageId/stop
Devam eden bir video oluşturma çalışmasını iptal edin. Kısmi durum "durduruldu" durumuyla sonlandırılır. Henüz tamamlanmayan çalıştırmalar için ayrılan krediler serbest bırakılır; Halihazırda bir çıktı üreten çalışmalar normal şekilde tutulur ve şarj edilir.
Rica etmek
Kimlik Doğrulama: JWT Taşıyıcı jetonu + aktif AI yetkisi. Hız limiti: 30/dak.
Cevap
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440011",
"status": "stopped"
}
}Kod Örneği
curl -X POST "$BASE_URL/ai/sessions/$SESSION_ID/messages/$ASSISTANT_ID/stop" \
-H "Authorization: Bearer $TOKEN"Davranış Notları
- Geriye dönük uyumluluk: Yalnızca
{ content, capabilityKey: "ai.video.generate" }gönderimi hala çalışıyor. Tüm yapılandırılmış parametreler isteğe bağlıdır. - Çakışmalar: "size"yi destekleyen bir sağlayıcıya hem "size" hem de "aspectRatio" sağlandığında "size" kazanır; çakışma, çalıştırmanın meta verilerine kaydedilir.
- Kenetleme: Aralık dışı süreler ve desteklenmeyen boyutlar, mümkün olduğunda sağlayıcının güvenli değerlerine sabitlenir, aksi takdirde açık bir hatayla reddedilir.
- Depolama: Oluşturulan videolar çalışma alanının medya grubuna yüklenir ve zaman sınırlı bir URL olarak döndürülür. URL'nin süresi dolduktan sonra yenilemek için ilgili oluşturma kaydını mesaj kaynağı aracılığıyla getirin.
- "16:9", "9:16", "1:1" dışındaki en boy oranları şema tarafından ileri uyumluluk açısından kabul edilir ancak henüz varsayılan kullanıcı arayüzü yüzeylerinde gösterilmemiştir.
İlgili
- AI Mesajları — tüm AI yetenekleri tarafından kullanılan genel mesaj / akış hattı.
- AI Oturumları — video çalışmasını barındıran oturumu oluşturun.
- Generative Media API — kaynak başına izinle yönlendirilen alternatif, bağlama duyarlı medya hattı.