Skip to main content

Overview

Runware exposes a single endpoint (https://api.runware.ai/v1) that accepts an array of tasks, where a taskType field selects the operation. Bifrost wraps each request in this array envelope and maps its unified image and video schemas onto the matching task type. Image tasks return synchronously; video and 3D tasks are submitted asynchronously and polled to completion. Where an operation has no dedicated Bifrost endpoint, a neutral type parameter selects it on the closest one - for example type: "upscale" on /v1/images/edits.

Supported Operations

Upscaling, background removal, masking/segmentation, ControlNet preprocessing, and vectorize are available in Bifrost v2.0.0 and above.
Runware returns an exact per-task cost when a request sets includeCost: true. Bifrost always sets it and surfaces the value as the provider-reported cost, reported under usage.cost.total_cost.

1. Image Generation

Generate (POST /v1/images/generations)

Extra Params: any provider-native field (CFGScale, scheduler, lora, inputs, …) is forwarded as-is on this endpoint - no header required. A seedImage passed this way takes precedence over input_images. Response: BifrostImageGenerationResponse with data[].url or data[].b64_json, plus data[].id (the Runware asset UUID, reusable as an input to a later task).

Example

Text-to-SVG

The recraft:v4@vector family generates an SVG from a prompt:

2. Image Edit

Edit (POST /v1/images/edits)

This endpoint accepts JSON and multipart/form-data. Use multipart to upload the image as a file; use JSON to reference it by URL, which passes straight to Runware instead of round-tripping the asset through the gateway as base64. Extra Params: provider-native fields (strength, maskMargin, outpaint, settings, providerSettings, …) are forwarded as-is - no header required. Multipart carries every value as a string, so send JSON when a model’s parameters are numbers, booleans or nested objects.

Operation types

Aliases: remove_background and remove_bg for background_removal; controlnet and preprocess for controlnet_preprocess.
Bifrost sends each model the input shape it declares, so the same request works across all of them. Only the reference-image models (Nano Banana, FLUX, Seedream, Qwen-Image, …) accept more than one input image; elsewhere images after the first are dropped, and a mask reaches only models that declare one.

Examples

Response: same shape as Image Generation (data[].url or data[].b64_json). Masking models additionally return data[].detections[] with the regions they located.

3. Video Generation

Generate (POST /v1/videos)

Video tasks are submitted with deliveryMethod: async and return a queued job. Poll Retrieve until status: completed, then download. Extra Params: provider-native fields are forwarded when the x-bf-passthrough-extra-params: true header is set. settings and providerSettings are promoted to typed fields and reach Runware without it. taskType remains available as a raw escape hatch for task types Bifrost does not model. Generation Modes (auto-detected): text-to-video (prompt only) · image-to-video (prompt + input_reference).
Only a handful of video models mark width and height required; Bifrost sends the 16:9 1080p default for those alone. Every other model picks its own dimensions. Passing size always overrides.
Response: BifrostVideoGenerationResponse with id, status, videos[]. Bifrost statuses (normalized): queuedin_progresscompleted / failed. Runware’s native statuses are processing, success, error.

Examples

Retrieve / Download

Video Delete, List, and Remix are not supported by Runware.

4. Video Edit

Edit (POST /v1/videos/edits)

Operates on an existing video. The source is supplied as a Runware asset UUID, a URL, or an upload, and the type parameter picks the operation. Like generation, these are async - poll and download through the same endpoints.

5. 3D Model Generation

Runware’s 3D models (TRELLIS, Tripo, Hunyuan 3D, Rodin, Meshy) run as the 3dInference task type on the same async submit-then-poll lifecycle as video. Drive them through POST /v1/videos with type: "3d". The finished mesh is returned under videos[] with content_type: model/gltf-binary. Text-to-3D uses prompt alone. Image-to-3D uses input_reference.
Runware rejects a 3D task that carries both an input image and a prompt. When you supply input_reference, Bifrost drops the prompt so the request succeeds - the image is the subject.
Models differ in whether they take the image singly or as an array; Bifrost sends the form each model declares.
A completed response looks like:

6. Passthrough

The passthrough route forwards a raw Runware task array to https://api.runware.ai/v1 and returns the untouched response, unlocking the task types Bifrost does not model natively - captioning, audio inference, model training and prompt enhancement. Bifrost still injects the provider key, strips client auth, and logs the call.
  • Endpoint: POST /runware_passthrough/v1
  • Body: a raw Runware task array (exactly what you would send to Runware directly)
  • Auth: use your Bifrost key; Bifrost injects the real Runware key from its pool
For anything slower than quick image inference, submit with deliveryMethod: "async" and poll with a getResponse task. A synchronous task that outruns the connection window returns an upstream 504 failedTaskTimeout. This is Runware’s sync limit, not a passthrough error.

Setup & Configuration

Configure Runware as a provider.
  1. Navigate to Models > Model Providers. Look for Runware under Configured Providers. If it is missing, click on Add New Provider and select Runware.
  2. Click Add Key or edit an existing key.
  3. Set a name for your key.
  4. Paste your API key directly or use an environment variable (for example, env.RUNWARE_API_KEY).
  5. Set Allowed Models to All Models (default) or the specific model allowlist you want this key to serve.
  6. Save the provider configuration.