---
title: "Convert a single source image into a textured 3D model (image-to-3D). Synchronous: the call blocks while the mesh is generated, decompressed, and re-uploaded, then returns a downloadable GLB model_url plus an array of snapshot image URLs rendered from different angles (handy for previews). Accepts optional mesh controls: target_num_faces (max triangle count, 1000-200000, default 50000), texture_size (1024 or 2048, default 2048), and texture_type (\"pbr\", \"simple\", or \"none\", default \"pbr\"). Credits are charged only on success. Pass an optional request_id to tag the result so you can locate it later via get3DModelResults. Requires an API key (user scope)."
method: POST
path: "/assets/3d-model"
tags: ["3D Models"]
---

# Convert a single source image into a textured 3D model (image-to-3D). Synchronous: the call blocks while the mesh is generated, decompressed, and re-uploaded, then returns a downloadable GLB model_url plus an array of snapshot image URLs rendered from different angles (handy for previews). Accepts optional mesh controls: target_num_faces (max triangle count, 1000-200000, default 50000), texture_size (1024 or 2048, default 2048), and texture_type ("pbr", "simple", or "none", default "pbr"). Credits are charged only on success. Pass an optional request_id to tag the result so you can locate it later via get3DModelResults. Requires an API key (user scope).

`POST /assets/3d-model`

## Request body

- Create3DModelPayload
  - `image` string, required — URL or base64-encoded image to convert to 3D
  - `target_num_faces` integer — Maximum triangle count for the mesh (1000-200000)
  - `texture_size` 1024 | 2048 — Texture resolution in pixels
  - `texture_type` 'pbr' | 'simple' | 'none' — Texture type
  - `request_id` string — Optional client-provided identifier for this request. Use this to retrieve results later via the results endpoint.

## Response `200`

Success

- Model3DResult
  - `model_url` string — URL to the generated 3D model file
  - `snapshots` string[] — URLs to snapshot images from different angles (useful for previews and MCP agents)

## Other responses

- `400` — Error

---

[API](https://skmtc.net/ludo/apis/ludo-ai-api.md) · [All operations](https://skmtc.net/ludo/apis/ludo-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ludo/ludo-ai-api/revisions/3af866d68651/schema)
