# Meshy 7 - Text-to-3D — API Reference Model ID: `model_meshy-7-txt23d` --- ## Authentication - **API_KEY** and **API_SECRET** are found in your [Scenario Project Settings](https://app.scenario.com/team&tab=api_keys) under API Keys. - Set them as environment variables `SCENARIO_SDK_API_KEY` and `SCENARIO_SDK_API_SECRET` — both SDKs pick them up by default. - For raw HTTP (cURL), use Basic Auth: `Authorization: Basic base64(":")`. ### Install the SDK - JavaScript / TypeScript: `npm install @scenario-labs/sdk` - Python: `pip install scenario-sdk` --- ## Generate **Endpoint:** `POST https://api.cloud.scenario.com/v1/generate/custom/model_meshy-7-txt23d` ### Parameters | Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | `prompt` | string | yes | - | Describe the object you want to generate as a 3D model. | | `ultraMode` | boolean | - | `false` | Enable Ultra generation for higher-fidelity geometry with finer surface detail. Adds cost. | | `texturePrompt` | string | - | `` | Provide a text description to guide the texturing process. The Style Prompt is only used when no Style Image is provided. If you upload an image, this text prompt will be ignored. | | `textureImage` | assetId | - | - | Upload a reference image to guide the visual style of the generated texture. This will override the Style Prompt. | | `topology` | string | - | `triangle` | Choose the mesh structure type used for the generated model (e.g., triangles or quads). | | `textureResolution` | string | - | `2k` | Base color texture resolution for the refine phase: 2K (2048), 4K (4096), or 8K (8192). At 8K, PBR maps are generated at 4K and no emission map is produced. 8K is only supported with triangle topology when remeshing. | | `enablePbr` | boolean | - | `true` | Generate advanced PBR maps (metallic, roughness, normal) for more realistic materials. Meshy 7 does not produce an emission map. | | `poseMode` | string | - | `` | Specify the pose mode for the generated model. Accepts 'A-Pose', 'T-Pose', or empty string (default). | | `shouldRemesh` | boolean | - | `false` | Enable remeshing to improve mesh quality and control polycount. Disable to keep the raw, unprocessed mesh (recommended for highest quality on Meshy 7). | | `targetPolycount` | number | - | `30000` | Specify the target number of polygons in the generated model. The actual number of polygons may deviate from the target depending on the complexity of the geometry. Only applies when Remesh is enabled. | ### Example Requests **cURL** ```bash curl -X POST "https://api.cloud.scenario.com/v1/generate/custom/model_meshy-7-txt23d" \ -H "Authorization: Basic $(echo -n ':' | base64)" \ -H "Content-Type: application/json" \ --data-binary @- <<'EOF' { "prompt": "A fantasy landscape", "ultraMode": false, "texturePrompt": "", "topology": "triangle", "textureResolution": "2k", "enablePbr": true, "poseMode": "", "shouldRemesh": false, "targetPolycount": 30000 } EOF ``` **Python** ```python import os from scenario_sdk import Scenario client = Scenario( api_key=os.environ.get("SCENARIO_SDK_API_KEY"), api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"), ) body = { "prompt": "A fantasy landscape", "ultraMode": False, "texturePrompt": "", "topology": "triangle", "textureResolution": "2k", "enablePbr": True, "poseMode": "", "shouldRemesh": False, "targetPolycount": 30000 } response = client.generate.run_model( model_id="model_meshy-7-txt23d", body=body, ) print(response) ``` **JavaScript** ```javascript import Scenario from "@scenario-labs/sdk"; const client = new Scenario({ apiKey: process.env["SCENARIO_SDK_API_KEY"], apiSecret: process.env["SCENARIO_SDK_API_SECRET"], }); const body = { "prompt": "A fantasy landscape", "ultraMode": false, "texturePrompt": "", "topology": "triangle", "textureResolution": "2k", "enablePbr": true, "poseMode": "", "shouldRemesh": false, "targetPolycount": 30000 }; const response = await client.generate.runModel("model_meshy-7-txt23d", { body }); console.info(response); ``` --- ## Retrieve Results After submitting a generation request, you receive a `jobId`. Poll the job until `job.status` is `"success"`. The generated asset IDs are in `job.metadata.assetIds`. **Endpoint:** `GET https://api.cloud.scenario.com/v1/jobs/{jobId}` ### Example Requests **cURL** ```bash curl -X GET "https://api.cloud.scenario.com/v1/jobs/" \ -H "Authorization: Basic $(echo -n ':' | base64)" ``` **Python** ```python job = client.jobs.retrieve(job_id="") print(job.status) print(job.metadata.asset_ids) ``` **JavaScript** ```javascript // Option 1 — wait on the response from runModel using the SDK helper const completed = await response.job.wait(); console.info(completed.status); console.info(completed.metadata?.assetIds); // Option 2 — retrieve a job by its ID const job = await client.jobs.retrieve(""); console.info(job.status); console.info(job.metadata?.assetIds); ``` **Example response:** ```json { "job": { "jobId": "job_abc123", "status": "success", "metadata": { "assetIds": [ "asset_abc123" ] } } } ``` > **Important:** Generated asset URLs are **temporary** and expire after a short period. Download and store any images you wish to keep before the URL expires. More info: [Content Delivery Network (CDN)](https://docs.scenario.com/get-started/documentation/content-delivery-network-cdn). --- *Generated by [Scenario](https://app.scenario.com)*