Build with the Meshy 6 3D API using APIDot: cURL, Node.js, request variants, pricing, and production notes in one GitHub repo.
Try on APIDot | Get API Key | API Docs | Pricing | Main Examples
Meshy 6 3D API for generating textured 3D assets from prompts, one reference image, or 1-4 object reference images with mesh, PBR texture, and common export formats.
This repository turns that APIDot workflow into runnable server-side examples: a verified cURL request, a native Node.js example, request variants, pricing context, and production integration guardrails.
Meshy 6 3D is available on APIDot through three public model IDs: meshy-6-text-to-3d, meshy-6-image-to-3d, and meshy-6-multi-image-to-3d. Text-to-3D requests require input.prompt; image requests require input.image_urls, with exactly one image for single image-to-3D and 1-4 images for multi-image-to-3D.
- Use
meshy-6-text-to-3dfor prompt-driven concept assets and include object type, style, material, and intended use. - Use
meshy-6-image-to-3donly with exactly one clear object image. - Use
meshy-6-multi-image-to-3dwith 1-4 images that show the same object from different angles. - Set topology, target_polycount, remeshing, and symmetry intentionally when downstream mesh shape matters.
- Store the returned
task_idimmediately so polling, retries, and callback handling stay idempotent.
- Product and marketing asset generation
- Backend media workflow prototypes
- Creative testing and prompt iteration
- Production integrations that need stable API examples
Catalog price: Starting at 60 credits per generation | text-to-3D, image-to-3D, and multi-image-to-3D: 60 credits ($0.300).
| Tier | Model | Resolution | Credits | APIDot listed price | fal.ai listed price |
|---|---|---|---|---|---|
| text-to-3D generation | meshy-6-text-to-3d | - | 60 | $0.3 | $0.8 |
| image-to-3D generation | meshy-6-image-to-3d | - | 60 | $0.3 | $0.8 |
| multi-image-to-3D generation | meshy-6-multi-image-to-3d | - | 60 | $0.3 | $1.2 |
This README uses pricing data currently published in the APIDot model catalog. Check the APIDot model page before high-volume production runs.
cp .env.example .env
# Edit .env and set APIDOT_API_KEY
cd node
npm start
The same request shape is available as a copy-paste cURL example in curl/generate.md.
flowchart LR
A[Submit generation request] --> B[Receive data.task_id]
B --> C{Delivery mode}
C -->|Polling| D[Check task status]
C -->|Webhook| E[Receive callback_url event]
D --> F[Read result URL from finished task]
E --> F
Use polling for local tests and webhook delivery for production queues. Store data.task_id before the first status check so retries, callbacks, and result URLs can be reconciled safely.
Submit to APIDot:
POST https://api.apidot.ai/api/generate/submit
Authorization: Bearer <APIDOT_API_KEY>
Content-Type: application/json
Primary payload:
{
"model": "meshy-6-text-to-3d",
"input": {
"prompt": "A worn leather explorer backpack with brass buckles, canvas straps, realistic stitching, game-ready asset",
"mode": "full",
"topology": "triangle",
"target_polycount": 30000,
"should_remesh": true,
"symmetry_mode": "auto",
"enable_pbr": true,
"enable_prompt_expansion": true,
"enable_safety_checker": true
}
}Generate 3D assets with Meshy 6 through APIDot's unified async submit endpoint.
{
"model": "meshy-6-text-to-3d",
"callback_url": "https://your-domain.com/callback",
"input": {
"prompt": "A worn leather explorer backpack with brass buckles, canvas straps, realistic stitching, game-ready asset",
"mode": "full",
"topology": "triangle",
"target_polycount": 30000,
"should_remesh": true,
"symmetry_mode": "auto",
"enable_pbr": true,
"enable_prompt_expansion": true,
"enable_safety_checker": true
}
}{
"model": "meshy-6-image-to-3d",
"callback_url": "https://your-domain.com/callback",
"input": {
"image_urls": [
"https://example.com/object-front.png"
],
"topology": "triangle",
"target_polycount": 30000,
"should_texture": true,
"enable_pbr": true,
"enable_safety_checker": true
}
}{
"model": "meshy-6-multi-image-to-3d",
"callback_url": "https://your-domain.com/callback",
"input": {
"image_urls": [
"https://example.com/object-front.png",
"https://example.com/object-side.png"
],
"topology": "triangle",
"target_polycount": 30000,
"should_texture": true,
"enable_pbr": true,
"enable_safety_checker": true
}
}| Field | Type | Required | Description |
|---|---|---|---|
| model | string | yes | Target model id. Use meshy-6-text-to-3d, meshy-6-image-to-3d, or meshy-6-multi-image-to-3d. |
| callback_url | string | no | Optional webhook URL for terminal task updates. |
| input | object | yes | Container for Meshy 6 3D generation parameters. |
| input.prompt | string | no | Prompt for meshy-6-text-to-3d. Required for text-to-3D requests. |
| input.image_urls | string[] | no | Image URLs for image variants. Exactly one URL for meshy-6-image-to-3d; 1-4 URLs for meshy-6-multi-image-to-3d. |
| input.mode | string | no | Text-to-3D only. Use preview or full. |
| input.topology | string | no | Mesh topology. Use quad or triangle. |
| input.target_polycount | integer | no | Target polygon count for the generated mesh. |
| input.should_texture / input.enable_pbr | boolean | no | Texture and PBR controls. should_texture applies to image models; enable_pbr requests PBR maps when available. |
| input.enable_rigging / input.enable_animation | boolean | no | Optional rigging and animation preset controls for suitable humanoid assets. |
- Keep APIDot API keys in server-side environment variables.
- Persist selected model, request payload, user ID, and response metadata together.
- Validate source media URLs before submitting requests that depend on source files.
- Avoid logging API keys, private prompts, private media URLs, or callback URLs.
- Store task_id immediately and use polling or callback_url for durable async delivery.
code: HTTP-style status code. Successful calls return200.data.task_id: Async task identifier returned immediately after submission.data.status: Initial task status, typicallynot_started.
Common error classes:
400 invalid_request: Missing fields or unsupported parameter combinations.401 authentication_error: Missing, expired, or invalid Bearer API key.402 insufficient_credits: The current prepaid balance cannot cover the job.429 rate_limited: Request rate is temporarily above the current allowed limit.
{
"code": 200,
"data": {
"task_id": "task-unified-example",
"status": "finished",
"output": {
"files": [
{
"file_url": "https://example.com/generated-model.glb",
"file_type": "model"
}
]
},
"error_message": null
}
}- Keep APIDot API keys in server-side environment variables.
- Persist selected model, request payload, user ID, and response metadata together.
- Validate source media URLs before submitting requests that depend on source files.
- Avoid logging API keys, private prompts, private media URLs, or callback URLs.
- Retry transient network failures with backoff, but do not retry unchanged invalid payloads.
Use meshy-6-text-to-3d, meshy-6-image-to-3d, or meshy-6-multi-image-to-3d.
meshy-6-image-to-3d requires exactly one image. meshy-6-multi-image-to-3d accepts 1-4 images of the same object.
After submit returns task_id, poll /api/generate/status/{task_id} or use callback_url for the terminal task update.
- Website: https://apidot.ai
- Docs: https://apidot.ai/docs
- Meshy 6 3D docs: https://apidot.ai/docs/meshy-6-3d
- Meshy 6 3D model page: https://apidot.ai/models/meshy-6-3d
- GitHub repo: https://github.com/APIDotAI/meshy-6-3d-api
- Main examples: https://github.com/APIDotAI/apidot-examples