POST /v1/generations/text-to-3d
Submit a text prompt and get back a job_id you can poll until the mesh is ready.
Submit a text → 3D job.
Request
{
"model": "sculptor",
"prompt": "a low-poly forest dragon, game-ready, mossy bark texture",
"params": { "faces": 100000, "pbr": true },
"outputs": ["glb"]
}model: usesculptor. See Models.prompt: 1–4000 characters describing the mesh you want.params: see Generation Parameters.outputs: any subset of["glb", "obj", "stl"](default["glb"]).
Response: 202 Accepted
{
"job_id": "job_<uuid>",
"status": "queued",
"created_at": "2026-06-01T07:09:15.595749Z",
"billable_amount_cents": 0
}Then poll GET /v1/jobs/{job_id} until status is done, failed, or cancelled.
Curl
KEY="sk_test_xxx"
BASE="https://api.suzanne3d.com"
curl -sS -X POST "$BASE/v1/generations/text-to-3d" \
-H "Authorization: Bearer $KEY" \
-H "content-type: application/json" \
-d '{
"model": "sculptor",
"prompt": "a low-poly forest dragon, game-ready, mossy bark texture",
"params": { "faces": 100000, "pbr": true },
"outputs": ["glb"]
}'Idempotency
Pass Idempotency-Key: <uuid> to make the call safe to retry. See Idempotency.
Errors
| HTTP | code | Meaning |
|---|---|---|
| 400 | validation_error | Request body doesn't match the schema. |
| 400 | missing_body | POST without a JSON body. |
| 400 | invalid_param | faces value not in the allowed enum. |
| 401 | unauthorized | Missing / bad API key. |
| 409 | idempotency_key_conflict | Same Idempotency-Key with a different body. |
| 409 | concurrent_limit_reached | Account is at the concurrent-jobs ceiling. |
See the full Error Reference.