Api.Airforce
API REFERENCE

Video

Eşzamansız görev modeliyle video klipler oluşturun; bir bilgi istemi gönderin, durumu yoklayın, sonucu alın.

Video üretimi asenkrondur: bir prompt gönderin, bir task id alın, durumunu poll edin, ardından tamamlanan klibi çekin. Text-to-video, image-to-video ve referans modlarının hepsi tek bir request şeklini paylaşır.

İsteyebileceğiniz süreler, çözünürlükler ve aspect ratio'lar seçilen modele bağlıdır — sabit bir küme varsaymak yerine bunları models endpoint'inden geri okuyun.

Video oluşturma arka planda çalışır; akış oluşturma işlemi yoktur. Akış her zaman şu şekildedir: görev oluştur → durumu yokla → MP4'ü indir. Görevler 24 saat sonra sona erer.

1. Bir görev oluşturun

İşi gönderir ve bir task ID döndürür. Maliyet, süre × modelin saniye başına fiyatından tahmin edilir ve iş işlendiğinde tahsil edilir.

POSThttps://api.airforce/v1/video/generations

Video modelleri

· live
ParameterTypeRequiredDescription
modelstringRequiredVideo model ID. Use /v1/models and filter by output_modalities.includes("video").
promptstringRequiredScene description.
modestringOptional"text" (default), "image" (animate a first-frame image), "reference" (style transfer from one or more frames).
duration_secondsintegerOptionalClip length. Range depends on the model — typically 5, 8 or 10 s. Defaults to the model's minimum.
aspect_ratiostringOptional"16:9", "9:16", "1:1", "4:3" — must be in the model's supported list.
qualitystringOptional"480p", "720p", "1080p" — must be in the model's supported list.
input_imagesarrayOptional[{ url? } | { b64_json? }] — required for "image" and "reference" modes.

Diğer tüm anahtarlar (örn. seed, sound) üst akış sağlayıcısına olduğu gibi iletilir — burada doğrulanmazlar ve destek modele bağlıdır.

Örnekler

Metinden videoya

curl https://api.airforce/v1/video/generations \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-2.6",
    "prompt": "A red fox darting across snowy hills at dawn",
    "duration_seconds": 8,
    "aspect_ratio": "16:9",
    "quality": "720p",
    "sound": true
  }'

Görüntüden videoya (ilk kare)

curl https://api.airforce/v1/video/generations \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-1",
    "mode": "image",
    "prompt": "Camera pulls back as the dragon takes off",
    "duration_seconds": 5,
    "aspect_ratio": "16:9",
    "input_images": [{"url": "https://example.com/dragon.jpg"}]
  }'

Cevap

ParameterTypeRequiredDescription
task_idstringOptionalPersistent task identifier. Use it on every follow-up endpoint.
statusstringOptional"queued" right after creation.
modelstringOptionalEcho of requested model.
createdintegerOptionalUnix timestamp.
expires_atintegerOptionalUnix timestamp after which the result is purged (exactly created + 86400).
progressintegerOptional0 right after creation.
cost_centsnumberOptionalEstimated cost for the job. Final billing is settled when the job is processed.
{
  "task_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "status": "queued",
  "model": "wan-2.6",
  "created": 1715000000,
  "expires_at": 1715086400,
  "progress": 0,
  "cost_cents": 320
}

2. Durumu sorgulayın

Her 5-15 saniyede bir sorgulayın. Görevler süreye ve modele bağlı olarak genellikle 30 saniye – 4 dakika içinde tamamlanır. Aynı uç nokta, durum "completed" durumuna döndüğünde sonuç URL’sini döndürür.

GEThttps://api.airforce/v1/video/tasks/:task_id
ParameterTypeRequiredDescription
statusstringOptional"queued" | "processing" | "completed" | "failed" | "expired".
progressintegerOptional0–100 while processing.
result_urlstringOptionalMP4 download URL once status is "completed", set by the upstream provider. Valid until expires_at.
errorstringOptionalFailure message. Set (non-null) when status is "failed".
cost_centsnumberOptionalCost for the job, settled when it is processed.
{
  "task_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "status": "completed",
  "progress": 100,
  "result_url": "https://.../video.mp4",
  "model": "wan-2.6",
  "duration_seconds": 8,
  "expires_at": 1715086400,
  "cost_cents": 320
}

2b. Akış ilerlemesi (isteğe bağlı)

Sunucu Tarafından Gönderilen Olaylar akışıyla yoklama döngüsünü atlayın. Her ilerleme değişikliğinde bir olay yayar ve görev terminal durumuna geçtiğinde kapanır. GET uç noktasıyla aynı yük şekli.

GEThttps://api.airforce/v1/video/tasks/:task_id/stream
event: state
data: {"task_id":"f47ac10b-...","status":"processing","progress":12}

event: state
data: {"task_id":"f47ac10b-...","status":"processing","progress":58}

event: state
data: {"task_id":"f47ac10b-...","status":"completed","progress":100,"result_url":"https://.../video.mp4"}

event: done
data: [DONE]

3. Listeleyin ve silin

GEThttps://api.airforce/v1/video/tasks

En son görevlerinizi döndürür (önce en yenisi). Kontrol panelinin geçmiş görünümü oluşturması açısından kullanışlıdır.

En son 100 task'ınıza kadarını, en yenisi önce olacak şekilde { "data": [ ...tasks ] } biçiminde döndürür. Sorgu parametresi yoktur — istemci tarafında filtreleyin ve sayfalayın.

curl https://api.airforce/v1/video/tasks \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY"
DELETEhttps://api.airforce/v1/video/tasks/:task_id

Görev kaydını geçmişinizden kaldırır.

Idempotent — her zaman { "deleted": true } döndürür. Bu yalnızca geçmiş kaydınızı siler; depolanan media'yı ayrıca temizlemez.


Maliyet ve kısıtlamalar

Her video modeli, okuyabileceğiniz yetenek meta verilerini ortaya çıkarır /v1/models:

ParameterTypeRequiredDescription
video_caps.aspect_ratiosarrayOptionalAllowed aspect_ratio values.
video_caps.qualitiesarrayOptionalAllowed quality values.
video_caps.min_duration_s / max_duration_sintegerOptionalAllowed range for duration_seconds.
video_caps.modesarrayOptionalSubset of ["text", "image", "reference"] supported.
video_caps.price_per_second_centsintegerOptionalCost = duration_seconds × this value.
  • Cost is estimated at creation and settled when the job is processed; failed or expired tasks are not charged.
  • Max 4 concurrent video tasks per API key.
  • Result URLs are pre-signed and stop working at expires_at. Download or copy the MP4 to your own storage if you need it longer.

Uçtan uca komut dosyası

async function generateVideo(prompt) {
  const create = await fetch('https://api.airforce/v1/video/generations', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      model: 'wan-2.6',
      prompt,
      duration_seconds: 8,
      aspect_ratio: '16:9',
      quality: '720p',
    }),
  }).then(r => r.json());

  const { task_id } = create;

  // Poll until done.
  while (true) {
    await new Promise(r => setTimeout(r, 8_000));
    const task = await fetch(
      `https://api.airforce/v1/video/tasks/${task_id}`,
      { headers: { Authorization: `Bearer ${API_KEY}` } },
    ).then(r => r.json());

    if (task.status === 'completed') return task.result_url;
    if (task.status === 'failed' || task.status === 'expired') {
      throw new Error(task.error ?? task.status);
    }
  }
}