# Meshy 7.1 Text to 3D API

> Conversion texte-3D Meshy 7.1 avec modes aperçu ou complet et résolution géométrique jusqu’à 4k

Génère un modèle 3D à partir d'une `prompt` textuelle de 600 caractères maximum. `mode` renvoie une géométrie non texturée ou un résultat texturé, et `geometry_resolution` permet de choisir standard, 2k ou 4k. Choisissez standard, lowpoly ou smart-topology avec `model_type`, définissez `target_polycount` de 100 à 300000 et activez éventuellement le PBR, l'expansion de l'invite, le rigging et l'animation.

- Model id: `meshy/v7.1/text-to-3d`
- Made by: Meshy
- Category: Text 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.1/text-to-3d`
- Quote: `POST https://api.doitong.ru/v1/quote/meshy/v7.1/text-to-3d`
- Docs page: https://doitong.com/fr-FR/developers/models/meshy/v7.1/text-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.1/text-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

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  | ≤ 600 characters | Description de l'objet à représenter comme modèle 3D, limitée à 600 caractères. |
| `mode` |  | enum (string) | no | `full` | `preview`, `full` | Mode de génération : 'preview' produit une géométrie sans textures, tandis que 'full' produit un modèle texturé en combinant preview et refine. |
| `seed` |  | integer \| null | no |  |  | Réutilisez cette graine avec une invite inchangée pour reproduire généralement un résultat précédent. |
| `model_type` |  | enum (string) | no | `standard` | `standard`, `lowpoly`, `smart-topology` | Mode de maillage 3D : choisissez 'lowpoly' pour un résultat low-poly optimisé pour des polygones plus nets ; dans ce mode, Meshy ignore topology, target_polycount et should_remesh. Pour un résultat conventionnel très détaillé, choisissez 'standard', ou 'smart-topology' pour utiliser Meshy-T2 lors de l'étape de géométrie (preview) et obtenir des parties nettes générées séparément dès le départ. |
| `topology` |  | enum (string) | no | `triangle` | `quad`, `triangle` | Choix de topologie du modèle entre Triangle pour le détail géométrique et Quad pour la régularité de la surface. |
| `target_polycount` |  | integer | no | `30000` | 100 – 300,000 | Nombre de polygones cible, plafonné à 15,000 lorsque model_type vaut 'smart-topology'. Omettre la cible dans ce mode sélectionne la valeur par défaut inférieure de Meshy, soit 4,000. |
| `should_remesh` |  | boolean | no | `true` |  | Ignorez le remeshing et recevez le maillage triangulaire brut en définissant cette valeur sur false ; sinon, activez la phase de remesh. |
| `symmetry_mode` |  | enum (string) | no | `auto` | `off`, `auto`, `on` | Paramètre de symétrie appliqué lors de la génération du modèle. |
| `enable_pbr` |  | boolean | no | `false` |  | Contrôle la génération des cartes PBR metallic, roughness et normal en plus de la couleur de base. |
| `is_a_t_pose` |  | boolean | no | `false` |  | Commutateur de génération en pose en T activé par true ; obsolète au profit de pose_mode. |
| `pose_mode` |  | enum (string) | no | `` | `a-pose`, `t-pose`, `` | Laissez la chaîne vide pour ne pas spécifier la pose du modèle généré, ou demandez une pose en A avec 'a-pose' ou une pose en T avec 't-pose'. |
| `enable_prompt_expansion` |  | boolean | no | `false` |  | Autorise un grand modèle de langage à enrichir l'invite avec des détails. L'activation de cette extension laisse le sens de l'invite inchangé. |
| `texture_prompt` |  | string \| null | no |  | ≤ 600 characters | Guide la texturation avec une invite supplémentaire en mode 'full' ; les autres modes ne l'utilisent pas. |
| `texture_image_url` |  | string (image URL) \| null | no |  |  | Image de référence 2D pour la génération de textures, appliquée uniquement en mode 'full'. |
| `enable_rigging` |  | boolean | no | `false` |  | Rigging humanoïde automatique, particulièrement efficace pour les modèles humanoïdes dont les membres sont clairement distincts. L'activation applique le rigging au modèle généré et fournit des animations de base de marche et de course. |
| `rigging_height_meters` |  | number | no | `1.7` | > 0 | Fournissez une taille estimée du personnage en mètres lorsque enable_rigging vaut true ; sinon, cette valeur n'a aucun effet. |
| `enable_animation` |  | boolean | no | `false` |  | Indique si le modèle avec rigging reçoit une animation prédéfinie, ce qui nécessite que enable_rigging vaille true. |
| `animation_action_id` |  | integer | no | `92` |  | ID de préréglage d'animation de la bibliothèque Meshy, dont les actions disponibles sont répertoriées à https://docs.meshy.ai/en/api/animation-library. La validation et l'utilisation s'appliquent uniquement lorsque enable_animation vaut true : les valeurs hors de [0, 696] sont rejetées avec un 422, et "Idle" correspond à `0`. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Commutateur de contrôle de sécurité du prétraitement : true rend le contrôle de sécurité de l'entrée préalable au traitement. |
| `geometry_resolution` |  | enum (string) \| null | no |  | `standard`, `2k`, `4k` | Résolution de la géométrie ; 4k nécessite Meshy-7.1. |
| `ultra_mode` |  | boolean | no | `false` |  | Option obsolète remplacée par geometry_resolution, qui prévaut si les deux sont fournies ; utilisez geometry_resolution='2k' à la place. |

File parameters (`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
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

A fuller example:

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

## 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.1/text-to-3d?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"
  }'

# 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.1/text-to-3d?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"
  }),
});
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",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/meshy/v7.1/text-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.1/text-to-3d",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
      },
      "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.1/text-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": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "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,
    "prompt": "A rustic, antique wooden treasure chest with a curved, domed lid, constructed from weathered, dark brown planks exhibiting prominent wood grain and subtle distress. It's heavily reinforced with broad, dark grey, oxidized metal bands secured by numerous circular rivets. Ornate, dark iron decorative elements featuring swirling foliate patterns and dragon motifs adorn the corners and lid. A prominent, circular, intricately carved metal lock plate with a central keyhole dominates the front, flanked by two large, dark metallic pull rings.",
    "actual_prompt": "string",
    "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 | Résultat d'animation contenant le modèle 3D au format GLB ; la réponse omet ce résultat sauf si enable_animation vaut true. |
| `animation_fbx` | object {url, content_type, file_name, file_size} \| null | Résultat d'animation contenant le modèle 3D au format FBX ; la réponse omet ce résultat sauf si enable_animation vaut true. |
| `model_glb` | object {url, content_type, file_name, file_size} | Fichier GLB contenant l'objet 3D généré. |
| `thumbnail` | object {url, content_type, file_name, file_size} \| null | Vignette affichant un aperçu du modèle généré. |
| `model_urls` | object {glb, fbx, obj, usdz, blend, stl} | Liens vers le modèle 3D dans différents formats. |
| `texture_urls` | array of object {base_color, metallic, normal, roughness} | Fichiers de texture représentés sous forme de tableau d'objets. |
| `seed` | integer \| null | Valeur de graine utilisée pendant la génération. |
| `prompt` | string | Invite textuelle fournie pour la génération. |
| `actual_prompt` | string \| null | Invite effectivement appliquée à la génération lorsque l'expansion de l'invite était activée. |
| `rigged_character_glb` | object {url, content_type, file_name, file_size} \| null | Résultat du rigging fourni comme fichier de personnage GLB ; absent de la réponse sauf si enable_rigging vaut true. |
| `rigged_character_fbx` | object {url, content_type, file_name, file_size} \| null | Résultat du rigging fourni comme fichier de personnage FBX ; absent de la réponse sauf si enable_rigging vaut true. |
| `basic_animations` | object {walking_glb, walking_fbx, walking_armature_glb, running_glb, running_fbx, running_armature_glb} \| null | Animations de base de marche et de course, incluses uniquement si enable_rigging vaut true. |
| `rig_task_id` | string \| null | Identifiant de la tâche de rigging ; inclus uniquement si enable_rigging vaut true. |

## Related models

- [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
- [Meshy 6 Preview · Text to 3D](https://doitong.com/developers/models/meshy/v6-preview/text-to-3d.md) (`meshy/v6-preview/text-to-3d`): $0.80 / request
- [Meshy 6 · Text to 3D](https://doitong.com/developers/models/meshy/v6/text-to-3d.md) (`meshy/v6/text-to-3d`): $0.80 / request
- [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
- [Hunyuan 3d](https://doitong.com/developers/models/hunyuan-3d/v3.1/rapid/text-to-3d.md) (`hunyuan-3d/v3.1/rapid/text-to-3d`): from $0.225 / request
- [Hunyuan 3D Pro Text to 3D](https://doitong.com/developers/models/hunyuan-3d/v3.1/pro/text-to-3d.md) (`hunyuan-3d/v3.1/pro/text-to-3d`): $0.375 / run
- [Hunyuan Motion \[0.46B\]](https://doitong.com/developers/models/hunyuan-motion/fast.md) (`hunyuan-motion/fast`): $0.06 / request

## Links

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