Every API here is available over the APIs.io API and to AI agents over MCP.
{"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