API reference · Meshy
meshy/7.1/text-to-3d
Integrate this model through SandBase's unified API, with production-ready schemas and examples.
Production endpoint
Send your first request
OpenAI-compatible endpoint with unified authentication and usage tracking.
POST
https://api.sandbase.ai/v1/runModel ID
meshy/7.1/text-to-3d01
Input Schema
13 parameters · 1 required · 12 optional
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Required | Describe what kind of object the 3D model is. Maximum 600 characters. · Max length: 600 |
seed | integer | Optional | Seed for reproducible results. |
topology | string | Optional | quad for smooth surfaces, triangle for detail. · Options: quad, triangle · Default: "triangle" quadtriangle |
pose_mode | string | Optional | a-pose, t-pose or empty for none. · Options: a-pose, t-pose, · Default: "" a-poset-pose |
enable_pbr | boolean | Optional | Generate PBR maps (metallic, roughness, normal). · Default: false |
model_type | string | Optional | standard, lowpoly or smart-topology. · Options: standard, lowpoly, smart-topology · Default: "standard" standardlowpolysmart-topology |
symmetry_mode | string | Optional | off / auto / on. · Options: off, auto, on · Default: "auto" offautoon |
texture_image | string | Optional | Image URL to guide texturing. |
enable_rigging | boolean | Optional | Rig the model as a humanoid character (+$0.20). · Default: false |
texture_prompt | string | Optional | Text prompt to guide texturing. · Max length: 600 |
enable_animation | boolean | Optional | Apply an animation preset; requires enable_rigging (+$0.12). · Default: false |
target_polycount | integer | Optional | Target polygon count (100–300,000). · Min: 100 · Max: 300000 · Default: 30000 |
geometry_resolution | string | Optional | Geometry resolution. · Options: standard, 2k, 4k · Default: "standard" standard2k4k |
02
Output Schema
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for the generation task |
status | string | Task status: pending, running, completed, failed, timeout |
model | string | Model used for the generation |
outputs | array | Array of output items |
outputs[].url | string | URL of the generated artifact |
outputs[].content_type | string | MIME type (e.g. image/png, video/mp4) |
error | object | null | Error details if failed, null on success |
error.type | string | Machine-readable error type code |
error.message | string | Human-readable error description |
Async Workflow
This model uses asynchronous execution. Submit a request and poll for the result.
- Submit — POST to /v1/run, receive an
id - Poll — GET /v1/run/{id} until status is
completed,failed, ortimeout - Retrieve — Read
outputsfrom the completed response
03
Code Examples
Ready-to-run snippets
const apiKey = process.env.SANDBASE_API_KEY;
const response = await fetch("https://api.sandbase.ai/v1/run", {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"model": "meshy/7.1/text-to-3d",
"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.",
"topology": "triangle",
"enable_pbr": false,
"model_type": "standard",
"symmetry_mode": "auto",
"enable_rigging": false,
"enable_animation": false,
"target_polycount": 30000,
"geometry_resolution": "standard"
}),
});
if (!response.ok) throw new Error(await response.text());
let result = await response.json();
for (let attempt = 0; attempt < 120 && !["completed", "failed", "timeout"].includes(result.status); attempt++) {
await new Promise((resolve) => setTimeout(resolve, 2_000));
const poll = await fetch(`https://api.sandbase.ai/v1/run/${result.id}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!poll.ok) throw new Error(await poll.text());
result = await poll.json();
}
if (result.status !== "completed") throw new Error(`Generation ended: ${result.status}`);
console.log(result);