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
- Gateway
- Go SDK
Text-to-SVG
Therecraft: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
- Image-to-image
- Inpainting
- Upscale
- Background removal
- Segmentation
- ControlNet
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.BifrostVideoGenerationResponse with id, status, videos[].
Bifrost statuses (normalized): queued → in_progress → completed / failed. Runware’s native statuses are processing, success, error.
Examples
- Text-to-video
- Image-to-video
- Upscale
- Background removal
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 the3dInference 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.6. Passthrough
The passthrough route forwards a raw Runware task array tohttps://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.- Web UI
- config.json
- API
- Go SDK
- Navigate to Models > Model Providers. Look for Runware under Configured Providers. If it is missing, click on Add New Provider and select Runware.
- Click Add Key or edit an existing key.
- Set a name for your key.
- Paste your API key directly or use an environment variable (for example,
env.RUNWARE_API_KEY). - Set Allowed Models to All Models (default) or the specific model allowlist you want this key to serve.
- Save the provider configuration.

