Videos

Generate a video

Creates a video generation job from a text prompt. This is an asynchronous operation that returns immediately with a job ID. Use the retrieve endpoint to check the status and get the video URL when generation is complete.

POST
/v1/videos
AuthorizationBearer <token>

Bearer token authentication. Use your MPilot virtual-key JWT or admin JWT. Virtual keys (prefixed with sk-bf-) can also be passed here.

In: header

modelstring

Model identifier in format provider/model

promptstring

Text prompt describing the video to generate

input_reference?string

Optional reference image for image-to-video. OpenAI and Gemini require a base64 data URL (e.g., data:image/png;base64,...). Runway and Replicate accept both data URLs and plain URLs.

seconds?string

Duration of the video in seconds as a string (e.g., "4")

size?string

Resolution of the generated video (e.g., 1280x720, 720x1280, 1920x1080)

negative_prompt?string

Text describing what to avoid in the generated video

seed?integer

Seed for reproducible generation

video_uri?string

Source video URI for video-to-video generation (provider-specific, e.g. GCS URI)

audio?boolean

Enable audio generation in the video (supported by select providers/models)

fallbacks?array<Fallback>

Fallback models to try if primary model fails

Response Body

curl -X POST "https://loading/{AI_GATEWAY_URL}/v1/videos" \  -H "Content-Type: application/json" \  -d '{    "model": "string",    "prompt": "string"  }'
{
  "id": "string",
  "object": "video",
  "model": "string",
  "status": "queued",
  "progress": 100,
  "prompt": "string",
  "remixed_from_video_id": "string",
  "seconds": "string",
  "size": "string",
  "created_at": 0,
  "completed_at": 0,
  "expires_at": 0,
  "videos": [
    {
      "type": "url",
      "url": "http://example.com",
      "base64": "string",
      "content_type": "string"
    }
  ],
  "error": {
    "code": "string",
    "message": "string"
  },
  "content_filter": {
    "filtered_count": 0,
    "reasons": [
      "string"
    ]
  },
  "extra_fields": {
    "request_type": "string",
    "provider": "openai",
    "model_requested": "string",
    "model_deployment": "string",
    "latency": 0,
    "chunk_index": 0,
    "raw_request": {},
    "raw_response": {},
    "cache_debug": {
      "cache_hit": true,
      "cache_id": "string",
      "hit_type": "string",
      "requested_provider": "string",
      "requested_model": "string",
      "provider_used": "string",
      "model_used": "string",
      "input_tokens": 0,
      "threshold": 0,
      "similarity": 0
    }
  }
}
{
  "event_id": "string",
  "type": "string",
  "is_bifrost_error": true,
  "status_code": 0,
  "error": {
    "type": "string",
    "code": "string",
    "message": "string",
    "param": "string",
    "event_id": "string"
  },
  "extra_fields": {
    "provider": "openai",
    "model_requested": "string",
    "request_type": "string"
  }
}
{
  "event_id": "string",
  "type": "string",
  "is_bifrost_error": true,
  "status_code": 0,
  "error": {
    "type": "string",
    "code": "string",
    "message": "string",
    "param": "string",
    "event_id": "string"
  },
  "extra_fields": {
    "provider": "openai",
    "model_requested": "string",
    "request_type": "string"
  }
}
On this page

On this page

No Headings