# H3 Max Reference to Video API

> Génération vidéo H3 Max conservant la cohérence des sujets grâce à des images, vidéos et extraits audio de référence

Génère une vidéo guidée par des ressources de référence : jusqu'à 9 images, 3 vidéos et 3 extraits audio, avec au maximum 12 fichiers au total. Le prompt les désigne par Image 1, Video 1, Audio 1, etc. Les premières, intermédiaires (`middle_image_url` à `middle_frame_time`) et dernières images facultatives fixent le début, le milieu et la fin. `duration` va de 0.92 à 15 secondes et `aspect_ratio` peut être adaptatif.

- Model id: `minimax/h3-max/reference-to-video`
- Made by: MiniMax
- Category: Reference to Video
- Output: video
- Price per second of your output video: from $0.05 / second of output video (cheapest run $0.05 (50 API credits))
- Run: `POST https://api.doitong.ru/v1/run/minimax/h3-max/reference-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/minimax/h3-max/reference-to-video`
- Docs page: https://doitong.com/fr/developers/models/minimax/h3-max/reference-to-video

## Pricing

Price: **from $0.05 / second of output video** (the lowest tier; the quote prices your exact input). Price per second of your output video: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

Price by tier:

- 480P: $0.05 / second of output video
- 768P: $0.08 / second of output video
- 1080P: $0.16 / second of output video

The full example input below costs $0.40 = 400 API credits (5 s output video × $0.08 (768P)).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.ru/v1/quote/minimax/h3-max/reference-to-video` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  | 1 – 50000 characters | Instructions de génération vidéo avec des références identifiées par type de ressource et position dans chaque liste de références, à l'aide de libellés tels que Audio 1, Video 1, Image 1, Image 2, etc. |
| `reference_image_urls` | `images` | array of image URL | no |  | ≤ 9 items | URLs d'images de référence du sujet ou du style, partageant une limite de 12 fichiers avec toutes les références vidéo et audio. Identifiez ces images dans le prompt par leur position dans la liste avec Image 1, Image 2 et les libellés suivants. |
| `reference_video_urls` |  | array of video URL | no |  | ≤ 3 items | URLs de vidéos de référence de mouvement ou autres, identifiées dans le prompt par leur position dans la liste avec Video 1, Video 2 et les libellés suivants. La limite commune pour les références image, vidéo et audio est de 12 fichiers ; chaque clip vidéo doit durer de 2 à 15 secondes, pour un total maximal de 15 secondes. |
| `reference_audio_urls` |  | array of audio URL | no |  | ≤ 3 items | Fournissez l'audio de référence sous forme d'URLs et identifiez les clips dans le prompt avec Audio 1, Audio 2 et les libellés suivants. Chaque clip doit durer de 2 à 15 secondes, pour un total audio maximal de 15 secondes. Les types de références image, vidéo et audio peuvent être fournis seuls ou combinés, dans la limite commune de 12 fichiers. |
| `image_url` | `image` | string (image URL) \| null | no |  | ≥ 1 characters | URL d'image facultative définissant l'image de début exacte et déterminant le canevas de sortie. Les ressources de référence maintiennent la cohérence du sujet. |
| `middle_image_url` |  | string (image URL) \| null | no |  | ≥ 1 characters | Image de guidage facultative pour middle_frame_time, disponible uniquement avec une génération native en 480P ou 768P et lorsque l'image de début et l'image de fin sont toutes deux fournies. |
| `middle_frame_time` |  | number \| null | no |  | > 0, < 15 | Moment de placement de l'image centrale, utilisable uniquement avec middle_image_url et limité aux positions strictement comprises entre la première et la dernière image de la vidéo demandée. Indiquez les secondes écoulées depuis le début ; la valeur est arrondie à l'image 24 fps la plus proche. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  | ≥ 1 characters | URL d'image finale facultative qui fixe l'image de fin exacte de la vidéo à l'image fournie. |
| `duration` |  | number | no | `5` | 0.92 – 15 | Durée demandée en secondes, autorisant une durée vidéo réelle jusqu'à environ 0.7 s au-delà de cette demande. |
| `resolution` |  | enum (string) | no | `768P` | `480P`, `768P`, `1080P` | Sélection de la résolution de génération : 1080P nécessite un affinement latent du contenu généré nativement en 768P, plutôt qu'une génération native à la résolution sélectionnée. |
| `seed` |  | integer \| null | no |  |  | Graine pour la génération aléatoire ; si elle est omise, une graine est choisie aléatoirement. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Activation du vérificateur de sécurité ; true active la vérification. |
| `prompt_expansion_mode` |  | string | yes | `balanced` |  | Effort de réécriture du prompt avant la génération : 'quality' élabore un prompt plus riche pendant environ 30 secondes au maximum, tandis que 'balanced' renvoie un résultat en environ une seconde. Choisissez 'disabled' pour ne pas développer le prompt. |
| `aspect_ratio` |  | enum (string) | no | `adaptive` | `adaptive`, `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` | Format d'image de la vidéo de sortie. |
| `reference_conditions` |  | array of object {type, url} | no |  | ≤ 12 items | Liste de références fournie à la place de reference_*_urls, jamais en complément. L'ordre entre les modalités est significatif et est conservé pendant tout le traitement. |
| `reference_conditions[].type` |  | enum (string) | yes |  | `image`, `video`, `audio` | Modalité de la référence ; l'ordre entre les modalités de la liste est significatif. |
| `reference_conditions[].url` |  | string | yes |  | ≥ 1 characters | URL du média de référence. |

File parameters (`images`, `reference_video_urls`, `reference_audio_urls`, `image`, `middle_image_url`, `end_image`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "prompt_expansion_mode": "balanced"
}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "prompt_expansion_mode": "balanced"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/minimax/h3-max/reference-to-video?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "prompt_expansion_mode": "balanced"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.ru/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/minimax/h3-max/reference-to-video?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "prompt_expansion_mode": "balanced"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "prompt_expansion_mode": "balanced",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/minimax/h3-max/reference-to-video", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.ru/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "minimax/h3-max/reference-to-video",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
        "prompt_expansion_mode": "balanced"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "minimax/h3-max/reference-to-video",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 400,
    "usd": "0.40",
    "charged": 400,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "prompt_expansion_mode": "balanced"
  },
  "output": {
    "video": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200
    },
    "expanded_prompt": "string",
    "seed": 42,
    "timings": {}
  },
  "outputs": [
    {
      "type": "video",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_size": 1843200,
      "width": 1280,
      "height": 720,
      "duration": 5,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size} | Vidéo produite par le modèle. |
| `expanded_prompt` | string \| null | Prompt développé prêt pour le modèle, ou null si aucun texte développé n'est disponible. Les cas null correspondent à l'expansion désactivée, à une expansion sans changement et à une expansion traitée en interne par l'API hébergée du modèle. |
| `seed` | integer | Graine de base utilisée pour reproduire le résultat généré. |
| `timings` | object \| null | Mesures de durée exprimées en secondes, disponibles uniquement sur les routes qui indiquent les durées du backend ; sinon null. L'entrée 'inference' mesure la durée du débruitage DiT sur le backend GPU. |

## Related models

- [MiniMax H3 Max Text to Video](https://doitong.com/developers/models/minimax/h3-max/text-to-video.md) (`minimax/h3-max/text-to-video`): from $0.0325 / second of output video
- [H3 Max Camera Controls](https://doitong.com/developers/models/minimax/h3-max/camera-controls.md) (`minimax/h3-max/camera-controls`): from $0.0325 / second
- [H3 Max Image to Video](https://doitong.com/developers/models/minimax/h3-max/image-to-video.md) (`minimax/h3-max/image-to-video`): from $0.0325 / second of output video
- [H3 Max](https://doitong.com/developers/models/minimax/h3-max/insert-video.md) (`minimax/h3-max/insert-video`): from $0.05 / second
- [H3 Max Extend Video](https://doitong.com/developers/models/minimax/h3-max/extend-video.md) (`minimax/h3-max/extend-video`): from $0.05 / second of output video
- [H3 Max Recast](https://doitong.com/developers/models/minimax/h3-max/recast.md) (`minimax/h3-max/recast`): from $0.30 / second of input video
- [H3 Max Reframe](https://doitong.com/developers/models/minimax/h3-max/reframe-video.md) (`minimax/h3-max/reframe-video`): from $0.05 / second of input video
- [H3 Max Relight](https://doitong.com/developers/models/minimax/h3-max/relight.md) (`minimax/h3-max/relight`): from $0.05 / second of input video

## Links

- HTML page: https://doitong.com/developers/models/minimax/h3-max/reference-to-video
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=minimax/h3-max/reference-to-video
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/minimax/h3-max/reference-to-video
