Meshy 7.1 Multi Image to 3D API
meshy/v7.1/multi-image-to-3dMeshy 7.1 Multi Image to 3D rebuilds one object from 1–4 views into a textured 3D model with up to 2K geometry and PBR maps. Combining front, side and back views gives the mesh more information about hidden surfaces, while you keep control of topology, polygon count and rigging.
Input
Output
Meshy 7.1 Multi Image to 3D model readyMeshy 7.1 Multi Image to 3D API
Quick Start
Submit Meshy 7.1 Multi Image to 3D inputs, retain task_id, and query the task for the returned files.
Authenticate for Meshy 7.1 Multi Image to 3D
Send your Vidgo API key in the Bearer authorization header.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer YOUR_API_KEY
Submit a Meshy 7.1 Multi Image to 3D request
Place model at the request root and the image_urls value inside input.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "meshy/v7.1/multi-image-to-3d",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-1.png",
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-2.png",
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-3.png",
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-4.png"
],
"geometry_resolution": "2k",
"should_texture": true,
"enable_pbr": true,
"topology": "triangle",
"target_polycount": 30000,
"symmetry_mode": "auto"
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Check the Meshy 7.1 Multi Image to 3D task
Query the returned task_id until status is finished or failed.
Status endpoint
GET https://api.vidgo.ai/api/generate/status/{task_id}When status is finished, inspect files and download the returned assets.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "VF7VZ7G81NVEN3II",
"status": "not_started",
"created_time": "2026-11-05T07:07:57"
}
}{
"code": 200,
"data": {
"task_id": "VF7VZ7G81NVEN3II",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v2/01/model-01.glb",
"file_type": "3d",
"label": "model_glb",
"format": "glb",
"file_name": "model-01.glb"
},
{
"file_url": "https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v2/01/model-01.fbx",
"file_type": "3d",
"label": "model_fbx",
"format": "fbx",
"file_name": "model-01.fbx"
},
{
"file_url": "https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v2/01/model-01.obj",
"file_type": "3d",
"label": "model_obj",
"format": "obj",
"file_name": "model-01.obj"
},
{
"file_url": "https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v2/01/model-01.stl",
"file_type": "3d",
"label": "model_stl",
"format": "stl",
"file_name": "model-01.stl"
},
{
"file_url": "https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v2/01/model-01.usdz",
"file_type": "3d",
"label": "model_usdz",
"format": "usdz",
"file_name": "model-01.usdz"
},
{
"file_url": "https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v2/01/thumbnail-01.png",
"file_type": "image",
"label": "thumbnail",
"format": "png",
"file_name": "thumbnail-01.png"
}
],
"created_time": "2026-11-05T07:07:57",
"error_message": null,
"progress": 100
}
}Read Meshy 7.1 Multi Image to 3D files
Read each returned files item for file_url, file_type, label, and format.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "meshy/v7.1/multi-image-to-3d",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-1.png",
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-2.png",
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-3.png",
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/multi-image-to-3d/v1/01/input-4.png"
],
"geometry_resolution": "2k",
"should_texture": true,
"enable_pbr": true,
"topology": "triangle",
"target_polycount": 30000,
"symmetry_mode": "auto"
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneInput Parameters
Place model and optional callback_url at the request root; put the fields listed below inside input.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | meshy/v7.1/multi-image-to-3d |
| input | object | Yes | — | Generation settings for this endpoint. |
| input.image_urls | string[] | Yes | — | Add 1–4 images of the same object from different angles, such as front, side, back and three-quarter. |
| input.should_texture | boolean | No | true | true textures the model (+80 credits); false returns geometry only. Default true. |
| input.geometry_resolution | string | No | — | Geometry detail: standard, 2k. Available with model_type standard. Leave unset for the default. |
| input.topology | string | No | triangle | triangle or quad faces. Default triangle. |
| input.target_polycount | integer | No | 30000 | Target polygon count: 100–300,000 (default 30,000), or 100–15,000 (default 4,000) with smart-topology. |
| input.should_remesh | boolean | No | true | true remeshes to the chosen topology and polygon target; false keeps the raw triangle mesh. Default true. |
| input.symmetry_mode | string | No | auto | off, auto or on. Default auto. |
| input.enable_pbr | boolean | No | false | Adds metallic, roughness and normal maps to the base color. Requires should_texture true. |
| input.texture_prompt | string | No | — | Up to 600 characters describing colors, patterns and materials. Requires should_texture true. |
| input.texture_image_url | string | No | — | A public image URL used as a texture reference. Requires should_texture true. |
| input.pose_mode | string | No | "" | a-pose or t-pose for characters, or empty for no pose. Default empty. |
| input.enable_rigging | boolean | No | false | Adds a humanoid skeleton (+40 credits). Default false. |
| input.rigging_height_meters | number | No | 1.7 | Character height in meters for rigging, greater than 0. Default 1.7. |
| input.enable_animation | boolean | No | false | Applies an animation preset (+24 credits). Requires enable_rigging true. |
| input.animation_action_id | integer | No | 92 | Animation preset ID from 0 to 696. Default 92. |
| input.enable_safety_checker | boolean | No | true | Runs the upstream safety checker. Default true. |
| callback_url | string | No | — | Provide a public HTTP(S) URL for completed or failed task notifications. |
Response Fields
The status response reports task state, progress, and returned files.
| Field | Type | Description |
|---|---|---|
| code | integer | API response code. |
| data.task_id | string | Task ID for status queries. |
| data.status | string | Task state: not_started, running, finished, or failed. |
| data.progress | integer | Reported generation progress from 0 to 100. |
| data.files | array | Generated model, preview image, and companion files. |
| data.files[].file_url | string | URL for a returned file. |
| data.files[].file_type | string | File category: 3d, image or other. |
| data.files[].label | string | File role, such as model_glb or thumbnail. |
| data.files[].format | string | File format, such as glb or png. |
| data.files[].file_name | string | File name when provided. |
| data.files[].file_size | integer | File size in bytes when provided. |
| data.error_message | string | null | Error details for a failed task. |
Task Lifecycle
Use task_id to check the same generation until it finishes or fails.
not_startedThe task has been accepted and awaits generation.
runningThe 3D model is being generated; continue querying this task.
finishedGeneration is complete; read files for the assets.
failedThe task failed; read error_message before submitting another request.
Polling and Errors
- Keep the task IDIf a status query is interrupted, use the same task_id to retrieve the latest state.
- Download returned assetsUse file_url and file_name from each returned file to download the model and companion assets.
- Review a failed generationWhen status is failed, read error_message, then review the input before submitting a new task.
Endpoint Specifications
| Item | Value | Description |
|---|---|---|
| Input | 1–4 images | Views of the same object from different angles. |
| Geometry resolution | standard, 2k | Set with geometry_resolution. |
| Topology | triangle, quad | Target polycount 100–300,000. |
| Output files | GLB, FBX, OBJ, USDZ, STL | Formats returned depend on the task; read files for the full list. |
| Price | $1.200 default | 160 credits geometry + 80 texture; +40 rigging, +24 animation. |
Meshy 7.1 Multi Image to 3D API frequently asked questions
What is the Meshy 7.1 Multi Image to 3D API?
Meshy 7.1 Multi Image to 3D is a Meshy model for reconstructing 3D assets from several views of one object. It combines 1–4 images into a textured model with up to 2K geometry, PBR maps, topology control and optional rigging. Using multiple angles of Meshy's 7.1 generation, it keeps the proportions and back surfaces closer to the real object. You can call it programmatically or try it from the playground above.
How many photos does Meshy 7.1 Multi Image to 3D accept?
Send 1–4 images of the same object. Front, side, back and three-quarter views give the reconstruction the most information about hidden surfaces.
Which geometry resolution does Meshy 7.1 Multi Image to 3D offer?
Choose standard or 2k with geometry_resolution. For 4K geometry from a single image, use Meshy 7.1 Image to 3D.
Can Meshy 7.1 Multi Image to 3D return an untextured model?
Yes. Set should_texture to false for geometry only at 160 credits. PBR maps and texture guidance are used with should_texture true.
How much does Meshy 7.1 Multi Image to 3D cost?
A default request is textured and costs 240 credits ($1.200). Geometry only costs 160 credits ($0.800); rigging adds 40 ($0.200) and animation adds 24 ($0.120). Resolution, topology and polygon count do not change the price.
How does Meshy 7.1 Multi Image to 3D rig and animate characters?
Set enable_rigging to true to add a humanoid skeleton, with rigging_height_meters for the character's height (default 1.7). Then set enable_animation to true and pick animation_action_id from 0 to 696 (default 92). A-pose or T-pose input helps the rig.
Which files does Meshy 7.1 Multi Image to 3D return?
Finished tasks list their files in files: typically a GLB, plus FBX, OBJ, USDZ or STL when available, texture maps and a thumbnail. Rigged and animated files are added when you request them.
How is Meshy 7.1 Multi Image to 3D different from Meshy 6 Multi Image to 3D?
Meshy 7.1 Multi Image to 3D belongs to Meshy's newer, detail-focused generation, with up to 2K geometry resolution and animation presets numbered 0–696. Meshy 6 Multi Image to 3D costs 60 credits ($0.300) per generation on Vidgo and suits quick drafts; Meshy 7.1 Multi Image to 3D costs 160–304 credits depending on options.