# MiniMax H3 Max Text to Video API

> تحويل قياسي من النص إلى الفيديو باستخدام H3 Max بست نسب أبعاد، حتى 1080P، ومسار صوتي اختياري

ينشئ فيديو من `prompt` نصية تصل إلى 50000 حرف. اختر `aspect_ratio` من 21:9 أو 16:9 أو 4:3 أو 1:1 أو 3:4 أو 9:16، و`resolution` من 480P أو 768P أو 1080P. تتراوح `duration` من 0.92 إلى 15 ثانية. يثبت `target_audio_url` مقطعًا مقدمًا في المسار الصوتي، ويحدد `prompt_expansion_mode` مستوى جهد إعادة الكتابة.

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

## Pricing

Price: **from $0.0325 / 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.0325 / second of output video
- 768P: $0.052 / second of output video
- 1080P: $0.104 / second of output video

The full example input below costs $0.28 = 280 API credits (5 s output video × $0.052 (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/text-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

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  | 1 – 50000 characters | تعليمات نصية لتوليد الفيديو. |
| `duration` |  | number | no | `5` | 0.92 – 15 | المدة المطلوبة بالثواني، بحد أدنى 2 s عند توفير target_audio_url. اسمح بتجاوز للمخرج يصل تقريبًا إلى 0.7 s. |
| `resolution` |  | enum (string) | no | `768P` | `480P`, `768P`, `1080P` | اختيار دقة التوليد: تتطلب 1080P تحسينًا كامنًا للمادة المولدة أصليًا بدقة 768P، بدلًا من التوليد الأصلي بالدقة المحددة. |
| `seed` |  | integer \| null | no |  |  | بذرة التوليد العشوائي؛ إذا لم تُحدَّد، تُختار عشوائيًا. |
| `enable_safety_checker` |  | boolean | no | `true` |  | تنشيط مدقق السلامة؛ تُمكّن true الفحص. |
| `prompt_expansion_mode` |  | string | yes | `balanced` |  | جهد إعادة صياغة الموجّه قبل التوليد: تطوّر 'quality' موجّهًا أكثر ثراءً خلال مدة تصل تقريبًا إلى 30s، بينما تعيد 'balanced' النتيجة خلال نحو ثانية. اختر 'disabled' لإلغاء توسيع الموجّه. |
| `target_audio_url` |  | string (audio URL) \| null | no |  | ≥ 1 characters | مسار صوتي بديل اختياري يُقدَّم عبر عنوان URL ببروتوكول HTTP(S) أو معرّف URI لبيانات base64؛ يجب ألا تقل مدة المقطع عن 2 ثانية وألا يتجاوز حجمه 15 MB. يحل الصوت المقدَّم محل المسار الصوتي المولَّد دون تغيير سرعة التشغيل: تُحذف المدة الزائدة من النهاية، وتُستكمل المقاطع الأقصر بصمت لتطابق مدة الفيديو. قد تُعاد معاينة الصوت إلى 96 kHz إذا كان معدل أخذ العينات مرتفعًا على نحو غير معتاد. |
| `aspect_ratio` |  | enum (string) | no | `16:9` | `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` | نسبة أبعاد فيديو المخرج. |

File parameters (`target_audio_url`) 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/text-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/text-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/text-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/text-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/text-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": 280,
    "usd": "0.28",
    "charged": 280,
    "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",
    "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} | الفيديو الذي أنشأه النموذج. |
| `expanded_prompt` | string \| null | موجّه موسّع جاهز للنموذج، أو null إذا لم يتوفر نص موسّع. تشمل حالات null إلغاء التوسيع، والتوسيع الذي لم يغيّر شيئًا، والتوسيع الذي عالجه نموذج عبر API المستضاف الخاص به. |
| `timings` | object \| null | قياسات التوقيت معبَّرًا عنها بالثواني، ومتاحة فقط في المسارات التي تُبلغ عن توقيتات الواجهة الخلفية؛ وإلا فالقيمة null. يقيس الإدخال 'inference' المدة التي استغرقها إزالة الضوضاء DiT على الواجهة الخلفية لوحدة GPU. |

## Related models

- [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 Reference to Video](https://doitong.com/developers/models/minimax/h3-max/reference-to-video.md) (`minimax/h3-max/reference-to-video`): from $0.05 / 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/text-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/text-to-video
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/minimax/h3-max/text-to-video
