# Tripo H3.1 Multiview to 3D API

> 從同一物件的 2 到 4 個視角建立 3D 模型，順序為正面、左側、背面、右側

接收同一物件的 2 到 4 張圖片，放入 `image_urls`，順序為正面、左側、背面、右側，且必須提供正面視角。共用單張圖片版本的選項：`face_limit`（1,000 到 2,000,000）、`pbr`、紋理與幾何品質、`quad` 網格和 `auto_size`。回傳模型、預覽渲染圖與 task ID。

- Model id: `tripo3d/h3.1/multiview-to-3d`
- Made by: Tripo
- Category: Image to 3D
- Output: 3d
- Price per run: from $0.20 / run (cheapest run $0.20 (200 API credits))
- Run: `POST https://api.doitong.ru/v1/run/tripo3d/h3.1/multiview-to-3d`
- Quote: `POST https://api.doitong.ru/v1/quote/tripo3d/h3.1/multiview-to-3d`
- Docs page: https://doitong.com/zh-TW/developers/models/tripo3d/h3.1/multiview-to-3d

## Pricing

Price: **from $0.20 / run** (the lowest tier; the quote prices your exact input). Price per run: 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.

The full example input below costs $0.30 = 300 API credits (1 run × $0.30).

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/tripo3d/h3.1/multiview-to-3d` 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 |
|---|---|---|---|---|---|---|
| `image_urls` | `images` | array of image URL | yes |  | 2 – 4 items | 單一物件的多角度圖像 URL，包含必要的正面視圖。請依 [front, left, back, right] 順序提供 2 到 4 個 URL。 |
| `face_limit` |  | integer \| null | no |  | 1,000 – 2,000,000 | 網格生成的明確面數目標；提供時會覆寫模型的自適應面數選擇。 |
| `texture` |  | boolean | no | `true` |  | 控制模型是否接收生成的紋理。 |
| `pbr` |  | boolean | no | `true` |  | 啟用 PBR 材質（Physically Based Rendering）；設為 true 時也會啟用紋理生成。 |
| `model_seed` |  | integer \| null | no |  |  | 用於讓幾何生成可重現的 Seed。 |
| `texture_seed` |  | integer \| null | no |  |  | 用於讓紋理生成可重現的 Seed。 |
| `texture_quality` |  | enum (string) | no | `standard` | `standard`, `detailed` | 紋理的品質設定。 |
| `geometry_quality` |  | enum (string) | no | `standard` | `standard`, `detailed` | 幾何的品質設定。 |
| `texture_alignment` |  | enum (string) | no | `original_image` | `original_image`, `geometry` | 紋理的對齊方法。 |
| `auto_size` |  | boolean | no | `false` |  | 自動縮放模型，使其具有以公尺測量的實際尺寸。 |
| `orientation` |  | enum (string) | no | `default` | `default`, `align_image` | 模型方向。 |
| `quad` |  | boolean | no | `false` |  | 啟用四邊形拓撲，在三角形面與四邊形面之間選擇。對於四邊形結果，只要 Tripo 以 FBX 位元組提供資料，就會回傳 FBX 檔案。 |
| `enable_safety_checker` |  | boolean | no | `true` |  | 在呼叫端獲得授權的情況下，將此值設為 false 可放寬審核。 |

File parameters (`images`) 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
{
  "images": [
    "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
    "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  ]
}
```

A fuller example:

```json
{
  "image_urls": [
    "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
    "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  ]
}
```

## 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/tripo3d/h3.1/multiview-to-3d?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_urls": [
      "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
      "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
    ]
  }'

# 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/tripo3d/h3.1/multiview-to-3d?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "image_urls": [
      "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
      "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
    ]
  }),
});
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 = {
    "image_urls": [
        "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
        "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
    ],
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/tripo3d/h3.1/multiview-to-3d", 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": "tripo3d/h3.1/multiview-to-3d",
      "input": {
        "image_urls": [
          "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
          "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
        ]
      },
      "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": "tripo3d/h3.1/multiview-to-3d",
  "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": 300,
    "usd": "0.30",
    "charged": 300,
    "refunded": 0
  },
  "input": {
    "image_urls": [
      "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
      "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
    ]
  },
  "output": {
    "model_mesh": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "model_urls": {
      "glb": {
        "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
        "content_type": "image/jpeg",
        "file_name": "0-output.jpeg",
        "file_size": 1843200
      },
      "fbx": {
        "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
        "content_type": "image/jpeg",
        "file_name": "0-output.jpeg",
        "file_size": 1843200
      },
      "base_model": {
        "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
        "content_type": "image/jpeg",
        "file_name": "0-output.jpeg",
        "file_size": 1843200
      },
      "pbr_model": {
        "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
        "content_type": "image/jpeg",
        "file_name": "0-output.jpeg",
        "file_size": 1843200
      }
    },
    "rendered_image": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "task_id": "string"
  },
  "outputs": [
    {
      "type": "file",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "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 |
|---|---|---|
| `model_mesh` | object {url, content_type, file_name, file_size} | 包含生成 3D 模型的 GLB 或 FBX 檔案，格式取決於 Tripo 產生的內容。 |
| `model_urls` | object {glb, fbx, base_model, pbr_model} | 指向 3D 模型替代版本的 URL。 |
| `rendered_image` | object {url, content_type, file_name, file_size} \| null | 顯示生成 3D 模型的渲染預覽。 |
| `task_id` | string \| null | 識別生成模型的可重複使用 Tripo 工作 ID，可在不重新上傳模型的情況下執行 rig 或 rig-check。 |

## Related models

- [Tripo H3.1 Image to 3D](https://doitong.com/developers/models/tripo3d/h3.1/image-to-3d.md) (`tripo3d/h3.1/image-to-3d`): from $0.20 / run
- [Tripo H3.1 Text to 3D](https://doitong.com/developers/models/tripo3d/h3.1/text-to-3d.md) (`tripo3d/h3.1/text-to-3d`): from $0.10 / run
- [Tripo P1 Image to 3D](https://doitong.com/developers/models/tripo3d/p1/image-to-3d.md) (`tripo3d/p1/image-to-3d`): from $0.40 / request
- [Tripo P2 Image to 3D](https://doitong.com/developers/models/tripo3d/p2/image-to-3d.md) (`tripo3d/p2/image-to-3d`): from $1.00 / run
- [Tripo3D · Image to 3D](https://doitong.com/developers/models/tripo3d/tripo/v2.5/image-to-3d.md) (`tripo3d/tripo/v2.5/image-to-3d`): from $0.20 / run
- [Tripo3D · Multiview to 3D](https://doitong.com/developers/models/tripo3d/tripo/v2.5/multiview-to-3d.md) (`tripo3d/tripo/v2.5/multiview-to-3d`): from $0.20 / run
- [Triposplat](https://doitong.com/developers/models/tripo3d/triposplat.md) (`tripo3d/triposplat`): $0.05 / request
- [Hi3D Image to 3D](https://doitong.com/developers/models/hitem3d/hi3d/image-to-3d.md) (`hitem3d/hi3d/image-to-3d`): $0.50 / run

## Links

- HTML page: https://doitong.com/developers/models/tripo3d/h3.1/multiview-to-3d
- 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=tripo3d/h3.1/multiview-to-3d
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/tripo3d/h3.1/multiview-to-3d
