---
title: "Text → SimReady"
description: "Describe what you want and Rigyd generates a SimReady USD asset. 2 credits."
---

import { Tabs, TabItem, Aside } from '@astrojs/starlight/components';

Send a short text description and get back a SimReady USD asset.

| | |
|---|---|
| **Method** | `POST` |
| **Path**   | `/api/conversions/generate` |
| **Content-type** | `multipart/form-data` (or `application/x-www-form-urlencoded`) |
| **Job type** | `text_to_simready` |
| **Credits** | 2 |

## Request fields

| Field             | Type    | Required | Notes                                          |
| ----------------- | ------- | -------- | ---------------------------------------------- |
| `prompt`          | string  | yes      | Up to 500 characters.                          |
| `face_limit`      | int     | no       | Cap output mesh face count.                    |
| `model_version`   | string  | no       | Override generation model (advanced).          |
| `threshold`       | float   | no       | CoACD concavity threshold (advanced).          |
| `llm_provider`    | string  | no       | Override material-identification LLM.          |
| `skip_validation` | boolean | no       | Skip USD schema validation. Default `false`.   |

<Aside type="caution">
  Send `prompt` *or* `images[]`, never both — mixing the two returns `422`. For images, see [2D → SimReady](/conversions/2d-to-simready).
</Aside>

## Examples

<Tabs syncKey="lang">
  <TabItem label="curl">
  ```bash
  curl -X POST https://api.rigyd.com/api/conversions/generate \
    -H "Authorization: Bearer rgyd_live_..." \
    -F "prompt=a red metal toolbox with a black handle"
  ```
  </TabItem>
  <TabItem label="JavaScript">
  ```js
  const form = new FormData();
  form.append('prompt', 'a red metal toolbox with a black handle');

  const res = await fetch('https://api.rigyd.com/api/conversions/generate', {
    method: 'POST',
    headers: { Authorization: `Bearer ${process.env.RIGYD_API_KEY}` },
    body: form,
  });
  const { data } = await res.json();
  ```
  </TabItem>
  <TabItem label="Python">
  ```python
  import os, requests

  res = requests.post(
      "https://api.rigyd.com/api/conversions/generate",
      headers={"Authorization": f"Bearer {os.environ['RIGYD_API_KEY']}"},
      data={"prompt": "a red metal toolbox with a black handle"},
  )
  job = res.json()["data"]
  ```
  </TabItem>
</Tabs>

## Response — `202 Accepted`

```json
{
  "data": {
    "id": "abc123...",
    "status": "queued",
    "filename": "a red metal toolbox with a black handle",
    "progress": 0,
    "job_type": "text_to_simready",
    "credits_charged": 2,
    "createdAt": "2026-05-06T12:00:00.000Z"
  }
}
```

The prompt is stored verbatim as `filename` so you can recognise the job in lists. The downloaded USD uses a slugified version (e.g. `a_red_metal_toolbox.usd`).

## Tips

- **Short, concrete prompts work best.** `"a red metal toolbox"` outperforms `"some kind of container, perhaps for tools, maybe red"`.
- **Include material cues** (`metal`, `wood`, `plastic`) — they feed material identification.
- **One object per prompt.** Compound scenes are not supported.

## Next: [poll the job](/jobs/retrieve) → [download the USD](/jobs/download).