# Meshy V7 Image to 3D API

> Zet één afbeelding om in een 3D-mesh met 2k-geometrieoptie, optionele PBR, rigging en animatie

Maakt een 3D-model uit één afbeelding in `image_url` (JPG, PNG, AVIF of HEIF). `model_type` selecteert standard, lowpoly of smart-topology en `target_polycount` accepteert 100 tot 300000. `geometry_resolution` biedt standard of 2k. Texturering kan worden uitgeschakeld met `should_texture`; PBR-kanalen, een posemodus, humanoïde rigging en een animatievoorinstelling zijn optioneel.

- Model id: `meshy/v7/image-to-3d`
- Made by: Meshy
- Category: Image to 3D
- Output: 3d
- Price per run: from $0.80 / run (cheapest run $0.80 (800 API credits))
- Run: `POST https://api.doitong.ru/v1/run/meshy/v7/image-to-3d`
- Quote: `POST https://api.doitong.ru/v1/quote/meshy/v7/image-to-3d`
- Docs page: https://doitong.com/nl/developers/models/meshy/v7/image-to-3d

## Pricing

Price: **from $0.80 / 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 $1.20 = 1200 API credits (1 run × $1.20).

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/meshy/v7/image-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_url` | `image` | string (image URL) | yes |  |  | Lever de bronafbeelding voor 3D-creatie aan via URL of base64-data-URI, met .jpg, .jpeg, .png, AVIF of HEIF. AVIF- en HEIF-invoer wordt automatisch geconverteerd. |
| `model_type` |  | enum (string) | no | `standard` | `standard`, `lowpoly`, `smart-topology` | 3D-meshmodus: kies 'lowpoly' voor een low-polyresultaat dat is geoptimaliseerd voor strakkere polygonen; in deze modus negeert Meshy topology, target_polycount en should_remesh. Kies 'standard' voor een conventioneel resultaat met veel details, of 'smart-topology' om Meshy-T2 te gebruiken en vanaf het begin afzonderlijk gegenereerde, schone onderdelen te verkrijgen. |
| `topology` |  | enum (string) | no | `triangle` | `quad`, `triangle` | Keuze van modeltopologie tussen Triangle voor geometrische details en Quad voor een glad oppervlak. |
| `target_polycount` |  | integer | no | `30000` | 100 – 300,000 | Doel voor het aantal polygonen, begrensd op 15,000 wanneer model_type 'smart-topology' is. Als je het doel in die modus weglaat, wordt Meshy's lagere standaardwaarde van 4,000 gebruikt. |
| `symmetry_mode` |  | enum (string) | no | `auto` | `off`, `auto`, `on` | Kies of modelgeneratie symmetrie afdwingt met On, deze weglaat met Off of automatisch beslist met Auto. |
| `should_remesh` |  | boolean | no | `true` |  | Schakelt de remeshingfase in of uit. |
| `should_texture` |  | boolean | no | `true` |  | Schakelt textuurgeneratie in of uit. |
| `enable_pbr` |  | boolean | no | `false` |  | Voegt naast de basiskleur PBR-kaarten voor metallic, roughness en normal toe. |
| `is_a_t_pose` |  | boolean | no | `false` |  | Schakelaar voor T-posegeneratie, geactiveerd door true; vervangen door pose_mode. |
| `pose_mode` |  | enum (string) | no | `` | `a-pose`, `t-pose`, `` | Laat de tekenreeks leeg om geen pose voor het gegenereerde model op te geven, of vraag een A-pose aan met 'a-pose' of een T-pose met 't-pose'. |
| `texture_prompt` |  | string \| null | no |  | ≤ 600 characters | Tekstinstructies die textuurgeneratie aansturen. |
| `texture_image_url` |  | string (image URL) \| null | no |  |  | 2D-referentieafbeelding die textuurgeneratie aanstuurt. |
| `enable_rigging` |  | boolean | no | `false` |  | Automatische humanoïde rigging, het effectiefst voor humanoïde modellen waarvan de ledematen duidelijk te onderscheiden zijn. Inschakelen voorziet het gegenereerde model van rigging en levert basisanimaties voor lopen en rennen. |
| `rigging_height_meters` |  | number | no | `1.7` | > 0 | Geef een geschatte karakterhoogte in meter op wanneer enable_rigging true is; anders heeft deze waarde geen effect. |
| `enable_animation` |  | boolean | no | `false` |  | Of het gerigde model een vooraf ingestelde animatie krijgt; hiervoor moet enable_rigging true zijn. |
| `animation_action_id` |  | integer | no | `92` |  | ID van een Meshy-animatiepreset uit de bibliotheek, met beschikbare acties op https://docs.meshy.ai/en/api/animation-library. Validatie en gebruik gelden alleen wanneer enable_animation true is: waarden buiten [0, 696] worden afgewezen met een 422 en "Idle" komt overeen met `0`. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Schakelaar voor de veiligheidscontrole vóór verwerking: true maakt een veiligheidscontrole van de invoer verplicht vóór verwerking. |
| `geometry_resolution` |  | enum (string) \| null | no |  | `standard`, `2k` | Resolutie van de meshgeometrie; de ondersteunde Meshy-7-opties zijn standard en 2k. |
| `ultra_mode` |  | boolean | no | `false` |  | Verouderde optie, vervangen door geometry_resolution, die wint als beide zijn aangeleverd; gebruik in plaats daarvan geometry_resolution='2k'. |

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

A fuller example:

```json
{
  "image_url": "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/meshy/v7/image-to-3d?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "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/meshy/v7/image-to-3d?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "image_url": "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_url": "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/meshy/v7/image-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": "meshy/v7/image-to-3d",
      "input": {
        "image_url": "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": "meshy/v7/image-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": 1200,
    "usd": "1.20",
    "charged": 1200,
    "refunded": 0
  },
  "input": {
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  },
  "output": {
    "animation_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
    },
    "animation_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
    },
    "model_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
    },
    "thumbnail": {
      "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
      },
      "obj": {
        "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
      },
      "usdz": {
        "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
      },
      "blend": {
        "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
      },
      "stl": {
        "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
      }
    },
    "texture_urls": [
      {
        "base_color": {
          "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
        },
        "metallic": {
          "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
        },
        "normal": {
          "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
        },
        "roughness": {
          "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
        }
      }
    ],
    "seed": 42,
    "rigged_character_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
    },
    "rigged_character_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
    },
    "basic_animations": {
      "walking_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
      },
      "walking_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
      },
      "walking_armature_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
      },
      "running_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
      },
      "running_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
      },
      "running_armature_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
      }
    },
    "rig_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 |
|---|---|---|
| `animation_glb` | object {url, content_type, file_name, file_size} \| null | Animatieresultaat met het 3D-model als GLB; de response laat dit resultaat weg tenzij enable_animation true is. |
| `animation_fbx` | object {url, content_type, file_name, file_size} \| null | Animatieresultaat met het 3D-model als FBX; de response laat dit resultaat weg tenzij enable_animation true is. |
| `model_glb` | object {url, content_type, file_name, file_size} | GLB-bestand met het gegenereerde 3D-object. |
| `thumbnail` | object {url, content_type, file_name, file_size} \| null | Miniatuur met een voorbeeld van het gegenereerde model. |
| `model_urls` | object {glb, fbx, obj, usdz, blend, stl} | Links naar het 3D-model in verschillende indelingen. |
| `texture_urls` | array of object {base_color, metallic, normal, roughness} | Objecten met textuurbestanden in een array, gestructureerd volgens de Meshy API. |
| `seed` | integer \| null | Generatieseed, indien beschikbaar. |
| `rigged_character_glb` | object {url, content_type, file_name, file_size} \| null | Riggingresultaat als GLB-karakterbestand; ontbreekt in de response tenzij enable_rigging true is. |
| `rigged_character_fbx` | object {url, content_type, file_name, file_size} \| null | Riggingresultaat als FBX-karakterbestand; ontbreekt in de response tenzij enable_rigging true is. |
| `basic_animations` | object {walking_glb, walking_fbx, walking_armature_glb, running_glb, running_fbx, running_armature_glb} \| null | Basisanimaties voor lopen en rennen, alleen opgenomen als enable_rigging true is. |
| `rig_task_id` | string \| null | Identifier voor de riggingtaak; alleen opgenomen als enable_rigging true is. |

## Related models

- [Meshy V7 Multi Image to 3D](https://doitong.com/developers/models/meshy/v7/multi-image-to-3d.md) (`meshy/v7/multi-image-to-3d`): from $0.80 / run
- [Meshy V7 Text to 3D](https://doitong.com/developers/models/meshy/v7/text-to-3d.md) (`meshy/v7/text-to-3d`): from $0.80 / run
- [Meshy 7 Retexture](https://doitong.com/developers/models/meshy/v7/retexture.md) (`meshy/v7/retexture`): from $0.30 / request
- [Meshy 6 Preview · Image to 3D](https://doitong.com/developers/models/meshy/v6-preview/image-to-3d.md) (`meshy/v6-preview/image-to-3d`): from $0.80 / run
- [Meshy 6 · Image to 3D](https://doitong.com/developers/models/meshy/v6/image-to-3d.md) (`meshy/v6/image-to-3d`): from $0.80 / run
- [Meshy 7.1 Image to 3D](https://doitong.com/developers/models/meshy/v7.1/image-to-3d.md) (`meshy/v7.1/image-to-3d`): from $0.80 / run
- [Meshy 7.1 Multi Image to 3D](https://doitong.com/developers/models/meshy/v7.1/multi-image-to-3d.md) (`meshy/v7.1/multi-image-to-3d`): from $0.80 / run
- [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/meshy/v7/image-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=meshy/v7/image-to-3d
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/meshy/v7/image-to-3d
