{"openapi":"3.1.0","info":{"title":"Wandy3D API","summary":"Generate 3D models from your code, engine or AI agent.","description":"Authenticate every request with `Authorization: Bearer <API key>` (create keys at https://wandy3d.com/platform/keys). Paid calls are charged in US dollars from your prepaid API balance — top up at https://wandy3d.com/platform/billing, the balance never expires, failed jobs are refunded automatically. A paid call's JSON answer carries `billing: {cost_usd, balance_usd, charge_ids}` and the headers `X-Wandy-Cost-USD` / `X-Wandy-Balance-USD`. Models you generate through the API are yours to download in every format. Limits: 60 requests per minute per key (429 `rate_limited` with `retry_after`), 5 jobs of one account at once (429 `too_many_jobs`), optional monthly spending limits per account and per key (402). Errors are JSON: `{\"detail\": {\"error\": <code>, \"message\": <text>}}` or `{\"detail\": <text>}`.","version":"1.0.0","x-higen-limits":{"requests_per_minute":60,"keys_per_user":10,"max_inflight":5}},"servers":[{"url":"https://api.wandy3d.com"}],"paths":{"/generate/cloud/ultra":{"post":{"summary":"Generate from a photo (Wandy 2)","description":"One photo of an object as the multipart field `file` (JPEG, PNG or WebP, up to 20 MB). Model Wandy 2, our best. Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails.","operationId":"generate_cloud_ultra_generate_cloud_ultra_post","security":[{"bearerAuth":[]}],"parameters":[{"name":"poly_count","in":"query","required":false,"schema":{"type":"integer","default":250000,"title":"Poly Count"},"description":"Target triangle count, 10000–1000000."},{"name":"remesh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Remesh"},"description":"Clean remeshed surface (default true)."},{"name":"texture_size","in":"query","required":false,"schema":{"type":"integer","title":"Texture Size"},"description":"Texture resolution: 1024, 2048 or 4096 (free). Default: the model version's own size (Wandy 1 = 1024, Wandy 1.1 = 2048, Wandy 1.2 = 4096)."},{"name":"texture_format","in":"query","required":false,"schema":{"type":"string","default":"webp","title":"Texture Format"},"description":"webp (default) | png"},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","title":"Seed"},"description":"Integer seed for a repeatable variation."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_cloud_ultra_generate_cloud_ultra_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Generate"]}},"/generate/cloud":{"post":{"summary":"Generate from a photo (Wandy 1.1)","operationId":"generate_cloud_generate_cloud_post","security":[{"bearerAuth":[]}],"parameters":[{"name":"poly_count","in":"query","required":false,"schema":{"type":"integer","default":100000,"title":"Poly Count"},"description":"Target triangle count, 10000–1000000."},{"name":"remesh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Remesh"},"description":"Clean remeshed surface (default true)."},{"name":"texture_size","in":"query","required":false,"schema":{"type":"integer","title":"Texture Size"},"description":"Texture resolution: 1024, 2048 or 4096 (free). Default: the model version's own size (Wandy 1 = 1024, Wandy 1.1 = 2048, Wandy 1.2 = 4096)."},{"name":"texture_format","in":"query","required":false,"schema":{"type":"string","default":"webp","title":"Texture Format"},"description":"webp (default) | png"},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","title":"Seed"},"description":"Integer seed for a repeatable variation."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_cloud_generate_cloud_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Generate"],"description":"Same input as `/generate/cloud/ultra`, model Wandy 1.1. Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails."}},"/generate/cloud/fast":{"post":{"summary":"Generate from a photo (Wandy 1)","operationId":"generate_cloud_fast_generate_cloud_fast_post","security":[{"bearerAuth":[]}],"parameters":[{"name":"poly_count","in":"query","required":false,"schema":{"type":"integer","default":70000,"title":"Poly Count"},"description":"Target triangle count, 10000–1000000."},{"name":"remesh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Remesh"},"description":"Clean remeshed surface (default true)."},{"name":"texture_size","in":"query","required":false,"schema":{"type":"integer","title":"Texture Size"},"description":"Texture resolution: 1024, 2048 or 4096 (free). Default: the model version's own size (Wandy 1 = 1024, Wandy 1.1 = 2048, Wandy 1.2 = 4096)."},{"name":"texture_format","in":"query","required":false,"schema":{"type":"string","default":"webp","title":"Texture Format"},"description":"webp (default) | png"},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","title":"Seed"},"description":"Integer seed for a repeatable variation."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_cloud_fast_generate_cloud_fast_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Generate"],"description":"Same input as `/generate/cloud/ultra`, model Wandy 1, the fastest. Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails."}},"/generate/cloud/multi/ultra":{"post":{"summary":"Generate from several views (Wandy 2)","description":"2–4 views of one object as repeated multipart fields `files`, front view first. Model Wandy 2. Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails.","operationId":"generate_cloud_multi_ultra_generate_cloud_multi_ultra_post","security":[{"bearerAuth":[]}],"parameters":[{"name":"poly_count","in":"query","required":false,"schema":{"type":"integer","default":250000,"title":"Poly Count"},"description":"Target triangle count, 10000–1000000."},{"name":"remesh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Remesh"},"description":"Clean remeshed surface (default true)."},{"name":"texture_size","in":"query","required":false,"schema":{"type":"integer","title":"Texture Size"},"description":"Texture resolution: 1024, 2048 or 4096 (free). Default: the model version's own size (Wandy 1 = 1024, Wandy 1.1 = 2048, Wandy 1.2 = 4096)."},{"name":"texture_format","in":"query","required":false,"schema":{"type":"string","default":"webp","title":"Texture Format"},"description":"webp (default) | png"},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","title":"Seed"},"description":"Integer seed for a repeatable variation."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_cloud_multi_ultra_generate_cloud_multi_ultra_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Generate"]}},"/generate/cloud/multi":{"post":{"summary":"Generate from several views (Wandy 1.1)","operationId":"generate_cloud_multi_generate_cloud_multi_post","security":[{"bearerAuth":[]}],"parameters":[{"name":"poly_count","in":"query","required":false,"schema":{"type":"integer","default":100000,"title":"Poly Count"},"description":"Target triangle count, 10000–1000000."},{"name":"remesh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Remesh"},"description":"Clean remeshed surface (default true)."},{"name":"texture_size","in":"query","required":false,"schema":{"type":"integer","title":"Texture Size"},"description":"Texture resolution: 1024, 2048 or 4096 (free). Default: the model version's own size (Wandy 1 = 1024, Wandy 1.1 = 2048, Wandy 1.2 = 4096)."},{"name":"texture_format","in":"query","required":false,"schema":{"type":"string","default":"webp","title":"Texture Format"},"description":"webp (default) | png"},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","title":"Seed"},"description":"Integer seed for a repeatable variation."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_cloud_multi_generate_cloud_multi_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Generate"],"description":"Same input as `/generate/cloud/multi/ultra`, model Wandy 1.1. Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails."}},"/generate/cloud/multi/fast":{"post":{"summary":"Generate from several views (Wandy 1)","operationId":"generate_cloud_multi_fast_generate_cloud_multi_fast_post","security":[{"bearerAuth":[]}],"parameters":[{"name":"poly_count","in":"query","required":false,"schema":{"type":"integer","default":70000,"title":"Poly Count"},"description":"Target triangle count, 10000–1000000."},{"name":"remesh","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Remesh"},"description":"Clean remeshed surface (default true)."},{"name":"texture_size","in":"query","required":false,"schema":{"type":"integer","title":"Texture Size"},"description":"Texture resolution: 1024, 2048 or 4096 (free). Default: the model version's own size (Wandy 1 = 1024, Wandy 1.1 = 2048, Wandy 1.2 = 4096)."},{"name":"texture_format","in":"query","required":false,"schema":{"type":"string","default":"webp","title":"Texture Format"},"description":"webp (default) | png"},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","title":"Seed"},"description":"Integer seed for a repeatable variation."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_cloud_multi_fast_generate_cloud_multi_fast_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Generate"],"description":"Same input as `/generate/cloud/multi/ultra`, model Wandy 1. Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails."}},"/generate/text/imagine":{"post":{"summary":"Text prompt → concept picture","operationId":"text_imagine_generate_text_imagine_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]}],"tags":["Generate"],"description":"Draws a concept picture of the object described by `prompt` and returns it with a `concept_id`. Charged from your API balance; pass the `concept_id` to `POST /generate/text` to build the model."}},"/generate/text":{"post":{"summary":"Concept → 3D model","operationId":"generate_from_text_generate_text_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]}],"tags":["Generate"],"description":"Builds a model from a `concept_id` of `/generate/text/imagine`; `mode` = ultra (Wandy 2) | quality (Wandy 1.1) | fast (Wandy 1). Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails."}},"/generate/retexture":{"post":{"summary":"Retexture a model","operationId":"generate_retexture_generate_retexture_post","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"query","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."},{"name":"texture_size","in":"query","required":false,"schema":{"type":"integer","default":2048,"title":"Texture Size"},"description":"Texture resolution: 1024, 2048 or 4096 (free). Default: the model version's own size (Wandy 1 = 1024, Wandy 1.1 = 2048, Wandy 1.2 = 4096)."},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","title":"Seed"},"description":"Integer seed for a repeatable variation."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_generate_retexture_generate_retexture_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Generate"],"description":"Paints an existing model (`model_id`) anew from a photo (`file`); the result is a new version. Returns `{task_id, status, billing}` at once; poll `GET /task/{task_id}/status`. Charged from your API balance at the price list's price (402 `insufficient_balance`, `monthly_limit_reached` or `key_limit_reached`; 429 `too_many_jobs` while too many of your jobs run) and refunded automatically when the generation fails."}},"/task/{task_id}/status":{"get":{"summary":"Poll a generation","operationId":"task_status_task__task_id__status_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"},"description":"The `task_id` returned when the generation started."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Tasks"],"description":"`status` is `waiting` or `queued` → `processing` → `done` (with `model_id`, `thumbnail_url`) or `error` (the charge is refunded to your API balance). Poll every few seconds. Never charged."}},"/library":{"get":{"summary":"List your models","description":"Your models, newest first (`page`, `limit`, `search`). `group=family` returns one row per version family.","operationId":"list_models_library_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","title":"Search"},"description":"Text search in model names."},{"name":"published","in":"query","required":false,"schema":{"type":"string","title":"Published"},"description":"true = published models only."},{"name":"favourite","in":"query","required":false,"schema":{"type":"string","title":"Favourite"},"description":"true = starred models only."},{"name":"group","in":"query","required":false,"schema":{"type":"string","pattern":"^family$","title":"Group"},"description":"family = one row per version family (adds `root_id`, `versions_count`)."},{"name":"has_versions","in":"query","required":false,"schema":{"type":"string","title":"Has Versions"},"description":"With group=family: only families with 2+ versions."},{"name":"include_remesh","in":"query","required":false,"schema":{"type":"string","title":"Include Remesh"},"description":"1 = also list remesh and rig versions."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"},"description":"Page number."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"},"description":"Rows per page."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Library"]}},"/model/{model_id}":{"get":{"summary":"Get a model","operationId":"get_model_model__model_id__get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Library"],"description":"Name, creation date, polygon count and `url` — a link to the GLB that must be fetched with the same `Authorization` header."}},"/model/{model_id}/export":{"get":{"summary":"Export (GLB, FBX, OBJ, USDZ, STL, Draco)","description":"`format=glb` answers at once with a short-lived download link; other formats are converted. Poll this URL with the same parameters until `status` is `ready`: 202 `{status: \"running\"}` while a worker is on it, then 200 `{status: \"ready\", url, filename, expires_in, …}` (the link expires) or 200 `{status: \"error\", message}`. Polls and cached results are never charged. Free for models generated through the API; a model made on the website needs a plan or a one-off unlock (403 `subscription_required`).","operationId":"export_model_model__model_id__export_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(glb|fbx|obj|usdz|stl|glb_draco)$","default":"glb","title":"Format"},"description":"glb | glb_draco | fbx | obj | usdz | stl"},{"name":"texture","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(realistic|generative)$"},{"type":"null"}],"title":"Texture"},"description":"Baked texture size: 1024 | 2048 | 4096."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Downloads"]}},"/model/{model_id}/print":{"get":{"summary":"Print-ready STL / 3MF","description":"Watertight, scaled, flat-bottomed file for 3D printing. Poll this URL with the same parameters until `status` is `ready`: 202 `{status: \"running\"}` while a worker is on it, then 200 `{status: \"ready\", url, filename, expires_in, …}` (the link expires) or 200 `{status: \"error\", message}`. Polls and cached results are never charged. Free for models generated through the API; a model made on the website needs a plan or a one-off unlock (403 `subscription_required`).","operationId":"print_model_model__model_id__print_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."},{"name":"length_mm","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":400,"minimum":30},{"type":"null"}],"title":"Length Mm"},"description":"Printed size of the longest side in millimetres (30–400)."},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(stl|3mf)$","default":"stl","title":"Format"},"description":"stl | 3mf"},{"name":"hollow","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Hollow"},"description":"true = a 2.5 mm shell instead of a solid."},{"name":"colors","in":"query","required":false,"schema":{"type":"integer","maximum":8,"minimum":1,"default":1,"title":"Colors"},"description":"2–8 = a colour-painted 3MF for multi-material printers, where available."},{"name":"palette","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Palette"},"description":"Your filament colours as '#rrggbb,…' in slot order (sets colors)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Downloads"]}},"/model/{model_id}/retopo":{"get":{"summary":"Quad remesh","description":"Clean quad topology with re-baked textures (GLB or FBX). Poll this URL with the same parameters until `status` is `ready`: 202 `{status: \"running\"}` while a worker is on it, then 200 `{status: \"ready\", url, filename, expires_in, …}` (the link expires) or 200 `{status: \"error\", message}`. Polls and cached results are never charged. Free for models generated through the API; a model made on the website needs a plan or a one-off unlock (403 `subscription_required`). Charged once per build from your API balance (402 `insufficient_balance`); refunded if the build fails.","operationId":"retopo_model_model__model_id__retopo_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."},{"name":"faces","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100000,"minimum":500},{"type":"null"}],"title":"Faces"},"description":"Target quad count (rounded to 100)."},{"name":"texture","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Texture"},"description":"Baked texture size: 1024 | 2048 | 4096."},{"name":"symmetry","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Symmetry"},"description":"Mirror the quad flow across the model's X axis."},{"name":"interior","in":"query","required":false,"schema":{"type":"string","pattern":"^(keep|fill)$","default":"keep","title":"Interior"},"description":"keep = keep visible interiors | fill = outer skin only."},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(glb|fbx)$","default":"glb","title":"Format"},"description":"glb (triangulated, baked PBR) | fbx (quads + textures, zipped)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Downloads"]}},"/model/{model_id}/rig":{"get":{"summary":"Auto-rig","description":"Skeleton, skinning and animation clips; the rigged model becomes a new version. Poll this URL with the same parameters until `status` is `ready`: 202 `{status: \"running\"}` while a worker is on it, then 200 `{status: \"ready\", url, filename, expires_in, …}` (the link expires) or 200 `{status: \"error\", message}`. Polls and cached results are never charged. Charged once per build from your API balance (402 `insufficient_balance`); refunded if the build fails.","operationId":"rig_model_model__model_id__rig_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."},{"name":"kind","in":"query","required":true,"schema":{"type":"string","pattern":"^(humanoid|generic)$","title":"Kind"},"description":"humanoid (standard skeleton + clips) | generic (any object)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Downloads"]}},"/model/{model_id}/parts":{"get":{"summary":"Split into parts","description":"Splits the model into named parts; the split model becomes a new version. Poll this URL with the same parameters until `status` is `ready`: 202 `{status: \"running\"}` while a worker is on it, then 200 `{status: \"ready\", url, filename, expires_in, …}` (the link expires) or 200 `{status: \"error\", message}`. Polls and cached results are never charged. Charged once per build from your API balance (402 `insufficient_balance`); refunded if the build fails.","operationId":"parts_model_model__model_id__parts_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Downloads"]}},"/model/{model_id}/gamepack":{"get":{"summary":"Game-ready pack","description":"LODs and colliders for Unity, Unreal or Godot. Poll this URL with the same parameters until `status` is `ready`: 202 `{status: \"running\"}` while a worker is on it, then 200 `{status: \"ready\", url, filename, expires_in, …}` (the link expires) or 200 `{status: \"error\", message}`. Polls and cached results are never charged. Free for models generated through the API; a model made on the website needs a plan or a one-off unlock (403 `subscription_required`). Charged once per build from your API balance (402 `insufficient_balance`); refunded if the build fails.","operationId":"gamepack_model_model__model_id__gamepack_get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."},{"name":"engine","in":"query","required":false,"schema":{"type":"string","pattern":"^(unity|unreal|godot)$","default":"unity","title":"Engine"},"description":"unity | unreal | godot"},{"name":"units","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(m|cm)$"},{"type":"null"}],"title":"Units"},"description":"m | cm (FBX engines; glTF is always metres)."},{"name":"lod","in":"query","required":false,"schema":{"type":"string","pattern":"^(balanced|light|detailed)$","default":"balanced","title":"Lod"},"description":"LOD preset: balanced | light | detailed."},{"name":"collider","in":"query","required":false,"schema":{"type":"string","pattern":"^(off|simple|balanced|detailed)$","default":"balanced","title":"Collider"},"description":"Collider preset: off | simple | balanced | detailed."},{"name":"size_m","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1000.0,"exclusiveMinimum":0},{"type":"null"}],"title":"Size M"},"description":"Real-world size of the longest side in metres."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Downloads"]}},"/model/{model_id}/make/{kind}":{"get":{"summary":"Craft makers","description":"Turns a model into a craft project (for example papercraft). Poll this URL with the same parameters until `status` is `ready`: 202 `{status: \"running\"}` while a worker is on it, then 200 `{status: \"ready\", url, filename, expires_in, …}` (the link expires) or 200 `{status: \"error\", message}`. Polls and cached results are never charged. Charged once per build from your API balance (402 `insufficient_balance`); refunded if the build fails.","operationId":"make_model_model__model_id__make__kind__get","security":[{"bearerAuth":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"A model id (`model_id` from a finished task or the library)."},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"},"description":"Maker id, e.g. papercraft."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["Downloads"]}},"/api/platform/balance":{"get":{"summary":"API balance","operationId":"platform_balance_api_platform_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearerAuth":[]}],"tags":["Account"],"description":"Your prepaid API balance in US dollars, this month's spend, your monthly limit and how many of your jobs run now. Top up at https://wandy3d.com/platform/billing; the balance never expires. Never charged."}},"/api/platform/prices":{"get":{"summary":"Price list","operationId":"platform_prices_api_platform_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"bearerAuth":[]}],"tags":["Account"],"description":"The price of every paid call in US dollars, live. Status polls, the library and downloads are free."}}},"components":{"schemas":{"Body_generate_cloud_fast_generate_cloud_fast_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_generate_cloud_fast_generate_cloud_fast_post"},"Body_generate_cloud_generate_cloud_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_generate_cloud_generate_cloud_post"},"Body_generate_cloud_multi_fast_generate_cloud_multi_fast_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_generate_cloud_multi_fast_generate_cloud_multi_fast_post"},"Body_generate_cloud_multi_generate_cloud_multi_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_generate_cloud_multi_generate_cloud_multi_post"},"Body_generate_cloud_multi_ultra_generate_cloud_multi_ultra_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_generate_cloud_multi_ultra_generate_cloud_multi_ultra_post"},"Body_generate_cloud_ultra_generate_cloud_ultra_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_generate_cloud_ultra_generate_cloud_ultra_post"},"Body_generate_retexture_generate_retexture_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_generate_retexture_generate_retexture_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImagineRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style"}},"type":"object","required":["prompt"],"title":"ImagineRequest"},"TextGenerateRequest":{"properties":{"concept_id":{"type":"string","title":"Concept Id"},"mode":{"type":"string","title":"Mode","default":"quality"},"poly_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Poly Count"},"remesh":{"type":"boolean","title":"Remesh","default":true},"texture_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Texture Size"},"texture_format":{"type":"string","title":"Texture Format","default":"webp"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seed"}},"type":"object","required":["concept_id"],"title":"TextGenerateRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A personal API key (hg_live_…) from https://wandy3d.com/platform/keys"}}},"tags":[{"name":"Generate","description":"Start a 3D model from a photo, several views or a text prompt."},{"name":"Tasks","description":"Follow a generation until the model is ready."},{"name":"Library","description":"Your models."},{"name":"Downloads","description":"Files and post-processing of a model you own or added."},{"name":"Account","description":"API balance and prices."}],"security":[{"bearerAuth":[]}]}