ModelsLab Generation API API

Unified generation API for image, video, audio, 3D, training and LLM models. Most generation endpoints are asynchronous: a request returns either a completed result or a "processing" status with an id, which you poll on the matching fetch endpoint. Model-specific request parameters are discoverable

Operations 136

POST /v6/3d/base64_to_url Post 3D Base64 To Url #
POST /v6/3d/fetch/{id} Post 3D Fetch {Id} #
POST /v6/3d/image_to_3d Post 3D Image To 3D #
POST /v6/3d/text_to_3d Post 3D Text To 3D #
POST /v6/assets_generated Post Assets Generated #
POST /v6/base64_to_url Post Base64 To Url #
POST /v6/detect_faces Post Detect Faces #
POST /v6/faceswap/fetch/{id} Post Faceswap Fetch {Id} #
POST /v6/faceswap/multiple_face_swap Post Faceswap Multiple Face Swap #
POST /v6/faceswap/single_face_swap Post Faceswap Single Face Swap #
POST /v6/faceswap/single_video_swap Post Faceswap Single Video Swap #
POST /v6/faceswap/specific_video_swap Post Faceswap Specific Video Swap #
POST /v6/image_editing/avatar_gen Post Image Editing Avatar Gen #
POST /v6/image_editing/background_replacer Post Image Editing Background Replacer #
POST /v6/image_editing/base64_to_url Post Image Editing Base64 To Url #
POST /v6/image_editing/blip_diffusion Post Image Editing Blip Diffusion #
POST /v6/image_editing/caption Post Image Editing Caption #
POST /v6/image_editing/depth2img Post Image Editing Depth2Img #
POST /v6/image_editing/face_gen Post Image Editing Face Gen #
POST /v6/image_editing/fashion Post Image Editing Fashion #
POST /v6/image_editing/fetch/{id} Post Image Editing Fetch {Id} #
POST /v6/image_editing/flux_edit Post Image Editing Flux Edit #
POST /v6/image_editing/flux_headshot Post Image Editing Flux Headshot #
POST /v6/image_editing/head_shot Post Image Editing Head Shot #
POST /v6/image_editing/img_mixer Post Image Editing Img Mixer #
POST /v6/image_editing/inpaint Post Image Editing Inpaint #
POST /v6/image_editing/magic_mix Post Image Editing Magic Mix #
POST /v6/image_editing/mask_creator Post Image Editing Mask Creator #
POST /v6/image_editing/multiview Post Image Editing Multiview #
POST /v6/image_editing/object_removal Post Image Editing Object Removal #
POST /v6/image_editing/outpaint Post Image Editing Outpaint #
POST /v6/image_editing/pix2pix Post Image Editing Pix2Pix #
POST /v6/image_editing/qwen_edit Post Image Editing Qwen Edit #
POST /v6/image_editing/relighting Post Image Editing Relighting #
POST /v6/image_editing/removebg_mask Post Image Editing Removebg Mask #
POST /v6/image_editing/super_resolution Post Image Editing Super Resolution #
POST /v6/images/fetch Post Images Fetch #
POST /v6/images/fetch/{id} Post Images Fetch {Id} #
POST /v6/images/img2img Post Images Img2Img #
POST /v6/images/inpaint Post Images Inpaint #
POST /v6/images/text2img Post Images Text2Img #
POST /v6/interior/exterior_restorer Post Interior Exterior Restorer #
POST /v6/interior/fetch/{id} Post Interior Fetch {Id} #
POST /v6/interior/floor_planning Post Interior Floor Planning #
POST /v6/interior/interior_mixer Post Interior Interior Mixer #
POST /v6/interior/make Post Interior Make #
POST /v6/interior/object_removal Post Interior Object Removal #
POST /v6/interior/room_decorator Post Interior Room Decorator #
POST /v6/interior/scenario_changer Post Interior Scenario Changer #
POST /v6/interior/sketch_rendering Post Interior Sketch Rendering #
GET /v6/model-search/filters Get Model Search Filters #
GET /v6/model-search/providers Get Model Search Providers #
GET /v6/model-search/tags Get Model Search Tags #
GET /v6/model-search/{modelId} Get Model Search {Modelid} #
POST /v6/processing/request_count Post Processing Request Count #
POST /v6/realtime/fetch/{id} Post Realtime Fetch {Id} #
POST /v6/realtime/img2img Post Realtime Img2Img #
POST /v6/realtime/inpaint Post Realtime Inpaint #
POST /v6/realtime/text2img Post Realtime Text2Img #
POST /v6/trainer/status/{trainingRequest} Train Master Status #
POST /v6/trainer/stop Train Master #
POST /v6/trainer/train Train Master Train #
POST /v6/video/base64_to_url Post Video Base64 To Url #
POST /v6/video/batch V6 Video Batch #
POST /v6/video/batch/fetch/{id} Post Video Batch Fetch {Id} #
POST /v6/video/controlnet Post Video Controlnet #
POST /v6/video/fetch/{id} Post Video Fetch {Id} #
POST /v6/video/img2video Post Video Img2Video #
POST /v6/video/img2video_ultra Post Video Img2Video Ultra #
POST /v6/video/img_to_video Post Video Img To Video #
POST /v6/video/open_sora Post Video Open Sora #
POST /v6/video/scene_creator Post Video Scene Creator #
POST /v6/video/scene_maker Post Video Scene Maker #
POST /v6/video/text2video Post Video Text2Video #
POST /v6/video/text2video_ultra Post Video Text2Video Ultra #
POST /v6/video/video2video Post Video Video2Video #
POST /v6/video/watermark_remover Post Video Watermark Remover #
POST /v6/voice-call/cancel-all Post Voice Call Cancel All #
POST /v6/voice-call/start Post Voice Call Start #
GET /v6/voice-call/voices Get Voice Call Voices #
POST /v6/voice-call/{sessionId}/close Post Voice Call {Sessionid} Close #
GET /v6/voice-call/{sessionId}/status Get Voice Call {Sessionid} Status #
POST /v6/voice-call/{sessionId}/transcript Post Voice Call {Sessionid} Transcript #
POST /v6/voice/base64_to_url Post Voice Base64 To Url #
POST /v6/voice/create_dubbing Post Voice Create Dubbing #
POST /v6/voice/fetch/{id} Post Voice Fetch {Id} #
POST /v6/voice/lyrics_generator Post Voice Lyrics Generator #
POST /v6/voice/music_gen Post Voice Music Gen #
POST /v6/voice/sfx Post Voice Sfx #
POST /v6/voice/song_generator Post Voice Song Generator #
POST /v6/voice/speech_to_text Post Voice Speech To Text #
POST /v6/voice/text_to_audio Post Voice Text To Audio #
POST /v6/voice/text_to_speech Post Voice Text To Speech #
POST /v6/voice/vocal_isolator Post Voice Vocal Isolator #
POST /v6/voice/voice_cover Post Voice Voice Cover #
POST /v6/voice/voice_design Post Voice Voice Design #
POST /v6/voice/voice_list Post Voice Voice List #
POST /v6/voice/voice_request Post Voice Voice Request #
POST /v6/voice/voice_to_voice Post Voice Voice To Voice #
POST /v6/voice/voice_upload Post Voice Voice Upload #
POST /v6/whisper/transcribe Post Whisper Transcribe #
POST /v7/images/fetch/{id} #
POST /v7/images/image-to-image #
POST /v7/images/inpaint #
POST /v7/images/text-to-image #
POST /v7/llm/chat/completions Llm Chat Completion #
POST /v7/llm/messages Llm Messages #
POST /v7/llm/messages/count_tokens Llm Messages Count Tokens #
POST /v7/llm/v1/messages Llm V1 Messages #
POST /v7/llm/v1/messages/count_tokens Llm V1 Messages Count Tokens #
GET /v7/llm/v1/models Llm V1 Models Index #
GET /v7/llm/v1/models/{modelId} Llm V1 Models Show #
POST /v7/video-fusion/fetch/{id} Video Fetch #
POST /v7/video-fusion/image-to-video Video Image To Video #
POST /v7/video-fusion/lip-sync Video Lip Sync #
POST /v7/video-fusion/motion-control Video Motion Control #
POST /v7/video-fusion/text-to-video Video Text To Video #
POST /v7/video-fusion/video-to-video Video Video To Video #
POST /v7/voice/create-dubbing Voice Create Dubbing #
POST /v7/voice/fetch/{id} Voice Fetch #
POST /v7/voice/music-gen Voice Music Gen #
POST /v7/voice/song-extender Voice Song Extender #
POST /v7/voice/song-inpaint Voice Song Inpaint #
POST /v7/voice/sound-generation Voice Sound Generation #
POST /v7/voice/speech-to-speech Voice Speech To Speech #
POST /v7/voice/speech-to-text Voice Speech To Text #
POST /v7/voice/text-to-speech Voice Text To Speech #
POST /v8/3ds/fetch/{id} 3D Fetch #
POST /v8/3ds/{model3d} 3D #
POST /v8/audios/fetch/{id} Audios Fetch #
POST /v8/audios/{audio} Audios #
POST /v8/images/fetch/{id} Images Fetch #
POST /v8/images/{image} Images #
POST /v8/videos/fetch/{id} Videos Fetch #
POST /v8/videos/{video} Videos #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/modelslab-com:modelslab-generation-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

modelslab-com-api-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"ModelsLab Generation API","version":"1.0.0","description":"Unified generation API for image, video, audio, 3D, training and LLM models. Most generation endpoints are asynchronous: a request returns either a completed result or a \"processing\" status with an id, which you poll on the matching fetch endpoint. Model-specific request parameters are discoverable at runtime through GET /v6/model-search/{modelId}. A paid subscription is required; there is no free tier.","x-versioning":{"current":"v8","supported":["v6","v7","v8"],"deprecation_policy":"Breaking changes are introduced only on a new versioned base path.","minimum_notice_days":90,"policy_url":"https://modelslab.com/api-deprecation-policy","signals":{"ModelsLab-Api-Version":"The version segment this request resolved to.","ModelsLab-Api-Lifecycle":"current | supported | deprecated.","Deprecation":"RFC 9745 HTTP date. Present only on a deprecated version.","Sunset":"RFC 8594 HTTP date after which the version stops responding."}},"x-pricing":{"model":"subscription","free_tier":false,"entry_plan_usd_per_month":21,"pricing_url":"https://modelslab.com/pricing","notes":"A paid subscription is required before any generation endpoint returns output. There is no free tier and no anonymous sandbox."}},"servers":[{"url":"https://modelslab.com/api"}],"security":[{"apiKeyHeader":[]}],"x-error-model":{"note":"Generation endpoints answer failures with HTTP 200 and a body of {\"status\":\"error\",\"code\":...,\"message\":...}. This predates the current API and existing clients depend on it. Branch on the body's `status` and `code` fields, not on the HTTP status code.","schema":"#/components/schemas/GenerationError","codes":{"validation_error":"The request payload failed validation. See `errors` for the per-field detail.","invalid_api_key":"The API key is missing, malformed, or does not belong to an active account.","unauthenticated":"Authentication is required for this endpoint.","forbidden":"The account is authenticated but not entitled to this endpoint or model.","no_subscription":"The account has no active subscription. A paid plan is required; there is no free tier.","insufficient_balance":"The plan allowance is exhausted and the wallet balance cannot cover this request.","not_found":"The endpoint, model or request id does not exist.","rate_limited":"The plan rate window or concurrency limit is exhausted. See the RateLimit-* headers.","provider_error":"An upstream model provider refused or failed the request. `message` is forwarded from the provider.","content_moderated":"The model provider's content moderation rejected the prompt, the input media or the generated output. Retrying the same input fails the same way; change it.","upstream_unavailable":"A ModelsLab service or GPU worker could not be reached. The request was not billed; retry.","server_error":"An unexpected server-side failure. Retry, and contact support with the request id if it persists."}},"x-rate-limit":{"headers":{"RateLimit-Limit":"Requests permitted in the current window.","RateLimit-Remaining":"Requests still available in the current window.","RateLimit-Reset":"Seconds until the window resets.","RateLimit-Policy":"Structured field: \"<policy>\";q=<quota>;w=<window seconds>.","RateLimit":"Structured field: \"<policy>\";r=<remaining>;t=<reset seconds>.","Retry-After":"Seconds to wait before retrying. Sent when the limit is exhausted."},"note":"Limits are per plan and are enforced over a rolling window plus a concurrency cap. A refusal arrives as HTTP 200 with code \"rate_limited\".","documentation":"https://modelslab.com/pricing"},"components":{"schemas":{"GenerationError":{"type":"object","title":"Generation error","description":"Failure envelope. Note that generation endpoints return this on HTTP 200 \u2014 branch on `status` and `code`, not on the HTTP status.","required":["status","message"],"properties":{"status":{"type":"string","const":"error"},"code":{"type":"string","description":"Stable machine-readable error code. Branch on this.","enum":["validation_error","invalid_api_key","unauthenticated","forbidden","no_subscription","insufficient_balance","not_found","rate_limited","provider_error","content_moderated","upstream_unavailable","server_error"]},"message":{"type":"string","description":"Human-readable explanation. Wording is not stable; do not parse it."},"errors":{"type":"object","description":"Per-field validation detail. Present when code is \"validation_error\".","additionalProperties":{"type":"array","items":{"type":"string"}}},"tips":{"type":"string","description":"Optional remediation hint."}},"additionalProperties":true},"GenerationSuccess":{"type":"object","title":"Generation success","required":["status","output"],"properties":{"status":{"type":"string","const":"success"},"id":{"type":["integer","string"],"description":"Request id. Use it with the matching fetch endpoint."},"output":{"type":"array","description":"Result URLs. One entry per generated asset.","items":{"type":"string","format":"uri"}},"proxy_links":{"type":["array","string"],"description":"Alternate CDN URLs for the same assets, when available.","items":{"type":"string","format":"uri"}},"generationTime":{"type":["number","null"],"description":"Seconds spent generating."},"nsfw_content_detected":{"type":["boolean","null"],"description":"True when the safety checker flagged the output."},"meta":{"type":"object","description":"The resolved model parameters for this request. Keys vary by model; discover them with GET /v6/model-search/{modelId}.","additionalProperties":true},"tip":{"type":"string"}},"additionalProperties":true},"GenerationProcessing":{"type":"object","title":"Generation queued","description":"The job was accepted and is running. Poll `fetch_result` after `eta` seconds.","required":["status","id"],"properties":{"status":{"type":"string","const":"processing"},"id":{"type":["integer","string"],"description":"Request id to poll on the matching fetch endpoint."},"eta":{"type":["number","string","null"],"description":"Estimated seconds until the result is ready."},"fetch_result":{"type":["string","null"],"format":"uri","description":"Absolute URL to poll for this job."},"future_links":{"type":"array","description":"URLs the assets will occupy once generation completes.","items":{"type":"string","format":"uri"}},"output":{"type":"array","description":"Always empty while processing.","items":{"type":"string","format":"uri"}},"message":{"type":"string"},"meta":{"type":"object","additionalProperties":true}},"additionalProperties":true},"GenerationResponse":{"title":"Generation response","description":"Discriminated on `status`. Every generation and fetch endpoint returns one of these three shapes, always on HTTP 200.","oneOf":[{"$ref":"#/components/schemas/GenerationSuccess"},{"$ref":"#/components/schemas/GenerationProcessing"},{"$ref":"#/components/schemas/GenerationError"}],"discriminator":{"propertyName":"status","mapping":{"success":"#/components/schemas/GenerationSuccess","processing":"#/components/schemas/GenerationProcessing","error":"#/components/schemas/GenerationError"}}},"VideoBatchRequest":{"type":"object","title":"Video batch request","description":"Many video requests under one model. Each request is charged at the batch discount and fails (with a refund) if it is not finished within the batch timeout.","required":["model_id","requests"],"properties":{"key":{"type":"string","description":"API key. Optional when the key is sent as a header."},"model_id":{"type":"string","description":"The in-house video model every request in the batch runs on.","enum":["wan2.2","ltx-2.3","h3-minimax-r2v","h3-minimax-start-end-frame","h3-minimax-t2v","h3-minimax-ref-to-video-fast"]},"webhook":{"type":"string","format":"uri","description":"Called once per request as it completes, with that request's `id` and `track_id`."},"track_id":{"type":"string","description":"Default correlation id for requests that set none of their own."},"defaults":{"type":"object","description":"Parameters merged under every request; a request's own value wins.","additionalProperties":true},"requests":{"type":"array","minItems":3,"maxItems":20,"description":"One entry per video. Text-to-video when it carries a `prompt` only; image-to-video when it carries `init_image` (or the model's reference fields).","items":{"type":"object","properties":{"track_id":{"type":"string","description":"Correlation id echoed in this request's result and webhook."},"prompt":{"type":"string"},"init_image":{"type":"string","format":"uri"},"negative_prompt":{"type":"string"},"duration":{"type":"number"},"seed":{"type":"integer"}},"additionalProperties":true}}},"additionalProperties":true},"VideoBatchResult":{"type":"object","title":"Video batch result","description":"One request of a batch. The same shape the single fetch endpoint returns for that request's `id`, plus its position and correlation id.","required":["index","status"],"properties":{"index":{"type":"integer","description":"Position in the submitted `requests` array."},"track_id":{"type":["string","null"]},"id":{"type":["integer","string"],"description":"Request id, also pollable on the single fetch endpoint."},"status":{"type":"string","enum":["processing","success","failed"]},"fetch_result":{"type":["string","null"],"format":"uri"},"eta":{"type":["number","string","null"]},"output":{"type":["array","string"],"items":{"type":"string","format":"uri"}},"future_links":{"type":"array","items":{"type":"string","format":"uri"}},"message":{"type":"string"},"refunded":{"type":"boolean","description":"Present on a failed result: whether the charge was reversed."}},"additionalProperties":true},"VideoBatchAccepted":{"type":"object","title":"Video batch accepted / status","description":"Keyed like a single generation response (`status`, `id`, `output`, `message`, `tip`), with the batch fields on top.","required":["status","id","batch_id","output","request_counts","results"],"properties":{"status":{"type":"string","enum":["processing","success","failed"],"description":"\"processing\" on submit and while any request is still running; \"success\" once all succeeded; \"failed\" once all failed."},"id":{"type":"integer","description":"The batch id, under the key a single response uses. Drawn from the same counter as request ids, so the two never collide."},"batch_id":{"type":"integer"},"message":{"type":"string"},"tip":{"type":"string"},"output":{"type":"array","items":{"type":"string","format":"uri"},"description":"Every finished video across the batch in request order; empty on submit and while nothing has finished."},"future_links":{"type":"array","items":{"type":"string","format":"uri"},"description":"On submit: the URLs every request will publish to, in request order."},"fetch_result":{"type":"string","format":"uri","description":"Absolute URL to poll the whole batch."},"eta":{"type":"integer","description":"Largest per-request estimate, in seconds."},"meta":{"type":"object","description":"On submit: the envelope inputs (`model_id`, `track_id`, `webhook`).","additionalProperties":true},"timeout_minutes":{"type":"integer","description":"Requests not finished by then are failed and refunded."},"discount":{"type":"number","description":"Fraction taken off every request's single-request price."},"request_counts":{"type":"object","required":["total","processing","succeeded","failed"],"properties":{"total":{"type":"integer"},"processing":{"type":"integer"},"succeeded":{"type":"integer"},"failed":{"type":"integer"}}},"results":{"type":"array","items":{"$ref":"#/components/schemas/VideoBatchResult"}}},"additionalProperties":true},"VideoBatchResponse":{"title":"Video batch response","description":"The batch envelope, or the shared error envelope when the whole batch was refused (validation, balance, or concurrency). Always on HTTP 200.","oneOf":[{"$ref":"#/components/schemas/VideoBatchAccepted"},{"$ref":"#/components/schemas/GenerationError"}]},"LlmResponse":{"title":"LLM response","description":"OpenAI-compatible chat completion, or the shared error envelope. Streaming requests (`stream: true`) return text/event-stream instead of this object.","oneOf":[{"$ref":"#/components/schemas/LlmChatCompletion"},{"$ref":"#/components/schemas/GenerationError"}]},"LlmChatCompletion":{"type":"object","title":"Chat completion","required":["id","choices"],"properties":{"id":{"type":"string"},"object":{"type":"string","examples":["chat.completion"]},"created":{"type":"integer","description":"Unix timestamp."},"model":{"type":"string"},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"finish_reason":{"type":["string","null"]},"message":{"type":"object","properties":{"role":{"type":"string"},"content":{"type":["string","null"]}},"additionalProperties":true}},"additionalProperties":true}},"usage":{"type":"object","properties":{"prompt_tokens":{"type":"integer"},"completion_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}},"additionalProperties":true}},"additionalProperties":true}},"headers":{"RateLimit-Limit":{"description":"Requests permitted in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests still available in the current window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"Structured field: \"<policy>\";q=<quota>;w=<window seconds>.","schema":{"type":"string"}},"RateLimit":{"description":"Structured field: \"<policy>\";r=<remaining>;t=<reset seconds>.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying. Sent when the limit is exhausted.","schema":{"type":"integer"}},"ModelsLab-Api-Version":{"description":"The API version segment this request resolved to.","schema":{"type":"string","examples":["v6","v7","v8"]}},"ModelsLab-Api-Lifecycle":{"description":"Lifecycle state of this API version.","schema":{"type":"string","enum":["current","supported","deprecated"]}}},"securitySchemes":{"apiKeyHeader":{"type":"apiKey","in":"header","name":"key","description":"ModelsLab API key. The same value is also accepted as a \"key\" property in the JSON request body."},"bearerAuth":{"type":"http","scheme":"bearer","description":"OpenAI-compatible bearer token. Accepted on /v7/llm/* routes only."},"anthropicApiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Anthropic-compatible key header. Accepted on /v7/llm/* routes only."}}},"tags":[{"name":"v6_3d"},{"name":"v6_assets_generated"},{"name":"v6_base64_to_url"},{"name":"v6_detect_faces"},{"name":"v6_faceswap"},{"name":"v6_image_editing"},{"name":"v6_images"},{"name":"v6_interior"},{"name":"v6_model_search"},{"name":"v6_processing"},{"name":"v6_realtime"},{"name":"v6_trainer"},{"name":"v6_video"},{"name":"v6_voice"},{"name":"v6_voice_call"},{"name":"v6_whisper"},{"name":"v7_images"},{"name":"v7_llm"},{"name":"v7_video_fusion"},{"name":"v7_voice"},{"name":"v8_3ds"},{"name":"v8_audios"},{"name":"v8_images"},{"name":"v8_videos"}],"paths":{"/v6/3d/base64_to_url":{"post":{"tags":["v6_3d"],"summary":"Post 3D Base64 To Url","description":"Post 3D Base64 To Url. Generation endpoint on /v6/3d/base64_to_url. Returns `status: \"success\"` with `output` when the model answers inline, or `status: \"processing\"` with an `id` and `eta` to poll on the matching fetch endpoint. Request parameters vary by model \u2014 discover them with GET /v6/model-search/{modelId}. Requires a paid subscription; failures arrive on HTTP 200 with `status: \"error\"` and a machine-readable `code`.","operationId":"post_v6_3d_base64_to_url","security":[{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"Generation outcome. `status` is \"success\" with `output`, \"processing\" with an `id` and `eta` to poll, or \"error\".","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"ModelsLab-Api-Version":{"$ref":"#/components/headers/ModelsLab-Api-Version"},"ModelsLab-Api-Lifecycle":{"$ref":"#/components/headers/ModelsLab-Api-Lifecycle"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationResponse"}}}},"400":{"description":"Malformed request. Rejected at the edge before reaching the API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"403":{"description":"No active subscription for this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"Endpoint, model or request id not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"429":{"description":"Rate limited at the edge. The API itself signals rate limiting on 200 with code \"rate_limited\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"requestBody":{"required":true,"description":"Generation payload. Parameters vary by model; discover them with GET /v6/model-search/{modelId}.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"API key. Optional when the key is sent as a header."}},"additionalProperties":true}}}}}},"/v6/3d/fetch/{id}":{"post":{"tags":["v6_3d"],"summary":"Post 3D Fetch {Id}","description":"Post 3D Fetch {Id}. Polls a queued job on /v6/3d/fetch/{id}. Send the `id` returned by the matching generation endpoint. Returns `status: \"processing\"` until the job finishes, then `status: \"success\"` with `output`.","operationId":"post_v6_3d_fetch_id","security":[{"apiKeyHeader":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Request id returned by the matching generation endpoint.","schema":{"type":["integer","string"],"description":"Request id returned by the generation endpoint."}}],"responses":{"200":{"description":"Job status. `status` is \"success\" with `output` when ready, \"processing\" while the job runs, or \"error\".","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"ModelsLab-Api-Version":{"$ref":"#/components/headers/ModelsLab-Api-Version"},"ModelsLab-Api-Lifecycle":{"$ref":"#/components/headers/ModelsLab-Api-Lifecycle"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationResponse"}}}},"400":{"description":"Malformed request. Rejected at the edge before reaching the API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"403":{"description":"No active subscription for this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"Endpoint, model or request id not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"429":{"description":"Rate limited at the edge. The API itself signals rate limiting on 200 with code \"rate_limited\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"requestBody":{"required":true,"description":"Generation payload. Parameters vary by model; discover them with GET /v6/model-search/{modelId}.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"API key. Optional when the key is sent as a header."}},"additionalProperties":true}}}}}},"/v6/3d/image_to_3d":{"post":{"tags":["v6_3d"],"summary":"Post 3D Image To 3D","description":"Post 3D Image To 3D. Generation endpoint on /v6/3d/image_to_3d. Returns `status: \"success\"` with `output` when the model answers inline, or `status: \"processing\"` with an `id` and `eta` to poll on the matching fetch endpoint. Request parameters vary by model \u2014 discover them with GET /v6/model-search/{modelId}. Requires a paid subscription; failures arrive on HTTP 200 with `status: \"error\"` and a machine-readable `code`.","operationId":"post_v6_3d_image_to_3d","security":[{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"Generation outcome. `status` is \"success\" with `output`, \"processing\" with an `id` and `eta` to poll, or \"error\".","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"ModelsLab-Api-Version":{"$ref":"#/components/headers/ModelsLab-Api-Version"},"ModelsLab-Api-Lifecycle":{"$ref":"#/components/headers/ModelsLab-Api-Lifecycle"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationResponse"}}}},"400":{"description":"Malformed request. Rejected at the edge before reaching the API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"403":{"description":"No active subscription for this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"Endpoint, model or request id not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"429":{"description":"Rate limited at the edge. The API itself signals rate limiting on 200 with code \"rate_limited\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"requestBody":{"required":true,"description":"Generation payload. Parameters vary by model; discover them with GET /v6/model-search/{modelId}.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"API key. Optional when the key is sent as a header."}},"additionalProperties":true}}}}}},"/v6/3d/text_to_3d":{"post":{"tags":["v6_3d"],"summary":"Post 3D Text To 3D","description":"Post 3D Text To 3D. Generation endpoint on /v6/3d/text_to_3d. Returns `status: \"success\"` with `output` when the model answers inline, or `status: \"processing\"` with an `id` and `eta` to poll on the matching fetch endpoint. Request parameters vary by model \u2014 discover them with GET /v6/model-search/{modelId}. Requires a paid subscription; failures arrive on HTTP 200 with `status: \"error\"` and a machine-readable `code`.","operationId":"post_v6_3d_text_to_3d","security":[{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"Generation outcome. `status` is \"success\" with `output`, \"processing\" with an `id` and `eta` to poll, or \"error\".","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"ModelsLab-Api-Version":{"$ref":"#/components/headers/ModelsLab-Api-Version"},"ModelsLab-Api-Lifecycle":{"$ref":"#/components/headers/ModelsLab-Api-Lifecycle"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationResponse"}}}},"400":{"description":"Malformed request. Rejected at the edge before reaching the API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"403":{"description":"No active subscription for this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"Endpoint, model or request id not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"429":{"description":"Rate limited at the edge. The API itself signals rate limiting on 200 with code \"rate_limited\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"requestBody":{"required":true,"description":"Generation payload. Parameters vary by model; discover them with GET /v6/model-search/{modelId}.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"API key. Optional when the key is sent as a header."}},"additionalProperties":true}}}}}},"/v6/assets_generated":{"post":{"tags":["v6_assets_generated"],"summary":"Post Assets Generated","description":"Post Assets Generated. Generation endpoint on /v6/assets_generated. Returns `status: \"success\"` with `output` when the model answers inline, or `status: \"processing\"` with an `id` and `eta` to poll on the matching fetch endpoint. Request parameters vary by model \u2014 discover them with GET /v6/model-search/{modelId}. Requires a paid subscription; failures arrive on HTTP 200 with `status: \"error\"` and a machine-readable `code`.","operationId":"post_v6_assets_generated","security":[{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"Generation outcome. `status` is \"success\" with `output`, \"processing\" with an `id` and `eta` to poll, or \"error\".","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"ModelsLab-Api-Version":{"$ref":"#/components/headers/ModelsLab-Api-Version"},"ModelsLab-Api-Lifecycle":{"$ref":"#/components/headers/ModelsLab-Api-Lifecycle"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationResponse"}}}},"400":{"description":"Malformed request. Rejected at the edge before reaching the API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"403":{"description":"No active subscription for this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"Endpoint, model or request id not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"429":{"description":"Rate limited at the edge. The API itself signals rate limiting on 200 with code \"rate_limited\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"requestBody":{"required":true,"description":"Generation payload. Parameters vary by model; discover them with GET /v6/model-search/{modelId}.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"API key. Optional when the key is sent as a header."}},"additionalProperties":true}}}}}},"/v6/base64_to_url":{"post":{"tags":["v6_base64_to_url"],"summary":"Post Base64 To Url","description":"Post Base64 To Url. Generation endpoint on /v6/base64_to_url. Returns `status: \"success\"` with `output` when the model answers inline, or `status: \"processing\"` with an `id` and `eta` to poll on the matching fetch endpoint. Request parameters vary by model \u2014 discover them with GET /v6/model-search/{modelId}. Requires a paid subscription; failures arrive on HTTP 200 with `status: \"error\"` and a machine-readable `code`.","operationId":"post_v6_base64_to_url","security":[{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"Generation outcome. `status` is \"success\" with `output`, \"processing\" with an `id` and `eta` to poll, or \"error\".","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"ModelsLab-Api-Version":{"$ref":"#/components/headers/ModelsLab-Api-Version"},"ModelsLab-Api-Lifecycle":{"$ref":"#/components/headers/ModelsLab-Api-Lifecycle"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationResponse"}}}},"400":{"description":"Malformed request. Rejected at the edge before reaching the API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"403":{"description":"No active subscription for this endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"404":{"description":"Endpoint, model or request id not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"429":{"description":"Rate limited at the edge. The API itself signals rate limiting on 200 with code \"rate_limited\".","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationError"}}}}},"requestBody":{"required":true,"description":"Generation payload. Parameters vary by model; discover them with GET /v6/model-search/{modelId}.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"API key. Optional when the key is sent as a header."}},"additionalProperties":true}}}}}},"/v6/detect_faces":{"post":{"tags":["v6_detect_faces"],"summary":"Post Detect Faces","description":"Post Detect Faces. Generation endpoint on /v6/detect_faces. Returns `status: \"success\"` with `output` when the model answers inline, or `status: \"processing\"` with an `id` and `eta` to poll on the matching fetch endpoint. Request parameters vary by model \u2014 discover them with GET /v6/model-search/{modelId}. Requires a paid subscription; failures arrive on HTTP 200 with `status: \"error\"` and a machine-readable `code`.","operationId":"post_v6_detect_faces","security":[{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"Generation outcome. `status` is \"success\" with `outpu

# --- truncated at 32 KB (389 KB total) ---
# Full source: https://artifacts.apis.io/modelslab-com/openapi/_original/modelslab-com-api-openapi.json