Skip to main content
Pricing: $0.2/request. Endpoint: POST /v1/models/runflow/multi-angles/runs.
Re-render the same subject from a different camera angle. Pick a horizontal view, a vertical angle, and a shot distance: the model rotates the camera around the subject and re-renders the scene from that pose.

Overview

Pricing

  • Base price: $0.2/request
  • Note: Per image. Multi-angle camera rotation.

Multi Angles API

Endpoint: POST /v1/models/runflow/multi-angles/runs

Run the model

Python

import requests

response = requests.post(
    "https://api.runflow.io/v1/models/runflow/multi-angles/runs",
    headers={"Authorization": "Bearer RUNFLOW_API_KEY"},
    json={
        "input": {
            "shot": "medium shot",
            "view": "right side view",
            "angle": "eye-level shot",
            "image_url": "https://public.runflow.io/images/models/runflow/product-isolation/examples/1/before.webp"
        },
        "callback_url": "https://your-server.com/webhook"
    },
)

data = response.json()
print(data)

Node.js

const response = await fetch(
  "https://api.runflow.io/v1/models/runflow/multi-angles/runs",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer RUNFLOW_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
        "input": {
            "shot": "medium shot",
            "view": "right side view",
            "angle": "eye-level shot",
            "image_url": "https://public.runflow.io/images/models/runflow/product-isolation/examples/1/before.webp"
        },
        "callback_url": "https://your-server.com/webhook"
    }),
  }
);

const data = await response.json();
console.log(data);

cURL

curl -X POST https://api.runflow.io/v1/models/runflow/multi-angles/runs \
  -H "Authorization: Bearer $RUNFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
    "input": {
        "shot": "medium shot",
        "view": "right side view",
        "angle": "eye-level shot",
        "image_url": "https://public.runflow.io/images/models/runflow/product-isolation/examples/1/before.webp"
    },
    "callback_url": "https://your-server.com/webhook"
}
JSON

Request parameters

ParameterTypeRequiredDescription
inputobjectrequiredModel input parameters. See “Input schema” below.
callback_urlstring | nulloptionalWebhook URL - POSTed when the run reaches a terminal state.
metadataobject | nulloptionalArbitrary key-value pairs attached to the run.

Input schema

FieldTypeRequiredAllowed valuesDescription
image_urlimagerequiredAnyHTTPS URL of the source photo. A clear subject and even lighting work best.
viewstringrequiredfront view, front-right quarter view, right side view, back-right quarter view, back view, back-left quarter view, left side view, front-left quarter viewWhere the camera sits horizontally around the subject. “front view” looks at the subject head-on; “right side view” rotates 90 degrees clockwise; “back view” looks from behind; and so on for the 8 cardinal + diagonal positions.
anglestringoptionallow-angle shot, eye-level shot, elevated shot, high-angle shotVertical camera tilt. “low-angle shot” looks up from ground level (-30 degrees); “eye-level shot” matches the subject’s height; “elevated shot” sits slightly above (30 degrees); “high-angle shot” looks down from above (60 degrees).
shotstringoptionalclose-up, medium shot, wide shotCamera distance. “close-up” fills the frame with surface and texture detail; “medium shot” is a balanced standard framing; “wide shot” pulls back to include context and environment.
promptstringoptionalAnyOptional extra phrase appended to the camera pose to nudge the output (e.g. “keep the original lighting”). Leave blank for default behavior.
match_input_aspectstringoptionaltrue, falseKeep the output at the source image’s aspect ratio. Default. Set to “false” if you want to force a specific aspect_ratio.
aspect_ratiostringoptional1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9Output aspect ratio. Only takes effect when match_input_aspect is “false”.

Output schema

FieldTypeDescription
outputsjsonArray of result items, each with at minimum a url field.
seedjsonRandom seed used (null if N/A).
timingjsonProvider timing breakdown (null if not surfaced).
nsfw_detectedjsonProvider NSFW flag (null if not surfaced).

Callback payload

When you provide a callback_url, Runflow POSTs to it once the run reaches a terminal state.
FieldTypeDescription
eventstringEvent type: “run.completed”, “run.failed”, or “run.cancelled”.
run_idstringThe unique identifier of the run.
statusstringTerminal status: “succeeded”, “failed”, or “cancelled”.
outputobject | nullThe run output. Null if the run failed or was cancelled.
duration_msnumber | nullTotal run duration in milliseconds.
created_atstring | nullISO 8601 timestamp when the run was created.
completed_atstring | nullISO 8601 timestamp when the run reached terminal state.
metadataobject | nullThe metadata object passed at run creation, if any.
  • Retries: 3 attempts with exponential backoff (1s, 2s). Retries on 5xx / network errors only.
  • Headers: Runflow-Request-Id is always sent. Runflow-Signature is sent if a signing secret is configured.

Additional Resources

Browse all models

Browse the catalog.

Run lifecycle

Callbacks, polling, statuses.

Callbacks

Handle async results.

Pricing

How requests bill out.