Discord

← API reference

3D generation

Text-to-3d, image-to-3d, and multi-image-to-3d mesh generation across 4 labs (Tripo3D, Meshy, Hyper3D/Rodin, Hunyuan3D), all resold through fal.ai. See the 3D generation guide for the full model list, pricing, and a worked example.

POST/v1/meshes

Which fields apply depends entirely on model — every model is either text-to-3d (prompt), image-to-3d (image_url), multi-image-to-3d (image_urls), or, for fal/rodin only, either one — a request that sends the wrong input for its model, or both/neither on fal/rodin, is rejected with a 400 before any pricing or upstream call happens. The option fields below are similarly gated per model — sending an option a model doesn't support 400s rather than silently no-op'ing.

Parameters

ParameterTypeDescription
modelstringRequired. No default and no auto-router — pin a slug from the model list.
promptstringRequired for text-to-3d models (and one of two valid inputs on fal/rodin). Rejected on every image-only model.
image_urlstringRequired for single-image-to-3d models. Rejected on text-only and multi-image models.
image_urlsstring[]Required for multi-image-to-3d models — 1–4 images on Meshy's multi-image row, 1–5 on fal/rodin-v2.5 (different real upstream caps). Same object from different angles.
texture_qualitystringfal/tripo-p2-* only. One of none/fast/standard/detailed/extreme — mutually exclusive tiers, not stackable. Defaults to standard (Tripo's own real default).
texturedbooleanfal/meshy-v7.1-* only. Defaults true.
rigging / animationbooleanfal/meshy-v7.1-* only. Auto-rig as humanoid (+ basic animations). Both default false.
highpackbooleanfal/rodin* only. 4K textures + high-poly mesh, 3× the base price. Defaults false.
pbrbooleanfal/hunyuan3d-* only. Generate PBR (metallic/roughness) material maps. Defaults false.
face_countintegerfal/hunyuan3d-* only. 40,000–1,500,000. Omit for the model's own default (500,000) at no extra cost — any explicit value bills a small add-on.
extra_view_urlsstring[]fal/hunyuan3d-*-image-to-3d only. Up to 6 additional reference-angle image URLs (back/left/right/top/bottom/left-front/right-front, in that order).

Example response (200, job just created)

{
  "id": "fal:...",
  "status": "queued",
  "data": null,
  "error": null
}

Billed once, in full, at creation time from your model + option choice — polling is free. A model/option combination we don't have a verified price for is refused outright (502 pricing_unavailable) rather than guessed.

GET/v1/meshes/{id}

Unbilled — the full cost was already charged at creation time. Ownership-checked: polling a job you didn't create returns 404, not the job's data.

Parameters

ParameterTypeDescription
idstring (path)The id returned by POST /v1/meshes.

Example response (status: "completed")

{
  "id": "fal:...",
  "status": "completed",
  "data": [
    { "url": "https://...model.glb", "format": "glb", "kind": "mesh" },
    { "url": "https://...model.obj", "format": "obj", "kind": "mesh" },
    { "url": "https://...material.mtl", "format": "mtl", "kind": "mesh" },
    { "url": "https://...texture.png", "format": "png", "kind": "texture" },
    { "url": "https://...preview.png", "format": "png", "kind": "thumbnail" }
  ],
  "error": null
}

status is one of queued → in_progress → completed/failed. On failure, error carries the provider's message and data is null. Every item in data is mirrored to our own storage — never a link back to fal.ai — and which files appear depends on the model (every model returns at least a GLB; FBX/OBJ/USDZ/MTL/textures/thumbnail vary by lab).