MiniMax H3 Max Multi-Angle Serverless API

Orbit, crane and dolly a frozen photo in 3D.

PlaygroundAPI
Pricing
~18.01s
POST /v2/minimax-h3-max-multi-angle · submit + poll
 1# pip install "segmind>=1.1.0"
 2# export SEGMIND_API_KEY="YOUR_API_KEY"
 3from segmind import SegmindClient, InferenceFailed, InferenceTimeout
 4
 5# Async (v2) — recommended for long-running / video models.
 6# run() blocks up to 600s; submit_async + job.wait(timeout=...) sets a longer
 7# deadline and keeps the request_id so you can re-poll later.
 8client = SegmindClient()                      # reads SEGMIND_API_KEY
 9payload = {
10    "image": "https://segmind-resources.s3.amazonaws.com/input/minimax-h3-max-multi-angle-default-chef-e10556cb.jpg",
11    "camera_trajectory": [{"time": 0, "azimuth": 0, "elevation": 0, "distance": 1}, {"time": 0.5, "azimuth": 180, "elevation": 12, "distance": 0.85}, {"time": 1, "azimuth": 360, "elevation": 0, "distance": 1}],
12    "prompt": "The scene is a single frozen instant. Every element holds its exact position; the flame and the airborne pieces stay suspended. Only the camera moves: it orbits the wok a full turn and eases back to the original framing. Camera parallax is the only motion.",
13    "duration": 6,
14    "resolution": "768P",
15    "prompt_expansion_mode": "balanced",
16    "seed": 12345,
17}
18job = client.submit_async("minimax-h3-max-multi-angle", **payload)
19print(job.request_id)                         # available immediately
20try:
21    result = job.wait(timeout=900, interval=2.0)
22    print(result["status"])                  # COMPLETED
23    print(result.get("output"))              # model output (e.g. video URL)
24except InferenceTimeout as e:
25    print("still running:", e.request_id)    # re-poll later with this id
26except InferenceFailed as e:
27    print("failed:", e.detail)
28
29# Fast models (<=600s) can use the one-liner instead:
30# result = segmind.run("minimax-h3-max-multi-angle", **payload)

API Endpoint

POSThttps://api.segmind.com/v1/minimax-h3-max-multi-angle

Parameters

camera_trajectoryrequired
object[]

Ordered camera poses, 2 to 12 of them. Each keyframe is a position at a point in the clip: the first pose is held before its time and the last one to the end. Times must increase; total azimuth travel is capped at 32 full turns.

Default: [{"time":0,"azimuth":0,"elevation":0,"distance":1},{"time":0.5,"azimuth":180,"elevation":10,"distance":0.9},{"time":1,"azimuth":360,"elevation":0,"distance":1}]
Array items:
timerequired
number

Position in the clip, 0 at the start and 1 at the end.

Default: 0Range: 0 - 1
azimuthrequired
number

Horizontal angle around the subject. Signed and unbounded: 360 is one full turn clockwise, -180 is a half turn the other way.

Default: 0
elevationrequired
number

Vertical angle, -90 (below) to 90 (overhead).

Default: 0Range: -90 - 90
distancerequired
number

Camera distance from the subject in normalised scene units; must be greater than 0. Below 1 pushes in, above 1 pulls back.

Default: 1
imagerequired
string (uri)

The single frame the camera moves around. Everything in it stays frozen - only the camera moves - so pick a shot with depth and a clear subject.

durationoptional
integer

Length of the generated video, 5 to 15 seconds. Billed per second of output.

Default: 5Range: 5 - 15
promptoptional
string

Optional. Left empty, the model is told to hold the scene rigid and move only the camera. Describe the camera move itself if you want to steer it; describing scene action fights the model.

Default: "The same elements in the reference are rigid. Preserve every element exactly. The entire scene is frozen. Only the camera moves. no scene motion only camera motion"
prompt_expansion_modeoptional
string

How much the prompt is rewritten before generation. 'disabled' sends it untouched, 'balanced' returns in about a second, 'quality' spends up to ~30s on a richer prompt.

Default: "balanced"
Allowed values :
Disabled"disabled"
Balanced"balanced"
Quality"quality"
resolutionoptional
string

Output resolution. 480P is the default and cheapest tier; 1080P is a latent refinement of a 768P render.

Default: "480P"
Allowed values :
"480P""768P""1080P"
seedoptional
integer

Seed for reproducible generation. -1 for random.

Default: -1Range: -1 - 999999999999999

Response Type

Returns: Video

Asynchronous requests (v2)

Use Async for video, long-running (>~60s), or high-concurrency workloads; Sync is simplest for fast image & LLM calls. Async submits a request and you poll it to completion.

  1. 1
    POST /v2/minimax-h3-max-multi-angle

    Submitreturns request_id, status_url, response_url

  2. 2
    GET /v2/requests/{id}/status

    Polluntil COMPLETED or FAILED

  3. 3
    GET /v2/requests/{id}

    Resultfinal response body

Status states

QUEUEDAccepted, waiting for a worker
PROCESSINGRunning on a worker
COMPLETEDDone — result body is ready
FAILEDErrored (incl. content/RAI blocks)
  • A FAILED request is served as HTTP 422 — the body still carries the error detail.
  • An unknown or expired request_id returns HTTP 404.
  • Results are retained for 1 hour, then expire.
  • Content / RAI blocks surface as FAILED, not a separate state.
  • Track completion by polling the status endpoint.

Common Error Codes

The API returns standard HTTP status codes. Detailed error messages are provided in the response body.

400

Bad Request

Invalid parameters or request format

401

Unauthorized

Missing or invalid API key

403

Forbidden

Insufficient permissions

404

Not Found

Model or endpoint not found

406

Insufficient Credits

Not enough credits to process request

429

Rate Limited

Too many requests

500

Server Error

Internal server error

502

Bad Gateway

Service temporarily unavailable

504

Timeout

Request timed out