# Meshy T2 Smart Topology — API Reference Model ID: `model_meshy-smart-topology` --- ## 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-smart-topology` ### Parameters | Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | `prompt` | string | - | - | Describe the object to generate. Text route; mutually exclusive with Image. | | `image` | assetId[] | - | - | Single input image to reconstruct. Image route; mutually exclusive with Prompt. Smart Topology has no multi-view model. | | `texturePrompt` | string | - | `` | A text description to guide the model's surface look. Used only when no Style Image is provided. If you upload one, this text is ignored. | | `textureImage` | assetId | - | - | A reference image to guide the surface look of the model. Overrides the Style Prompt. Requires Texture to be turned on. | | `shouldTexture` | boolean | - | `true` | Generate a texture. Off returns the untextured mesh — on the text route that skips the refine phase. | | `textureResolution` | string | - | `2k` | Base color texture resolution: 2K (2048), 4K (4096), or 8K (8192). Honored on both the text and image routes. Requires Texture to be turned on. Unset leaves Meshy's 2K default. At 8K, PBR maps are generated at 4K and no emission map is produced. | | `enablePbr` | boolean | - | `false` | Adds realistic material detail (metallic, roughness, normal). Requires Texture to be turned on. | | `poseMode` | string | - | `` | For characters, generates the model in a standard reference pose. A-Pose (arms angled down) and T-Pose (arms straight out) are both common starting points for animation. Leave empty for no specific pose. | | `targetPolycount` | number | - | `4000` | Face count of the generated mesh. Smart Topology generates directly at this count with no remesh. | ### Example Requests **cURL** ```bash curl -X POST "https://api.cloud.scenario.com/v1/generate/custom/model_meshy-smart-topology" \ -H "Authorization: Basic $(echo -n ':' | base64)" \ -H "Content-Type: application/json" \ --data-binary @- <<'EOF' { "texturePrompt": "", "shouldTexture": true, "textureResolution": "2k", "enablePbr": false, "poseMode": "", "targetPolycount": 4000 } 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 = { "texturePrompt": "", "shouldTexture": True, "textureResolution": "2k", "enablePbr": False, "poseMode": "", "targetPolycount": 4000 } response = client.generate.run_model( model_id="model_meshy-smart-topology", 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 = { "texturePrompt": "", "shouldTexture": true, "textureResolution": "2k", "enablePbr": false, "poseMode": "", "targetPolycount": 4000 }; const response = await client.generate.runModel("model_meshy-smart-topology", { 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)*