Skip to main content
Base URL: https://platform.runblob.io

GET /v1/kling/o3-video/generations/

Retrieve the current status and result of a video generation task.
generation_id
string
required
The unique identifier returned from the generate request
  • pending - Task created, waiting in queue
  • processing - Video is being generated
  • completed - Generation finished, video ready
  • failed - Generation failed (see webhook for error details)
curl -X GET https://platform.runblob.io/v1/kling/o3-video/generations/550e8400-e29b-41d4-a716-446655440000 \
  -H "Authorization: Bearer YOUR_API_KEY"

Response Examples

{
  "generation_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "processing",
  "prompt": "Dragon flying over mountains",
  "video_url": null,
  "model": "kling-o3-video-10s-pro"
}
Keep polling this endpoint every 5 seconds until status changes to completed or failed.Expected timeline:
  • pendingprocessing: 10-30 seconds
  • processingcompleted: 2-10 minutes (varies by duration and mode)
Generation times:
  • 5s Standard: ~2-3 minutes
  • 10s Standard: ~3-5 minutes
  • 15s Standard: ~5-7 minutes
  • Pro mode: +30-50% longer

Response Fields

generation_id
string
Unique identifier for this generation
status
string
Current status: pending, processing, completed, or failed
prompt
string
The original text prompt used for generation
video_url
string | null
Direct URL to the generated video (only available when status is completed)
model
string
Model identifier, e.g., kling-o3-video-5s, kling-o3-video-10s-pro, kling-o3-video-15s

Polling Best Practices

1

Wait Before First Check

Wait 10 seconds after generation request before your first status check to give the system time to queue the task
2

Use Progressive Intervals

Start with 5-second intervals, gradually increase to 10-15 seconds after first few checks
const intervals = [5000, 5000, 10000, 15000, 15000]; // Progressive delay
3

Set Maximum Timeout

Stop polling after 15 minutes. If still not completed, assume failure and check error logs
4

Use Webhooks for Production

For production apps, use webhooks instead of polling to reduce latency and API calls

Polling Implementation

async function pollVideoStatus(generationId) {
  const intervals = [2000, 3000, 5000, 10000, 15000]; // 2s, 3s, 5s, 10s, 15s
  const maxAttempts = 60; // 15 minutes max
  
  let attempt = 0;
  while (attempt < maxAttempts) {
    const status = await fetchStatus(generationId);
    
    if (status.status === 'completed' || status.status === 'failed') {
      return status;
    }
    
    const delay = intervals[Math.min(attempt, intervals.length - 1)];
    await sleep(delay);
    attempt++;
  }
  
  throw new Error('Generation timed out after 15 minutes');
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
Rate Limits: Maximum 60 status checks per minute per API key. Use webhooks to avoid hitting this limit.

Model Naming

The model field in the response indicates the configuration used:
  • kling-o3-video-5s - 5 seconds, 720p
  • kling-o3-video-10s - 10 seconds, 720p
  • kling-o3-video-15s - 15 seconds, 720p