Meshy 7.1 Image to 3D API
meshy/v7.1/image-to-3dMeshy 7.1 Image to 3D turns a single photo or concept image into a textured 3D model with up to 4K geometry, Smart Topology and PBR maps. It follows the silhouette and surface details of your image while letting you set topology, polygon count, pose and rigging.
Input
Output
Meshy 7.1 Image to 3D model readyMeshy 7.1 Image to 3D API
Quick Start
Submit Meshy 7.1 Image to 3D inputs, retain task_id, and query the task for the returned files.
Authenticate for Meshy 7.1 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 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/image-to-3d",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/image-to-3d/v1/01/input-1.png"
],
"model_type": "standard",
"geometry_resolution": "4k",
"should_texture": true,
"enable_pbr": true,
"topology": "triangle",
"target_polycount": 30000,
"should_remesh": true,
"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 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": "12GKNDTSJZ15XDP0",
"status": "not_started",
"created_time": "2026-11-05T07:07:24"
}
}{
"code": 200,
"data": {
"task_id": "12GKNDTSJZ15XDP0",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/meshy/v7.1/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/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/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/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/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/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:24",
"error_message": null,
"progress": 100
}
}Read Meshy 7.1 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/image-to-3d",
"input": {
"image_urls": [
"https://cdn.vidgo.ai/apis/models/meshy/v7.1/image-to-3d/v1/01/input-1.png"
],
"model_type": "standard",
"geometry_resolution": "4k",
"should_texture": true,
"enable_pbr": true,
"topology": "triangle",
"target_polycount": 30000,
"should_remesh": true,
"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/image-to-3d |
| input | object | Yes | — | Generation settings for this endpoint. |
| input.image_urls | string[] | Yes | — | Upload one clear JPG or PNG of the object, or give a public HTTP(S) URL. |
| input.should_texture | boolean | No | true | true textures the model (+80 credits); false returns geometry only. Default true. |
| input.model_type | string | No | standard | standard keeps the regular mesh; smart-topology builds a cleaner, lighter mesh with a 100–15,000 polygon target. Default standard. |
| input.geometry_resolution | string | No | — | Geometry detail: standard, 2k, 4k. 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. |
| input.texture_prompt | string | No | — | Up to 600 characters describing colors, patterns and materials. |
| input.texture_image_url | string | No | — | A public image URL used as a texture reference. |
| 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 image | JPG or PNG URL, or an uploaded file. |
| Geometry resolution | standard, 2k, 4k | Requires model_type standard. |
| Topology | triangle, quad | Target polycount 100–300,000; 100–15,000 with Smart Topology. |
| 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 Image to 3D API frequently asked questions
What is the Meshy 7.1 Image to 3D API?
Meshy 7.1 Image to 3D is a Meshy model for generating 3D assets from a single image. It turns one photo or concept image into a textured model with up to 4K geometry, Smart Topology, PBR maps and optional rigging. Built on Meshy's detail-focused 7.1 generation, it preserves the silhouette and surface details of the image while you control topology and polygon count. You can call it programmatically or try it from the playground above.
Which images work best for Meshy 7.1 Image to 3D?
Use a sharp, evenly lit JPG or PNG with one centered object, little occlusion and a simple background. The model infers hidden sides from the visible ones, so a three-quarter view often helps.
Does Meshy 7.1 Image to 3D support 4K geometry?
Yes. Set geometry_resolution to 4k with model_type standard for the densest surface detail. It controls mesh detail rather than texture image size.
What does Smart Topology change in Meshy 7.1 Image to 3D?
model_type smart-topology produces a cleaner, lighter mesh with a target of 100–15,000 polygons (default 4,000). Geometry Resolution is used with the standard model type.
How much does Meshy 7.1 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 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 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 Image to 3D different from Meshy 6 Image to 3D?
Meshy 7.1 Image to 3D belongs to Meshy's newer, detail-focused generation, with up to 4K geometry resolution, Smart Topology and animation presets numbered 0–696. Meshy 6 Image to 3D costs 60 credits ($0.300) per generation on Vidgo and suits quick drafts; Meshy 7.1 Image to 3D costs 160–304 credits depending on options.