From 578b231d37667b9e4bd1ec18109ea52fab142a6d Mon Sep 17 00:00:00 2001 From: Matt Miller Date: Fri, 4 Sep 2026 09:23:50 -0700 Subject: [PATCH 1/2] fix(generate): drop 7 retired partner aliases and re-vendor the openapi spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `comfy generate list` advertised five Stability aliases and two BFL structural-conditioning aliases whose proxy routes are gone or dead upstream: stability-ultra, stability-sd3, stability-upscale, stability-upscale-creative, stability-upscale-fast flux-canny, flux-depth The five Stability paths no longer exist in the API at all — the public spec at api.comfy.org/openapi declares none of them, so `_registry()` was skipping every one of them silently and `list` was advertising models that could never resolve. `bfl/flux-pro-1.0-canny/generate` and `bfl/flux-pro-1.0-depth/generate` are still declared but answer upstream 404, which the proxy surfaces as a 502. Also re-vendors `spec/openapi.yml`, which had not been refreshed since it was first added: 193 `/proxy/` paths against the 279 the API serves now. The vendored copy is the response body of the public, token-free `https://api.comfy.org/openapi` stored verbatim, so a refresh is a reproducible `curl` (documented in the `spec.py` module docstring) rather than a hand-edit. It is minified JSON under a `.yml` name; JSON is a subset of YAML 1.2, the loader already reads either, and the on-disk cache `comfy generate refresh` writes was already that same JSON. Allowlist drift becomes loud in tests rather than silent at runtime: two new tests assert every allowlisted endpoint exists in the bundled spec and every alias targets an allowlisted endpoint. `_registry()` keeps its `continue` so a stale user cache still cannot crash `generate`. Three existing tests moved with the refreshed spec: flux-pro-1.1 no longer requires width/height (only prompt), its output_format enum gained webp, and the byteplus model enum gained the dreamina-seedance-* naming scheme. --- .github/workflows/public-repo-hygiene.yml | 36 +- comfy_cli/command/generate/app.py | 2 +- comfy_cli/command/generate/spec.py | 36 +- comfy_cli/command/generate/spec/openapi.yml | 31637 +--------------- comfy_cli/schemas/generate_list.json | 2 +- tests/comfy_cli/command/generate/test_app.py | 8 +- .../command/generate/test_json_errors.py | 4 +- .../generate/test_list_schema_envelope.py | 2 +- .../comfy_cli/command/generate/test_schema.py | 7 +- tests/comfy_cli/command/generate/test_spec.py | 58 +- 10 files changed, 117 insertions(+), 31675 deletions(-) diff --git a/.github/workflows/public-repo-hygiene.yml b/.github/workflows/public-repo-hygiene.yml index e809d9df4..98186a7d1 100644 --- a/.github/workflows/public-repo-hygiene.yml +++ b/.github/workflows/public-repo-hygiene.yml @@ -34,12 +34,30 @@ jobs: # tests/comfy_cli/test_knowledge.py and test_knowledge_attach.py — not a # real ticket. ticket_allowlist: HAILUO-03,HALO-03 - # No `exclude_paths:` here, deliberately. Every entry this caller used to - # carry was a false positive in the checker itself — Hugging Face model - # URLs and HF `owner/name` model repos read as unlisted GitHub repos — - # and all of them are fixed upstream as of the pin above. The one - # remaining entry, `.github/workflows/refresh-cql-catalogs.yml`, is gone - # because that file no longer names its private source: the coordinates - # moved into secrets. An exclusion suppresses the scan for a whole path - # forever, including code not yet written, so the bar for adding one back - # is that the finding is unfixable both here and upstream. + # One `exclude_paths:` entry, and the bar it had to clear is recorded here + # because the entry is permanent. Every entry this caller used to carry + # was a false positive in the checker itself — Hugging Face model URLs and + # HF `owner/name` model repos read as unlisted GitHub repos — and all of + # them are fixed upstream as of the pin above; the last one, + # `.github/workflows/refresh-cql-catalogs.yml`, went away when that file + # stopped naming its private source. An exclusion suppresses the scan for + # a path forever, including content not yet written, so the bar is that + # the finding is unfixable both here and upstream. + # + # `comfy_cli/command/generate/spec/openapi.yml` clears it. It is not + # source: it is the response body of `https://api.comfy.org/openapi` + # stored verbatim, so that a refresh is a reproducible `curl` rather than + # a hand-edit (see the module docstring in + # `comfy_cli/command/generate/spec.py`). Nobody writes into it, and + # redacting the eight tokens the checker flags — six ticket-shaped ids + # written into upstream `description` prose, none of them under a + # `/proxy/` path this CLI surfaces, plus two hits on an IETF language-tag + # standard that is a plain false positive — would silently fork the + # vendored copy from the upstream document and make `curl … | cmp` stop + # being the way to verify it. Unfixable here. Upstream is a different + # repo, and api.comfy.org already serves every one of those ids publicly + # to any unauthenticated caller, so vendoring them discloses nothing that + # was not already published. Exact file, not a subtree: nothing else + # under `spec/` is covered, and a second vendored artifact would need its + # own entry and its own justification. + exclude_paths: comfy_cli/command/generate/spec/openapi.yml diff --git a/comfy_cli/command/generate/app.py b/comfy_cli/command/generate/app.py index 1b0f7c161..09b91d11c 100644 --- a/comfy_cli/command/generate/app.py +++ b/comfy_cli/command/generate/app.py @@ -54,7 +54,7 @@ from comfy_cli.output.renderer import Renderer, get_renderer from comfy_cli.output.sanitize import sanitize_markup -_HELP = "Generate images via ComfyUI partner nodes (Flux, Ideogram, DALL·E, Recraft, Stability, …)." +_HELP = "Generate images via ComfyUI partner nodes (Flux, Ideogram, DALL·E, Recraft, Reve, …)." _CONTEXT_SETTINGS = { "allow_extra_args": True, diff --git a/comfy_cli/command/generate/spec.py b/comfy_cli/command/generate/spec.py index 463bf0ac0..e30706e0d 100644 --- a/comfy_cli/command/generate/spec.py +++ b/comfy_cli/command/generate/spec.py @@ -4,8 +4,19 @@ 1. ``~/.comfy/openapi-cache.yml`` if fresher than CACHE_TTL_DAYS 2. The vendored copy under ``comfy_cli/command/generate/spec/openapi.yml`` +The vendored copy is the body ``https://api.comfy.org/openapi`` serves, stored +verbatim — that endpoint is public and needs no token, so a refresh is +reproducible byte-for-byte: + + curl -sS https://api.comfy.org/openapi -o comfy_cli/command/generate/spec/openapi.yml + printf '\n' >> comfy_cli/command/generate/spec/openapi.yml # end-of-file-fixer + +The body is minified JSON rather than block YAML despite the ``.yml`` name; +JSON is a subset of YAML 1.2, so the same loader reads either, and the on-disk +user cache ``comfy generate refresh`` writes is already that same JSON. + The parsed spec is cached in-process via functools.lru_cache so repeated lookups -inside a single CLI invocation don't re-parse the 30k-line YAML. +inside a single CLI invocation don't re-parse the ~1 MB document. """ from __future__ import annotations @@ -89,20 +100,12 @@ class Endpoint: "flux-kontext-max": "bfl/flux-kontext-max/generate", "flux-fill": "bfl/flux-pro-1.0-fill/generate", "flux-expand": "bfl/flux-pro-1.0-expand/generate", - "flux-canny": "bfl/flux-pro-1.0-canny/generate", - "flux-depth": "bfl/flux-pro-1.0-depth/generate", # Ideogram "ideogram": "ideogram/ideogram-v3/generate", "ideogram-edit": "ideogram/ideogram-v3/edit", "ideogram-remix": "ideogram/ideogram-v3/remix", "ideogram-reframe": "ideogram/ideogram-v3/reframe", "ideogram-bg": "ideogram/ideogram-v3/replace-background", - # Stability - "stability-ultra": "stability/v2beta/stable-image/generate/ultra", - "stability-sd3": "stability/v2beta/stable-image/generate/sd3", - "stability-upscale": "stability/v2beta/stable-image/upscale/conservative", - "stability-upscale-creative": "stability/v2beta/stable-image/upscale/creative", - "stability-upscale-fast": "stability/v2beta/stable-image/upscale/fast", # Recraft "recraft": "recraft/image_generation", "recraft-vectorize": "recraft/images/vectorize", @@ -205,20 +208,12 @@ def resolve_alias(target: str) -> str: ("bfl/flux-2-pro/generate", "text-to-image", "bfl"), ("bfl/flux-pro-1.0-fill/generate", "inpaint", "bfl"), ("bfl/flux-pro-1.0-expand/generate", "outpaint", "bfl"), - ("bfl/flux-pro-1.0-canny/generate", "controlnet", "bfl"), - ("bfl/flux-pro-1.0-depth/generate", "controlnet", "bfl"), # Ideogram ("ideogram/ideogram-v3/generate", "text-to-image", None), ("ideogram/ideogram-v3/edit", "image-edit", None), ("ideogram/ideogram-v3/remix", "image-edit", None), ("ideogram/ideogram-v3/reframe", "image-edit", None), ("ideogram/ideogram-v3/replace-background", "image-edit", None), - # Stability - ("stability/v2beta/stable-image/generate/ultra", "text-to-image", None), - ("stability/v2beta/stable-image/generate/sd3", "text-to-image", None), - ("stability/v2beta/stable-image/upscale/conservative", "upscale", None), - ("stability/v2beta/stable-image/upscale/creative", "upscale", None), - ("stability/v2beta/stable-image/upscale/fast", "upscale", None), # Recraft ("recraft/image_generation", "text-to-image", None), ("recraft/images/vectorize", "vectorize", None), @@ -345,7 +340,12 @@ def _registry() -> dict[str, Endpoint]: path = PROXY_PREFIX + endpoint_id node = paths.get(path) if not node: - continue # spec drift — skip silently, surfaced via `comfy generate list` + # Spec drift. Skipping keeps `generate` usable against a stale user + # cache instead of crashing on one missing node; the BUNDLED spec is + # held to the stricter rule by + # test_every_allowlisted_endpoint_exists_in_vendored_spec, so drift + # is loud at test time rather than silent at runtime. + continue # All image endpoints are POST; pick the first defined method anyway. method = "post" if "post" in node else next(iter(node.keys())) op = node[method] diff --git a/comfy_cli/command/generate/spec/openapi.yml b/comfy_cli/command/generate/spec/openapi.yml index 7d0a74825..6739856de 100644 --- a/comfy_cli/command/generate/spec/openapi.yml +++ b/comfy_cli/command/generate/spec/openapi.yml @@ -1,31636 +1 @@ -openapi: "3.0.2" -info: - title: Comfy API - version: "1.0" -servers: - - url: https://api.comfy.org -paths: - /users: - get: - summary: Get information about the calling user. - operationId: getUser - tags: - - Registry - security: - - BearerAuth: [] - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/User" - - "404": - description: Not Found - "401": - description: Unauthorized - /customers: - post: - summary: Create a new customer - description: Creates a new customer using the provided token. No request body is needed as user information is extracted from the token. - operationId: createCustomer - x-excluded: true - tags: - - API Nodes - security: - - BearerAuth: [] - responses: - "200": - description: Customer already exists - content: - application/json: - schema: - $ref: "#/components/schemas/Customer" - "201": - description: Customer created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Customer" - "400": - description: Invalid request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - get: - summary: Search for customers - description: Search for customers by email, name, Stripe ID, or Metronome ID. - operationId: searchCustomers - x-excluded: true - tags: - - API Nodes - - Admin - security: - - BearerAuth: [] - parameters: - - in: query - name: email - schema: - type: string - description: Email address to search for - - in: query - name: name - schema: - type: string - description: Customer name to search for - - in: query - name: stripe_id - schema: - type: string - description: Stripe customer ID to search for - - in: query - name: metronome_id - schema: - type: string - description: Metronome customer ID to search for\ - - in: query - name: page - schema: - type: integer - default: 1 - description: Page number to retrieve - - in: query - name: limit - schema: - type: integer - default: 10 - description: Number of customers to return per page - responses: - "200": - description: Customers matching the search criteria - content: - application/json: - schema: - type: object - properties: - page: - type: integer - description: Current page number - limit: - type: integer - description: Number of customers per page - totalPages: - type: integer - description: Total number of pages available - customers: - type: array - items: - $ref: "#/components/schemas/Customer" - total: - type: integer - description: Total number of matching customers - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - insufficient permissions - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /customers/me: - get: - summary: Get authenticated customer details - description: Returns details about the currently authenticated customer based on their JWT token. - operationId: getAuthenticatedCustomer - x-excluded: true - tags: - - API Nodes - security: - - BearerAuth: [] - responses: - "200": - description: Customer details retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Customer" - "401": - description: Unauthorized or invalid token - "404": - description: Customer not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /customers/{customer_id}: - get: - summary: Get a customer by ID - description: Returns details about a customer by their ID. - operationId: getCustomerById - x-excluded: true - tags: - - API Nodes - - Admin - security: - - BearerAuth: [] - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - responses: - "200": - description: Customer details retrieved successfully - content: - application/json: - schema: - type: object - properties: - customer: - $ref: "#/components/schemas/CustomerAdmin" - "401": - description: Unauthorized or invalid token - "404": - description: Customer not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /customers/api-keys: - get: - summary: List all API keys for a customer - operationId: listCustomerAPIKeys - x-excluded: true - responses: - "200": - description: List of API keys - content: - application/json: - schema: - type: object - properties: - api_keys: - type: array - items: - $ref: "#/components/schemas/APIKey" - "401": - description: Unauthorized - "404": - description: Customer not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - post: - summary: Create a new API key for a customer - operationId: createCustomerAPIKey - x-excluded: true - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/CreateAPIKeyRequest" - responses: - "201": - description: API key created - content: - application/json: - schema: - type: object - properties: - api_key: - $ref: "#/components/schemas/APIKeyWithPlaintext" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "404": - description: Customer or API key not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /customers/api-keys/{api_key_id}: - delete: - summary: Delete an API key for a customer - operationId: deleteCustomerAPIKey - x-excluded: true - parameters: - - in: path - name: api_key_id - required: true - schema: - type: string - responses: - "204": - description: API key deleted - "401": - description: Unauthorized - "404": - description: Customer or API key not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /customers/credit: - post: - summary: Initiates a Credit Purchase. - operationId: InitiateCreditPurchase - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - amount_micros: - type: integer - format: int64 - description: the amount of the checkout transaction in micro value - currency: - type: string - description: the currency used in the checkout transaction - required: - - amount_micros - - currency - responses: - "201": - description: Customer Checkout created successfully - content: - application/json: - schema: - type: object - properties: - checkout_url: - type: string - description: the url to redirect the customer - "400": - description: Bad request, invalid token or user already exists - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or invalid token - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/billing: - post: - summary: Access customer billing portal - description: Creates a session for the customer to access their billing portal where they can manage subscriptions, payment methods, and view invoices. - operationId: AccessBillingPortal - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: false - content: - application/json: - schema: - type: object - properties: - return_url: - type: string - description: Optional URL to redirect the customer after they're done with the billing portal - target_tier: - type: string - enum: [standard, creator, pro, standard-yearly, creator-yearly, pro-yearly] - description: Optional target subscription tier. When provided, creates a deep link directly to the subscription update confirmation screen with this tier pre-selected. - responses: - "200": - description: Billing portal session created successfully - content: - application/json: - schema: - type: object - properties: - billing_portal_url: - type: string - description: The URL to redirect the customer to the billing portal - "400": - description: Bad request, invalid input - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or invalid token - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/cloud-subscription-checkout: - post: - summary: Create cloud subscription checkout session - description: Creates a cloud subscription checkout session for $20/month with automatic billing - operationId: createCloudSubscriptionCheckout - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: false - content: - application/json: - schema: - type: object - properties: - ga_client_id: - type: string - description: Google Analytics client ID from _ga cookie - ga_session_id: - type: string - description: Google Analytics session ID - ga_session_number: - type: string - description: Google Analytics session number - gclid: - type: string - description: Google Ads click ID - gbraid: - type: string - description: Google Ads iOS attribution parameter - wbraid: - type: string - description: Google Ads web-to-app attribution parameter - utm_source: - type: string - description: UTM source parameter - utm_medium: - type: string - description: UTM medium parameter - utm_campaign: - type: string - description: UTM campaign parameter - utm_term: - type: string - description: UTM term parameter - utm_content: - type: string - description: UTM content parameter - im_ref: - type: string - description: Impact.com click ID for affiliate conversion tracking - responses: - "201": - description: Subscription checkout session created successfully - content: - application/json: - schema: - type: object - properties: - checkout_url: - type: string - description: The URL to redirect the customer to complete subscription - "400": - description: Bad request, invalid input - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or invalid token - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/cloud-subscription-checkout/{tier}: - post: - summary: Create cloud subscription checkout session for a specific tier - description: Creates a cloud subscription checkout session for a specific subscription tier (standard, creator, or pro) with automatic billing - operationId: createCloudSubscriptionCheckoutTier - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: tier - required: true - description: The subscription tier (standard, creator, or pro) with optional yearly billing (standard-yearly, creator-yearly, pro-yearly) - schema: - type: string - enum: - - standard - - creator - - pro - - standard-yearly - - creator-yearly - - pro-yearly - requestBody: - required: false - content: - application/json: - schema: - type: object - properties: - ga_client_id: - type: string - description: Google Analytics client ID from _ga cookie - ga_session_id: - type: string - description: Google Analytics session ID - ga_session_number: - type: string - description: Google Analytics session number - gclid: - type: string - description: Google Ads click ID - gbraid: - type: string - description: Google Ads iOS attribution parameter - wbraid: - type: string - description: Google Ads web-to-app attribution parameter - utm_source: - type: string - description: UTM source parameter - utm_medium: - type: string - description: UTM medium parameter - utm_campaign: - type: string - description: UTM campaign parameter - utm_term: - type: string - description: UTM term parameter - utm_content: - type: string - description: UTM content parameter - im_ref: - type: string - description: Impact.com click ID for affiliate conversion tracking - responses: - "201": - description: Subscription checkout session created successfully - content: - application/json: - schema: - type: object - properties: - checkout_url: - type: string - description: The URL to redirect the customer to complete subscription - "400": - description: Bad request, invalid input or tier - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or invalid token - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/cloud-subscription-status: - get: - summary: Check cloud subscription status - description: Check if the customer has an active cloud subscription - operationId: GetCloudSubscriptionStatus - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - responses: - "200": - description: Cloud subscription status retrieved successfully - content: - application/json: - schema: - type: object - properties: - is_active: - type: boolean - description: Whether the customer has an active cloud subscription - subscription_id: - type: string - description: The active subscription ID if one exists - nullable: true - subscription_tier: - allOf: - - $ref: "#/components/schemas/SubscriptionTier" - nullable: true - subscription_duration: - allOf: - - $ref: "#/components/schemas/SubscriptionDuration" - nullable: true - has_fund: - type: boolean - description: Whether the customer has funds/credits available - renewal_date: - type: string - format: date-time - description: The next renewal date for the subscription (ISO 8601 format) - nullable: true - end_date: - type: string - format: date-time - description: The date when the subscription is set to end (ISO 8601 format) - nullable: true - "401": - description: Unauthorized or invalid token - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/verify-api-key: - post: - summary: Verify a ComfyUI API key and return customer details - description: | - Validates a ComfyUI API key and returns the associated customer information. - This endpoint is used by cloud.comfy.org to authenticate users via API keys - instead of Firebase tokens. - operationId: VerifyApiKey - x-excluded: true - tags: - - Admin - parameters: - - in: header - name: X-Comfy-Admin-Secret - required: true - schema: - type: string - description: Admin API secret used to authorize this request - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - api_key: - type: string - description: The ComfyUI API key to verify (e.g., comfy_xxx...) - required: - - api_key - responses: - "200": - description: API key is valid - content: - application/json: - schema: - type: object - properties: - valid: - type: boolean - description: Whether the API key is valid - firebase_uid: - type: string - description: The Firebase UID of the user - email: - type: string - description: The customer's email address - name: - type: string - description: The customer's name - is_admin: - type: boolean - description: Whether the customer is an admin - required: - - valid - - firebase_uid - "401": - description: Unauthorized or missing admin API secret - "403": - description: API key auth not allowed for this account (e.g., free tier) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: API key not found or invalid - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/generate-token: - post: - summary: Generate a short-lived JWT admin token - description: | - Generates a short-lived JWT admin token for browser-based admin operations. - The user must already be authenticated with Firebase and have admin privileges. - The generated token expires after 1 hour. - operationId: GenerateAdminToken - tags: - - Admin - security: - - BearerAuth: [] - responses: - "200": - description: JWT token generated successfully - content: - application/json: - schema: - type: object - properties: - token: - type: string - description: The JWT admin token - expires_at: - type: string - format: date-time - description: When the token expires - required: - - token - - expires_at - "401": - description: Unauthorized or user is not an admin - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/customers/{customer_id}/cloud-subscription-status: - get: - summary: Admin check cloud subscription status - description: Allows an admin to inspect a specific customer's cloud subscription status. - operationId: GetAdminCustomerCloudSubscriptionStatus - x-excluded: true - tags: - - Admin - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - description: The ID of the customer whose subscription status to retrieve - - in: header - name: X-Comfy-Admin-Secret - required: true - schema: - type: string - description: Admin API secret used to authorize this request - responses: - "200": - description: Cloud subscription status retrieved successfully - content: - application/json: - schema: - type: object - properties: - is_active: - type: boolean - description: Whether the customer has an active cloud subscription - subscription_id: - type: string - description: The active subscription ID if one exists - nullable: true - subscription_tier: - allOf: - - $ref: "#/components/schemas/SubscriptionTier" - nullable: true - subscription_duration: - allOf: - - $ref: "#/components/schemas/SubscriptionDuration" - nullable: true - has_fund: - type: boolean - description: Whether the customer has funds/credits available - renewal_date: - type: string - format: date-time - description: The next renewal date for the subscription (ISO 8601 format) - nullable: true - end_date: - type: string - format: date-time - description: The date when the subscription is set to end (ISO 8601 format) - nullable: true - "401": - description: Unauthorized or missing admin API secret - "404": - description: Customer not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/customers/{customer_id}/balance: - get: - summary: Admin get customer's remaining balance - description: Returns the specified customer's current remaining balance in microamount and its currency. - operationId: GetAdminCustomerBalance - x-excluded: true - tags: - - Admin - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - - in: header - name: X-Comfy-Admin-Secret - required: true - schema: - type: string - responses: - "200": - description: Customer balance retrieved successfully - content: - application/json: - schema: - type: object - properties: - amount_micros: - type: number - format: double - prepaid_balance_micros: - type: number - format: double - cloud_credit_balance_micros: - type: number - format: double - pending_charges_micros: - type: number - format: double - effective_balance_micros: - type: number - format: double - currency: - type: string - required: - - amount_micros - - currency - "401": - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Customer not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/customers/{customer_id}/stripe-data: - delete: - summary: Delete customer Stripe data - description: Deletes the Stripe customer data associated with the given customer ID. - operationId: DeleteAdminCustomerStripeData - x-excluded: true - tags: - - Admin - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - description: The ID of the customer whose Stripe data to delete - - in: header - name: X-Comfy-Admin-Secret - required: true - schema: - type: string - description: Admin API secret used to authorize this request - responses: - "200": - description: Stripe data deleted successfully - content: - application/json: - schema: - type: object - properties: - message: - type: string - description: Success message - "400": - description: Bad request - missing required parameter - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or missing admin API secret - "404": - description: Customer not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/customers/{customer_id}/archive-metronome-data: - post: - summary: Archive customer Metronome data - description: Archives metronome data. See https://docs.metronome.com/api-reference/customers/archive-a-customer - operationId: PostAdminArchiveMetronomeData - x-excluded: true - tags: - - Admin - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - description: The ID of the customer whose Metronome data to archive - - in: header - name: X-Comfy-Admin-Secret - required: true - schema: - type: string - description: Admin API secret used to authorize this request - responses: - "200": - description: Metronome data archived successfully - content: - application/json: - schema: - type: object - properties: - message: - type: string - description: Success message - "400": - description: Bad request - missing required parameter - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or missing admin API secret - "404": - description: Customer not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/usage: - post: - summary: Get customer's usage - description: Returns the customer's as a dashboard URL. - operationId: GetCustomerUsage - x-excluded: true - tags: - - API Nodes - requestBody: - required: false - content: - application/json: - schema: - type: object - properties: - dashboard_type: - type: string - description: The type of dashboard to retrieve - enum: - - invoices - - usage - - credits - - commits_and_credits - default: usage - color_overrides: - type: array - description: Optional list of colors to override for branding - items: - type: object - required: - - name - - value - properties: - name: - type: string - description: The color property to override - enum: - - Gray_dark - - Gray_medium - - Gray_light - - Gray_extralight - - White - - Primary_medium - - Primary_light - - UsageLine_0 - - UsageLine_1 - - UsageLine_2 - - UsageLine_3 - - UsageLine_4 - - UsageLine_5 - - UsageLine_6 - - UsageLine_7 - - UsageLine_8 - - UsageLine_9 - - Primary_green - - Primary_red - - Progress_bar - - Progress_bar_background - value: - type: string - description: Hex color code (e.g., "#FF5733") - pattern: "^#[0-9A-Fa-f]{6}$" - responses: - "200": - description: Successful response - content: - application/json: - schema: - type: object - properties: - url: - type: string - description: The dashboard URL for the customer's usage - "401": - description: Unauthorized or invalid token - "404": - description: Customer not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/balance: - get: - summary: Get customer's remaining balance - description: Returns the customer's current remaining balance in microamount and its currency, with separate breakdowns for prepaid commits and cloud credits. - operationId: GetCustomerBalance - x-excluded: true - tags: - - API Nodes - security: - - BearerAuth: [] - responses: - "200": - description: Customer balance retrieved successfully - content: - application/json: - schema: - type: object - properties: - amount_micros: - type: number - format: double - description: The total remaining balance in microamount (1/1,000,000 of the currency unit) - prepaid_balance_micros: - type: number - format: double - description: The remaining balance from prepaid commits in microamount - cloud_credit_balance_micros: - type: number - format: double - description: The remaining balance from cloud credits in microamount - pending_charges_micros: - type: number - format: double - description: The total amount of pending/unbilled charges from draft invoices in microamount. Only included when the show_negative_balances feature flag is enabled. - effective_balance_micros: - type: number - format: double - description: The effective balance (total balance minus pending charges). Can be negative if pending charges exceed the balance. Only included when the show_negative_balances feature flag is enabled. - currency: - type: string - description: The currency code (e.g., "usd") - required: - - amount_micros - - currency - "401": - description: Unauthorized or invalid token - "404": - description: Customer not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /customers/{customer_id}/balance: - get: - summary: Get customer's remaining balance by ID - description: Returns the specified customer's current remaining balance in microamount and its currency, with separate breakdowns for prepaid commits and cloud credits. - operationId: GetCustomerBalanceById - x-excluded: true - tags: - - API Nodes - - Admin - security: - - BearerAuth: [] - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - description: The ID of the customer whose balance to retrieve - responses: - "200": - description: Customer balance retrieved successfully - content: - application/json: - schema: - type: object - properties: - amount_micros: - type: number - format: double - description: The total remaining balance in microamount (1/1,000,000 of the currency unit) - prepaid_balance_micros: - type: number - format: double - description: The remaining balance from prepaid commits in microamount - cloud_credit_balance_micros: - type: number - format: double - description: The remaining balance from cloud credits in microamount - pending_charges_micros: - type: number - format: double - description: The total amount of pending/unbilled charges from draft invoices in microamount. Only included when the show_negative_balances feature flag is enabled. - effective_balance_micros: - type: number - format: double - description: The effective balance (total balance minus pending charges). Can be negative if pending charges exceed the balance. Only included when the show_negative_balances feature flag is enabled. - currency: - type: string - description: The currency code (e.g., "usd") - required: - - amount_micros - - currency - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or invalid token - "404": - description: Customer not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/{customer_id}/usage: - post: - summary: Track usage for a customer (Admin only) - description: Manually track usage for a customer in Metronome. This endpoint is for admin use to record usage events. - operationId: TrackCustomerUsage - x-excluded: true - tags: - - API Nodes - - Admin - security: - - BearerAuth: [] - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - description: The ID of the customer to track usage for - - in: header - name: X-Comfy-Admin-Secret - required: true - schema: - type: string - description: Admin API secret used to authorize this request - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - transaction_id: - type: string - format: uuid - description: Unique transaction ID for this usage event - timestamp: - type: string - format: date-time - description: Timestamp of the usage event (RFC3339 format) - params: - type: object - additionalProperties: true - description: Custom parameters for the usage event - required: - - transaction_id - - params - responses: - "200": - description: Usage tracked successfully - content: - application/json: - schema: - type: object - properties: - message: - type: string - description: Success message - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized or invalid token - "404": - description: Customer not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/storage: - post: - summary: Store a resource for a customer - description: Store a resource for a customer. Resource will have a 24 hour expiry. The signed URL will be generated for the specified file path. - operationId: createCustomerStorageResource - x-excluded: true - tags: - - API Nodes - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - file_name: - type: string - description: The desired name of the file (e.g., 'profile.jpg') - content_type: - type: string - description: The content type of the file (e.g., 'image/png') - file_hash: - type: string - description: The hash of the file. If provided, an existing file with the same hash may be returned. - required: - - file_name - responses: - "200": - description: Signed URL generated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/CustomerStorageResourceResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/{customer_id}/events: - get: - summary: Get events related to customer - operationId: GetCustomerEventsById - x-excluded: true - tags: - - API Nodes - security: - - BearerAuth: [] - parameters: - - in: path - name: customer_id - required: true - schema: - type: string - - in: query - name: page - description: Page number of the nodes list - required: false - schema: - type: integer - default: 1 - - in: query - name: limit - description: Number of nodes to return per page - required: false - schema: - type: integer - default: 10 - - in: query - name: filter - description: Event type to filter - required: false - schema: - type: string - - in: query - name: start_date - description: Start date for filtering events (RFC3339 format, e.g., 2025-01-01T00:00:00Z) - required: false - schema: - type: string - format: date-time - - in: query - name: end_date - description: End date for filtering events (RFC3339 format, e.g., 2025-01-31T23:59:59Z) - required: false - schema: - type: string - format: date-time - responses: - "200": - description: A paginated list of nodes - content: - application/json: - schema: - type: object - properties: - total: - type: integer - description: Total number of events available - events: - type: array - items: - $ref: "#/components/schemas/AuditLog" - page: - type: integer - description: Current page number - limit: - type: integer - description: Maximum number of nodes per page - totalPages: - type: integer - description: Total number of pages available - "400": - description: Invalid input, object invalid - "404": - description: Not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /customers/events: - get: - summary: Get events related to customer - operationId: GetCustomerEvents - x-excluded: true - tags: - - API Nodes - security: - - BearerAuth: [] - parameters: - - in: query - name: page - description: Page number of the nodes list - required: false - schema: - type: integer - default: 1 - - in: query - name: limit - description: Number of nodes to return per page - required: false - schema: - type: integer - default: 10 - - in: query - name: filter - description: Event type to filter - required: false - schema: - type: string - - in: query - name: start_date - description: Start date for filtering events (RFC3339 format, e.g., 2025-01-01T00:00:00Z) - required: false - schema: - type: string - format: date-time - - in: query - name: end_date - description: End date for filtering events (RFC3339 format, e.g., 2025-01-31T23:59:59Z) - required: false - schema: - type: string - format: date-time - responses: - "200": - description: A paginated list of nodes - content: - application/json: - schema: - type: object - properties: - total: - type: integer - description: Total number of events available - events: - type: array - items: - $ref: "#/components/schemas/AuditLog" - page: - type: integer - description: Current page number - limit: - type: integer - description: Maximum number of nodes per page - totalPages: - type: integer - description: Total number of pages available - "400": - description: Invalid input, object invalid - "404": - description: Not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /upload-artifact: - post: - summary: Receive artifacts (output files) from the ComfyUI GitHub Action - description: Receive artifacts (output files) from the ComfyUI GitHub Action - x-excluded: true - tags: - - ComfyUI CI - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - repo: - type: string - description: Repository name - job_id: - type: string - description: Unique identifier for the job - run_id: - type: string - description: Unique identifier for the run - os: - type: string - description: Operating system used in the run - cuda_version: - type: string - description: Cuda version. - bucket_name: - type: string - description: The name of the bucket where the output files are stored - output_files_gcs_paths: - type: string - description: A comma separated string that contains GCS path(s) to output files. eg. gs://bucket-name/output, gs://bucket-name/output2 - comfy_logs_gcs_path: - type: string - description: The path to ComfyUI logs. eg. gs://bucket-name/logs - comfy_run_flags: - type: string - description: The flags used in the comfy run - commit_hash: - type: string - commit_time: - type: string - description: The time of the commit in the format of "YYYY-MM-DDTHH:MM:SSZ" (2016-10-10T00:00:00Z) - commit_message: - type: string - description: The commit message - workflow_name: - type: string - description: The name of the workflow - branch_name: - type: string - start_time: - type: integer - format: int64 - description: The start time of the job as a Unix timestamp. - end_time: - type: integer - format: int64 - description: The end time of the job as a Unix timestamp. - avg_vram: - type: integer - description: The average amount of VRAM used in the run. - peak_vram: - type: integer - description: The peak amount of VRAM used in the run. - pr_number: - type: string - description: The pull request number - author: - type: string - description: The author of the commit - job_trigger_user: - type: string - description: The user who triggered the job - python_version: - type: string - description: The python version used in the run - pytorch_version: - type: string - description: The pytorch version used in the run - machine_stats: - $ref: "#/components/schemas/MachineStats" - status: - $ref: "#/components/schemas/WorkflowRunStatus" - required: - - repo - - job_id - - run_id - - os - - commit_hash - - commit_time - - commit_message - - branch_name - - workflow_name - - start_time - - end_time - - pr_number - - python_version - - job_trigger_user - - author - - status - - responses: - "200": - description: Successfully received the artifact details - content: - application/json: - schema: - type: object - properties: - message: - type: string - "400": - description: Invalid request - "500": - description: Internal server error - /gitcommit: - get: - summary: Retrieve CI data for a given commit - description: Returns all runs, jobs, job results, and storage files associated with a given commit. - x-excluded: true - tags: - - ComfyUI CI - parameters: - - in: query - name: commitId - required: false - schema: - type: string - description: The ID of the commit to fetch data for. - - in: query - name: operatingSystem - required: false - schema: - type: string - description: The operating system to filter the CI data by. - - in: query - name: workflowName - required: false - schema: - type: string - description: The name of the workflow to filter the CI data by. - - in: query - name: branch - required: false - schema: - type: string - description: The branch of the gitcommit to filter the CI data by. - - in: query - name: page - required: false - schema: - type: integer - default: 1 - description: The page number to retrieve. - - in: query - name: pageSize - required: false - schema: - type: integer - default: 10 - description: The number of items to include per page. - - in: query - name: repoName - required: false - schema: - type: string - default: comfyanonymous/ComfyUI - description: The repo to filter by. - responses: - "200": - description: An object containing runs, jobs, job results, and storage files - content: - application/json: - schema: - type: object - properties: - jobResults: - type: array - items: - $ref: "#/components/schemas/ActionJobResult" - totalNumberOfPages: - type: integer - "404": - description: Commit not found - "500": - description: Internal server error - /gitcommitsummary: - get: - summary: Retrieve a summary of git commits - description: Returns a summary of git commits, including status, start time, and end time. - x-excluded: true - tags: - - ComfyUI CI - parameters: - - in: query - name: repoName - required: false - schema: - type: string - default: comfyanonymous/ComfyUI - description: The repository name to filter the git commits by. - - in: query - name: branchName - required: false - schema: - type: string - description: The branch name to filter the git commits by. - - in: query - name: page - required: false - schema: - type: integer - default: 1 - description: The page number to retrieve. - - in: query - name: pageSize - required: false - schema: - type: integer - default: 10 - description: The number of items to include per page. - responses: - "200": - description: Successfully retrieved git commit summaries - content: - application/json: - schema: - type: object - properties: - commitSummaries: - type: array - items: - $ref: "#/components/schemas/GitCommitSummary" - totalNumberOfPages: - type: integer - "500": - description: Internal server error - content: - application/json: - schema: - type: object - properties: - message: - type: string - /workflowresult/{workflowResultId}: - get: - summary: Retrieve a specific commit by ID - operationId: getWorkflowResult - x-excluded: true - tags: - - ComfyUI CI - parameters: - - in: path - name: workflowResultId - required: true - schema: - type: string - responses: - "200": - description: Commit details - content: - application/json: - schema: - $ref: "#/components/schemas/ActionJobResult" - "404": - description: Commit not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /branch: - get: - summary: Retrieve all distinct branches for a given repo - description: Returns all branches for a given repo. - x-excluded: true - tags: - - ComfyUI CI - parameters: - - in: query - name: repo_name - required: true - schema: - type: string - default: comfyanonymous/ComfyUI - description: The repo to filter by. - responses: - "200": - description: An array of branches - content: - application/json: - schema: - type: object - properties: - branches: - type: array - items: - type: string - "404": - description: Repo not found - "500": - description: Internal server error - /users/publishers/: - get: - summary: Retrieve all publishers for a given user - operationId: listPublishersForUser - tags: - - Registry - responses: - "200": - description: A list of publishers - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Publisher" - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/permissions: - get: - summary: Retrieve permissions the user has for a given publisher - operationId: getPermissionOnPublisher - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - responses: - "200": - description: A list of permissions - content: - application/json: - schema: - type: object - properties: - canEdit: - type: boolean - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /publishers/validate: - get: - summary: Validate if a publisher username is available - description: Checks if the publisher username is already taken. - operationId: validatePublisher - tags: - - Registry - parameters: - - in: query - name: username - schema: - type: string - description: The publisher username to validate. - required: true - responses: - "200": - description: Username validation result - content: - application/json: - schema: - type: object - properties: - isAvailable: - type: boolean - description: True if the username is available, false otherwise. - "400": - description: Invalid input, such as missing username in the query. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers: - post: - summary: Create a new publisher - operationId: createPublisher - security: - - BearerAuth: [] - tags: - - Registry - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Publisher" - responses: - "201": - description: Publisher created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Publisher" - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - get: - summary: Retrieve all publishers - operationId: listPublishers - tags: - - Registry - responses: - "200": - description: A list of publishers - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Publisher" - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}: - get: - summary: Retrieve a publisher by ID - operationId: getPublisher - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - responses: - "200": - description: Publisher retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Publisher" - "404": - description: Publisher not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - put: - summary: Update a publisher - operationId: updatePublisher - security: - - BearerAuth: [] - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Publisher" - responses: - "200": - description: Publisher updated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Publisher" - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "404": - description: Publisher not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - delete: - summary: Delete a publisher - operationId: deletePublisher - security: - - BearerAuth: [] - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - responses: - "204": - description: Publisher deleted successfully - "404": - description: Publisher not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/ban: - post: - summary: Ban a publisher - operationId: BanPublisher - tags: - - Registry - x-excluded: true - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - responses: - "204": - description: Publisher Banned Successfully - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Publisher not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes/{nodeId}/claim-my-node: - post: - summary: Claim nodeId into publisherId for the authenticated publisher - description: | - This endpoint allows a publisher to claim an unclaimed node that they own the repo, which is identified by the nodeId. The unclaimed node's repository must be owned by the authenticated user. - operationId: claimMyNode - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ClaimMyNodeRequest" - responses: - "204": - description: Node claimed successfully - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: | - Forbidden - various authorization and permission issues - Includes: - - The authenticated user does not have permission to claim the node - - The node is already claimed by another publisher - - The GH_TOKEN is invalid - - The repository is not owned by the authenticated GitHub user - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "429": - description: Too many requests - GitHub API rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "503": - description: Service unavailable - GitHub API is currently unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes/v2: - get: - summary: Retrieve all nodes - operationId: listNodesForPublisherV2 - security: - - BearerAuth: [] - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: query - name: include_banned - description: Number of nodes to return per page - required: false - schema: - type: boolean - - in: query - name: page - description: Page number of the nodes list - required: false - schema: - type: integer - default: 1 - - in: query - name: limit - description: Number of nodes to return per page - required: false - schema: - type: integer - default: 10 - responses: - "200": - description: List of all nodes - content: - application/json: - schema: - type: object - properties: - total: - type: integer - description: Total number of nodes available - nodes: - type: array - items: - $ref: "#/components/schemas/Node" - page: - type: integer - description: Current page number - limit: - type: integer - description: Maximum number of nodes per page - totalPages: - type: integer - description: Total number of pages available - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes: - post: - summary: Create a new custom node - operationId: createNode - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - responses: - "201": - description: Node created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - get: - summary: Retrieve all nodes - operationId: listNodesForPublisher - security: - - BearerAuth: [] - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: query - name: include_banned - description: Number of nodes to return per page - required: false - schema: - type: boolean - responses: - "200": - description: List of all nodes - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Node" - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes/{nodeId}: - put: - summary: Update a specific node - operationId: updateNode - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - responses: - "200": - description: Node updated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Node not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - delete: - summary: Delete a specific node - operationId: deleteNode - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - responses: - "204": - description: Node deleted successfully - "404": - description: Node not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes/{nodeId}/permissions: - get: - summary: Retrieve permissions the user has for a given publisher - operationId: getPermissionOnPublisherNodes - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - responses: - "200": - description: A list of permissions - content: - application/json: - schema: - type: object - properties: - canEdit: - type: boolean - "400": - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes/{nodeId}/versions: - post: - summary: Publish a new version of a node - operationId: publishNodeVersion - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - personal_access_token: - type: string - node_version: - $ref: "#/components/schemas/NodeVersion" - node: - $ref: "#/components/schemas/Node" - required: - - node - - node_version - - personal_access_token - responses: - "201": - description: New version published successfully - content: - application/json: - schema: - type: object - properties: - signedUrl: - type: string - description: The signed URL to upload the node version token. - node_version: - $ref: "#/components/schemas/NodeVersion" - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes/{nodeId}/versions/{versionId}: - delete: - summary: Unpublish (delete) a specific version of a node - operationId: deleteNodeVersion - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - - in: path - name: versionId - required: true - schema: - type: string - responses: - "204": - description: Version unpublished (deleted) successfully - "403": - description: Version does not belong to the publisher - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Version not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "500": - description: Version not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - put: - summary: Update changelog and deprecation status of a node version - operationId: updateNodeVersion - description: Update only the changelog and deprecated status of a specific version of a node. - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - - in: path - name: versionId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/NodeVersionUpdateRequest" - responses: - "200": - description: Version updated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/NodeVersion" - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Version not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/nodes/{nodeId}/ban: - post: - summary: Ban a publisher's Node - operationId: BanPublisherNode - tags: - - Registry - x-excluded: true - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: nodeId - required: true - schema: - type: string - responses: - "204": - description: Node Banned Successfully - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Publisher or Node not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/tokens: - post: - summary: Create a new personal access token - operationId: createPersonalAccessToken - security: - - BearerAuth: [] - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/PersonalAccessToken" - responses: - "201": - description: Token created successfully - content: - application/json: - schema: - type: object - properties: - token: - type: string - description: The newly created personal access token. - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - get: - summary: Retrieve all personal access tokens for a publisher - operationId: listPersonalAccessTokens - security: - - BearerAuth: [] - tags: - - Registry - x-excluded: true - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - responses: - "200": - description: List of all personal access tokens - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/PersonalAccessToken" - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: No tokens found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /publishers/{publisherId}/tokens/{tokenId}: - delete: - summary: Delete a specific personal access token - operationId: deletePersonalAccessToken - security: - - BearerAuth: [] - tags: - - Registry - parameters: - - in: path - name: publisherId - required: true - schema: - type: string - - in: path - name: tokenId - required: true - schema: - type: string - responses: - "204": - description: Token deleted successfully - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Token not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /nodes/search: - get: - summary: Retrieves a list of nodes - description: Returns a paginated list of nodes across all publishers. - operationId: searchNodes - tags: - - Registry - parameters: - - in: query - name: page - description: Page number of the nodes list - required: false - schema: - type: integer - default: 1 - - in: query - name: limit - description: Number of nodes to return per page - required: false - schema: - type: integer - default: 10 - - in: query - name: search - description: Keyword to search the nodes - required: false - schema: - type: string - - in: query - name: repository_url_search - description: Keyword to search the nodes by repository URL - required: false - schema: - type: string - - in: query - name: comfy_node_search - description: Keyword to search the nodes by comfy node name - required: false - schema: - type: string - - in: query - name: supported_os - description: Filter nodes by supported operating systems - required: false - schema: - type: string - examples: - osIndependent: - value: "OS Independent" - windows: - value: "Microsoft :: Windows" - windows10: - value: "Microsoft :: Windows :: Windows 10" - linux: - value: "POSIX :: Linux" - ubuntu: - value: "POSIX :: Linux :: Ubuntu" - macos: - value: "MacOS" - macosx: - value: "MacOS :: MacOS X" - - in: query - name: supported_accelerator - description: Filter nodes by supported accelerator - required: false - schema: - type: string - - in: query - name: include_banned - description: Number of nodes to return per page - required: false - schema: - type: boolean - responses: - "200": - description: A paginated list of nodes - content: - application/json: - schema: - type: object - properties: - total: - type: integer - description: Total number of nodes available - nodes: - type: array - items: - $ref: "#/components/schemas/Node" - page: - type: integer - description: Current page number - limit: - type: integer - description: Maximum number of nodes per page - totalPages: - type: integer - description: Total number of pages available - "400": - description: Invalid input, object invalid - "404": - description: Not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /nodes/reindex: - post: - summary: Reindex all nodes for searching. - operationId: reindexNodes - tags: - - Registry - x-excluded: true - parameters: - - in: query - name: max_batch - description: Maximum number of nodes to send to algolia at a time - required: false - schema: - type: integer - responses: - "200": - description: Reindex completed successfully. - "400": - description: Bad request. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /nodes/update-github-stars: - post: - summary: Update GitHub stars for nodes - operationId: updateGithubStars - tags: - - Registry - x-excluded: true - parameters: - - in: query - name: max_batch - schema: - type: integer - default: 100 - description: Maximum number of nodes to update in one batch - responses: - "200": - description: Update GithubStars request triggered successfully - "400": - description: Bad request. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /nodes: - get: - summary: Retrieves a list of nodes - description: Returns a paginated list of nodes across all publishers. - operationId: listAllNodes - tags: - - Registry - parameters: - - in: query - name: page - description: Page number of the nodes list - required: false - schema: - type: integer - default: 1 - - in: query - name: limit - description: Number of nodes to return per page - required: false - schema: - type: integer - default: 10 - - in: query - name: supported_os - description: Filter nodes by supported operating systems - required: false - schema: - type: string - examples: - osIndependent: - value: "OS Independent" - windows: - value: "Microsoft :: Windows" - windows10: - value: "Microsoft :: Windows :: Windows 10" - linux: - value: "POSIX :: Linux" - ubuntu: - value: "POSIX :: Linux :: Ubuntu" - macos: - value: "MacOS" - macosx: - value: "MacOS :: MacOS X" - - in: query - name: supported_accelerator - description: Filter nodes by supported accelerator - required: false - schema: - type: string - - in: query - name: include_banned - description: Number of nodes to return per page - required: false - schema: - type: boolean - - in: query - name: timestamp - description: Retrieve nodes created or updated after this timestamp (ISO 8601 format) - required: false - schema: - type: string - format: date-time - - in: query - name: latest - description: Whether to fetch fresh result from database or use cached one if false - required: false - schema: - type: boolean - - in: query - name: sort - description: Database column to use as ascending ordering. Add `;desc` as suffix on each column for descending sort - required: false - schema: - type: array - items: - type: string - - in: query - name: node_id - description: node_id to use as filter - required: false - schema: - type: array - items: - type: string - - in: query - name: comfyui_version - description: Comfy UI version - required: false - schema: - type: string - - in: query - name: form_factor - description: The platform requesting the nodes - required: false - schema: - type: string - responses: - "200": - description: A paginated list of nodes - content: - application/json: - schema: - type: object - properties: - total: - type: integer - description: Total number of nodes available - nodes: - type: array - items: - $ref: "#/components/schemas/Node" - page: - type: integer - description: Current page number - limit: - type: integer - description: Maximum number of nodes per page - totalPages: - type: integer - description: Total number of pages available - "400": - description: Invalid input, object invalid - "404": - description: Not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /comfy-nodes/{comfyNodeName}/node: - get: - summary: Retrieve a node by ComfyUI node name - description: Returns the node that contains a ComfyUI node with the specified name - operationId: getNodeByComfyNodeName - tags: - - Registry - parameters: - - in: path - name: comfyNodeName - required: true - description: The name of the ComfyUI node - schema: - type: string - responses: - "200": - description: Node details - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - "404": - description: No node found containing the specified ComfyUI node name - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /nodes/{nodeId}: - get: - summary: Retrieve a specific node by ID - description: Returns the details of a specific node. - operationId: getNode - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: query - name: include_translations - description: Whether to include the translation or not - schema: - type: boolean - responses: - "200": - description: Node details - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - "302": - description: Redirect to node with normalized name match - headers: - Location: - description: URL of the node with the correct ID - schema: - type: string - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Node not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /nodes/{nodeId}/reviews: - post: - summary: Add review to a specific version of a node - operationId: postNodeReview - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: query - name: star - description: number of star given to the node version - required: true - schema: - type: integer - responses: - "200": - description: Detailed information about a specific node - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - "400": - description: Bad Request - "404": - description: Node version not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /nodes/{nodeId}/install: - get: - summary: Returns a node version to be installed. - description: Retrieves the node data for installation, either the latest or a specific version. - operationId: installNode - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - description: The unique identifier of the node. - schema: - type: string - - in: query - name: version - required: false - description: Specific version of the node to retrieve. If omitted, the latest version is returned. - schema: - type: string - pattern: '^\d+\.\d+\.\d+$' - responses: - "200": - description: Node data returned successfully. - content: - application/json: - schema: - $ref: "#/components/schemas/NodeVersion" - "400": - description: Invalid input, such as a bad version format. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Node not found. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /nodes/{nodeId}/translations: - post: - summary: Create Node Translations - operationId: CreateNodeTranslations - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - description: The unique identifier of the node. - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - data: - type: object - additionalProperties: - type: object - additionalProperties: true - responses: - "201": - description: Detailed information about a specific node - "400": - description: Bad Request - "404": - description: Node version not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /nodes/{nodeId}/versions: - get: - summary: List all versions of a node - operationId: listNodeVersions - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: query - name: statuses - required: false - schema: - type: array - items: - $ref: "#/components/schemas/NodeVersionStatus" - # parameter to include status_reason, default to false - - in: query - name: include_status_reason - required: false - schema: - type: boolean - default: false - responses: - "200": - description: List of all node versions - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/NodeVersion" - "403": - description: Node banned - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Node not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /nodes/{nodeId}/versions/{versionId}: - get: - summary: Retrieve a specific version of a node - operationId: getNodeVersion - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: path - name: versionId - description: The version of the node. (Not a UUID). - required: true - schema: - type: string - responses: - "200": - description: Detailed information about a specific node version - content: - application/json: - schema: - $ref: "#/components/schemas/NodeVersion" - "404": - description: Node version not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /bulk/nodes/versions: - post: - summary: Retrieve multiple node versions in a single request - operationId: getBulkNodeVersions - tags: - - Registry - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BulkNodeVersionsRequest" - responses: - "200": - description: Successfully retrieved node versions - content: - application/json: - schema: - $ref: "#/components/schemas/BulkNodeVersionsResponse" - "400": - description: Bad request, invalid input - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /versions: - get: - summary: List all node versions given some filters. - operationId: listAllNodeVersions - tags: - - Registry - parameters: - - in: query - name: nodeId - required: false - schema: - type: string - - in: query - name: statuses - required: false - style: form - explode: true - schema: - type: array - items: - $ref: "#/components/schemas/NodeVersionStatus" - # parameter to include status_reason, default to false - - in: query - name: include_status_reason - required: false - schema: - type: boolean - default: false - - in: query - name: page - required: false - schema: - type: integer - default: 1 - description: The page number to retrieve. - - in: query - name: pageSize - required: false - schema: - type: integer - default: 10 - description: The number of items to include per page. - - in: query - name: status_reason - required: false - schema: - type: string - description: search for status_reason, case insensitive - responses: - "200": - description: List of all node versions - content: - application/json: - schema: - type: object - properties: - total: - type: integer - description: Total number of node versions available - versions: - type: array - items: - $ref: "#/components/schemas/NodeVersion" - page: - type: integer - description: Current page number - pageSize: - type: integer - description: Maximum number of node versions per page. Maximum is 100. - totalPages: - type: integer - description: Total number of pages available - "400": - description: Invalid input, object invalid - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "403": - description: Node banned - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/nodes: - post: - summary: Create a new custom node using admin priviledge - operationId: adminCreateNode - x-excluded: true - tags: - - Registry - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - responses: - "201": - description: Node created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "409": - description: Duplicate error. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/nodes/{nodeId}: - put: - summary: Admin Update Node - operationId: adminUpdateNode - description: Only admins can update a node with admin privileges. - x-excluded: true - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - responses: - "200": - description: Node updated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/Node" - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Node not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /admin/nodes/{nodeId}/versions/{versionNumber}: - put: - summary: Admin Update Node Version Status - operationId: adminUpdateNodeVersion - description: Only admins can approve a node version. - x-excluded: true - tags: - - Registry - security: - - BearerAuth: [] - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: path - name: versionNumber - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - status: - $ref: "#/components/schemas/NodeVersionStatus" - status_reason: - type: string - description: The reason for the status change. - supported_comfyui_frontend_version: - type: string - description: Supported versions of ComfyUI frontend - supported_comfyui_version: - type: string - description: Supported versions of ComfyUI - supported_os: - type: array - items: - type: string - description: List of operating systems that this node supports - supported_accelerators: - type: array - items: - type: string - description: List of accelerators (e.g. CUDA, DirectML, ROCm) that this node supports - - responses: - "200": - description: Version updated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/NodeVersion" - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Version not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/admin/coupons: - get: - summary: List all coupons - operationId: listCoupons - description: Retrieves a list of all coupons from Stripe. Only admins can list coupons. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: limit - in: query - required: false - schema: - type: integer - minimum: 1 - maximum: 100 - default: 10 - description: Number of coupons to return - responses: - "200": - description: List of coupons retrieved successfully - content: - application/json: - schema: - type: object - properties: - coupons: - type: array - items: - $ref: "#/components/schemas/CouponResponse" - has_more: - type: boolean - description: Whether there are more results available - required: - - coupons - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - post: - summary: Create a new Stripe coupon - operationId: createCoupon - description: Creates a new coupon in Stripe. Only admins can create coupons. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/CreateCouponRequest" - responses: - "201": - description: Coupon created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/CouponResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/admin/coupons/{coupon_id}: - get: - summary: Get a specific coupon - operationId: getCoupon - description: Retrieves details of a specific coupon from Stripe. Only admins can view coupons. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: coupon_id - in: path - required: true - schema: - type: string - description: The Stripe coupon ID - responses: - "200": - description: Coupon retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/CouponResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Coupon not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - patch: - summary: Update a coupon - operationId: updateCoupon - description: Updates a coupon in Stripe. Only admins can update coupons. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: coupon_id - in: path - required: true - schema: - type: string - description: The Stripe coupon ID - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/UpdateCouponRequest" - responses: - "200": - description: Coupon updated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/CouponResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Coupon not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - delete: - summary: Delete a coupon - operationId: deleteCoupon - description: Deletes a coupon in Stripe. Only admins can delete coupons. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: coupon_id - in: path - required: true - schema: - type: string - description: The Stripe coupon ID - responses: - "200": - description: Coupon deleted successfully - content: - application/json: - schema: - type: object - properties: - message: - type: string - description: Success message - coupon_id: - type: string - description: The deleted coupon ID - required: - - message - - coupon_id - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Coupon not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/admin/promo-codes: - get: - summary: List all promotional codes - operationId: listPromoCodes - description: Retrieves a list of all promotional codes from Stripe. Only admins can list promo codes. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: active - in: query - required: false - schema: - type: boolean - description: Filter by active status - - name: limit - in: query - required: false - schema: - type: integer - minimum: 1 - maximum: 100 - default: 10 - description: Number of promo codes to return - responses: - "200": - description: List of promo codes retrieved successfully - content: - application/json: - schema: - type: object - properties: - promo_codes: - type: array - items: - $ref: "#/components/schemas/PromoCodeResponse" - has_more: - type: boolean - description: Whether there are more results available - required: - - promo_codes - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - post: - summary: Generate a new Stripe promotional code - operationId: createPromoCode - description: Creates a new unique promotional code in Stripe for the specified coupon. Only admins can generate promo codes. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/CreatePromoCodeRequest" - responses: - "201": - description: Promo code created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/PromoCodeResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /customers/admin/promo-codes/{promo_code_id}: - get: - summary: Get a specific promotional code - operationId: getPromoCode - description: Retrieves details of a specific promotional code from Stripe. Only admins can view promo codes. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: promo_code_id - in: path - required: true - schema: - type: string - description: The Stripe promotion code ID - responses: - "200": - description: Promo code retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/PromoCodeResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Promo code not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - patch: - summary: Update a promotional code - operationId: updatePromoCode - description: Updates a promotional code in Stripe. Only admins can update promo codes. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: promo_code_id - in: path - required: true - schema: - type: string - description: The Stripe promotion code ID - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/UpdatePromoCodeRequest" - responses: - "200": - description: Promo code updated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/PromoCodeResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Promo code not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - delete: - summary: Deactivate a promotional code - operationId: deletePromoCode - description: Deactivates a promotional code in Stripe. Only admins can deactivate promo codes. - x-excluded: true - tags: - - Admin - - API Nodes - security: - - BearerAuth: [] - parameters: - - name: promo_code_id - in: path - required: true - schema: - type: string - description: The Stripe promotion code ID - responses: - "200": - description: Promo code deactivated successfully - content: - application/json: - schema: - type: object - properties: - message: - type: string - description: Success message - promo_code_id: - type: string - description: The deactivated promo code ID - required: - - message - - promo_code_id - "401": - description: Unauthorized - "403": - description: Forbidden - Admin access required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Promo code not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - - /releases: - post: - summary: Process Github release webhook - operationId: processReleaseWebhook - description: Webhook endpoint to process Github release events and generate release notes - tags: - - Releases - x-excluded: true - parameters: - - name: X-GitHub-Event - in: header - required: true - schema: - type: string - enum: [release] - description: The name of the event that triggered the delivery - - name: X-GitHub-Delivery - in: header - required: true - schema: - type: string - format: uuid - description: A globally unique identifier (GUID) to identify the event - - name: X-GitHub-Hook-ID - in: header - required: true - schema: - type: string - description: The unique identifier of the webhook - - name: X-Hub-Signature-256 - in: header - required: false - schema: - type: string - description: HMAC hex digest of the request body using SHA-256 hash function - - name: X-GitHub-Hook-Installation-Target-Type - in: header - required: false - schema: - type: string - description: The type of resource where the webhook was created - - name: X-GitHub-Hook-Installation-Target-ID - in: header - required: false - schema: - type: string - description: The unique identifier of the resource where the webhook was created - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/GithubReleaseWebhook" - responses: - "200": - description: Webhook processed successfully - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "422": - description: Validation failed or endpoint has been spammed - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - get: - summary: Get release notes - operationId: getReleaseNotes - description: Fetch release notes from Strapi with caching - tags: - - Releases - parameters: - - in: query - name: project - required: true - schema: - type: string - enum: [comfyui, comfyui_frontend, desktop, cloud] - description: The project to get release notes for - - in: query - name: current_version - required: false - schema: - type: string - description: The current version to filter release notes - - in: query - name: locale - required: false - schema: - type: string - enum: [en, es, fr, ja, ko, ru, zh] - default: en - description: The locale for the release notes - - in: query - name: form_factor - description: The platform requesting the release notes - required: false - schema: - type: string - responses: - "200": - description: Release notes retrieved successfully - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ReleaseNote" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /security-scan: - get: - summary: Security Scan - operationId: securityScan - description: Pull all pending node versions and conduct security scans. - tags: - - Registry - x-excluded: true - parameters: - - in: query - name: minAge - required: false - schema: - type: string - x-go-type: time.Duration - - in: query - name: minSecurityScanAge - required: false - schema: - type: string - x-go-type: time.Duration - - in: query - name: maxNodes - required: false - schema: - type: integer - responses: - "200": - description: Scan completed successfully - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /nodes/{nodeId}/versions/{version}/comfy-nodes: - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: path - name: version - required: true - schema: - type: string - post: - summary: create comfy-nodes for certain node - operationId: CreateComfyNodes - tags: - - Registry - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - success: - type: boolean - status: - type: string - reason: - type: string - cloud_build_info: - $ref: "#/components/schemas/ComfyNodeCloudBuildInfo" - nodes: - additionalProperties: - $ref: "#/components/schemas/ComfyNode" - responses: - "204": - description: Comy Nodes created successfully - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Version not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "409": - description: Existing Comfy Nodes exists - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - get: - summary: list comfy-nodes for node version - operationId: ListComfyNodes - tags: - - Registry - parameters: - - in: query - name: page - required: false - schema: - type: integer - default: 1 - description: The page number to retrieve. - - in: query - name: limit - required: false - schema: - type: integer - default: 10 - description: The number of items to include per page. - responses: - "200": - description: Comy Nodes obtained successfully - content: - application/json: - schema: - type: object - properties: - comfy_nodes: - type: array - items: - $ref: "#/components/schemas/ComfyNode" - totalNumberOfPages: - type: integer - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Version not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /nodes/{nodeId}/versions/{version}/comfy-nodes/{comfyNodeName}: - get: - summary: get specify comfy-node based on its id - operationId: GetComfyNode - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: path - name: version - required: true - schema: - type: string - - in: path - name: comfyNodeName - required: true - schema: - type: string - responses: - "200": - description: Comy Nodes created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/ComfyNode" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Version not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - put: - summary: Update a specific comfy-node - operationId: UpdateComfyNode - tags: - - Registry - parameters: - - in: path - name: nodeId - required: true - schema: - type: string - - in: path - name: version - required: true - schema: - type: string - - in: path - name: comfyNodeName - required: true - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/ComfyNodeUpdateRequest' - responses: - '200': - description: Comfy Node updated successfully - content: - application/json: - schema: - $ref: '#/components/schemas/ComfyNode' - '400': - description: Bad request, invalid input data - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '401': - description: Unauthorized - '403': - description: Forbidden - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '404': - description: ComfyNode not found - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - /comfy-nodes: - get: - summary: list all comfy-nodes - operationId: ListAllComfyNodes - tags: - - Registry - parameters: - - in: query - name: pageSize - required: false - schema: - type: integer - default: 100 - - in: query - name: page - required: false - description: Page number (1-based indexing) - schema: - type: integer - default: 1 - - in: query - name: node_id - required: false - description: Filter by node ID - schema: - type: string - - in: query - name: node_version - required: false - description: Filter by node version - schema: - type: string - - in: query - name: comfy_node_name - required: false - description: Filter by ComfyUI node name - schema: - type: string - responses: - '200': - description: OK - content: - application/json: - schema: - type: object - properties: - comfy_nodes: - type: array - items: - $ref: '#/components/schemas/ComfyNode' - total: - type: integer - description: Total number of comfy nodes - '400': - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '401': - description: Unauthorized - '403': - description: Forbidden - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '500': - description: Internal server error - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - /comfy-nodes/backfill: - post: - summary: trigger comfy nodes backfill - operationId: ComfyNodesBackfill - tags: - - Registry - x-excluded: true - parameters: - - in: query - name: max_node - required: false - schema: - type: integer - default: 10 - responses: - "204": - description: Backfill triggered - "400": - description: Bad request, invalid input data. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "403": - description: Forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/dummy: - post: - summary: Dummy proxy - description: Dummy proxy endpoint that returns a simple string - operationId: dummyProxy - x-excluded: true - tags: - - API Nodes - requestBody: - content: - application/json: - schema: - type: object - properties: - message: - type: string - responses: - "200": - description: Reindex completed successfully. - /proxy/minimax/video_generation: - post: - summary: Proxy request to Minimax for video generation - description: Forwards video generation requests to Minimax's API and returns the task ID for asynchronous processing. - operationId: minimaxVideoGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MinimaxVideoGenerationRequest" - - responses: - "200": - description: Successful response from Minimax proxy - content: - application/json: - schema: - $ref: "#/components/schemas/MinimaxVideoGenerationResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or Minimax) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with Minimax) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (Minimax took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/minimax/query/video_generation: - get: - summary: Query status of a Minimax video generation task - description: Proxies a request to Minimax to check the status of a video generation task - operationId: getMinimaxVideoGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: query - description: The task ID to be queried - required: true - schema: - type: string - responses: - "200": - description: Successful response with task status - content: - application/json: - schema: - $ref: "#/components/schemas/MinimaxTaskResultResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or Minimax) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with Minimax) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (Minimax took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/minimax/files/retrieve: - post: - summary: Retrieve download URL for a Minimax file - description: Proxies a request to Minimax to get the download URL for a file - operationId: retrieveMinimaxFile - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: query - name: file_id - required: true - schema: - type: integer - description: Unique identifier for the file, obtained from the generation response - responses: - "200": - description: Successful response with file download URL - content: - application/json: - schema: - $ref: "#/components/schemas/MinimaxFileRetrieveResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or Minimax) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with Minimax) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (Minimax took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/ideogram/generate: - post: - summary: Proxy request to Ideogram for image generation - description: Forwards image generation requests to Ideogram's API and returns the results. - operationId: ideogramGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramGenerateRequest" - responses: - "200": - description: Successful response from Ideogram proxy - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramGenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or Ideogram) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with Ideogram) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (Ideogram took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/ideogram/ideogram-v3/generate: - post: - summary: Proxy request to Ideogram for image generation - description: Forwards image generation requests to Ideogram's API and returns the results. - operationId: ideogramV3Generate - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Parameters for Ideogram V3 image generation - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramV3Request" - responses: - "200": - description: Successful response from Ideogram proxy - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramGenerateResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/ideogram/ideogram-v3/edit: - post: - summary: Proxy request to Ideogram for image editing - description: Forwards image editing requests to Ideogram's API and returns the results. - operationId: ideogramV3Edit - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Parameters for Ideogram V3 image editing - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/IdeogramV3EditRequest" - responses: - "200": - description: Successful response from Ideogram proxy - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramGenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "422": - description: Prompt or Initial Image failed the safety checks. - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "429": - description: Rate limit exceeded (either from proxy or Ideogram) - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/ideogram/ideogram-v3/remix: - post: - summary: Remix an image using a prompt - operationId: ideogramV3Remix - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/IdeogramV3RemixRequest" - responses: - "200": - description: Remix generated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramV3IdeogramResponse" - "400": - description: Bad Request - "403": - description: Forbidden - "422": - description: Unprocessable Entity - "429": - description: Too Many Requests - parameters: [] - /proxy/ideogram/ideogram-v3/reframe: - post: - summary: Reframe an image to a chosen resolution - operationId: ideogramV3Reframe - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/IdeogramV3ReframeRequest" - responses: - "200": - description: Reframed image successfully returned - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramV3IdeogramResponse" - "400": - description: Bad Request - "401": - description: Unauthorized - "422": - description: Unprocessable Entity - "429": - description: Too Many Requests - parameters: [] - /proxy/ideogram/ideogram-v3/replace-background: - post: - summary: Replace background of an image using a prompt - operationId: ideogramV3ReplaceBackground - tags: - - API Nodes - - Released - x-excluded: true - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/IdeogramV3ReplaceBackgroundRequest" - responses: - "200": - description: Background replaced successfully - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramV3IdeogramResponse" - "400": - description: Bad Request - "401": - description: Unauthorized - "422": - description: Unprocessable Entity - "429": - description: Too Many Requests - parameters: [] - - /proxy/kling/v1/account/costs: - get: - summary: KlingAI Query Resource Package Information - operationId: klingQueryResourcePackages - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: start_time - in: query - required: true - schema: - type: integer - description: Start time for the query, Unix timestamp in ms - - name: end_time - in: query - required: true - schema: - type: integer - description: End time for the query, Unix timestamp in ms - - name: resource_pack_name - in: query - required: false - schema: - type: string - description: Resource package name for precise querying of a specific package - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingResourcePackageResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/text2video: - post: - summary: KlingAI Create Video from Text - operationId: klingCreateVideoFromText - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating video from text - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingText2VideoRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingText2VideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - get: - summary: KlingAI Query Task List - operationId: klingText2VideoQueryTaskList - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: pageNum - in: query - description: Page number - required: false - schema: - type: integer - default: 1 - minimum: 1 - maximum: 1000 - - name: pageSize - in: query - description: Data volume per page - required: false - schema: - type: integer - default: 30 - minimum: 1 - maximum: 500 - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingText2VideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/text2video/{id}: - get: - summary: KlingAI Query Single Task - operationId: klingText2VideoQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or external_task_id - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingText2VideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/image2video: - post: - summary: KlingAI Create Video from Image - operationId: klingCreateVideoFromImage - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating video from image - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImage2VideoRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImage2VideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - get: - summary: KlingAI Query Image2Video Task List - operationId: klingImage2VideoQueryTaskList - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: pageNum - in: query - description: Page number - required: false - schema: - type: integer - default: 1 - minimum: 1 - maximum: 1000 - - name: pageSize - in: query - description: Data volume per page - required: false - schema: - type: integer - default: 30 - minimum: 1 - maximum: 500 - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImage2VideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/image2video/{id}: - get: - summary: KlingAI Query Single Image2Video Task - operationId: klingImage2VideoQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or external_task_id - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImage2VideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/video-extend: - post: - summary: KlingAI Extend Video Duration - operationId: klingExtendVideo - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for extending video duration - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoExtendRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoExtendResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - get: - summary: KlingAI Query Video-Extend Task List - operationId: klingVideoExtendQueryTaskList - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: pageNum - in: query - description: Page number - required: false - schema: - type: integer - default: 1 - minimum: 1 - maximum: 1000 - - name: pageSize - in: query - description: Data volume per page - required: false - schema: - type: integer - default: 30 - minimum: 1 - maximum: 500 - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoExtendResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/video-extend/{id}: - get: - summary: KlingAI Query Single Video-Extend Task - operationId: klingVideoExtendQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoExtendResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/lip-sync: - post: - summary: KlingAI Create Lip-Sync Video - operationId: klingCreateLipSyncVideo - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating lip-sync video - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingLipSyncRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingLipSyncResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - get: - summary: KlingAI Query Lip-Sync Task List - operationId: klingLipSyncQueryTaskList - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: pageNum - in: query - description: Page number - required: false - schema: - type: integer - default: 1 - minimum: 1 - maximum: 1000 - - name: pageSize - in: query - description: Data volume per page - required: false - schema: - type: integer - default: 30 - minimum: 1 - maximum: 500 - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingLipSyncResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/lip-sync/{id}: - get: - summary: KlingAI Query Single Lip-Sync Task - operationId: klingLipSyncQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or external_task_id - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingLipSyncResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/effects: - post: - summary: KlingAI Create Video Effects Task - operationId: klingCreateVideoEffects - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating video with effects - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoEffectsRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoEffectsResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - get: - summary: KlingAI Query Video Effects Task List - operationId: klingVideoEffectsQueryTaskList - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: pageNum - in: query - description: Page number - required: false - schema: - type: integer - default: 1 - minimum: 1 - maximum: 1000 - - name: pageSize - in: query - description: Data volume per page - required: false - schema: - type: integer - default: 30 - minimum: 1 - maximum: 500 - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoEffectsResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/effects/{id}: - get: - summary: KlingAI Query Single Video Effects Task - operationId: klingVideoEffectsQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or external_task_id - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVideoEffectsResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/motion-control: - post: - summary: KlingAI Create Motion Control Task - operationId: klingCreateMotionControl - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating motion control video - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingMotionControlRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingMotionControlResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/motion-control/{id}: - get: - summary: KlingAI Query Single Motion Control Task - operationId: klingMotionControlQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or external_task_id - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingMotionControlResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/omni-video: - post: - summary: KlingAI Create Omni-Video Task - operationId: klingCreateOmniVideo - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating omni-video - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingOmniVideoRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingOmniVideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/omni-video/{id}: - get: - summary: KlingAI Query Single Omni-Video Task - operationId: klingOmniVideoQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or External Task ID. Can query by either task_id (generated by system) or external_task_id (customized task ID) - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingOmniVideoResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/avatar/image2video: - post: - summary: KlingAI Create Avatar Video - operationId: klingCreateAvatarVideo - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating avatar video from image and audio - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingAvatarRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingAvatarResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/videos/avatar/image2video/{id}: - get: - summary: KlingAI Query Avatar Task - operationId: klingAvatarQueryTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or external_task_id - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingAvatarResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/images/generations: - post: - summary: KlingAI Create Image Generation Task - operationId: klingCreateImageGeneration - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating images - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImageGenerationsRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImageGenerationsResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - get: - summary: KlingAI Query Image Generation Task List - operationId: klingImageGenerationsQueryTaskList - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: pageNum - in: query - description: Page number - required: false - schema: - type: integer - default: 1 - minimum: 1 - maximum: 1000 - - name: pageSize - in: query - description: Data volume per page - required: false - schema: - type: integer - default: 30 - minimum: 1 - maximum: 500 - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImageGenerationsResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/images/generations/{id}: - get: - summary: KlingAI Query Single Image Generation Task - operationId: klingImageGenerationsQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingImageGenerationsResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/images/omni-image: - post: - summary: KlingAI Create Omni-Image Task - operationId: klingCreateOmniImage - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for generating omni-image - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingOmniImageRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingOmniImageResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/images/omni-image/{id}: - get: - summary: KlingAI Query Single Omni-Image Task - operationId: klingOmniImageQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID or External Task ID. Can query by either task_id (generated by system) or external_task_id (customized task ID) - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingOmniImageResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/images/kolors-virtual-try-on: - post: - summary: KlingAI Create Virtual Try-On Task - operationId: klingCreateVirtualTryOn - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create task for virtual try-on of clothing on human images - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVirtualTryOnRequest" - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVirtualTryOnResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - get: - summary: KlingAI Query Virtual Try-On Task List - operationId: klingVirtualTryOnQueryTaskList - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: pageNum - in: query - description: Page number - required: false - schema: - type: integer - default: 1 - minimum: 1 - maximum: 1000 - - name: pageSize - in: query - description: Data volume per page - required: false - schema: - type: integer - default: 30 - minimum: 1 - maximum: 500 - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVirtualTryOnResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/kling/v1/images/kolors-virtual-try-on/{id}: - get: - summary: KlingAI Query Single Virtual Try-On Task - operationId: klingVirtualTryOnQuerySingleTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: Task ID - responses: - "200": - description: Successful response (Request successful) - content: - application/json: - schema: - $ref: "#/components/schemas/KlingVirtualTryOnResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/KlingErrorResponse" - /proxy/ltx/v1/text-to-video: - post: - summary: LTX Video Generate Video from Text - description: Generate a video from a text prompt using LTX Video AI models - operationId: ltxCreateVideoFromText - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create video from text prompt - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/LTXText2VideoRequest" - responses: - "200": - description: Video generated successfully - content: - video/mp4: - schema: - type: string - format: binary - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/ltx/v1/image-to-video: - post: - summary: LTX Video Generate Video from Image - description: Transform a static image into a dynamic video using LTX Video AI models - operationId: ltxCreateVideoFromImage - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - description: Create video from image - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/LTXImage2VideoRequest" - responses: - "200": - description: Video generated successfully - content: - video/mp4: - schema: - type: string - format: binary - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bfl/flux-kontext-pro/generate: - post: - summary: Proxy request to BFL Flux Kontext Pro for image editing - description: Forwards image editing requests to BFL's Flux Kontext Pro API and returns the results. - operationId: bflFluxKontextProGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxKontextProGenerateRequest" - responses: - "200": - description: Successful response from BFL Flux Kontext Pro proxy - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxKontextProGenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (BFL took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bfl/flux-kontext-max/generate: - post: - summary: Proxy request to BFL Flux Kontext Max for image editing - description: Forwards image editing requests to BFL's Flux Kontext Max API and returns the results. - operationId: bflFluxKontextMaxGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxKontextMaxGenerateRequest" - responses: - "200": - description: Successful response from BFL Flux Kontext Max proxy - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxKontextMaxGenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (BFL took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bfl/flux-pro-1.1/generate: - post: - summary: Proxy request to BFL Flux Pro 1.1 for image generation - description: Forwards image generation requests to BFL's Flux Pro 1.1 API and returns the results. - operationId: bflFluxPro1_1Generate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxPro1_1GenerateRequest" - responses: - "200": - description: Successful response from BFL Flux Pro proxy - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxPro1_1GenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (BFL took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bfl/flux-pro-1.1-ultra/generate: - post: - summary: Proxy request to BFL Flux Pro 1.1 Ultra for image generation - description: Forwards image generation requests to BFL's Flux Pro 1.1 Ultra API and returns the results. - operationId: bflFluxProGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxProGenerateRequest" - responses: - "200": - description: Successful response from BFL Flux Pro proxy - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxProGenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (BFL took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bfl/flux-2-pro/generate: - post: - summary: Proxy request to BFL Flux 2 Pro for image generation - description: Forwards image generation requests to BFL's Flux 2 Pro API and returns the results. Supports image-to-image generation with up to 5 input images. - operationId: bflFlux2ProGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFlux2ProGenerateRequest" - responses: - "200": - description: Successful response from BFL Flux 2 Pro proxy - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxProGenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (BFL took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bfl/flux-2-max/generate: - post: - summary: Proxy request to BFL Flux 2 Max for image generation - description: Forwards image generation requests to BFL's Flux 2 Max API and returns the results. Supports image-to-image generation with up to 8 input images. - operationId: bflFlux2MaxGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFlux2ProGenerateRequest" - responses: - "200": - description: Successful response from BFL Flux 2 Max proxy - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxProGenerateResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded (either from proxy or BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with BFL) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (BFL took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bfl/flux-pro-1.0-expand/generate: - post: - tags: - - API Nodes - - Released - summary: Expand an image by adding pixels on any side. - x-excluded: true - description: >- - Submits an image expansion task that adds the specified number of pixels to any combination of sides (top, bottom, left, right) while maintaining context. - operationId: BFLExpand_v1_flux_pro_1_0_expand_post - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxProExpandInputs" - responses: - "200": - description: Successful Response - content: - application/json: - schema: - anyOf: - - $ref: "#/components/schemas/BFLAsyncResponse" - - $ref: "#/components/schemas/BFLAsyncWebhookResponse" - title: Response Expand V1 Flux Pro 1 0 Expand Post - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/BFLHTTPValidationError" - parameters: [] - /proxy/bfl/flux-pro-1.0-fill/generate: - post: - tags: - - API Nodes - - Released - summary: "Generate an image with FLUX.1 Fill [pro] using an input image and mask." - x-excluded: true - description: >- - Submits an image generation task with the FLUX.1 Fill [pro] model using an input image and mask. Mask can be applied to alpha channel or submitted as a separate image. - operationId: BFLFill_v1_flux_pro_1_0_fill_post - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLFluxProFillInputs" - responses: - "200": - description: Successful Response - content: - application/json: - schema: - anyOf: - - $ref: "#/components/schemas/BFLAsyncResponse" - - $ref: "#/components/schemas/BFLAsyncWebhookResponse" - title: Response Fill V1 Flux Pro 1 0 Fill Post - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/BFLHTTPValidationError" - parameters: [] - /proxy/bfl/flux-pro-1.0-canny/generate: - post: - tags: - - API Nodes - - Released - x-excluded: true - summary: "Generate an image with FLUX.1 Canny [pro] using a control image." - description: "Submits an image generation task with FLUX.1 Canny [pro]." - operationId: BFLPro_canny_v1_flux_pro_1_0_canny_post - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLCannyInputs" - responses: - "200": - description: Successful Response - content: - application/json: - schema: - anyOf: - - $ref: "#/components/schemas/BFLAsyncResponse" - - $ref: "#/components/schemas/BFLAsyncWebhookResponse" - title: Response Pro Canny V1 Flux Pro 1 0 Canny Post - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/BFLHTTPValidationError" - parameters: [] - /proxy/bfl/flux-pro-1.0-depth/generate: - post: - tags: - - API Nodes - - Released - x-excluded: true - summary: "Generate an image with FLUX.1 Depth [pro] using a control image." - description: "Submits an image generation task with FLUX.1 Depth [pro]." - operationId: BFLPro_depth_v1_flux_pro_1_0_depth_post - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BFLDepthInputs" - responses: - "200": - description: Successful Response - content: - application/json: - schema: - anyOf: - - $ref: "#/components/schemas/BFLAsyncResponse" - - $ref: "#/components/schemas/BFLAsyncWebhookResponse" - title: Response Pro Depth V1 Flux Pro 1 0 Depth Post - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/BFLHTTPValidationError" - parameters: [] - /proxy/luma/generations: - post: - summary: Create a generation - description: Initiate a new generation with the provided prompt - operationId: lumaCreateGeneration - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - description: The generation request object - content: - application/json: - schema: - $ref: "#/components/schemas/LumaGenerationRequest" - examples: - default: - value: - prompt: "A serene lake surrounded by mountains at sunset" - aspect_ratio: "16:9" - loop: true - keyframes: - frame0: - type: image - url: "https://example.com/image.jpg" - frame1: - type: generation - id: "123e4567-e89b-12d3-a456-426614174000" - responses: - default: - description: Error - content: - application/json: - schema: - $ref: "#/components/schemas/LumaError" - "201": - description: Generation created - content: - application/json: - schema: - $ref: "#/components/schemas/LumaGeneration" - parameters: [] - /proxy/luma/generations/{id}: - get: - summary: Get a generation - description: Retrieve details of a specific generation by its ID - operationId: lumaGetGeneration - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: The ID of the generation - responses: - default: - description: Error - content: - application/json: - schema: - $ref: "#/components/schemas/LumaError" - "200": - description: Generation found - content: - application/json: - schema: - $ref: "#/components/schemas/LumaGeneration" - - /proxy/luma/generations/image: - post: - summary: Generate an image - description: Generate an image with the provided prompt - operationId: lumaGenerateImage - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - description: The image generation request object - content: - application/json: - schema: - $ref: "#/components/schemas/LumaImageGenerationRequest" - responses: - default: - description: Error - content: - application/json: - schema: - $ref: "#/components/schemas/LumaError" - "201": - description: Image generated - content: - application/json: - schema: - $ref: "#/components/schemas/LumaGeneration" - parameters: [] - /proxy/pixverse/video/text/generate: - post: - summary: Generate video from text prompt. - operationId: PixverseGenerateTextVideo - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - $ref: "#/components/parameters/PixverseAiTraceId" - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseTextVideoRequest" - responses: - "200": - description: Success - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseVideoResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/pixverse/video/img/generate: - post: - summary: Generate video from image. - operationId: PixverseGenerateImageVideo - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - $ref: "#/components/parameters/PixverseAiTraceId" - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseImageVideoRequest" - responses: - "200": - description: Success - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseVideoResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/pixverse/video/transition/generate: - post: - summary: Generate transition video between two images. - operationId: PixverseGenerateTransitionVideo - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - $ref: "#/components/parameters/PixverseAiTraceId" - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseTransitionVideoRequest" - responses: - "200": - description: Success - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseVideoResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/pixverse/image/upload: - post: - summary: Upload an image to the server. - operationId: PixverseUploadImage - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - $ref: "#/components/parameters/PixverseAiTraceId" - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - image: - type: string - format: binary - responses: - "200": - description: Image uploaded - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseImageUploadResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/pixverse/video/result/{id}: - get: - summary: Get the result of a video generation. - operationId: PixverseGetVideoResult - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - $ref: "#/components/parameters/PixverseAiTraceId" - - name: id - in: path - required: true - schema: - type: integer - responses: - "200": - description: Result fetched - content: - application/json: - schema: - $ref: "#/components/schemas/PixverseVideoResultResponse" - - /webhook/metronome/zero-balance: - post: - summary: receive alert on remaining balance is 0 - operationId: metronomeZeroBalance - x-excluded: true - tags: - - Webhook - - Metronome - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [id, type, properties] - properties: - id: - type: string - description: the id of the webhook - type: - type: string - description: the type of the webhook - properties: - type: object - properties: - customer_id: - type: string - description: the metronome customer id - remaining_balance: - type: number - description: the customer remaining balance - responses: - "200": - description: Webhook processed succesfully - content: - application/json: - schema: - $ref: "#/components/schemas/IdeogramGenerateResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /webhook/stripe/invoice-status: - post: - summary: Handle Stripe invoice.paid webhook event - operationId: StripeInvoiceStatus - x-excluded: true - tags: - - Billing - - Stripe - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/StripeEvent" - responses: - "200": - description: Webhook processed successfully - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /webhook/stripe/subscription: - post: - summary: Handle Stripe subscription webhook events - operationId: StripeSubscriptionWebhook - x-excluded: true - tags: - - Billing - - Stripe - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Generic Stripe webhook event payload - responses: - "200": - description: Webhook processed successfully - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/recraft/image_generation: - post: - summary: Proxy request to Recraft for image generation - description: Forwards image generation requests to Recraft's API and returns the generated images. - operationId: recraftImageGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftImageGenerationRequest" - responses: - "200": - description: Successful response from Recraft proxy - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftImageGenerationResponse" - "400": - description: Bad Request (invalid input to proxy) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error (proxy or upstream issue) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "502": - description: Bad Gateway (error communicating with Recraft) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "504": - description: Gateway Timeout (Recraft took too long to respond) - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/recraft/images/vectorize: - post: - summary: Vectorize an image - operationId: recraftVectorize - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - description: Image file to process - required: - - file - responses: - "200": - description: Background removed successfully - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftImageGenerationResponse" - "401": - description: Unauthorized - Invalid or missing API token - "400": - description: Bad request - Invalid parameters or file - security: [] - /proxy/recraft/images/crispUpscale: - post: - summary: Upscale an image - operationId: recraftCrispUpscale - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - description: Image file to process - required: - - file - responses: - "200": - description: Background removed successfully - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftImageGenerationResponse" - "401": - description: Unauthorized - Invalid or missing API token - "400": - description: Bad request - Invalid parameters or file - security: [] - /proxy/recraft/images/removeBackground: - post: - summary: Remove background from an image - operationId: recraftRemoveBackground - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - description: Image file to process - required: - - file - responses: - "200": - description: Background removed successfully - content: - application/json: - schema: - type: object - properties: - image: - type: object - properties: - url: - type: string - format: uri - description: URL of the processed image - "401": - description: Unauthorized - Invalid or missing API token - "400": - description: Bad request - Invalid parameters or file - security: [] - /proxy/recraft/images/imageToImage: - post: - operationId: RecraftImageToImage - x-excluded: true - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/RecraftImageToImageRequest" - responses: - "200": - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftGenerateImageResponse" - description: OK - summary: Generate image from image and prompt - tags: - - API Nodes - - Released - parameters: [] - /proxy/recraft/images/inpaint: - post: - operationId: RecraftInpaintImage - x-excluded: true - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/RecraftTransformImageWithMaskRequest" - responses: - "200": - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftGenerateImageResponse" - description: OK - summary: Inpaint Image - tags: - - API Nodes - - Released - parameters: [] - /proxy/recraft/images/replaceBackground: - post: - operationId: RecraftReplaceBackground - x-excluded: true - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/RecraftTransformImageWithMaskRequest" - responses: - "200": - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftGenerateImageResponse" - description: OK - summary: Replace Background - tags: - - API Nodes - - Released - parameters: [] - /proxy/recraft/images/creativeUpscale: - post: - operationId: RecraftCreativeUpscale - x-excluded: true - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/RecraftProcessImageRequest" - responses: - "200": - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftProcessImageResponse" - description: OK - summary: Creative Upscale - tags: - - API Nodes - - Released - parameters: [] - /proxy/recraft/styles: - post: - operationId: RecraftCreateStyle - x-excluded: true - tags: - - API Nodes - - Released - summary: Create Style - description: Upload a set of images to create a style reference. - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/RecraftCreateStyleRequest" - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/RecraftCreateStyleResponse" - /proxy/runway/image_to_video: - post: - summary: Runway Image to Video Generation - x-excluded: true - tags: - - API Nodes - - Released - description: Converts an image to a video using Runway's API - operationId: runwayImageToVideo - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/RunwayImageToVideoRequest" - responses: - "200": - description: Successful response - content: - application/json: - schema: - $ref: "#/components/schemas/RunwayImageToVideoResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/runway/tasks/{task_id}: - get: - summary: Get Runway Task Status - description: Get the status and output of a Runway task - operationId: runwayGetTaskStatus - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: ID of the task to check - responses: - "200": - description: Successful response - content: - application/json: - schema: - $ref: "#/components/schemas/RunwayTaskStatusResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/runway/text_to_image: - post: - summary: Runway Text to Image Generation - x-excluded: true - tags: - - API Nodes - - Released - description: Generates an image from text using Runway's API - operationId: runwayTextToImage - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/RunwayTextToImageRequest" - responses: - "200": - description: Successful response - content: - application/json: - schema: - $ref: "#/components/schemas/RunwayTextToImageResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/veo/generate: - post: - summary: Generate a video from a text prompt and optional image. Deprecated. Use /proxy/veo/{modelId}/generate instead. - operationId: veoGenerate - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Veo2GenVidRequest" - responses: - "200": - description: Video generation successful - content: - application/json: - schema: - $ref: "#/components/schemas/Veo2GenVidResponse" - "400": - description: Bad request - "401": - description: Unauthorized - "403": - description: Forbidden - "500": - description: Internal server error - /proxy/veo/poll: - post: - summary: Poll the status of a Veo prediction operation. Deprecated. Use /proxy/veo/{modelId}/generate instead. - operationId: veoPoll - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Veo2GenVidPollRequest" - responses: - "200": - description: Operation status and result - content: - application/json: - schema: - $ref: "#/components/schemas/Veo2GenVidPollResponse" - "400": - description: Bad request - "401": - description: Unauthorized - "404": - description: Operation not found - "500": - description: Internal error - /proxy/veo/{modelId}/generate: - post: - summary: Generate a video from a text prompt and optional image - operationId: veoGenerateNew - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: modelId - in: path - required: true - schema: - type: string - description: The ID of the model to use for generation - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/VeoGenVidRequest" - responses: - "200": - description: Video generation successful - content: - application/json: - schema: - $ref: "#/components/schemas/VeoGenVidResponse" - "400": - description: Bad request - "401": - description: Unauthorized - "403": - description: Forbidden - "500": - description: Internal server error - /proxy/veo/{modelId}/poll: - post: - summary: Poll the status of a Veo prediction operation - operationId: veoPollNew - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: modelId - in: path - required: true - schema: - type: string - description: The ID of the model to use for generation - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/VeoGenVidPollRequest" - responses: - "200": - description: Operation status and result - content: - application/json: - schema: - $ref: "#/components/schemas/VeoGenVidPollResponse" - "400": - description: Bad request - "401": - description: Unauthorized - "404": - description: Operation not found - "500": - description: Internal error - /proxy/openai/v1/responses: - post: - operationId: createOpenAIResponse - tags: - - API Nodes - - Released - x-excluded: true - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAICreateResponse" - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAIResponse" - text/event-stream: - schema: - $ref: "#/components/schemas/OpenAIResponseStreamEvent" - /proxy/openai/v1/responses/{id}: - get: - operationId: getOpenAIResponse - tags: - - API Nodes - - Released - x-excluded: true - summary: | - Retrieves a model response with the given ID. - parameters: - - in: path - name: id - required: true - schema: - type: string - example: resp_677efb5139a88190b512bc3fef8e535d - description: The ID of the response to retrieve. - - in: query - name: include - schema: - type: array - items: - $ref: "#/components/schemas/Includable" - description: | - Additional fields to include in the response. See the `include` - parameter for Response creation above for more information. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAIResponse" - /proxy/openai/images/generations: - post: - summary: Generate an image using OpenAI's models - operationId: openAIGenerateImage - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAIImageGenerationRequest" - responses: - "200": - description: Image generated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAIImageGenerationResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/openai/images/edits: - post: - summary: Edit an image using OpenAI's DALL-E model - operationId: openAIEditImage - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/OpenAIImageEditRequest" - responses: - "200": - description: Image edited successfully - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAIImageGenerationResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/openai/v1/videos: - post: - summary: Create a video using OpenAI's Sora model - operationId: openAICreateVideo - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/OpenAIVideoCreateRequest" - responses: - "200": - description: Video generation job created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAIVideoJob" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/openai/v1/videos/{video_id}: - get: - summary: Retrieve a video - operationId: openAIGetVideo - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: video_id - required: true - schema: - type: string - description: The identifier of the video to retrieve - responses: - "200": - description: Video job details - content: - application/json: - schema: - $ref: "#/components/schemas/OpenAIVideoJob" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "404": - description: Video not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/openai/v1/videos/{video_id}/content: - get: - summary: Download video content - operationId: openAIDownloadVideoContent - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: video_id - required: true - schema: - type: string - description: The identifier of the video whose media to download - - in: query - name: variant - schema: - type: string - description: Which downloadable asset to return - responses: - "200": - description: Video content stream - content: - video/mp4: - schema: - type: string - format: binary - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "404": - description: Video not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/pika/generate/pikadditions: - post: - summary: Generate Pikadditions - operationId: PikaGenerate_pikadditions_generate_pikadditions_post - tags: - - API Nodes - - Released - x-excluded: true - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/PikaBody_generate_pikadditions_generate_pikadditions_post" - required: true - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaGenerateResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - parameters: [] - /proxy/pika/generate/pikaswaps: - post: - summary: Generate Pikaswaps - description: >- - Exactly one of `modifyRegionMask` and `modifyRegionRoi` must be provided. - tags: - - API Nodes - - Released - x-excluded: true - operationId: PikaGenerate_pikaswaps_generate_pikaswaps_post - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/PikaBody_generate_pikaswaps_generate_pikaswaps_post" - required: true - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaGenerateResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - parameters: [] - /proxy/pika/generate/pikaffects: - post: - summary: Generate Pikaffects - operationId: PikaGenerate_pikaffects_generate_pikaffects_post - tags: - - API Nodes - - Released - x-excluded: true - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/PikaBody_generate_pikaffects_generate_pikaffects_post" - required: true - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaGenerateResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - description: >- - Generate a video with a specific Pikaffect. Supported Pikaffects: Cake-ify, Crumble, Crush, Decapitate, Deflate, Dissolve, Explode, Eye-pop, Inflate, Levitate, Melt, Peel, Poke, Squish, Ta-da, Tear - parameters: [] - /proxy/pika/generate/2.2/t2v: - post: - summary: Generate 2 2 T2V - x-excluded: true - tags: - - API Nodes - - Released - operationId: PikaGenerate_2_2_t2v_generate_2_2_t2v_post - requestBody: - content: - application/x-www-form-urlencoded: - schema: - $ref: "#/components/schemas/PikaBody_generate_2_2_t2v_generate_2_2_t2v_post" - required: true - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaGenerateResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - parameters: [] - /proxy/pika/generate/2.2/pikaframes: - post: - summary: Generate 2 2 Keyframe - x-excluded: true - tags: - - API Nodes - - Released - operationId: PikaGenerate_2_2_keyframe_generate_2_2_pikaframes_post - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/PikaBody_generate_2_2_keyframe_generate_2_2_pikaframes_post" - required: true - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaGenerateResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - parameters: [] - /proxy/pika/generate/2.2/pikascenes: - post: - summary: Generate 2 2 C2V - x-excluded: true - tags: - - API Nodes - - Released - operationId: PikaGenerate_2_2_c2v_generate_2_2_pikascenes_post - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/PikaBody_generate_2_2_c2v_generate_2_2_pikascenes_post" - required: true - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaGenerateResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - parameters: [] - /proxy/pika/generate/2.2/i2v: - post: - summary: Generate 2 2 I2V - x-excluded: true - tags: - - API Nodes - - Released - operationId: PikaGenerate_2_2_i2v_generate_2_2_i2v_post - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/PikaBody_generate_2_2_i2v_generate_2_2_i2v_post" - required: true - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaGenerateResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - parameters: [] - /proxy/pika/videos/{video_id}: - get: - summary: Get Video - operationId: PikaGet_video_videos__video_id__get - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: video_id - in: path - required: true - schema: - type: string - title: Video Id - responses: - "200": - description: Successful Response - content: - application/json: - schema: - $ref: "#/components/schemas/PikaVideoResponse" - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/PikaHTTPValidationError" - /proxy/stability/v2beta/stable-image/generate/ultra: - post: - operationId: StabilityImageGenrationUltra - x-excluded: true - tags: - - API Nodes - - Released - summary: Stable Image Ultra - description: >- - Our most advanced text to image generation service, Stable Image Ultra creates the highest quality images - with unprecedented prompt understanding. Ultra excels in typography, complex compositions, dynamic lighting, - vibrant hues, and overall cohesion and structure of an art piece. Made from the most advanced models, - including Stable Diffusion 3.5, Ultra offers the best of the Stable Diffusion ecosystem. - ### Try it out - Grab your [API key](https://platform.stability.ai/account/keys) and head over to [![Open Google Colab](https://platform.stability.ai/svg/google-colab.svg)](https://colab.research.google.com/github/stability-ai/stability-sdk/blob/main/nbs/Stable_Image_API_Public.ipynb#scrollTo=yXhs626oZdr1) - ### How to use - Please invoke this endpoint with a `POST` request. - The headers of the request must include an API key in the `authorization` field. The body of the request must be - `multipart/form-data`. The accept header should be set to one of the following: - - `image/*` to receive the image in the format specified by the `output_format` parameter. - - `application/json` to receive the image in the format specified by the `output_format` parameter, but encoded to base64 in a JSON response. - The only required parameter is the `prompt` field, which should contain the text prompt for the image generation. - The body of the request should include: - - `prompt` - text to generate the image from - The body may optionally include: - - `image` - the image to use as the starting point for the generation - - `strength` - controls how much influence the `image` parameter has on the output image - - `aspect_ratio` - the aspect ratio of the output image - - `negative_prompt` - keywords of what you **do not** wish to see in the output image - - `seed` - the randomness seed to use for the generation - - `output_format` - the the format of the output image - > **Note:** for the full list of optional parameters, please see the request schema below. - ### Output - The resolution of the generated image will be 1 megapixel. The default resolution is 1024x1024. - ### Credits - The Ultra service uses 8 credits per successful result. You will not be charged for failed results. - x-codeSamples: - - lang: python - label: Python - source: |- - import requests - response = requests.post( - f"https://api.stability.ai/v2beta/stable-image/generate/ultra", - headers={ - "authorization": f"Bearer sk-MYAPIKEY", - "accept": "image/*" - }, - files={"none": ''}, - data={ - "prompt": "Lighthouse on a cliff overlooking the ocean", - "output_format": "webp", - }, - ) - if response.status_code == 200: - with open("./lighthouse.webp", 'wb') as file: - file.write(response.content) - else: - raise Exception(str(response.json())) - - lang: javascript - label: JavaScript - source: "import fs from \"node:fs\";\nimport axios from \"axios\";\nimport FormData from \"form-data\";\n\nconst payload = {\n prompt: \"Lighthouse on a cliff overlooking the ocean\",\n output_format: \"webp\"\n};\n\nconst response = await axios.postForm(\n `https://api.stability.ai/v2beta/stable-image/generate/ultra`,\n axios.toFormData(payload, new FormData()),\n {\n validateStatus: undefined,\n responseType: \"arraybuffer\",\n headers: { \n Authorization: `Bearer sk-MYAPIKEY`, \n Accept: \"image/*\" \n },\n },\n);\n\nif(response.status === 200) {\n fs.writeFileSync(\"./lighthouse.webp\", Buffer.from(response.data));\n} else {\n throw new Error(`${response.status}: ${response.data.toString()}`);\n}" - - lang: terminal - label: cURL - source: >- - curl -f -sS "https://api.stability.ai/v2beta/stable-image/generate/ultra" \ - -H "authorization: Bearer sk-MYAPIKEY" \ - -H "accept: image/*" \ - -F prompt="Lighthouse on a cliff overlooking the ocean" \ - -F output_format="webp" \ - -o "./lighthouse.webp" - parameters: - - schema: - type: string - description: >- - Your [Stability API key](https://platform.stability.ai/account/keys), used to authenticate your requests. Although you may have multiple keys in your account, you should use the same key for all requests to this API. - minLength: 1 - required: true - name: authorization - in: header - - schema: - type: string - minLength: 1 - description: >- - The content type of the request body. Do not manually specify this header; your HTTP client library will automatically include the appropriate boundary parameter. - example: multipart/form-data - required: true - name: content-type - in: header - - schema: - type: string - default: image/* - description: >- - Specify `image/*` to receive the bytes of the image directly. Otherwise specify `application/json` to receive the image as base64 encoded JSON. - enum: - - image/* - - application/json - required: false - name: accept - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientID" - required: false - name: stability-client-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientUserID" - required: false - name: stability-client-user-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientVersion" - required: false - name: stability-client-version - in: header - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - prompt: - type: string - minLength: 1 - maxLength: 10000 - description: >- - What you wish to see in the output image. A strong, descriptive prompt that clearly defines - elements, colors, and subjects will lead to better results. - To control the weight of a given word use the format `(word:weight)`, - where `word` is the word you'd like to control the weight of and `weight` - is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) and (green:0.8)` - would convey a sky that was blue and green, but more green than blue. - negative_prompt: - type: string - maxLength: 10000 - description: >- - A blurb of text describing what you **do not** wish to see in the output image. - This is an advanced feature. - aspect_ratio: - type: string - enum: - - "21:9" - - "16:9" - - "3:2" - - "5:4" - - "1:1" - - "4:5" - - "2:3" - - "9:16" - - "9:21" - default: "1:1" - description: Controls the aspect ratio of the generated image. - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: >- - A specific value that is used to guide the 'randomness' of the generation. (Omit this parameter or pass `0` to use a random seed.) - output_format: - type: string - enum: - - jpeg - - png - - webp - default: png - description: Dictates the `content-type` of the generated image. - image: - type: string - description: >- - The image to use as the starting point for the generation. - > **Important:** The `strength` parameter is required when `image` is provided. - Supported Formats: - - jpeg - - png - - webp - Validation Rules: - - Width must be between 64 and 16,384 pixels - - Height must be between 64 and 16,384 pixels - - Total pixel count must be at least 4,096 pixels - format: binary - example: ./some/image.png - style_preset: - type: string - enum: - - enhance - - anime - - photographic - - digital-art - - comic-book - - fantasy-art - - line-art - - analog-film - - neon-punk - - isometric - - low-poly - - origami - - modeling-compound - - cinematic - - 3d-model - - pixel-art - - tile-texture - description: Guides the image model towards a particular style. - strength: - type: number - minimum: 0 - maximum: 1 - description: "Sometimes referred to as _denoising_, this parameter controls how much influence the \n`image` parameter has on the generated image. A value of 0 would yield an image that \nis identical to the input. A value of 1 would be as if you passed in no image at all.\n\n> **Important:** This parameter is required when `image` is provided." - required: - - prompt - responses: - "200": - description: Generation was successful. - headers: - x-request-id: - description: A unique identifier for this request. - schema: - type: string - content-type: - description: |- - The format of the generated image. - To receive the bytes of the image directly, specify `image/*` in the accept header. To receive the bytes base64 encoded inside of a JSON payload, specify `application/json`. - examples: - jpeg: - description: raw bytes - value: image/jpeg - jpegJSON: - description: base64 encoded - value: application/json; type=image/jpeg - png: - description: raw bytes - value: image/png - pngJSON: - description: base64 encoded - value: application/json; type=image/png - webp: - description: raw bytes - value: image/webp - webpJSON: - description: base64 encoded - value: application/json; type=image/webp - schema: - type: string - finish-reason: - schema: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: >- - Indicates the reason the generation finished. - - `SUCCESS` = successful generation. - - `CONTENT_FILTERED` = successful generation, however the output violated our content moderation - policy and has been blurred as a result. - > **NOTE:** This header is absent on JSON encoded responses because it is present in the body as `finish_reason`. - seed: - description: >- - The seed used as random noise for this generation. - > **NOTE:** This header is absent on JSON encoded responses because it is present in the body as `seed`. - example: "343940597" - schema: - type: string - content: - image/jpeg: - schema: - type: string - description: |- - The bytes of the generated image. - The `finish-reason` and `seed` will be present as headers. - format: binary - example: The bytes of the generated jpeg - application/json; type=image/jpeg: - schema: - type: object - properties: - image: - type: string - description: "The generated image, encoded to base64." - example: AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: >- - The reason the generation finished. - - `SUCCESS` = successful generation. - - `CONTENT_FILTERED` = successful generation, however the output violated our content moderation - policy and has been blurred as a result. - example: SUCCESS - required: - - image - - finish_reason - image/png: - schema: - type: string - description: |- - The bytes of the generated image. - The `finish-reason` and `seed` will be present as headers. - format: binary - example: The bytes of the generated png - application/json; type=image/png: - schema: - type: object - properties: - image: - type: string - description: "The generated image, encoded to base64." - example: AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: >- - The reason the generation finished. - - `SUCCESS` = successful generation. - - `CONTENT_FILTERED` = successful generation, however the output violated our content moderation - policy and has been blurred as a result. - example: SUCCESS - required: - - image - - finish_reason - image/webp: - schema: - type: string - description: |- - The bytes of the generated image. - The `finish-reason` and `seed` will be present as headers. - format: binary - example: The bytes of the generated webp - application/json; type=image/webp: - schema: - type: object - properties: - image: - type: string - description: "The generated image, encoded to base64." - example: AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: >- - The reason the generation finished. - - `SUCCESS` = successful generation. - - `CONTENT_FILTERED` = successful generation, however the output violated our content moderation - policy and has been blurred as a result. - example: SUCCESS - required: - - image - - finish_reason - "400": - description: "Invalid parameter(s), see the `errors` field for details." - content: - application/json: - schema: - type: object - properties: - id: - type: string - minLength: 1 - description: >- - A unique identifier associated with this error. Please include this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - you file, as it will greatly assist us in diagnosing the root cause of the problem. - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: >- - Short-hand name for an error, useful for discriminating between errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - "403": - description: Your request was flagged by our content moderation system. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityContentModerationResponse" - "413": - description: Your request was larger than 10MiB. - content: - application/json: - schema: - type: object - properties: - id: - type: string - minLength: 1 - description: >- - A unique identifier associated with this error. Please include this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - you file, as it will greatly assist us in diagnosing the root cause of the problem. - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: >- - Short-hand name for an error, useful for discriminating between errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 4212a4b66fbe1cedca4bf2133d35dca5 - name: payload_too_large - errors: - - "body: payloads cannot be larger than 10MiB in size" - "422": - description: >- - Your request was well-formed, but rejected. See the `errors` field for details. - content: - application/json: - schema: - type: object - properties: - id: - type: string - minLength: 1 - description: >- - A unique identifier associated with this error. Please include this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - you file, as it will greatly assist us in diagnosing the root cause of the problem. - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: >- - Short-hand name for an error, useful for discriminating between errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - examples: - Invalid Language: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: invalid_language - errors: - - English is the only supported language for this service. - Public Figure Detected: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: public_figure - errors: - - >- - Our system detected the likeness of a public figure in your image. To comply with our guidelines, this request cannot be processed. Please upload a different image. - "429": - description: You have made more than 150 requests in 10 seconds. - content: - application/json: - schema: - type: object - properties: - id: - type: string - minLength: 1 - description: >- - A unique identifier associated with this error. Please include this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - you file, as it will greatly assist us in diagnosing the root cause of the problem. - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: >- - Short-hand name for an error, useful for discriminating between errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: rate_limit_exceeded - name: rate_limit_exceeded - errors: - - >- - You have exceeded the rate limit of 150 requests within a 10 second period, and have been timed out for 60 seconds. - "500": - description: >- - An internal error occurred. If the problem persists [contact support](https://kb.stability.ai/knowledge-base/kb-tickets/new). - content: - application/json: - schema: - type: object - properties: - id: - type: string - minLength: 1 - description: >- - A unique identifier associated with this error. Please include this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - you file, as it will greatly assist us in diagnosing the root cause of the problem. - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: >- - Short-hand name for an error, useful for discriminating between errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 2a1b2d4eafe2bc6ab4cd4d5c6133f513 - name: internal_error - errors: - - >- - An unexpected server error has occurred, please try again later. - /proxy/stability/v2beta/stable-image/generate/sd3: - post: - operationId: StabilityImageGenrationSD3 - x-excluded: true - tags: - - API Nodes - - Released - summary: Stable Diffusion 3.5 - description: - "Generate using Stable Diffusion 3.5 models, Stability AI latest\ - \ base model:\n\n- **Stable Diffusion 3.5 Large**: At 8 billion parameters,\ - \ with superior quality and\n\n\n\n prompt adherence, this base model is\ - \ the most powerful in the Stable Diffusion\n family. This model is ideal\ - \ for professional use cases at 1 megapixel resolution.\n\n- **Stable Diffusion\ - \ 3.5 Large Turbo**: A distilled version of Stable Diffusion 3.5 Large.\n\n\ - \n\n SD3.5 Large Turbo generates high-quality images with exceptional prompt\ - \ adherence\n in just 4 steps, making it considerably faster than Stable\ - \ Diffusion 3.5 Large.\n\n- **Stable Diffusion 3.5 Medium**: With 2.5 billion\ - \ parameters, the model delivers an\n\n\n\n optimal balance between prompt\ - \ accuracy and image quality, making it an efficient\n choice for fast high-performance\ - \ image generation.\n\nRead more about the model capabilities [here](https://stability.ai/news/introducing-stable-diffusion-3-5).\n\ - \nAs of April 17, 2025, we have deprecated the Stable Diffusion 3.0 APIs and\ - \ will be automatically\nre-routing calls to Stable Diffusion 3.0 models to\ - \ Stable Diffusion 3.5 APIs at no extra cost.\nYou can read more in the [release\ - \ notes](/docs/release-notes#api-deprecation-notice).\n\n### Try it out\n\ - Grab your [API key](https://platform.stability.ai/account/keys) and head over\ - \ to [![Open Google Colab](https://platform.stability.ai/svg/google-colab.svg)](https://colab.research.google.com/github/stability-ai/stability-sdk/blob/main/nbs/SD3_API.ipynb)\n\ - \n### How to use\nPlease invoke this endpoint with a `POST` request.\n\nThe\ - \ headers of the request must include an API key in the `authorization` field.\ - \ The body of the request must be\n`multipart/form-data`. The accept header\ - \ should be set to one of the following:\n- `image/*` to receive the image\ - \ in the format specified by the `output_format` parameter.\n- `application/json`\ - \ to receive the image encoded as base64 in a JSON response.\n\n#### **Generating\ - \ with a prompt**\nCommonly referred to as **text-to-image**, this mode generates\ - \ an image from text alone. While the only required\nparameter is the `prompt`,\ - \ it also supports an `aspect_ratio` parameter which can be used to control\ - \ the\naspect ratio of the generated image.\n\n#### **Generating with a prompt\ - \ *and* an image**\nCommonly referred to as **image-to-image**, this mode\ - \ also generates an image from text but uses an existing image as the\nstarting\ - \ point. The required parameters are:\n- `prompt` - text to generate the image\ - \ from\n- `image` - the image to use as the starting point for the generation\n\ - - `strength` - controls how much influence the `image` parameter has on the\ - \ output image\n- `mode` - must be set to `image-to-image`\n\n> **Note:**\ - \ maximum request size is 10MiB.\n\n#### **Optional Parameters:**\nBoth modes\ - \ support the following optional parameters:\n- `model` - the model to use\ - \ (SD3.5 Large, SD3.5 Large Turbo, SD3.5 Medium)\n- `output_format` - the\ - \ the format of the output image\n- `seed` - the randomness seed to use for\ - \ the generation\n- `negative_prompt` - keywords of what you **do not** wish\ - \ to see in the output image\n- `cfg_scale` - controls how strictly the diffusion\ - \ process adheres to the prompt text\n- `style_preset` - guides the image\ - \ model towards a particular style\n\n> **Note:** for more details about these\ - \ parameters please see the request schema below.\n\n### Output\nThe resolution\ - \ of the generated image will be 1MP. The default resolution is 1024x1024.\n\ - \n### Credits\n- **SD 3.5 Large**: Flat rate of 6.5 credits per successful\ - \ generation.\n- **SD 3.5 Large Turbo**: Flat rate of 4 credits per successful\ - \ generation.\n- **SD 3.5 Medium**: Flat rate of 3.5 credits per successful\ - \ generation.\n\nAs always, you will not be charged for failed generations." - x-codeSamples: - - lang: python - label: Python - source: - "import requests\n\nresponse = requests.post(\n f\"https://api.stability.ai/v2beta/stable-image/generate/sd3\"\ - ,\n headers={\n \"authorization\": f\"Bearer sk-MYAPIKEY\",\n\ - \ \"accept\": \"image/*\"\n },\n files={\"none\": ''},\n \ - \ data={\n \"prompt\": \"Lighthouse on a cliff overlooking the ocean\"\ - ,\n \"output_format\": \"jpeg\",\n },\n)\n\nif response.status_code\ - \ == 200:\n with open(\"./lighthouse.jpeg\", 'wb') as file:\n \ - \ file.write(response.content)\nelse:\n raise Exception(str(response.json()))" - - lang: javascript - label: JavaScript - source: - "import fs from \"node:fs\";\nimport axios from \"axios\";\nimport\ - \ FormData from \"form-data\";\n\nconst payload = {\n prompt: \"Lighthouse\ - \ on a cliff overlooking the ocean\",\n output_format: \"jpeg\"\n};\n\n\ - const response = await axios.postForm(\n `https://api.stability.ai/v2beta/stable-image/generate/sd3`,\n\ - \ axios.toFormData(payload, new FormData()),\n {\n validateStatus:\ - \ undefined,\n responseType: \"arraybuffer\",\n headers: { \n \ - \ Authorization: `Bearer sk-MYAPIKEY`, \n Accept: \"image/*\" \n \ - \ },\n },\n);\n\nif(response.status === 200) {\n fs.writeFileSync(\"\ - ./lighthouse.jpeg\", Buffer.from(response.data));\n} else {\n throw new\ - \ Error(`${response.status}: ${response.data.toString()}`);\n}" - - lang: terminal - label: cURL - source: - "curl -f -sS \"https://api.stability.ai/v2beta/stable-image/generate/sd3\"\ - \ \\\n\n\n\n\n\n\n -H \"authorization: Bearer sk-MYAPIKEY\" \\\n -H \"\ - accept: image/*\" \\\n -F prompt=\"Lighthouse on a cliff overlooking the\ - \ ocean\" \\\n -F output_format=\"jpeg\" \\\n -o \"./lighthouse.jpeg\"" - parameters: - - schema: - type: string - description: - Your [Stability API key](https://platform.stability.ai/account/keys), - used to authenticate your requests. Although you may have multiple keys - in your account, you should use the same key for all requests to this - API. - minLength: 1 - required: true - name: authorization - in: header - - schema: - type: string - minLength: 1 - description: - The content type of the request body. Do not manually specify - this header; your HTTP client library will automatically include the appropriate - boundary parameter. - example: multipart/form-data - required: true - name: content-type - in: header - - schema: - type: string - default: image/* - description: - Specify `image/*` to receive the bytes of the image directly. - Otherwise specify `application/json` to receive the image as base64 encoded - JSON. - enum: - - image/* - - application/json - required: false - name: accept - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientID" - required: false - name: stability-client-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientUserID" - required: false - name: stability-client-user-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientVersion" - required: false - name: stability-client-version - in: header - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/StabilityImageGenerationSD3_Request" - responses: - "200": - description: Generation was successful. - headers: - x-request-id: - description: A unique identifier for this request. - schema: - type: string - content-type: - description: - "The format of the generated image.\n\n To receive the\ - \ bytes of the image directly, specify `image/*` in the accept header.\ - \ To receive the bytes base64 encoded inside of a JSON payload, specify\ - \ `application/json`." - examples: - png: - description: raw bytes - value: image/png - pngJSON: - description: base64 encoded - value: application/json; type=image/png - jpeg: - description: raw bytes - value: image/jpeg - jpegJSON: - description: base64 encoded - value: application/json; type=image/jpeg - schema: - type: string - finish-reason: - schema: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: "Indicates the reason the generation finished. - - - - `SUCCESS` = successful generation. - - - `CONTENT_FILTERED` = successful generation, however the output violated - our content moderation - - policy and has been blurred as a result. - - - > **NOTE:** This header is absent on JSON encoded responses because - it is present in the body as `finish_reason`." - seed: - description: "The seed used as random noise for this generation. - - - > **NOTE:** This header is absent on JSON encoded responses because - it is present in the body as `seed`." - example: "343940597" - schema: - type: string - content: - image/png: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated png - application/json; type=image/png: - schema: - $ref: "#/components/schemas/StabilityImageGenrationSD3_Response_200" - image/jpeg: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated jpeg - application/json; type=image/jpeg: - schema: - $ref: "#/components/schemas/StabilityImageGenrationSD3_Response_200" - "400": - description: Invalid parameter(s), see the `errors` field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationSD3_Response_400" - "403": - description: Your request was flagged by our content moderation system. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityContentModerationResponse" - "413": - description: Your request was larger than 10MiB. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationSD3_Response_413" - "422": - description: - Your request was well-formed, but rejected. See the `errors` - field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationSD3_Response_422" - examples: - Invalid Language: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: invalid_language - errors: - - English is the only supported language for this service. - Public Figure Detected: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: public_figure - errors: - - Our system detected the likeness of a public figure in your - image. To comply with our guidelines, this request cannot be - processed. Please upload a different image. - "429": - description: You have made more than 150 requests in 10 seconds. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationSD3_Response_429" - "500": - description: - An internal error occurred. If the problem persists [contact - support](https://kb.stability.ai/knowledge-base/kb-tickets/new). - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationSD3_Response_500" - /proxy/stability/v2beta/stable-image/upscale/conservative: - post: - tags: - - API Nodes - - Released - x-excluded: true - summary: Conservative - description: - "Takes images between 64x64 and 1 megapixel and upscales them all\ - \ the way to 4K resolution. Put more generally, it can upscale images ~20-40x\ - \ times while preserving all aspects. Conservative Upscale minimizes alterations\ - \ to the image and should not be used to reimagine an image.\n\n### Try it\ - \ out\nGrab your [API key](https://platform.stability.ai/account/keys) and\ - \ head over to [![Open Google Colab](https://platform.stability.ai/svg/google-colab.svg)](https://colab.research.google.com/github/stability-ai/stability-sdk/blob/main/nbs/Stable_Image_API_Public.ipynb#scrollTo=t1Q4w2uvvza0)\n\ - \n### How to use\n\nPlease invoke this endpoint with a `POST` request.\n\n\ - The headers of the request must include an API key in the `authorization`\ - \ field. The body of the request must be\n`multipart/form-data`, and the `accept`\ - \ header should be set to one of the following:\n\n\n\n - `image/*` to receive\ - \ the image in the format specified by the `output_format` parameter.\n -\ - \ `application/json` to receive the image encoded as base64 in a JSON response.\n\ - \nThe body of the request must include:\n- `image`\n- `prompt`\n\nOptionally,\ - \ the body of the request may also include:\n- `negative_prompt`\n- `seed`\n\ - - `output_format`\n- `creativity`\n\n> **Note:** for more details about these\ - \ parameters please see the request schema below.\n\n### Output\nThe resolution\ - \ of the generated image will be 4 megapixels.\n\n### Credits\nFlat rate of\ - \ 25 credits per successful generation. You will not be charged for failed\ - \ generations." - x-codeSamples: - - lang: python - label: Python - source: - "import requests\n\nresponse = requests.post(\n f\"https://api.stability.ai/v2beta/stable-image/upscale/conservative\"\ - ,\n headers={\n \"authorization\": f\"Bearer sk-MYAPIKEY\",\n\ - \ \"accept\": \"image/*\"\n },\n files={\n \"image\"\ - : open(\"./low-res-flower.jpg\", \"rb\"),\n },\n data={\n \"\ - prompt\": \"a flower\",\n \"output_format\": \"webp\",\n },\n\ - )\n\nif response.status_code == 200:\n with open(\"./flower.webp\", 'wb')\ - \ as file:\n file.write(response.content)\nelse:\n raise Exception(str(response.json()))" - - lang: javascript - label: JavaScript - source: - "import fs from \"node:fs\";\nimport axios from \"axios\";\nimport\ - \ FormData from \"form-data\";\n\nconst payload = {\n image: fs.createReadStream(\"\ - ./low-res-flower.jpg\"),\n prompt: \"a flower\",\n output_format: \"webp\"\ - \n};\n\nconst response = await axios.postForm(\n `https://api.stability.ai/v2beta/stable-image/upscale/conservative`,\n\ - \ axios.toFormData(payload, new FormData()),\n {\n validateStatus:\ - \ undefined,\n responseType: \"arraybuffer\",\n headers: { \n \ - \ Authorization: `Bearer sk-MYAPIKEY`, \n Accept: \"image/*\" \n \ - \ },\n },\n);\n\nif(response.status === 200) {\n fs.writeFileSync(\"\ - ./flower.webp\", Buffer.from(response.data));\n} else {\n throw new Error(`${response.status}:\ - \ ${response.data.toString()}`);\n}" - - lang: terminal - label: cURL - source: - "curl -f -sS \"https://api.stability.ai/v2beta/stable-image/upscale/conservative\"\ - \ \\\n\n\n\n\n\n\n -H \"authorization: Bearer sk-MYAPIKEY\" \\\n -H \"\ - accept: image/*\" \\\n -F image=@\"./low-res-flower.jpg\" \\\n -F prompt=\"\ - a flower\" \\\n -F output_format=\"webp\" \\\n -o \"./flower.webp\"" - parameters: - - schema: - type: string - description: - Your [Stability API key](https://platform.stability.ai/account/keys), - used to authenticate your requests. Although you may have multiple keys - in your account, you should use the same key for all requests to this - API. - minLength: 1 - required: true - name: authorization - in: header - - schema: - type: string - minLength: 1 - description: - The content type of the request body. Do not manually specify - this header; your HTTP client library will automatically include the appropriate - boundary parameter. - example: multipart/form-data - required: true - name: content-type - in: header - - schema: - type: string - default: image/* - description: - Specify `image/*` to receive the bytes of the image directly. - Otherwise specify `application/json` to receive the image as base64 encoded - JSON. - enum: - - image/* - - application/json - required: false - name: accept - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientID" - required: false - name: stability-client-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientUserID" - required: false - name: stability-client-user-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientVersion" - required: false - name: stability-client-version - in: header - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Request" - responses: - "200": - description: Upscale was successful. - headers: - x-request-id: - description: A unique identifier for this request. - schema: - type: string - content-type: - description: - "The format of the generated image.\n\n To receive the\ - \ bytes of the image directly, specify `image/*` in the accept header.\ - \ To receive the bytes base64 encoded inside of a JSON payload, specify\ - \ `application/json`." - examples: - jpeg: - description: raw bytes - value: image/jpeg - jpegJSON: - description: base64 encoded - value: application/json; type=image/jpeg - png: - description: raw bytes - value: image/png - pngJSON: - description: base64 encoded - value: application/json; type=image/png - webp: - description: raw bytes - value: image/webp - webpJSON: - description: base64 encoded - value: application/json; type=image/webp - schema: - type: string - finish-reason: - schema: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: "Indicates the reason the generation finished. - - - - `SUCCESS` = successful generation. - - - `CONTENT_FILTERED` = successful generation, however the output violated - our content moderation - - policy and has been blurred as a result. - - - > **NOTE:** This header is absent on JSON encoded responses because - it is present in the body as `finish_reason`." - seed: - description: "The seed used as random noise for this generation. - - - > **NOTE:** This header is absent on JSON encoded responses because - it is present in the body as `seed`." - example: "343940597" - schema: - type: string - content: - image/jpeg: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated jpeg - application/json; type=image/jpeg: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_200" - image/png: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated png - application/json; type=image/png: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_200" - image/webp: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated webp - application/json; type=image/webp: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_200" - "400": - description: Invalid parameter(s), see the `errors` field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_400" - "403": - description: Your request was flagged by our content moderation system. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityContentModerationResponse" - "413": - description: Your request was larger than 10MiB. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_413" - "422": - description: - Your request was well-formed, but rejected. See the `errors` - field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_422" - examples: - Invalid Language: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: invalid_language - errors: - - English is the only supported language for this service. - Public Figure Detected: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: public_figure - errors: - - Our system detected the likeness of a public figure in your - image. To comply with our guidelines, this request cannot be - processed. Please upload a different image. - "429": - description: You have made more than 150 requests in 10 seconds. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_429" - "500": - description: - An internal error occurred. If the problem persists [contact - support](https://kb.stability.ai/knowledge-base/kb-tickets/new). - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleConservative_Response_500" - operationId: StabilityImageGenrationUpscaleConservative - /proxy/stability/v2beta/stable-image/upscale/creative: - post: - tags: - - API Nodes - - Released - x-excluded: true - summary: Creative Upscale (async) - description: - "Takes images between 64x64 and 1 megapixel and upscales them all - the way to **4K** resolution. Put more - - generally, it can upscale images ~20-40x times while preserving, and often - enhancing, quality. - - Creative Upscale **works best on highly degraded images and is not for photos - of 1mp or above** as it performs - - heavy reimagining (controlled by creativity scale). - - - ### Try it out - - Grab your [API key](https://platform.stability.ai/account/keys) and head over - to [![Open Google Colab](https://platform.stability.ai/svg/google-colab.svg)](https://colab.research.google.com/github/stability-ai/stability-sdk/blob/main/nbs/Stable_Image_API_Public.ipynb#scrollTo=QXxi9tfI425t) - - - - ### How to use - - Please invoke this endpoint with a `POST` request. - - - The headers of the request must include an API key in the `authorization` - field. The body of the request must be - - `multipart/form-data`. - - - The body of the request should include: - - - `image` - - - `prompt` - - - The body may optionally include: - - - `seed` - - - `negative_prompt` - - - `output_format` - - - `creativity` - - - `style_preset` - - - > **Note:** for more details about these parameters please see the request - schema below. - - - ### Results - - After invoking this endpoint with the required parameters, use the `id` in - the response to poll for results at the - - [results/{id} endpoint](#tag/Results/paths/~1v2beta~1results~1%7Bid%7D/get). Rate-limiting - or other errors may occur if you poll more than once every 10 seconds. - - - ### Credits - - Flat rate of 25 credits per successful generation. You will not be charged - for failed generations." - x-codeSamples: - - lang: python - label: Python - source: - "import requests\n\nresponse = requests.post(\n f\"https://api.stability.ai/v2beta/stable-image/upscale/creative\"\ - ,\n headers={\n \"authorization\": f\"Bearer sk-MYAPIKEY\",\n\ - \ \"accept\": \"image/*\"\n },\n files={\n \"image\"\ - : open(\"./kitten-in-space.png\", \"rb\")\n },\n data={\n \"\ - prompt\": \"cute fluffy white kitten floating in space, pastel colors\"\ - ,\n \"output_format\": \"webp\",\n },\n)\n\nprint(\"Generation\ - \ ID:\", response.json().get('id'))" - - lang: javascript - label: JavaScript - source: - "import fs from \"node:fs\";\nimport axios from \"axios\";\nimport\ - \ FormData from \"form-data\";\n\nconst payload = {\n image: fs.createReadStream(\"\ - ./kitten-in-space.png\"),\n prompt: \"cute fluffy white kitten floating\ - \ in space, pastel colors\",\n output_format: \"webp\"\n};\n\nconst response\ - \ = await axios.postForm(\n `https://api.stability.ai/v2beta/stable-image/upscale/creative`,\n\ - \ axios.toFormData(payload, new FormData()),\n {\n validateStatus:\ - \ undefined,\n headers: { \n Authorization: `Bearer sk-MYAPIKEY`\n\ - \ },\n },\n);\n\nconsole.log(\"Generation ID:\", response.data.id);" - - lang: terminal - label: cURL - source: - "curl -f -sS \"https://api.stability.ai/v2beta/stable-image/upscale/creative\"\ - \ \\\n\n\n\n\n\n\n -H \"authorization: Bearer sk-MYAPIKEY\" \\\n -F image=@\"\ - ./kitten-in-rainforest.png\" \\\n -F prompt=\"cute fluffy white kitten\ - \ sitting in a rainforest, pastel colors\" \\\n -F output_format=webp \\\ - \n -o \"./output.json\"" - parameters: - - schema: - type: string - description: - Your [Stability API key](https://platform.stability.ai/account/keys), - used to authenticate your requests. Although you may have multiple keys - in your account, you should use the same key for all requests to this - API. - minLength: 1 - required: true - name: authorization - in: header - - schema: - type: string - minLength: 1 - description: - The content type of the request body. Do not manually specify - this header; your HTTP client library will automatically include the appropriate - boundary parameter. - example: multipart/form-data - required: true - name: content-type - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientID" - required: false - name: stability-client-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientUserID" - required: false - name: stability-client-user-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientVersion" - required: false - name: stability-client-version - in: header - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleCreative_Request" - responses: - "200": - description: Upscale was started. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleCreative_Response_200" - "400": - description: Invalid parameter(s), see the `errors` field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleCreative_Response_400" - "403": - description: Your request was flagged by our content moderation system. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityContentModerationResponse" - "413": - description: Your request was larger than 10MiB. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleCreative_Response_413" - "422": - description: - Your request was well-formed, but rejected. See the `errors` - field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleCreative_Response_422" - examples: - Invalid Language: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: invalid_language - errors: - - English is the only supported language for this service. - Public Figure Detected: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: public_figure - errors: - - Our system detected the likeness of a public figure in your - image. To comply with our guidelines, this request cannot be - processed. Please upload a different image. - "429": - description: You have made more than 150 requests in 10 seconds. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleCreative_Response_429" - "500": - description: - An internal error occurred. If the problem persists [contact - support](https://kb.stability.ai/knowledge-base/kb-tickets/new). - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleCreative_Response_500" - operationId: StabilityImageGenrationUpscaleCreative - /proxy/stability/v2beta/stable-image/upscale/fast: - post: - tags: - - API Nodes - - Released - x-excluded: true - summary: Fast - description: - "Our Fast Upscaler service enhances image resolution by 4x using\ - \ predictive and generative AI. This lightweight and fast service (processing\ - \ in ~1 second) is ideal for enhancing the quality of compressed images, making\ - \ it suitable for social media posts and other applications.\n\n### Try it\ - \ out\nGrab your [API key](https://platform.stability.ai/account/keys) and\ - \ head over to [![Open Google Colab](https://platform.stability.ai/svg/google-colab.svg)](https://colab.research.google.com/github/stability-ai/stability-sdk/blob/main/nbs/Stable_Image_API_Public.ipynb#scrollTo=t1Q4w2uvvza0)\n\ - \n### How to use\n\nPlease invoke this endpoint with a `POST` request.\n\n\ - The headers of the request must include an API key in the `authorization`\ - \ field. The body of the request must be\n`multipart/form-data`, and the `accept`\ - \ header should be set to one of the following:\n\n\n\n - `image/*` to receive\ - \ the image in the format specified by the `output_format` parameter.\n -\ - \ `application/json` to receive the image encoded as base64 in a JSON response.\n\ - \nThe body of the request must include:\n- `image`\n\nOptionally, the body\ - \ of the request may also include:\n- `output_format`\n\n> **Note:** for more\ - \ details about these parameters please see the request schema below.\n\n\ - ### Output\nThe resolution of the generated image is 4 times that of the input\ - \ image with a maximum size of 16 megapixels.\n\n### Credits\nFlat rate of\ - \ 1 credit per successful generation. You will not be charged for failed generations." - x-codeSamples: - - lang: python - label: Python - source: - "import requests\n\nresponse = requests.post(\n f\"https://api.stability.ai/v2beta/stable-image/upscale/fast\"\ - ,\n headers={\n \"authorization\": f\"Bearer sk-MYAPIKEY\",\n\ - \ \"accept\": \"image/*\"\n },\n files={\n \"image\"\ - : open(\"./low-res-flower.jpg\", \"rb\"),\n },\n data={\n \"\ - output_format\": \"webp\",\n },\n)\n\nif response.status_code == 200:\n\ - \ with open(\"./flower.webp\", 'wb') as file:\n file.write(response.content)\n\ - else:\n raise Exception(str(response.json()))" - - lang: javascript - label: JavaScript - source: - "import fs from \"node:fs\";\nimport axios from \"axios\";\nimport\ - \ FormData from \"form-data\";\n\nconst payload = {\n image: fs.createReadStream(\"\ - ./low-res-flower.jpg\"),\n output_format: \"webp\"\n};\n\nconst response\ - \ = await axios.postForm(\n `https://api.stability.ai/v2beta/stable-image/upscale/fast`,\n\ - \ axios.toFormData(payload, new FormData()),\n {\n validateStatus:\ - \ undefined,\n responseType: \"arraybuffer\",\n headers: { \n \ - \ Authorization: `Bearer sk-MYAPIKEY`, \n Accept: \"image/*\" \n \ - \ },\n },\n);\n\nif(response.status === 200) {\n fs.writeFileSync(\"\ - ./flower.webp\", Buffer.from(response.data));\n} else {\n throw new Error(`${response.status}:\ - \ ${response.data.toString()}`);\n}" - - lang: terminal - label: cURL - source: - "curl -f -sS \"https://api.stability.ai/v2beta/stable-image/upscale/fast\"\ - \ \\\n\n\n\n\n\n\n -H \"authorization: Bearer sk-MYAPIKEY\" \\\n -H \"\ - accept: image/*\" \\\n -F image=@\"./low-res-flower.jpg\" \\\n -F output_format=\"\ - webp\" \\\n -o \"./flower.webp\"" - parameters: - - schema: - type: string - description: - Your [Stability API key](https://platform.stability.ai/account/keys), - used to authenticate your requests. Although you may have multiple keys - in your account, you should use the same key for all requests to this - API. - minLength: 1 - required: true - name: authorization - in: header - - schema: - type: string - minLength: 1 - description: - The content type of the request body. Do not manually specify - this header; your HTTP client library will automatically include the appropriate - boundary parameter. - example: multipart/form-data - required: true - name: content-type - in: header - - schema: - type: string - default: image/* - description: - Specify `image/*` to receive the bytes of the image directly. - Otherwise specify `application/json` to receive the image as base64 encoded - JSON. - enum: - - image/* - - application/json - required: false - name: accept - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientID" - required: false - name: stability-client-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientUserID" - required: false - name: stability-client-user-id - in: header - - schema: - $ref: "#/components/schemas/StabilityStabilityClientVersion" - required: false - name: stability-client-version - in: header - requestBody: - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Request" - responses: - "200": - description: Upscale was successful. - headers: - x-request-id: - description: A unique identifier for this request. - schema: - type: string - content-type: - description: - "The format of the generated image.\n\n To receive the\ - \ bytes of the image directly, specify `image/*` in the accept header.\ - \ To receive the bytes base64 encoded inside of a JSON payload, specify\ - \ `application/json`." - examples: - jpeg: - description: raw bytes - value: image/jpeg - jpegJSON: - description: base64 encoded - value: application/json; type=image/jpeg - png: - description: raw bytes - value: image/png - pngJSON: - description: base64 encoded - value: application/json; type=image/png - webp: - description: raw bytes - value: image/webp - webpJSON: - description: base64 encoded - value: application/json; type=image/webp - schema: - type: string - finish-reason: - schema: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: "Indicates the reason the generation finished. - - - - `SUCCESS` = successful generation. - - - `CONTENT_FILTERED` = successful generation, however the output violated - our content moderation - - policy and has been blurred as a result. - - - > **NOTE:** This header is absent on JSON encoded responses because - it is present in the body as `finish_reason`." - seed: - description: "The seed used as random noise for this generation. - - - > **NOTE:** This header is absent on JSON encoded responses because - it is present in the body as `seed`." - example: "343940597" - schema: - type: string - content: - image/jpeg: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated jpeg - application/json; type=image/jpeg: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_200" - image/png: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated png - application/json; type=image/png: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_200" - image/webp: - schema: - type: string - description: "The bytes of the generated image. - - - The `finish-reason` and `seed` will be present as headers." - format: binary - example: The bytes of the generated webp - application/json; type=image/webp: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_200" - "400": - description: Invalid parameter(s), see the `errors` field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_400" - "403": - description: Your request was flagged by our content moderation system. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityContentModerationResponse" - "413": - description: Your request was larger than 10MiB. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_413" - "422": - description: - Your request was well-formed, but rejected. See the `errors` - field for details. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_422" - examples: - Invalid Language: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: invalid_language - errors: - - English is the only supported language for this service. - Public Figure Detected: - value: - id: ff54b236a3acdde1522cb1ba641c43ed - name: public_figure - errors: - - Our system detected the likeness of a public figure in your - image. To comply with our guidelines, this request cannot be - processed. Please upload a different image. - "429": - description: You have made more than 150 requests in 10 seconds. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_429" - "500": - description: - An internal error occurred. If the problem persists [contact - support](https://kb.stability.ai/knowledge-base/kb-tickets/new). - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityImageGenrationUpscaleFast_Response_500" - operationId: StabilityImageGenerationUpscaleFast - /proxy/stability/v2beta/results/{id}: - get: - summary: Get Result - description: Get the result of a generation - operationId: StabilityGetResult - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: id - in: path - required: true - schema: - type: string - description: The ID of the generation result to retrieve. - - name: Accept - in: header - required: false - schema: - type: string - default: image/* - description: Set to image/* to receive image bytes. - responses: - "200": - description: The generated image as JPEG bytes. - content: - image/jpeg: - schema: - type: string - format: binary - application/json; type=image/jpeg: - schema: - type: object - properties: - image: - type: string - description: The generated image, encoded to base64. - example: AAAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: [SUCCESS, CONTENT_FILTERED] - description: |- - The reason the generation finished. - - - `SUCCESS` = successful generation. - - `CONTENT_FILTERED` = successful generation, however the output violated our content moderation - policy and has been blurred as a result. - example: SUCCESS - required: - - image - - finish_reason - - image/png: - schema: - type: string - description: |- - The bytes of the generated image. - - The `finish-reason` and `seed` will be present as headers. - format: binary - example: The bytes of the generated png - - application/json; type=image/png: - schema: - type: object - properties: - image: - type: string - description: The generated image, encoded to base64. - example: AAAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: [SUCCESS, CONTENT_FILTERED] - description: |- - The reason the generation finished. - - - `SUCCESS` = successful generation. - - `CONTENT_FILTERED` = successful generation, however the output violated our content moderation - policy and has been blurred as a result. - example: SUCCESS - required: - - image - - finish_reason - - image/webp: - schema: - type: string - description: |- - The bytes of the generated image. - - The `finish-reason` and `seed` will be present as headers. - format: binary - example: The bytes of the generated webp - - application/json; type=image/webp: - schema: - type: object - properties: - image: - type: string - description: The generated image, encoded to base64. - example: AAAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: [SUCCESS, CONTENT_FILTERED] - description: |- - The reason the generation finished. - - - `SUCCESS` = successful generation. - - `CONTENT_FILTERED` = successful generation, however the output violated our content moderation - policy and has been blurred as a result. - example: SUCCESS - required: - - image - - finish_reason - "202": - description: The generation is still in progress. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityGetResultResponse_202" - "400": - description: Invalid result ID. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityError" - "404": - description: Result not found. - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityError" - "500": - description: - An internal error occurred. If the problem persists [contact - support](https://kb.stability.ai/knowledge-base/kb-tickets/new). - content: - application/json: - schema: - $ref: "#/components/schemas/StabilityError" - /proxy/stability/v2beta/audio/stable-audio-2/text-to-audio: - post: - summary: Proxy request to Stable Audio 2.5 for text-to-audio generation - operationId: stableAudio25TextToAudio - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/StableAudio25TextToAudioRequest" - responses: - "200": - description: Successful response from Stable Audio proxy - content: - application/json: - schema: - $ref: "#/components/schemas/StableAudio25AudioResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/stability/v2beta/audio/stable-audio-2/audio-to-audio: - post: - summary: Proxy request to Stable Audio for audio-to-audio transformation - operationId: stableAudio25AudioToAudio - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/StableAudio25AudioToAudioRequest" - responses: - "200": - description: Successful response from Stable Audio proxy - content: - application/json: - schema: - $ref: "#/components/schemas/StableAudio25AudioResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/stability/v2beta/audio/stable-audio-2/inpaint: - post: - summary: Proxy request to Stable Audio 2.5 for audio inpainting - operationId: stableAudio25Inpaint - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/StableAudio25InpaintRequest" - responses: - "200": - description: Successful response from Stable Audio proxy - content: - application/json: - schema: - $ref: "#/components/schemas/StableAudio25AudioResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/vertexai/gemini/{model}: - post: - summary: Generate content using a specified model. - operationId: GeminiGenerateContent - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: model - in: path - schema: - type: string - required: true - description: Full resource name of the model. - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/GeminiGenerateContentRequest" - responses: - "200": - description: Generated content response. - content: - application/json: - schema: - $ref: "#/components/schemas/GeminiGenerateContentResponse" - "400": - description: Bad Request - "401": - description: Unauthorized - "403": - description: Forbidden - "404": - description: Not Found - "500": - description: Internal Server Error - /proxy/vertexai/imagen/{model}: - parameters: - - name: model - in: path - required: true - schema: - type: string - enum: - - imagen-3.0-generate-002 - - imagen-3.0-generate-001 - - imagen-3.0-fast-generate-001 - - imagegeneration@006 - - imagegeneration@005 - - imagegeneration@002 - description: image generation model - post: - summary: Generate images from a text prompt - operationId: ImagenGenerateImages - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ImagenGenerateImageRequest" - responses: - "200": - description: Successful image generation - content: - application/json: - schema: - $ref: "#/components/schemas/ImagenGenerateImageResponse" - "4XX": - description: Client error - "5XX": - description: Server error - - /proxy/tripo/v2/openapi/task/{task_id}: - get: - summary: Get Task Status - operationId: tripoGetTask - x-excluded: true - tags: - - API Nodes - - Released - parameters: - - name: task_id - in: path - required: true - schema: - type: string - responses: - "200": - description: Request successful - content: - application/json: - schema: - type: object - properties: - code: - $ref: "#/components/schemas/TripoResponseSuccessCode" - data: - $ref: "#/components/schemas/TripoTask" - required: - - code - - data - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - - /proxy/tripo/v2/openapi/upload: - post: - summary: Upload File for 3D Generation - operationId: tripoUploadFile - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - required: - - file - encoding: - profileImage: - contentType: image/png, image/jpeg - responses: - "200": - description: Request successful - content: - application/json: - schema: - type: object - properties: - code: - $ref: "#/components/schemas/TripoResponseSuccessCode" - data: - type: object - properties: - image_token: - type: string - required: - - image_token - required: - - code - - data - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - - /proxy/tripo/v2/openapi/task: - post: - summary: Create 3D Generation Task - operationId: tripoCreateTask - x-excluded: true - tags: - - API Nodes - - Released - requestBody: - content: - application/json: - schema: - oneOf: - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTextToModel" - prompt: - type: string - maxLength: 1024 - negative_prompt: - type: string - maxLength: 1024 - model_version: - $ref: "#/components/schemas/TripoModelVersion" - face_limit: - type: integer - texture: - type: boolean - default: true - pbr: - type: boolean - default: true - text_seed: - type: integer - model_seed: - type: integer - texture_seed: - type: integer - texture_quality: - $ref: "#/components/schemas/TripoTextureQuality" - default: standard - style: - $ref: "#/components/schemas/TripoModelStyle" - auto_size: - type: boolean - default: false - quad: - type: boolean - default: false - geometry_quality: - $ref: "#/components/schemas/TripoGeometryQuality" - required: - - type - - prompt - - type: object - properties: - type: - $ref: "#/components/schemas/TripoImageToModel" - file: - type: object - properties: - type: - type: string - file_token: - type: string - required: - - type - - file_token - model_version: - $ref: "#/components/schemas/TripoModelVersion" - face_limit: - type: integer - texture: - type: boolean - default: true - pbr: - type: boolean - default: true - model_seed: - type: integer - texture_seed: - type: integer - texture_quality: - $ref: "#/components/schemas/TripoTextureQuality" - default: standard - texture_alignment: - $ref: "#/components/schemas/TripoTextureAlignment" - default: original_image - style: - $ref: "#/components/schemas/TripoModelStyle" - auto_size: - type: boolean - default: false - orientation: - $ref: "#/components/schemas/TripoOrientation" - default: default - quad: - type: boolean - default: false - geometry_quality: - $ref: "#/components/schemas/TripoGeometryQuality" - required: - - type - - file - - type: object - properties: - type: - $ref: "#/components/schemas/TripoMultiviewToModel" - files: - type: array - items: - type: object - properties: - type: - type: string - file_token: - type: string - required: - - type - - file_token - mode: - $ref: "#/components/schemas/TripoMultiviewMode" - model_version: - $ref: "#/components/schemas/TripoModelVersion" - orthographic_projection: - type: boolean - default: false - face_limit: - type: integer - texture: - type: boolean - default: true - pbr: - type: boolean - default: true - model_seed: - type: integer - texture_seed: - type: integer - texture_quality: - $ref: "#/components/schemas/TripoTextureQuality" - default: standard - texture_alignment: - $ref: "#/components/schemas/TripoTextureAlignment" - default: original_image - auto_size: - type: boolean - default: false - orientation: - $ref: "#/components/schemas/TripoOrientation" - default: default - quad: - type: boolean - default: false - geometry_quality: - $ref: "#/components/schemas/TripoGeometryQuality" - required: - - type - - files - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTypeTextureModel" - texture: - type: boolean - default: true - pbr: - type: boolean - default: true - model_seed: - type: integer - texture_seed: - type: integer - texture_quality: - $ref: "#/components/schemas/TripoTextureQuality" - texture_alignment: - $ref: "#/components/schemas/TripoTextureAlignment" - default: original_image - original_model_task_id: - type: string - required: - - type - - original_model_task_id - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTypeRefineModel" - draft_model_task_id: - type: string - required: - - type - - draft_model_task_id - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTypeAnimatePrerigcheck" - original_model_task_id: - type: string - required: - - type - - original_model_task_id - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTypeAnimateRig" - original_model_task_id: - type: string - out_format: - $ref: "#/components/schemas/TripoStandardFormat" - default: glb - topology: - $ref: "#/components/schemas/TripoTopology" - spec: - $ref: "#/components/schemas/TripoSpec" - default: "tripo" - required: - - type - - original_model_task_id - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTypeAnimateRetarget" - original_model_task_id: - type: string - out_format: - $ref: "#/components/schemas/TripoStandardFormat" - default: glb - animation: - $ref: "#/components/schemas/TripoAnimation" - bake_animation: - type: boolean - default: true - required: - - type - - original_model_task_id - - animation - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTypeStylizeModel" - style: - $ref: "#/components/schemas/TripoStylizeOptions" - original_model_task_id: - type: string - block_size: - type: integer - default: 80 - required: - - type - - style - - original_model_task_id - - type: object - properties: - type: - $ref: "#/components/schemas/TripoTypeConvertModel" - format: - $ref: "#/components/schemas/TripoConvertFormat" - original_model_task_id: - type: string - quad: - type: boolean - default: false - force_symmetry: - type: boolean - default: false - face_limit: - type: integer - default: 10000 - flatten_bottom: - type: boolean - default: false - flatten_bottom_threshold: - type: number - default: 0.01 - texture_size: - type: integer - default: 4096 - texture_format: - $ref: "#/components/schemas/TripoTextureFormat" - default: JPEG - pivot_to_center_bottom: - type: boolean - default: false - required: - - type - - format - - original_model_task_id - responses: - "200": - description: Request successful - content: - application/json: - schema: - $ref: "#/components/schemas/TripoSuccessTask" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - - /proxy/tripo/v2/openapi/user/balance: - get: - summary: Query Account Balance - operationId: tripoGetBalance - x-excluded: true - tags: - - API Nodes - - Released - responses: - "200": - description: Request successful - content: - application/json: - schema: - type: object - properties: - code: - $ref: "#/components/schemas/TripoResponseSuccessCode" - data: - $ref: "#/components/schemas/TripoBalance" - required: - - code - - data - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "403": - description: Unauthorized access to requested resource - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "404": - description: Resource not found - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "429": - description: Account exception or Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "503": - description: Service temporarily unavailable - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - "504": - description: Server timeout - content: - application/json: - schema: - $ref: "#/components/schemas/TripoErrorResponse" - - /proxy/rodin/api/v2/rodin: - post: - summary: Create 3D generate Task using Rodin API. - operationId: rodinGenerate3DAsset - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/Rodin3DGenerateRequest" - responses: - "200": - description: 3D generate Task submitted successfully. - content: - application/json: - schema: - $ref: "#/components/schemas/Rodin3DGenerateResponse" - "400": - description: Bad Request - "401": - description: Unauthorized - "403": - description: Forbidden - "404": - description: Not Found - "500": - description: Internal Server Error - /proxy/rodin/api/v2/status: - post: - summary: Check Rodin 3D Generate Status. - operationId: rodinCheckStatus - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/Rodin3DCheckStatusRequest" - responses: - "200": - description: Get the status of the 3D Assets generation. - content: - application/json: - schema: - $ref: "#/components/schemas/Rodin3DCheckStatusResponse" - "400": - description: Bad Request - "401": - description: Unauthorized - "403": - description: Forbidden - "404": - description: Not Found - "500": - description: Internal Server Error - /proxy/rodin/api/v2/download: - post: - summary: Get rodin 3D Assets download list. - operationId: rodinDownload - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/Rodin3DDownloadRequest" - responses: - "200": - description: Get the download list for the Rodin 3D Assets. - content: - application/json: - schema: - $ref: "#/components/schemas/Rodin3DDownloadResponse" - "400": - description: Bad Request - "401": - description: Unauthorized - "403": - description: Forbidden - "404": - description: Not Found - "500": - description: Internal Server Error - - /proxy/moonvalley/prompts/{prompt_id}: - get: - x-excluded: true - summary: Get Prompt Details - parameters: - - name: prompt_id - in: path - required: true - schema: - type: string - responses: - "200": - description: Prompt details retrieved - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyPromptResponse" - operationId: MoonvalleyGetPrompt - tags: - - API Nodes - /proxy/moonvalley/prompts/text-to-video: - post: - x-excluded: true - summary: Create Text to Video Prompt - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyTextToVideoRequest" - responses: - "201": - description: Prompt created - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyPromptResponse" - operationId: MoonvalleyTextToVideo - tags: - - API Nodes - parameters: [] - /proxy/moonvalley/prompts/text-to-image: - post: - x-excluded: true - summary: Create Text to Image Prompt - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyTextToImageRequest" - responses: - "201": - description: Prompt created - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyPromptResponse" - operationId: MoonvalleyTextToImage - tags: - - API Nodes - parameters: [] - /proxy/moonvalley/prompts/image-to-video: - post: - x-excluded: true - summary: Create Image to Video Prompt - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyImageToVideoRequest" - responses: - "201": - description: Prompt created - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyPromptResponse" - operationId: MoonvalleyImageToVideo - tags: - - API Nodes - parameters: [] - /proxy/moonvalley/prompts/video-to-video: - post: - x-excluded: true - summary: Create Video to Video Prompt - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyVideoToVideoRequest" - responses: - "201": - description: Prompt created - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyPromptResponse" - operationId: MoonvalleyVideoToVideo - tags: - - API Nodes - parameters: [] - /proxy/moonvalley/prompts/video-to-video/resize: - post: - x-excluded: true - summary: Resize a video - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyResizeVideoRequest" - responses: - "201": - description: Prompt created - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyPromptResponse" - operationId: MoonvalleyVideoToVideoResize - tags: - - API Nodes - parameters: [] - /proxy/moonvalley/uploads: - post: - x-excluded: true - summary: Upload Files - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/MoonvalleyUploadFileRequest" - responses: - "200": - description: File uploaded successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MoonvalleyUploadFileResponse" - operationId: MoonvalleyUpload - tags: - - API Nodes - parameters: [] - /proxy/vidu/img2video: - post: - tags: - - API Nodes - - Released - operationId: ViduImg2Video - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskRequest" - required: true - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskReply" - "400": - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/vidu/reference2video: - post: - tags: - - API Nodes - - Released - operationId: ViduReference2Video - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskRequest" - required: true - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskReply" - "400": - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/vidu/start-end2video: - post: - tags: - - API Nodes - - Released - operationId: ViduStartEnd2Video - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskRequest" - required: true - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskReply" - "400": - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/vidu/text2video: - post: - tags: - - API Nodes - - Released - operationId: ViduText2Video - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskRequest" - required: true - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ViduTaskReply" - "400": - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/vidu/extend: - post: - tags: - - API Nodes - - Released - operationId: ViduExtend - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ViduExtendRequest" - required: true - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ViduExtendReply" - "400": - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/vidu/multiframe: - post: - tags: - - API Nodes - - Released - operationId: ViduMultiframe - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ViduMultiframeRequest" - required: true - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ViduMultiframeReply" - "400": - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/vidu/tasks/{id}/creations: - get: - tags: - - API Nodes - - Released - operationId: ViduGetCreations - parameters: - - name: id - in: path - required: true - schema: - type: string - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ViduGetCreationsReply" - "400": - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/byteplus/api/v3/images/generations: - post: - operationId: byteplusImageGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BytePlusImageGenerationRequest" - responses: - "200": - description: Image generation completed successfully - content: - application/json: - schema: - $ref: "#/components/schemas/BytePlusImageGenerationResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/byteplus/api/v3/contents/generations/tasks: - post: - operationId: byteplusVideoGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BytePlusVideoGenerationRequest" - responses: - "200": - description: Video generation task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/BytePlusVideoGenerationResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/byteplus/api/v3/contents/generations/tasks/{task_id}: - get: - operationId: byteplusVideoGenerationQuery - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The ID of the video generation task to query - responses: - "200": - description: Video generation task information retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/BytePlusVideoGenerationQueryResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wan/api/v1/services/aigc/video-generation/video-synthesis: - post: - operationId: wanVideoGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/WanVideoGenerationRequest" - responses: - "200": - description: Video generation task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WanVideoGenerationResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wan/api/v1/services/aigc/text2image/image-synthesis: - post: - operationId: wanImageGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/WanImageGenerationRequest" - responses: - "200": - description: Image generation task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WanImageGenerationResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wan/api/v1/services/aigc/image2image/image-synthesis: - post: - operationId: wanImage2ImageGeneration - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/WanImage2ImageGenerationRequest" - responses: - "200": - description: Image-to-image generation task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WanImage2ImageGenerationResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wan/api/v1/tasks/{task_id}: - get: - operationId: wanTaskQueryProxy - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: task_id - required: true - schema: - type: string - description: The ID of the generation task to query - responses: - "200": - description: Generation task information retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WanTaskQueryResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/topaz/image/v1/enhance-gen/async: - post: - operationId: topazEnhanceGenAsync - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/TopazEnhanceGenRequest" - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: Image processing request has been successfully created - content: - application/json: - schema: - $ref: "#/components/schemas/TopazEnhanceGenResponse" - /proxy/topaz/image/v1/status/{process_id}: - get: - operationId: topazGetStatus - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: process_id - required: true - schema: - type: string - description: The process ID returned from the enhance-gen request - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: Status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TopazStatusResponse" - /proxy/topaz/image/v1/download/{process_id}: - get: - operationId: topazDownloadResult - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: process_id - required: true - schema: - type: string - description: The process ID returned from the enhance-gen request - responses: - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "200": - description: Presigned download URL for the processed image - content: - application/json: - schema: - $ref: "#/components/schemas/TopazDownloadResponse" - /proxy/topaz/video/: - post: - operationId: topazVideoCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TopazVideoCreateRequest" - responses: - "200": - description: Video enhancement request created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TopazVideoCreateResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/topaz/video/{request_id}/accept: - patch: - operationId: topazVideoAccept - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: request_id - required: true - schema: - type: string - description: The request ID returned from the video create request - responses: - "200": - description: Video request accepted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TopazVideoAcceptResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/topaz/video/{request_id}/complete-upload: - patch: - operationId: topazVideoCompleteUpload - x-excluded: true - tags: - - API Nodes - - Released - summary: Complete Video Upload - description: | - Send metadata of the multi-part uploads to complete the upload and begin processing the video. - - Optionally include the MD5 hash of the source video file to validate successful upload before processing. - security: - - BearerAuth: [] - parameters: - - in: path - name: request_id - required: true - schema: - type: string - format: uuid - description: The request ID returned from the video create request - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TopazVideoCompleteUploadRequest" - responses: - "202": - description: Video upload completed successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TopazVideoCompleteUploadResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/topaz/video/{request_id}/status: - get: - operationId: topazVideoGetStatus - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - in: path - name: request_id - required: true - schema: - type: string - description: The request ID returned from the video create request - responses: - "200": - description: Video status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TopazVideoStatusResponse" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v2/text-to-3d: - post: - summary: Create a Text to 3D Preview Task - description: | - Create a new Text to 3D Preview task. This task costs 20 credits for Meshy-6 models and 5 credits for other models. - operationId: meshyTextTo3DCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyTextTo3DRequest" - responses: - "200": - description: Task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyTextTo3DCreateResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v2/text-to-3d/{task_id}: - get: - summary: Get Text to 3D Task Status - description: Retrieve the status and result of a Text to 3D task. - operationId: meshyTextTo3DGetTask - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The unique identifier of the task - responses: - "200": - description: Task retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyTextTo3DTask" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/image-to-3d: - post: - summary: Create an Image to 3D Task - description: | - Create a new Image to 3D task. This task generates a 3D model from an image input. - operationId: meshyImageTo3DCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyImageTo3DRequest" - responses: - "200": - description: Task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyImageTo3DCreateResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/image-to-3d/{task_id}: - get: - summary: Get Image to 3D Task Status - description: Retrieve the status and result of an Image to 3D task. - operationId: meshyImageTo3DGetTask - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The unique identifier of the task - responses: - "200": - description: Task retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyImageTo3DTask" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/multi-image-to-3d: - post: - summary: Create a Multi-Image to 3D Task - description: | - Create a new Multi-Image to 3D task. This task generates a 3D model from 1 to 4 images of the same object from different angles. - Mesh generation uses Meshy-5 model, while texture generation supports Meshy-6-preview model. - operationId: meshyMultiImageTo3DCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyMultiImageTo3DRequest" - responses: - "200": - description: Task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyMultiImageTo3DCreateResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/multi-image-to-3d/{task_id}: - get: - summary: Get Multi-Image to 3D Task Status - description: Retrieve the status and result of a Multi-Image to 3D task. - operationId: meshyMultiImageTo3DGetTask - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The unique identifier of the task - responses: - "200": - description: Task retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyMultiImageTo3DTask" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/remesh: - post: - summary: Create a Remesh Task - description: | - Create a new remesh task to remesh and export an existing 3D model into various formats. - operationId: meshyRemeshCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRemeshRequest" - responses: - "200": - description: Task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRemeshCreateResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/remesh/{task_id}: - get: - summary: Get Remesh Task Status - description: Retrieve the status and result of a Remesh task. - operationId: meshyRemeshGetTask - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The unique identifier of the task - responses: - "200": - description: Task retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRemeshTask" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/rigging: - post: - summary: Create a Rigging Task - description: | - Create a new rigging task for a given 3D model. Upon successful completion, provides a rigged character in standard formats and optionally basic walking/running animations. - operationId: meshyRiggingCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRiggingRequest" - responses: - "200": - description: Task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRiggingCreateResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/rigging/{task_id}: - get: - summary: Get Rigging Task Status - description: Retrieve the status and result of a Rigging task. - operationId: meshyRiggingGetTask - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The unique identifier of the task - responses: - "200": - description: Task retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRiggingTask" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/retexture: - post: - summary: Create a Retexture Task - description: | - Create a new Retexture task to generate 3D texture from text or image inputs. - operationId: meshyRetextureCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRetextureRequest" - responses: - "200": - description: Task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRetextureCreateResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/retexture/{task_id}: - get: - summary: Get Retexture Task Status - description: Retrieve the status and result of a Retexture task. - operationId: meshyRetextureGetTask - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The unique identifier of the task - responses: - "200": - description: Task retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyRetextureTask" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/animations: - post: - summary: Create an Animation Task - description: | - Create a new task to apply a specific animation action to a previously rigged character. Includes post-processing options. - operationId: meshyAnimationCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyAnimationRequest" - responses: - "200": - description: Task created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyAnimationCreateResponse" - "400": - description: Invalid request parameters - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Authentication failed - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/meshy/openapi/v1/animations/{task_id}: - get: - summary: Get Animation Task Status - description: Retrieve the status and result of an Animation task. - operationId: meshyAnimationGetTask - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: The unique identifier of the task - responses: - "200": - description: Task retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/MeshyAnimationTask" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - default: - description: Error 4xx/5xx - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /proxy/xai/v1/images/generations: - post: - summary: Generate images using xAI Grok Imagine - description: Generate one or more images from a text prompt using the Grok Imagine API. - operationId: xaiImageGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/XAIImageGenerationRequest" - responses: - "200": - description: Images generated successfully - content: - application/json: - schema: - $ref: "#/components/schemas/XAIImageGenerationResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /proxy/xai/v1/images/edits: - post: - summary: Edit images using xAI Grok Imagine - description: Modify an existing image based on a text prompt using the Grok Imagine API. - operationId: xaiImageEdit - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/XAIImageEditRequest" - responses: - "200": - description: Image edited successfully - content: - application/json: - schema: - $ref: "#/components/schemas/XAIImageGenerationResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /proxy/xai/v1/videos/generations: - post: - summary: Generate videos using xAI Grok Imagine - description: | - Generate a video from a text prompt (text-to-video) or from an image with optional text (image-to-video). - Video generation is asynchronous. Returns a request_id to poll for the completed video. - operationId: xaiVideoGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/XAIVideoGenerationRequest" - responses: - "200": - description: Video generation job created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/XAIVideoAsyncResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /proxy/xai/v1/videos/edits: - post: - summary: Edit videos using xAI Grok Imagine - description: | - Edit an existing video based on a text prompt (video-to-video editing). - Video editing is asynchronous. Returns a request_id to poll for the completed video. - Input video limit is 8 seconds. Audio will not be modified. - operationId: xaiVideoEdit - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/XAIVideoEditRequest" - responses: - "200": - description: Video editing job created successfully - content: - application/json: - schema: - $ref: "#/components/schemas/XAIVideoAsyncResponse" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /proxy/xai/v1/videos/{request_id}: - get: - summary: Get xAI video generation result - description: | - Retrieve the result of a video generation or editing request. - Poll this endpoint until the response includes a video object with the completed video URL. - operationId: xaiVideoGetResult - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: request_id - in: path - required: true - schema: - type: string - description: The request ID returned by the video generation or editing endpoint - responses: - "200": - description: Video generation result - content: - application/json: - schema: - $ref: "#/components/schemas/XAIVideoResultResponse" - "202": - description: Video generation still pending - content: - application/json: - schema: - $ref: "#/components/schemas/XAIVideoResultResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "404": - description: Request ID not found - "500": - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - - /proxy/reve/v1/image/create: - post: - summary: Generate an image using Reve - description: Forwards image creation requests to the Reve API and returns the generated image. - operationId: reveImageCreate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ReveImageCreateRequest" - responses: - "200": - description: Successful response from Reve proxy - content: - application/json: - schema: - $ref: "#/components/schemas/ReveImageResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/reve/v1/image/edit: - post: - summary: Edit an image using Reve - description: Forwards image editing requests to the Reve API with an edit instruction and reference image. - operationId: reveImageEdit - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ReveImageEditRequest" - responses: - "200": - description: Successful response from Reve proxy - content: - application/json: - schema: - $ref: "#/components/schemas/ReveImageResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/reve/v1/image/remix: - post: - summary: Remix images using Reve - description: Forwards image remix requests to the Reve API with reference images and a text prompt. - operationId: reveImageRemix - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ReveImageRemixRequest" - responses: - "200": - description: Successful response from Reve proxy - content: - application/json: - schema: - $ref: "#/components/schemas/ReveImageResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - "429": - description: Rate limit exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bria/v2/image/edit: - post: - summary: Edit an image using Bria FIBO - description: | - Edit an existing image using Bria's FIBO Edit API. You can provide: - 1. A source image and a text-based instruction (prompt) - 2. A source image and a structured_instruction - 3. A source image, a mask, and a text-based instruction - 4. A source image, a mask, and a structured_instruction - - This endpoint always uses async mode (sync: false) and returns a status_url to poll for results. - operationId: briaFiboEdit - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BriaFiboEditRequest" - responses: - "202": - description: Request accepted, processing asynchronously - content: - application/json: - schema: - $ref: "#/components/schemas/BriaAsyncResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "422": - description: Content moderation failure - content: - application/json: - schema: - $ref: "#/components/schemas/BriaErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bria/v2/structured_instruction/generate: - post: - summary: Generate a structured instruction from text - description: | - Translates a user's text-based edit instruction and source image/mask into a detailed, - machine-readable structured edit instruction in JSON format. - - This endpoint uses Gemini 2.5 Flash VLM to understand the edit context and returns only - the JSON string without generating an image. - - The resulting structured_instruction can be used as input for the /proxy/bria/v2/image/edit endpoint. - - This endpoint always uses async mode (sync: false) and returns a status_url to poll for results. - operationId: briaStructuredInstructionGenerate - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BriaStructuredInstructionRequest" - responses: - "202": - description: Request accepted, processing asynchronously - content: - application/json: - schema: - $ref: "#/components/schemas/BriaAsyncResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "422": - description: Content moderation failure - content: - application/json: - schema: - $ref: "#/components/schemas/BriaErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bria/v2/status/{request_id}: - get: - summary: Get Bria request status - description: | - Retrieves the current status of an asynchronous Bria request. - - Poll this endpoint until the status is COMPLETED or ERROR. - - Status values: - - `IN_PROGRESS` – Request is being processed. Continue polling. - - `COMPLETED` – Success. Response includes `result.image_url` for images, `result.video_url` for videos, or `result.structured_prompt` for structured prompt generation. Additional optional fields (seed, prompt, refined_prompt) may be included. - - `ERROR` – Processing failed. Check error object for details. - - `UNKNOWN` – Unexpected internal error. - operationId: briaGetStatus - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: request_id - in: path - required: true - schema: - type: string - description: Unique identifier of the request (returned from edit, generate, or remove_background endpoints) - responses: - "200": - description: Status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/BriaStatusResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Request ID not found or expired - content: - application/json: - schema: - $ref: "#/components/schemas/BriaStatusNotFoundResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bria/v2/video/edit/remove_background: - post: - summary: Remove background from a video using Bria - description: | - Initiates an asynchronous background removal job for a video using Bria's API. - - Returns HTTP 202 with request_id and status_url. Poll the status endpoint for results. - - Supported input containers: .mp4, .mov, .webm, .avi, .gif - Supported input codecs: H.264, H.265 (HEVC), VP9, AV1, PhotoJPEG - Max input duration: 60 seconds. Input resolution up to 16000x16000. - operationId: briaVideoRemoveBackground - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BriaVideoRemoveBackgroundRequest" - responses: - "202": - description: Request accepted, processing asynchronously - content: - application/json: - schema: - $ref: "#/components/schemas/BriaAsyncResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/BriaErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "422": - description: Unprocessable Entity - content: - application/json: - schema: - $ref: "#/components/schemas/BriaErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/bria/v2/image/edit/remove_background: - post: - summary: Remove background from an image using Bria - description: | - Remove the background of an image using Bria's RMBG 2.0 model. - - Returns HTTP 202 with request_id and status_url when async (default). - Can return 200 with result directly when sync is true. - - Accepted image formats: JPEG, JPG, PNG, WEBP. - operationId: briaImageRemoveBackground - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/BriaImageRemoveBackgroundRequest" - responses: - "202": - description: Request accepted, processing asynchronously - content: - application/json: - schema: - $ref: "#/components/schemas/BriaAsyncResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/BriaErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "422": - description: Content moderation failure - content: - application/json: - schema: - $ref: "#/components/schemas/BriaErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wavespeed/api/v3/wavespeed-ai/flashvsr: - post: - summary: Submit a FlashVSR video upscaling task - description: | - Submit a video for upscaling using WavespeedAI's FlashVSR model. - FlashVSR is a fast, high-quality video upscaler that boosts resolution and restores clarity - for low-resolution or blurry footage. - - Supported target resolutions: 720p, 1080p, 2k, 4k - - Max clip length: up to 10 minutes - Processing speed: approximately 3-20 seconds of wall time to process 1 second of video - - Returns a task ID that can be used to poll for the result. - operationId: wavespeedFlashVSRSubmit - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/WavespeedFlashVSRRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WavespeedTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wavespeed/api/v3/predictions/{prediction_id}/result: - get: - summary: Get FlashVSR task result - description: | - Retrieve the status and result of a FlashVSR video upscaling task. - - Poll this endpoint until status is "completed" or "failed". - - Status values: - - `created` - Task has been created - - `processing` - Task is being processed - - `completed` - Task completed successfully, outputs array contains result URLs - - `failed` - Task failed, check error field for details - operationId: wavespeedFlashVSRGetResult - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - parameters: - - name: prediction_id - in: path - required: true - schema: - type: string - description: The unique identifier of the prediction/task - responses: - "200": - description: Task result retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WavespeedTaskResultResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "404": - description: Task not found - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wavespeed/api/v3/wavespeed-ai/seedvr2/image: - post: - summary: Submit a SeedVR2 image upscaling task - description: | - Upscale an image using WavespeedAI's SeedVR2 Image Upscaler. - SeedVR2 boosts image resolution and quality, upscaling photos to 2K, 4K, or 8K - for sharp, detailed results. - operationId: wavespeedSeedVR2ImageSubmit - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/WavespeedSeedVR2ImageRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WavespeedTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/wavespeed/api/v3/wavespeed-ai/ultimate-image-upscaler: - post: - summary: Submit an Ultimate Image Upscaler task - description: | - Upscale an image using WavespeedAI's Ultimate Image Upscaler. - The most advanced AI enhancer that reimagines fine detail while upscaling images to 2K, 4K, or 8K. - operationId: wavespeedUltimateImageUpscalerSubmit - x-excluded: true - tags: - - API Nodes - - Released - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/WavespeedSeedVR2ImageRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/WavespeedTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - /proxy/tencent/hunyuan/3d-pro: - post: - summary: Submit Tencent Hunyuan 3D Pro Generation Task - description: | - Submit a task to generate 3D content using Tencent HunYuan Large Model. - Supports text-to-3D and image-to-3D generation. - - This API provides 3 concurrent tasks by default. A new task can be processed - only after the previous one is completed. - - The returned JobId can be used with the query endpoint to check task status. - operationId: tencentHunyuan3DProSubmit - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DProRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DProResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - /proxy/tencent/hunyuan/3d-pro/query: - post: - summary: Query Tencent Hunyuan 3D Pro Task Status - description: | - Query the status and result of a previously submitted 3D generation task. - - Poll this endpoint until the task status indicates completion. - operationId: tencentHunyuan3DProQuery - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryRequest" - responses: - "200": - description: Task status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-uv: - post: - summary: Submit Tencent Hunyuan 3D UV Unfolding Task - description: | - Submit a UV unwrapping task for a 3D model using Tencent Hunyuan. - After inputting the model, UV unwrapping can be performed based on the - model texture to output the corresponding UV map. - - The returned JobId can be used with the query endpoint to check task status. - operationId: tencentHunyuan3DUVSubmit - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DUVRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DUVResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-uv/query: - post: - summary: Query Tencent Hunyuan 3D UV Unfolding Task Status - description: | - Query the status and result of a previously submitted UV unwrapping task. - - Poll this endpoint until the task status indicates completion. - operationId: tencentHunyuan3DUVQuery - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryRequest" - responses: - "200": - description: Task status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-texture-edit: - post: - summary: Submit Tencent Hunyuan 3D Texture Edit Task - description: | - Submit a 3D model texture redrawing task using Tencent Hunyuan. - After inputting the 3D model, perform 3D model texture redrawing based on semantics or images. - Supported format: FBX. 3D model limit: less than 100000 faces. - Either Image or Prompt is required; they cannot coexist. EnablePBR only supports enabling when using Prompt. - - The returned JobId can be used with the query endpoint to check task status. - operationId: tencentHunyuan3DTextureEditSubmit - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DTextureEditRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DUVResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-texture-edit/query: - post: - summary: Query Tencent Hunyuan 3D Texture Edit Task Status - description: | - Query the status and result of a previously submitted 3D texture edit task. - - Poll this endpoint until the task status indicates completion. - operationId: tencentHunyuan3DTextureEditQuery - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryRequest" - responses: - "200": - description: Task status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-part: - post: - summary: Submit Tencent Hunyuan 3D Part (Component Splitting) Task - description: | - Submit a component identification and generation task using Tencent Hunyuan. - Automatically performs component splitting based on the model structure after inputting a 3D model file. - Recommends inputting 3D models generated by AIGC. File size not greater than 100MB, face count not greater than 30,000. FBX format only. - - The returned JobId can be used with the query endpoint to check task status. - operationId: tencentHunyuan3DPartSubmit - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DUVRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DUVResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-part/query: - post: - summary: Query Tencent Hunyuan 3D Part Task Status - description: | - Query the status and result of a previously submitted 3D part (component splitting) task. - - Poll this endpoint until the task status indicates completion. - operationId: tencentHunyuan3DPartQuery - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryRequest" - responses: - "200": - description: Task status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-smart-topology: - post: - summary: Submit Tencent Hunyuan 3D Smart Topology Task - description: | - Submit a 3D smart topology (retopology/polygon reduction) task using Tencent Hunyuan. - Takes an input 3D model and performs intelligent topology optimization. - Supported input formats: GLB, OBJ. File size max 200MB. - - The returned JobId can be used with the query endpoint to check task status. - operationId: tencentHunyuan3DSmartTopologySubmit - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DSmartTopologyRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DUVResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/tencent/hunyuan/3d-smart-topology/query: - post: - summary: Query Tencent Hunyuan 3D Smart Topology Task Status - description: | - Query the status and result of a previously submitted 3D smart topology task. - - Poll this endpoint until the task status indicates completion. - operationId: tencentHunyuan3DSmartTopologyQuery - x-excluded: true - tags: - - API Nodes - - Tencent - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryRequest" - responses: - "200": - description: Task status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TencentHunyuan3DQueryResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/TencentErrorResponse" - - /proxy/hitpaw/api/photo-enhancer: - post: - summary: Submit HitPaw Photo Enhancement Task - description: | - Submit an image processing task using HitPaw Photo Enhancement API. - Supports multiple enhancement models for image super-resolution processing. - - The returned job_id can be used with the task-status endpoint to check processing results. - - **Available Models:** - - Enhancement & Denoise Models (face_2x/4x, face_v2_2x/4x, general_2x/4x, high_fidelity_2x/4x, sharpen_denoise, detail_denoise): - - Max input: 67 MP, Max output: 600 MP - - Supported formats: bmp, jpeg, jpg, png, jfif, tga, tiff, webp, heif - - Generative Models (generative_portrait, generative): - - No input limit, Max output: 8K (33 MP) - - Supported formats: bmp, jpeg, jpg, png, jfif, tga, tiff, webp, heif - operationId: hitpawPhotoEnhancer - x-excluded: true - tags: - - API Nodes - - HitPaw - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawPhotoEnhancerRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawJobResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawErrorResponse" - - /proxy/hitpaw/api/task-status: - post: - summary: Query HitPaw Task Status - description: | - Query the status and result of a previously submitted photo or video enhancement task. - Poll this endpoint until the task status indicates completion (COMPLETED). - - **Status Codes:** - - CONVERTING: Job is currently being processed - - COMPLETED: Job has completed successfully, result is available - - ERROR: Job failed due to an error - operationId: hitpawTaskStatus - x-excluded: true - tags: - - API Nodes - - HitPaw - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawTaskStatusRequest" - responses: - "200": - description: Task status retrieved successfully - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawTaskStatusResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawErrorResponse" - "401": - description: Unauthorized - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawErrorResponse" - - /proxy/hitpaw/api/video-enhancer: - post: - summary: Submit HitPaw Video Enhancement Task - description: | - Submit a video processing task using HitPaw Video Enhancement API. - Uses AI technology to upscale low-resolution videos to high resolution, - eliminate artifacts and noise, and improve clarity and details. - - The returned job_id can be used with the task-status endpoint to check processing results. - - **Video Constraints:** - - Duration: 0.5 seconds to 1 hour - - Maximum output resolution: 36 MP (Total Pixels) - - Supported input formats: dv, mlv, m2ts, m2t, m2v, nut, ser, 3g2, 3gp, asf, divx, f4v, h261, h263, m4v, mkv, mov, mp4, mpeg, mpeg4, mpg, mxf, ogv, rm, rmvb, webm, wmv, dmsm, dvdmedia, dvr-ms, mts, trp, ts, vob, vro, gif, xvid - - Supported output formats: mp4, mov, mkv, m4v, avi, gif - operationId: hitpawVideoEnhancer - x-excluded: true - tags: - - API Nodes - - HitPaw - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawVideoEnhancerRequest" - responses: - "200": - description: Task submitted successfully - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawJobResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawErrorResponse" - "401": - description: Unauthorized - "402": - description: Payment Required - Insufficient credits - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/HitPawErrorResponse" - - /proxy/elevenlabs/v1/text-to-speech/{voice_id}: - post: - summary: ElevenLabs Text to Speech - description: | - Converts text into speech using a specified voice and returns audio. - - The output format can be specified via the output_format query parameter. - Supported formats include MP3, PCM, μ-law, and Opus with various sample rates and bitrates. - operationId: ElevenLabsTextToSpeech - x-excluded: true - tags: - - API Nodes - - ElevenLabs - security: - - BearerAuth: [] - parameters: - - name: voice_id - in: path - description: ID of the voice to use. Use the Get voices endpoint to list all available voices. - required: true - schema: - type: string - - name: enable_logging - in: query - description: When set to false, enables zero retention mode (enterprise only). History features will be unavailable. - required: false - schema: - type: boolean - default: true - - name: optimize_streaming_latency - in: query - description: | - Deprecated. Latency optimization levels (0-4): - 0 - default mode (no latency optimizations) - 1 - normal latency optimizations (~50% improvement) - 2 - strong latency optimizations (~75% improvement) - 3 - max latency optimizations - 4 - max latency with text normalizer off (best latency but may mispronounce) - required: false - schema: - type: integer - minimum: 0 - maximum: 4 - - name: output_format - in: query - description: | - Output format of the generated audio. Formatted as codec_sample_rate_bitrate. - Examples: mp3_22050_32, mp3_44100_128, pcm_16000, pcm_22050, ulaw_8000 - required: false - schema: - type: string - enum: - - mp3_22050_32 - - mp3_44100_32 - - mp3_44100_64 - - mp3_44100_96 - - mp3_44100_128 - - mp3_44100_192 - - pcm_8000 - - pcm_16000 - - pcm_22050 - - pcm_24000 - - pcm_32000 - - pcm_44100 - - pcm_48000 - - ulaw_8000 - - alaw_8000 - - opus_48000_32 - - opus_48000_64 - - opus_48000_96 - - opus_48000_128 - - opus_48000_192 - - wav_8000 - - wav_16000 - - wav_22050 - - wav_24000 - - wav_32000 - - wav_44100 - - wav_48000 - default: mp3_44100_128 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsTTSRequest" - responses: - "200": - description: The generated audio file - content: - audio/mpeg: - schema: - type: string - format: binary - audio/wav: - schema: - type: string - format: binary - audio/ogg: - schema: - type: string - format: binary - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Unauthorized - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsValidationError" - - /proxy/elevenlabs/v1/speech-to-text: - post: - summary: Create transcript (Speech-to-Text) - description: | - Transcribe an audio or video file. If webhook is set to true, the request will be processed - asynchronously and results sent to configured webhooks. When use_multi_channel is true and - the provided audio has multiple channels, a 'transcripts' object with separate transcripts - for each channel is returned. Otherwise, returns a single transcript. The optional - webhook_metadata parameter allows you to attach custom data that will be included in - webhook responses for request correlation and tracking. - operationId: ElevenLabsSpeechToText - x-excluded: true - tags: - - API Nodes - - ElevenLabs - security: - - BearerAuth: [] - parameters: - - name: enable_logging - in: query - description: | - When enable_logging is set to false zero retention mode will be used for the request. - This will mean log and transcript storage features are unavailable for this request. - Zero retention mode may only be used by enterprise customers. - required: false - schema: - type: boolean - default: true - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/ElevenLabsSTTRequest" - responses: - "200": - description: Synchronous transcription result - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsSTTResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Unauthorized - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsValidationError" - - /proxy/elevenlabs/v1/speech-to-speech/{voice_id}: - post: - summary: Voice Changer (Speech-to-Speech) - description: | - Transform audio from one voice to another. Maintain full control over emotion, timing and delivery. - operationId: ElevenLabsSpeechToSpeech - x-excluded: true - tags: - - API Nodes - - ElevenLabs - security: - - BearerAuth: [] - parameters: - - name: voice_id - in: path - description: ID of the voice to be used. Use the Get voices endpoint to list all available voices. - required: true - schema: - type: string - - name: enable_logging - in: query - description: | - When enable_logging is set to false zero retention mode will be used for the request. - This will mean history features are unavailable for this request, including request stitching. - Zero retention mode may only be used by enterprise customers. - required: false - schema: - type: boolean - default: true - - name: optimize_streaming_latency - in: query - description: | - Latency optimization levels (0-4): - 0 - default mode (no latency optimizations) - 1 - normal latency optimizations (~50% improvement) - 2 - strong latency optimizations (~75% improvement) - 3 - max latency optimizations - 4 - max latency with text normalizer off (best latency but may mispronounce) - required: false - schema: - type: integer - nullable: true - - name: output_format - in: query - description: | - Output format of the generated audio. Formatted as codec_sample_rate_bitrate. - Examples: mp3_22050_32, mp3_44100_128, pcm_16000, ulaw_8000 - required: false - schema: - type: string - enum: - - mp3_22050_32 - - mp3_24000_48 - - mp3_44100_32 - - mp3_44100_64 - - mp3_44100_96 - - mp3_44100_128 - - mp3_44100_192 - - pcm_8000 - - pcm_16000 - - pcm_22050 - - pcm_24000 - - pcm_32000 - - pcm_44100 - - pcm_48000 - - ulaw_8000 - - alaw_8000 - - opus_48000_32 - - opus_48000_64 - - opus_48000_96 - - opus_48000_128 - - opus_48000_192 - default: mp3_44100_128 - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/ElevenLabsSpeechToSpeechRequest" - responses: - "200": - description: The generated audio file - content: - audio/mpeg: - schema: - type: string - format: binary - audio/wav: - schema: - type: string - format: binary - audio/ogg: - schema: - type: string - format: binary - application/octet-stream: - schema: - type: string - format: binary - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Unauthorized - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsValidationError" - - /proxy/elevenlabs/v1/audio-isolation: - post: - summary: Audio Isolation - description: | - Removes background noise from audio. Isolates vocals/speech from background sounds. - operationId: ElevenLabsAudioIsolation - x-excluded: true - tags: - - API Nodes - - ElevenLabs - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/ElevenLabsAudioIsolationRequest" - responses: - "200": - description: The isolated audio file - content: - audio/mpeg: - schema: - type: string - format: binary - application/octet-stream: - schema: - type: string - format: binary - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Unauthorized - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsValidationError" - - /proxy/elevenlabs/v1/voices/add: - post: - summary: Create Voice Clone - description: | - Create an instant voice clone and add it to your Voices. - operationId: ElevenLabsCreateVoice - x-excluded: true - tags: - - API Nodes - - ElevenLabs - security: - - BearerAuth: [] - requestBody: - required: true - content: - multipart/form-data: - schema: - $ref: "#/components/schemas/ElevenLabsCreateVoiceRequest" - responses: - "200": - description: Voice created successfully - content: - application/json: - schema: - type: object - properties: - voice_id: - type: string - requires_verification: - type: boolean - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Unauthorized - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsValidationError" - - /proxy/elevenlabs/v1/sound-generation: - post: - summary: Create Sound Effect - description: | - Turn text into sound effects for your videos, voice-overs or video games - using the most advanced sound effects models in the world. - operationId: ElevenLabsSoundGeneration - x-excluded: true - tags: - - API Nodes - - ElevenLabs - security: - - BearerAuth: [] - parameters: - - name: output_format - in: query - description: | - Output format of the generated audio. Formatted as codec_sample_rate_bitrate. - Examples: mp3_22050_32, mp3_44100_128, pcm_16000, ulaw_8000 - required: false - schema: - type: string - enum: - - mp3_22050_32 - - mp3_24000_48 - - mp3_44100_32 - - mp3_44100_64 - - mp3_44100_96 - - mp3_44100_128 - - mp3_44100_192 - - pcm_8000 - - pcm_16000 - - pcm_22050 - - pcm_24000 - - pcm_32000 - - pcm_44100 - - pcm_48000 - - ulaw_8000 - - alaw_8000 - - opus_48000_32 - - opus_48000_64 - - opus_48000_96 - - opus_48000_128 - - opus_48000_192 - default: mp3_44100_128 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsSoundGenerationRequest" - responses: - "200": - description: The generated sound effect audio file - content: - audio/mpeg: - schema: - type: string - format: binary - application/octet-stream: - schema: - type: string - format: binary - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Unauthorized - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsValidationError" - - /proxy/elevenlabs/v1/text-to-dialogue: - post: - summary: Create dialogue (Multi-voice TTS) - description: | - Converts a list of text and voice ID pairs into speech (dialogue) and returns audio. - Useful for generating conversations between multiple characters. - operationId: ElevenLabsTextToDialogue - x-excluded: true - tags: - - API Nodes - - ElevenLabs - security: - - BearerAuth: [] - parameters: - - name: output_format - in: query - description: | - Output format of the generated audio. Formatted as codec_sample_rate_bitrate. - Examples: mp3_22050_32, mp3_44100_128, pcm_16000, ulaw_8000 - required: false - schema: - type: string - enum: - - mp3_22050_32 - - mp3_24000_48 - - mp3_44100_32 - - mp3_44100_64 - - mp3_44100_96 - - mp3_44100_128 - - mp3_44100_192 - - pcm_8000 - - pcm_16000 - - pcm_22050 - - pcm_24000 - - pcm_32000 - - pcm_44100 - - pcm_48000 - - ulaw_8000 - - alaw_8000 - - opus_48000_32 - - opus_48000_64 - - opus_48000_96 - - opus_48000_128 - - opus_48000_192 - default: mp3_44100_128 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsTextToDialogueRequest" - responses: - "200": - description: The generated audio file - content: - audio/mpeg: - schema: - type: string - format: binary - audio/wav: - schema: - type: string - format: binary - audio/ogg: - schema: - type: string - format: binary - application/octet-stream: - schema: - type: string - format: binary - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - "401": - description: Unauthorized - "422": - description: Validation Error - content: - application/json: - schema: - $ref: "#/components/schemas/ElevenLabsValidationError" - - /features: - get: - tags: - - Registry - summary: Get server feature flags - description: Returns the server's feature capabilities - operationId: getFeatures - responses: - '200': - description: Success - content: - application/json: - schema: - $ref: "#/components/schemas/FeaturesResponse" - - /proxy/freepik/v1/ai/image-upscaler: - post: - summary: Upscale an image with Magnific - description: | - This asynchronous endpoint enables image upscaling using advanced AI algorithms. - Upon submission, it returns a unique task_id which can be used to track the progress. - For real-time production use, include the optional webhook_url parameter to receive - an automated notification once the task has been completed. - operationId: freepikMagnificUpscalerCreative - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikMagnificUpscalerCreativeRequest" - responses: - "200": - description: OK - The upscaling process has started - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/image-upscaler/{task_id}: - get: - summary: Get the status of the upscaling task - description: Get the status of the upscaling task - operationId: freepikMagnificUpscalerCreativeGetStatus - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: ID of the task - responses: - "200": - description: OK - The task status is returned - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "404": - description: Task not found - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/image-upscaler-precision-v2: - post: - summary: Upscale an image with Precision V2 - description: | - Upscales an image while adding new visual elements or details (V2). - This endpoint may modify the original image content based on the prompt and inferred context. - Upon submission, it returns a unique task_id which can be used to track the progress. - operationId: freepikMagnificUpscalerPrecisionV2 - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikMagnificUpscalerPrecisionV2Request" - responses: - "200": - description: OK - The upscaling process has started - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/image-upscaler-precision-v2/{task_id}: - get: - summary: Get the status of the Precision V2 upscaling task - description: Returns the current status and output URL of a specific precision upscaler V2 task. - operationId: freepikMagnificUpscalerPrecisionV2GetStatus - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - format: uuid - description: ID of the task - responses: - "200": - description: OK - The task status is returned - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "404": - description: Task not found - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/image-relight: - post: - summary: Relight an image - description: | - Relight an image using AI. This endpoint accepts a variety of parameters to customize the generated images. - operationId: freepikMagnificRelight - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikMagnificRelightRequest" - responses: - "200": - description: OK - The relight process has started - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/image-relight/{task_id}: - get: - summary: Get the status of the relight task - description: Get the status of the relight task - operationId: freepikMagnificRelightGetStatus - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: ID of the task - responses: - "200": - description: OK - The task status is returned - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "404": - description: Task not found - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/skin-enhancer/creative: - post: - summary: Skin enhancer using AI (Creative) - description: Enhance skin in images using AI with the Creative mode. This mode provides more artistic and stylized enhancements. - operationId: freepikSkinEnhancerCreative - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikSkinEnhancerCreativeRequest" - responses: - "200": - description: OK - The skin enhancer process has started - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/skin-enhancer/flexible: - post: - summary: Skin enhancer using AI (Flexible) - description: Enhance skin in images using AI with the Flexible mode. This mode allows you to choose the optimization target for the enhancement. - operationId: freepikSkinEnhancerFlexible - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikSkinEnhancerFlexibleRequest" - responses: - "200": - description: OK - The skin enhancer process has started - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/skin-enhancer/faithful: - post: - summary: Skin enhancer using AI (Faithful) - description: Enhance skin in images using AI with the Faithful mode. This mode preserves the original appearance while improving skin quality. - operationId: freepikSkinEnhancerFaithful - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikSkinEnhancerFaithfulRequest" - responses: - "200": - description: OK - The skin enhancer process has started - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/skin-enhancer/{task_id}: - get: - summary: Get the status of one skin enhancer task - description: Get the status of a skin enhancer task (works for both Creative and Faithful modes) - operationId: freepikSkinEnhancerGetStatus - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: ID of the task - responses: - "200": - description: OK - The task status is returned - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "404": - description: Task not found - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/image-style-transfer: - post: - summary: Style transfer an image - description: Style transfer an image using AI. - operationId: freepikMagnificStyleTransfer - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikMagnificStyleTransferRequest" - responses: - "200": - description: OK - The style transfer process has started - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskData" - "400": - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - - /proxy/freepik/v1/ai/image-style-transfer/{task_id}: - get: - summary: Get the status of the style transfer task - description: Get the status of the style transfer task - operationId: freepikMagnificStyleTransferGetStatus - tags: - - Freepik - - Proxy - security: - - BearerAuth: [] - parameters: - - name: task_id - in: path - required: true - schema: - type: string - description: ID of the task - responses: - "200": - description: OK - The task status is returned - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikTaskResponse" - "404": - description: Task not found - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/FreepikErrorResponse" - -components: - schemas: - FreepikMagnificUpscalerCreativeRequest: - type: object - required: - - image - properties: - image: - type: string - description: Base64 image or URL to upscale. The resulted image can't exceed maximum allowed size of 25.3 million pixels. - webhook_url: - type: string - format: uri - description: Optional callback URL that will receive asynchronous notifications whenever the task changes status. - example: "https://www.example.com/webhook" - scale_factor: - type: string - enum: ["2x", "4x", "8x", "16x"] - default: "2x" - description: Configure scale factor of the image. For higher scales, the image will take longer to process. - optimized_for: - type: string - enum: [standard, soft_portraits, hard_portraits, art_n_illustration, videogame_assets, nature_n_landscapes, films_n_photography, 3d_renders, science_fiction_n_horror] - default: standard - description: Styles to optimize the upscale process. - prompt: - type: string - description: Prompt to guide the upscale process. Reusing the same prompt for AI-generated images will improve the results. - creativity: - type: integer - minimum: -10 - maximum: 10 - default: 0 - description: Increase or decrease AI's creativity. Valid values range [-10, 10]. - hdr: - type: integer - minimum: -10 - maximum: 10 - default: 0 - description: Increase or decrease the level of definition and detail. Valid values range [-10, 10]. - resemblance: - type: integer - minimum: -10 - maximum: 10 - default: 0 - description: Adjust the level of resemblance to the original image. Valid values range [-10, 10]. - fractality: - type: integer - minimum: -10 - maximum: 10 - default: 0 - description: Control the strength of the prompt and intricacy per square pixel. Valid values range [-10, 10]. - engine: - type: string - enum: [automatic, magnific_illusio, magnific_sharpy, magnific_sparkle] - default: automatic - description: Magnific model engines. - - FreepikTaskResponse: - type: object - required: - - data - properties: - data: - $ref: "#/components/schemas/FreepikTaskData" - FreepikTaskData: - type: object - properties: - task_id: - type: string - format: uuid - example: "046b6c7f-0b8a-43b9-b35d-6489e6daee91" - status: - type: string - enum: [CREATED, IN_PROGRESS, COMPLETED, FAILED] - generated: - type: array - items: - type: string - format: uri - description: URLs to the generated images. - FreepikErrorResponse: - type: object - properties: - error: - type: string - message: - type: string - - FreepikSkinEnhancerFlexibleRequest: - type: object - required: - - image - properties: - image: - type: string - description: Input image. Supports Base64 encoding or HTTPS URL (must be publicly accessible). - example: "https://example.com/portrait.jpg" - sharpen: - type: integer - minimum: 0 - maximum: 100 - default: 0 - description: Sharpening intensity - smart_grain: - type: integer - minimum: 0 - maximum: 100 - default: 2 - description: Smart grain intensity - optimized_for: - type: string - enum: [enhance_skin, improve_lighting, enhance_everything, transform_to_real, no_make_up] - default: enhance_skin - description: Optimization target for flexible skin enhancer - webhook_url: - type: string - format: uri - description: Optional callback URL for async notifications. - example: "https://www.example.com/webhook" - - FreepikSkinEnhancerFaithfulRequest: - type: object - required: - - image - properties: - image: - type: string - description: Input image. Supports Base64 encoding or HTTPS URL (must be publicly accessible). - example: "https://example.com/portrait.jpg" - sharpen: - type: integer - minimum: 0 - maximum: 100 - default: 0 - description: Sharpening intensity - smart_grain: - type: integer - minimum: 0 - maximum: 100 - default: 2 - description: Smart grain intensity - skin_detail: - type: integer - minimum: 0 - maximum: 100 - default: 80 - description: Skin detail enhancement level - webhook_url: - type: string - format: uri - description: Optional callback URL for async notifications. - example: "https://www.example.com/webhook" - - FreepikSkinEnhancerCreativeRequest: - type: object - required: - - image - properties: - image: - type: string - description: Input image. Supports Base64 encoding or HTTPS URL (must be publicly accessible). - example: "https://example.com/portrait.jpg" - sharpen: - type: integer - minimum: 0 - maximum: 100 - default: 0 - description: Sharpening intensity - smart_grain: - type: integer - minimum: 0 - maximum: 100 - default: 2 - description: Smart grain intensity - webhook_url: - type: string - format: uri - description: Optional callback URL for async notifications. - example: "https://www.example.com/webhook" - - FreepikMagnificStyleTransferRequest: - type: object - required: - - image - - reference_image - properties: - image: - type: string - description: Base64 or URL of the image to do the style transfer - reference_image: - type: string - description: Base64 or URL of the reference image for style transfer - webhook_url: - type: string - format: uri - description: Optional callback URL for async notifications. - example: "https://www.example.com/webhook" - prompt: - type: string - description: Prompt for the AI model - style_strength: - type: integer - minimum: 0 - maximum: 100 - default: 100 - description: Percentage of style strength - structure_strength: - type: integer - minimum: 0 - maximum: 100 - default: 50 - description: Allows to maintain the structure of the original image - is_portrait: - type: boolean - default: false - description: Indicates whether the image should be processed as a portrait. - portrait_style: - type: string - enum: [standard, pop, super_pop] - default: standard - description: Visual style applied to portrait images. Only used if is_portrait is true. - portrait_beautifier: - type: string - enum: [beautify_face, beautify_face_max] - description: Facial beautification on portrait images. Only used if is_portrait is true. - flavor: - type: string - enum: [faithful, gen_z, psychedelia, detaily, clear, donotstyle, donotstyle_sharp] - default: faithful - description: Flavor of the transferring style - engine: - type: string - enum: [balanced, definio, illusio, 3d_cartoon, colorful_anime, caricature, real, super_real, softy] - default: balanced - description: Engine preset for style transfer - fixed_generation: - type: boolean - default: false - description: When enabled, using the same settings will consistently produce the same image. - - FreepikMagnificRelightRequest: - type: object - required: - - image - properties: - image: - type: string - description: Base64 or URL of the image to do the relight - webhook_url: - type: string - format: uri - description: Optional callback URL that will receive asynchronous notifications whenever the task changes status. - example: "https://www.example.com/webhook" - prompt: - type: string - description: | - You can guide the generation process and influence the light transfer with a descriptive prompt. - IMPORTANT: You can emphasize specific aspects of the light in your prompt by using a number in parentheses, ranging from 1 to 1.4, like "(dark scene:1.3)". - transfer_light_from_reference_image: - type: string - description: Base64 or URL of the reference image for light transfer. Incompatible with 'transfer_light_from_lightmap' - transfer_light_from_lightmap: - type: string - description: Base64 or URL of the lightmap for light transfer. Incompatible with 'transfer_light_from_reference_image' - light_transfer_strength: - type: integer - minimum: 0 - maximum: 100 - default: 100 - description: Level of light transfer intensity. 0% keeps closest to original, 100% is maximum transfer. - interpolate_from_original: - type: boolean - default: false - description: When enabled, makes the final image interpolate from the original using the light transfer strength slider. - change_background: - type: boolean - default: true - description: When enabled, changes the background based on prompt and/or reference image. Useful for product placement and portraits. - style: - type: string - enum: [standard, darker_but_realistic, clean, smooth, brighter, contrasted_n_hdr, just_composition] - default: standard - description: Style preset for the relight operation. - preserve_details: - type: boolean - default: true - description: Maintains texture and small details of the original image. Good for product photography, texts, etc. - advanced_settings: - type: object - properties: - whites: - type: integer - minimum: 0 - maximum: 100 - default: 50 - description: Adjust the level of white color in the image. - blacks: - type: integer - minimum: 0 - maximum: 100 - default: 50 - description: Adjust the level of black color in the image. - brightness: - type: integer - minimum: 0 - maximum: 100 - default: 50 - description: Adjust the level of brightness in the image. - contrast: - type: integer - minimum: 0 - maximum: 100 - default: 50 - description: Adjust the level of contrast in the image. - saturation: - type: integer - minimum: 0 - maximum: 100 - default: 50 - description: Adjust the level of saturation in the image. - engine: - type: string - enum: [automatic, balanced, cool, real, illusio, fairy, colorful_anime, hard_transform, softy] - default: automatic - description: | - Engine preset for relighting: - - balanced: Well-rounded, general-purpose option - - cool: Brighter with cooler tones - - real: Aims to enhance photographic quality (Experimental) - - illusio: Optimized for illustrations and drawings - - fairy: Suited for fantasy-themed images - - colorful_anime: Ideal for anime, cartoons, and vibrant colors - - hard_transform: Significantly alters the original image - - softy: Slightly softer effect, suitable for graphic designs - transfer_light_a: - type: string - enum: [automatic, low, medium, normal, high, high_on_faces] - default: automatic - description: Adjusts the intensity of light transfer. - transfer_light_b: - type: string - enum: [automatic, composition, straight, smooth_in, smooth_out, smooth_both, reverse_both, soft_in, soft_out, soft_mid, strong_mid, style_shift, strong_shift] - default: automatic - description: Also modifies light transfer intensity. Can be combined with transfer_light_a for varied effects. - fixed_generation: - type: boolean - default: false - description: When enabled, using the same settings will consistently produce the same image. - - FreepikMagnificUpscalerPrecisionV2Request: - type: object - required: - - image - properties: - image: - type: string - description: | - Source image to upscale. Accepts either: - - A publicly accessible HTTPS URL pointing to the image - - A base64-encoded image string - webhook_url: - type: string - format: uri - description: Optional callback URL that will receive asynchronous notifications when the upscaling task completes. - sharpen: - type: integer - minimum: 0 - maximum: 100 - default: 7 - description: Image sharpness intensity control. Higher values increase edge definition and clarity. - smart_grain: - type: integer - minimum: 0 - maximum: 100 - default: 7 - description: Intelligent grain/texture enhancement. Higher values add more fine-grained texture. - ultra_detail: - type: integer - minimum: 0 - maximum: 100 - default: 30 - description: Ultra detail enhancement level. Higher values create more intricate details. - flavor: - type: string - enum: [sublime, photo, photo_denoiser] - description: | - Image processing flavor: - - sublime: Optimized for artistic and illustrated images - - photo: Optimized for photographic images - - photo_denoiser: Specialized for photos with noise reduction - scale_factor: - type: integer - minimum: 2 - maximum: 16 - description: Image scaling factor. Determines how much larger the output will be compared to input. - - SubscriptionTier: - type: string - description: The subscription tier level - enum: - - FREE - - STANDARD - - CREATOR - - PRO - - FOUNDERS_EDITION - SubscriptionDuration: - type: string - description: The subscription billing duration - enum: - - MONTHLY - - ANNUAL - FeaturesResponse: - type: object - properties: - partner_node_conversion_rate: - type: number - description: The conversion rate for partner nodes - example: 0.5 - required: - - partner_node_conversion_rate - ClaimMyNodeRequest: - type: object - properties: - GH_TOKEN: - type: string - description: GitHub token to verify if the user owns the repo of the node - required: - - GH_TOKEN - BulkNodeVersionsRequest: - type: object - properties: - node_versions: - type: array - items: - $ref: "#/components/schemas/NodeVersionIdentifier" - description: List of node ID and version pairs to retrieve - required: - - node_versions - NodeVersionIdentifier: - type: object - properties: - node_id: - type: string - description: The unique identifier of the node - version: - type: string - description: The version of the node - required: - - node_id - - version - BulkNodeVersionsResponse: - type: object - properties: - node_versions: - type: array - items: - $ref: "#/components/schemas/BulkNodeVersionResult" - description: List of retrieved node versions with their status - required: - - node_versions - BulkNodeVersionResult: - type: object - properties: - identifier: - $ref: "#/components/schemas/NodeVersionIdentifier" - description: The node and version identifier - status: - type: string - enum: [success, not_found, error] - description: Status of the retrieval operation - node_version: - $ref: "#/components/schemas/NodeVersion" - description: The retrieved node version data (only present if status is success) - error_message: - type: string - description: Error message if retrieval failed (only present if status is error) - required: - - identifier - - status - PersonalAccessToken: - type: object - properties: - id: - type: string - format: uuid - description: Unique identifier for the GitCommit - name: - type: string - description: Required. The name of the token. Can be a simple description. - description: - type: string - description: Optional. A more detailed description of the token's intended use. - createdAt: - type: string - format: date-time - description: "[Output Only]The date and time the token was created." - token: - type: string - description: "[Output Only]. The personal access token. Only returned during creation." - GitCommit: - type: object - properties: - id: - type: string - format: uuid - description: Unique identifier for the GitCommit - commit_hash: - type: string - description: The hash of the commit - commit_name: - type: string - description: The name of the commit - branch_name: - type: string - description: The branch where the commit was made - author: - type: string - description: The author of the commit - timestamp: - type: string - format: date-time - description: The timestamp when the commit was made - GitCommitSummary: - type: object - properties: - commit_hash: - type: string - description: The hash of the commit - commit_name: - type: string - description: The name of the commit - branch_name: - type: string - description: The branch where the commit was made - author: - type: string - description: The author of the commit - timestamp: - type: string - format: date-time - description: The timestamp when the commit was made - status_summary: - type: object - description: A map of operating system to status pairs - additionalProperties: - type: string - User: - type: object - properties: - id: - type: string - description: The unique id for this user. - email: - type: string - description: The email address for this user. - name: - type: string - description: The name for this user. - isApproved: - type: boolean - description: Indicates if the user is approved. - isAdmin: - type: boolean - description: Indicates if the user has admin privileges. - PublisherUser: - type: object - properties: - id: - type: string - description: The unique id for this user. - email: - type: string - description: The email address for this user. - name: - type: string - description: The name for this user. - ErrorResponse: - type: object - properties: - error: - type: string - message: - type: string - required: - - error - - message - CreateCouponRequest: - type: object - properties: - name: - type: string - description: Name of the coupon displayed to customers - percent_off: - type: number - format: double - description: Percent off discount (0-100) - minimum: 0 - maximum: 100 - amount_off: - type: integer - description: Amount off in cents - minimum: 0 - currency: - type: string - description: Currency for amount_off (required if amount_off is set) - enum: [usd] - duration: - type: string - description: How long the coupon lasts - enum: [once, repeating, forever] - default: once - duration_in_months: - type: integer - description: Required if duration is repeating - minimum: 1 - max_redemptions: - type: integer - description: Maximum number of times this coupon can be redeemed - minimum: 1 - redeem_by: - type: integer - format: int64 - description: Unix timestamp specifying the last time at which the coupon can be redeemed - metadata: - type: object - additionalProperties: - type: string - description: Set of key-value pairs for storing additional information - UpdateCouponRequest: - type: object - properties: - name: - type: string - description: Name of the coupon displayed to customers - metadata: - type: object - additionalProperties: - type: string - description: Set of key-value pairs for storing additional information - CouponResponse: - type: object - properties: - id: - type: string - description: The Stripe coupon ID - name: - type: string - description: Name of the coupon displayed to customers - percent_off: - type: number - format: double - description: Percent off discount (0-100) - amount_off: - type: integer - description: Amount off in cents - currency: - type: string - description: Currency for amount_off - duration: - type: string - description: How long the coupon lasts - enum: [once, repeating, forever] - duration_in_months: - type: integer - description: Number of months for repeating coupons - max_redemptions: - type: integer - description: Maximum number of times this coupon can be redeemed - times_redeemed: - type: integer - description: Number of times this coupon has been redeemed - redeem_by: - type: integer - format: int64 - description: Unix timestamp specifying the last time at which the coupon can be redeemed - valid: - type: boolean - description: Whether the coupon can still be redeemed - metadata: - type: object - additionalProperties: - type: string - description: Set of key-value pairs for storing additional information - required: - - id - - duration - - valid - CreatePromoCodeRequest: - type: object - properties: - coupon_id: - type: string - description: The Stripe coupon ID to create the promotional code for - expire_days: - type: integer - description: Number of days until the promotion code expires - minimum: 1 - default: 30 - max_redemptions: - type: integer - description: Maximum number of times this code can be redeemed - minimum: 1 - required: - - coupon_id - UpdatePromoCodeRequest: - type: object - properties: - active: - type: boolean - description: Whether the promo code is active - metadata: - type: object - additionalProperties: - type: string - description: Set of key-value pairs for storing additional information - PromoCodeResponse: - type: object - properties: - id: - type: string - description: The Stripe promotion code ID - code: - type: string - description: The generated promotional code - coupon_id: - type: string - description: The Stripe coupon ID associated with this promo code - active: - type: boolean - description: Whether the promo code is currently active - expires_at: - type: integer - format: int64 - description: Unix timestamp when the promo code expires - max_redemptions: - type: integer - description: Maximum number of times this code can be redeemed - times_redeemed: - type: integer - description: Number of times this code has been redeemed - metadata: - type: object - additionalProperties: - type: string - description: Set of key-value pairs for storing additional information - required: - - id - - code - - coupon_id - - active - RunwayTextToImageRequest: - type: object - properties: - promptText: - type: string - maxLength: 1000 - description: Text prompt for the image generation - model: - type: string - enum: [gen4_image] - description: Model to use for generation - ratio: - $ref: "#/components/schemas/RunwayTextToImageAspectRatioEnum" - description: The resolution (aspect ratio) of the output image - referenceImages: - type: array - items: - type: object - properties: - uri: - type: string - description: A HTTPS URL or data URI containing an encoded image - description: Array of reference images to guide the generation - required: - - promptText - - model - - ratio - ActionJobResult: - type: object - properties: - id: - type: string - format: uuid - description: Unique identifier for the job result - workflow_name: - type: string - description: Name of the workflow - operating_system: - type: string - description: Operating system used - python_version: - type: string - description: PyTorch version used - pytorch_version: - type: string - description: PyTorch version used - action_run_id: - type: string - description: Identifier of the run this result belongs to - action_job_id: - type: string - description: Identifier of the job this result belongs to - cuda_version: - type: string - description: CUDA version used - branch_name: - type: string - description: Name of the relevant git branch - commit_hash: - type: string - description: The hash of the commit - commit_id: - type: string - description: The ID of the commit - commit_time: - type: integer - format: int64 - description: The Unix timestamp when the commit was made - commit_message: - type: string - description: The message of the commit - comfy_run_flags: - type: string - description: The comfy run flags. E.g. `--low-vram` - git_repo: - type: string - description: The repository name - pr_number: - type: string - description: The pull request number - start_time: - type: integer - format: int64 - description: The start time of the job as a Unix timestamp. - end_time: - type: integer - format: int64 - description: The end time of the job as a Unix timestamp. - avg_vram: - type: integer - description: The average VRAM used by the job - peak_vram: - type: integer - description: The peak VRAM used by the job - job_trigger_user: - type: string - description: The user who triggered the job. - author: - type: string - description: The author of the commit - machine_stats: - $ref: "#/components/schemas/MachineStats" - status: - $ref: "#/components/schemas/WorkflowRunStatus" - storage_file: - $ref: "#/components/schemas/StorageFile" - StorageFile: - type: object - properties: - id: - type: string - format: uuid - description: Unique identifier for the storage file - file_path: - type: string - description: Path to the file in storage - public_url: - type: string - description: Public URL - Publisher: - type: object - properties: - name: - type: string - id: - type: string - description: The unique identifier for the publisher. It's akin to a username. Should be lowercase. - description: - type: string - website: - type: string - support: - type: string - source_code_repo: - type: string - logo: - type: string - description: URL to the publisher's logo. - createdAt: - type: string - format: date-time - description: The date and time the publisher was created. - members: - type: array - items: - $ref: "#/components/schemas/PublisherMember" - description: A list of members in the publisher. - status: - $ref: "#/components/schemas/PublisherStatus" - description: The status of the publisher. - PublisherMember: - type: object - properties: - id: - type: string - description: The unique identifier for the publisher member. - user: - $ref: "#/components/schemas/PublisherUser" - description: The user associated with this publisher member. - role: - type: string - description: The role of the user in the publisher. - Node: - type: object - properties: - id: - type: string - description: "The unique identifier of the node." - name: - type: string - description: The display name of the node. - category: - type: string - description: "DEPRECATED: The category of the node. Use 'tags' field instead. This field will be removed in a future version." - deprecated: true - description: - type: string - author: - type: string - license: - type: string - description: The path to the LICENSE file in the node's repository. - icon: - type: string - description: URL to the node's icon. - repository: - type: string - description: URL to the node's repository. - tags: - type: array - items: - type: string - tags_admin: - type: array - items: - type: string - description: Admin-only tags for security warnings and admin metadata - supported_os: - type: array - items: - type: string - description: List of operating systems that this node supports - supported_accelerators: - type: array - items: - type: string - description: List of accelerators (e.g. CUDA, DirectML, ROCm) that this node supports - supported_comfyui_version: - type: string - description: Supported versions of ComfyUI - supported_comfyui_frontend_version: - type: string - description: Supported versions of ComfyUI frontend - latest_version: - $ref: "#/components/schemas/NodeVersion" - description: The latest version of the node. - rating: - type: number - description: The average rating of the node. - downloads: - type: integer - description: The number of downloads of the node. - publisher: - $ref: "#/components/schemas/Publisher" - description: The publisher of the node. - status: - $ref: "#/components/schemas/NodeStatus" - description: The status of the node. - status_detail: - type: string - description: The status detail of the node. - translations: - type: object - additionalProperties: - type: object - additionalProperties: true - description: Translations of node metadata in different languages. - search_ranking: - type: integer - description: A numerical value representing the node's search ranking, used for sorting search results. - preempted_comfy_node_names: - type: array - items: - type: string - description: A list of Comfy node names that are preempted by this node. - banner_url: - type: string - description: URL to the node's banner. - github_stars: - type: integer - description: Number of stars on the GitHub repository. - created_at: - type: string - format: date-time - description: The date and time when the node was created - NodeVersion: - type: object - properties: - id: - type: string - version: - type: string - description: The version identifier, following semantic versioning. Must be unique for the node. - createdAt: - type: string - format: date-time - description: The date and time the version was created. - changelog: - type: string - description: Summary of changes made in this version - dependencies: - type: array - items: - type: string - description: A list of pip dependencies required by the node. - downloadUrl: - type: string - description: "[Output Only] URL to download this version of the node" - deprecated: - type: boolean - description: Indicates if this version is deprecated. - status: - $ref: "#/components/schemas/NodeVersionStatus" - description: The status of the node version. - status_reason: - type: string - tags: - type: array - items: - type: string - tags_admin: - type: array - items: - type: string - description: Admin-only tags for security warnings and admin metadata - node_id: - type: string - description: The unique identifier of the node. - comfy_node_extract_status: - type: string - description: The status of comfy node extraction process. - supported_comfyui_version: - type: string - description: Supported versions of ComfyUI - supported_comfyui_frontend_version: - type: string - description: Supported versions of ComfyUI frontend - supported_os: - type: array - items: - type: string - description: List of operating systems that this node supports - supported_accelerators: - type: array - items: - type: string - description: List of accelerators (e.g. CUDA, DirectML, ROCm) that this node supports - ComfyNode: - type: object - properties: - comfy_node_name: - type: string - description: Unique identifier for the node - category: - type: string - description: UI category where the node is listed, used for grouping nodes. - description: - type: string - description: Brief description of the node's functionality or purpose. - input_types: - type: string - description: Defines input parameters - deprecated: - type: boolean - description: Indicates if the node is deprecated. Deprecated nodes are hidden in the UI. - experimental: - type: boolean - description: Indicates if the node is experimental, subject to changes or removal. - output_is_list: - type: array - items: - type: boolean - description: Boolean values indicating if each output is a list. - return_names: - type: string - description: Names of the outputs for clarity in workflows. - return_types: - type: string - description: Specifies the types of outputs produced by the node. - function: - type: string - description: Name of the entry-point function to execute the node. - policy: - $ref: "#/components/schemas/ComfyNodePolicy" - description: The policy associated with the comfy node. - ComfyNodeCloudBuildInfo: - type: object - properties: - project_id: - type: string - project_number: - type: string - location: - type: string - build_id: - type: string - Error: - type: object - properties: - message: - type: string - description: A clear and concise description of the error. - details: - type: array - items: - type: string - description: Optional detailed information about the error or hints for resolving it. - # ======= Request body Definitions ======================= - NodeVersionUpdateRequest: - type: object - properties: - changelog: - type: string - description: The changelog describing the version changes. - deprecated: - type: boolean - description: Whether the version is deprecated. - # Enum of Node Status - NodeStatus: - type: string - enum: - - NodeStatusActive - - NodeStatusDeleted - - NodeStatusBanned - # Enum of Comfy Node Policy - ComfyNodePolicy: - type: string - enum: - - ComfyNodePolicyActive - - ComfyNodePolicyBanned - - ComfyNodePolicyLocalOnly - ComfyNodeUpdateRequest: - type: object - properties: - category: - type: string - description: UI category where the node is listed, used for grouping nodes. - description: - type: string - description: Brief description of the node's functionality or purpose. - input_types: - type: string - description: Defines input parameters - deprecated: - type: boolean - description: Indicates if the node is deprecated. Deprecated nodes are hidden in the UI. - experimental: - type: boolean - description: Indicates if the node is experimental, subject to changes or removal. - output_is_list: - type: array - items: - type: boolean - description: Boolean values indicating if each output is a list. - return_names: - type: string - description: Names of the outputs for clarity in workflows. - return_types: - type: string - description: Specifies the types of outputs produced by the node. - function: - type: string - description: Name of the entry-point function to execute the node. - policy: - $ref: "#/components/schemas/ComfyNodePolicy" - description: The policy associated with the comfy node. - # Enum of Node Version Status - NodeVersionStatus: - type: string - enum: - - NodeVersionStatusActive - - NodeVersionStatusDeleted - - NodeVersionStatusBanned - - NodeVersionStatusPending - - NodeVersionStatusFlagged - PublisherStatus: - type: string - enum: - - PublisherStatusActive - - PublisherStatusBanned - WorkflowRunStatus: - type: string - enum: - - WorkflowRunStatusStarted - - WorkflowRunStatusFailed - - WorkflowRunStatusCompleted - MachineStats: - type: object - properties: - machine_name: - type: string - description: Name of the machine. - os_version: - type: string - description: The operating system version. eg. Ubuntu Linux 20.04 - gpu_type: - type: string - description: The GPU type. eg. NVIDIA Tesla K80 - cpu_capacity: - type: string - description: Total CPU on the machine. - initial_cpu: - type: string - description: Initial CPU available before the job starts. - memory_capacity: - type: string - description: Total memory on the machine. - initial_ram: - type: string - description: Initial RAM available before the job starts. - vram_time_series: - type: object - description: Time series of VRAM usage. - disk_capacity: - type: string - description: Total disk capacity on the machine. - initial_disk: - type: string - description: Initial disk available before the job starts. - pip_freeze: - type: string - description: The pip freeze output - Customer: - type: object - properties: - id: - type: string - description: The firebase UID of the user - email: - type: string - description: The email address for this user - name: - type: string - description: The name for this user - createdAt: - type: string - format: date-time - description: The date and time the user was created - updatedAt: - type: string - format: date-time - description: The date and time the user was last updated - is_admin: - type: boolean - description: Whether the user is an admin - stripe_id: - type: string - description: The Stripe customer ID - metronome_id: - type: string - description: The Metronome customer ID - has_fund: - type: boolean - description: Whether the user has funds - subscription_tier: - allOf: - - $ref: "#/components/schemas/SubscriptionTier" - nullable: true - description: The cached subscription tier level - required: - - id - CustomerAdmin: - type: object - properties: - id: - type: string - description: The firebase UID of the user - email: - type: string - description: The email address for this user - name: - type: string - description: The name for this user - createdAt: - type: string - format: date-time - description: The date and time the user was created - updatedAt: - type: string - format: date-time - description: The date and time the user was last updated - is_admin: - type: boolean - description: Whether the user is an admin - stripe_id: - type: string - description: The Stripe customer ID - metronome_id: - type: string - description: The Metronome customer ID - has_fund: - type: boolean - description: Whether the user has funds - cloud_subscription_is_active: - type: boolean - description: Whether the customer has an active cloud subscription - cloud_subscription_subscription_id: - type: string - description: The active subscription ID if one exists - nullable: true - cloud_subscription_renewal_date: - type: string - format: date-time - description: The next renewal date for the subscription (ISO 8601 format) - nullable: true - cloud_subscription_end_date: - type: string - format: date-time - description: The date when the subscription is set to end (ISO 8601 format) - nullable: true - subscription_tier: - allOf: - - $ref: "#/components/schemas/SubscriptionTier" - nullable: true - description: The subscription tier level (e.g. FREE, STANDARD, CREATOR, PRO) - required: - - id - AuditLog: - type: object - properties: - event_type: - type: string - description: the type of the event - event_id: - type: string - description: the id of the event - params: - type: object - description: data related to the event - additionalProperties: true - createdAt: - type: string - format: date-time - description: The date and time the event was created - IdeogramV3Request: - type: object - properties: - prompt: - type: string - description: The text prompt for image generation - seed: - type: integer - description: Seed value for reproducible generation - resolution: - type: string - description: Image resolution in format WxH - example: "1280x800" - aspect_ratio: - type: string - description: Aspect ratio in format WxH - example: "1x3" - rendering_speed: - $ref: "#/components/schemas/RenderingSpeed" - magic_prompt: - type: string - enum: ["ON", "OFF"] - description: Whether to enable magic prompt enhancement - negative_prompt: - type: string - description: Text prompt specifying what to avoid in the generation - num_images: - type: integer - description: Number of images to generate - minimum: 1 - color_palette: - type: object - properties: - name: - type: string - description: Name of the color palette - example: "PASTEL" - required: - - name - style_codes: - type: array - items: - type: string - pattern: "^[0-9A-Fa-f]{8}$" - description: Array of style codes in hexadecimal format - style_type: - $ref: "#/components/schemas/IdeogramStyleType" - style_reference_images: - type: array - items: - type: string - format: binary - description: Array of reference image URLs or identifiers - character_reference_images: - type: array - items: - type: string - format: binary - description: Generations with character reference are subject to the character reference pricing. A set of images to use as character references (maximum total size 10MB across all character references), currently only supports 1 character reference image. The images should be in JPEG, PNG or WebP format. - character_reference_images_mask: - type: array - items: - type: string - format: binary - description: Optional masks for character reference images. When provided, must match the number of character_reference_images. Each mask should be a grayscale image of the same dimensions as the corresponding character reference image. The images should be in JPEG, PNG or WebP format. - required: - - prompt - - rendering_speed - - IdeogramV3EditRequest: - type: object - required: - - prompt - - rendering_speed - properties: - image: - type: string - format: binary - description: The image being edited (max size 10MB); only JPEG, WebP and PNG formats are supported at this time. - mask: - type: string - format: binary - description: A black and white image of the same size as the image being edited (max size 10MB). Black regions in the mask should match up with the regions of the image that you would like to edit; only JPEG, WebP and PNG formats are supported at this time. - prompt: - type: string - description: The prompt used to describe the edited result. - magic_prompt: - type: string - description: Determine if MagicPrompt should be used in generating the request or not. - num_images: - type: integer - description: The number of images to generate. - seed: - type: integer - description: Random seed. Set for reproducible generation. - rendering_speed: - $ref: "#/components/schemas/RenderingSpeed" - style_type: - $ref: "#/components/schemas/IdeogramStyleType" - color_palette: - type: object - description: A color palette for generation, must EITHER be specified via one of the presets (name) or explicitly via hexadecimal representations of the color with optional weights (members). Not supported by V_1, V_1_TURBO, V_2A and V_2A_TURBO models. - $ref: "#/components/schemas/IdeogramColorPalette" - style_codes: - type: array - items: - type: string - pattern: "^[0-9A-Fa-f]{8}$" - description: A list of 8 character hexadecimal codes representing the style of the image. Cannot be used in conjunction with style_reference_images or style_type. - style_reference_images: - type: array - items: - type: string - format: binary - description: A set of images to use as style references (maximum total size 10MB across all style references). The images should be in JPEG, PNG or WebP format. - character_reference_images: - type: array - items: - type: string - format: binary - description: Generations with character reference are subject to the character reference pricing. A set of images to use as character references (maximum total size 10MB across all character references), currently only supports 1 character reference image. The images should be in JPEG, PNG or WebP format. - character_reference_images_mask: - type: array - items: - type: string - format: binary - description: Optional masks for character reference images. When provided, must match the number of character_reference_images. Each mask should be a grayscale image of the same dimensions as the corresponding character reference image. The images should be in JPEG, PNG or WebP format. - IdeogramColorPalette: - type: object - description: A color palette specification that can either use a preset name or explicit color definitions with weights - oneOf: - - properties: - name: - type: string - description: Name of the preset color palette - required: - - name - - properties: - members: - type: array - items: - type: object - properties: - color: - type: string - pattern: "^#[0-9A-Fa-f]{6}$" - description: Hexadecimal color code - weight: - type: number - minimum: 0 - maximum: 1 - description: Optional weight for the color (0-1) - description: Array of color definitions with optional weights - required: - - members - IdeogramGenerateRequest: - type: object - description: Parameters for the Ideogram generation proxy request. Based on Ideogram's API. - properties: - image_request: - type: object - description: The image generation request parameters. - properties: - prompt: - type: string - description: Required. The prompt to use to generate the image. - aspect_ratio: - type: string - description: "Optional. The aspect ratio (e.g., 'ASPECT_16_9', 'ASPECT_1_1'). Cannot be used with resolution. Defaults to 'ASPECT_1_1' if unspecified." - model: - type: string - description: "The model used (e.g., 'V_2', 'V_2A_TURBO')" - magic_prompt_option: - type: string - description: "Optional. MagicPrompt usage ('AUTO', 'ON', 'OFF')." - seed: - type: integer - format: int64 - description: "Optional. A number between 0 and 2147483647." - minimum: 0 - maximum: 2147483647 - style_type: - type: string - description: "Optional. Style type ('AUTO', 'GENERAL', 'REALISTIC', 'DESIGN', 'RENDER_3D', 'ANIME'). Only for models V_2 and above." - negative_prompt: - type: string - description: "Optional. Description of what to exclude. Only for V_1, V_1_TURBO, V_2, V_2_TURBO." - num_images: - type: integer - description: "Optional. Number of images to generate (1-8). Defaults to 1." - minimum: 1 - maximum: 8 - default: 1 - resolution: - type: string - description: "Optional. Resolution (e.g., 'RESOLUTION_1024_1024'). Only for model V_2. Cannot be used with aspect_ratio." - color_palette: - type: object - description: "Optional. Color palette object. Only for V_2, V_2_TURBO." - additionalProperties: true - required: - - prompt - - model - required: - - image_request - IdeogramGenerateResponse: - type: object - description: Response from the Ideogram image generation API. - properties: - created: - type: string - format: date-time - description: Timestamp when the generation was created. - data: - type: array - description: Array of generated image information. - items: - type: object - properties: - prompt: - type: string - description: The prompt used to generate this image. - resolution: - type: string - description: The resolution of the generated image (e.g., '1024x1024'). - is_image_safe: - type: boolean - description: Indicates whether the image is considered safe. - seed: - type: integer - description: The seed value used for this generation. - url: - type: string - description: URL to the generated image. - style_type: - type: string - description: The style type used for generation (e.g., 'REALISTIC', 'ANIME'). - IdeogramV3RemixRequest: - type: object - required: - - prompt - properties: - image: - type: string - format: binary - prompt: - type: string - image_weight: - type: integer - minimum: 1 - maximum: 100 - default: 50 - seed: - type: integer - minimum: 0 - maximum: 2147483647 - resolution: - type: string - aspect_ratio: - type: string - rendering_speed: - $ref: "#/components/schemas/RenderingSpeed" - magic_prompt: - type: string - enum: [AUTO, ON, OFF] - negative_prompt: - type: string - num_images: - type: integer - minimum: 1 - maximum: 8 - color_palette: - type: object - style_codes: - type: array - items: - type: string - style_type: - $ref: "#/components/schemas/IdeogramStyleType" - style_reference_images: - type: array - items: - type: string - format: binary - character_reference_images: - type: array - items: - type: string - format: binary - description: Generations with character reference are subject to the character reference pricing. A set of images to use as character references (maximum total size 10MB across all character references), currently only supports 1 character reference image. The images should be in JPEG, PNG or WebP format. - character_reference_images_mask: - type: array - items: - type: string - format: binary - description: Optional masks for character reference images. When provided, must match the number of character_reference_images. Each mask should be a grayscale image of the same dimensions as the corresponding character reference image. The images should be in JPEG, PNG or WebP format. - IdeogramV3IdeogramResponse: - type: object - properties: - created: - type: string - format: date-time - data: - type: array - items: - type: object - properties: - prompt: - type: string - resolution: - type: string - is_image_safe: - type: boolean - seed: - type: integer - url: - type: string - style_type: - type: string - IdeogramV3ReframeRequest: - type: object - required: - - resolution - properties: - image: - type: string - format: binary - resolution: - type: string - num_images: - type: integer - minimum: 1 - maximum: 8 - seed: - type: integer - minimum: 0 - maximum: 2147483647 - rendering_speed: - $ref: "#/components/schemas/RenderingSpeed" - color_palette: - type: object - style_codes: - type: array - items: - type: string - style_reference_images: - type: array - items: - type: string - format: binary - IdeogramV3ReplaceBackgroundRequest: - type: object - required: - - prompt - properties: - image: - type: string - format: binary - prompt: - type: string - magic_prompt: - type: string - enum: [AUTO, ON, OFF] - num_images: - type: integer - minimum: 1 - maximum: 8 - seed: - type: integer - minimum: 0 - maximum: 2147483647 - rendering_speed: - $ref: "#/components/schemas/RenderingSpeed" - color_palette: - type: object - style_codes: - type: array - items: - type: string - style_reference_images: - type: array - items: - type: string - format: binary - KlingTaskStatus: - type: string - enum: [submitted, processing, succeed, failed] - description: Task Status - # Kling Video Generation Request Properties - KlingTextToVideoModelName: - type: string - enum: - [kling-v1, kling-v1-5, kling-v1-6, kling-v2-master, kling-v2-1-master, kling-v2-5-turbo, kling-v2-6, kling-v3] - default: kling-v1 - description: Model Name - KlingVideoGenModelName: - type: string - enum: - [ - kling-v1, - kling-v1-5, - kling-v1-6, - kling-v2-master, - kling-v2-1, - kling-v2-1-master, - kling-v2-5-turbo, - kling-v2-6, - kling-v3 - ] - default: kling-v2-master - description: Model Name - KlingVideoGenMode: - type: string - enum: [std, pro] - default: std - description: "Video generation mode. std: Standard Mode, which is cost-effective. pro: Professional Mode, generates videos with longer duration but higher quality output." - KlingVideoGenAspectRatio: - type: string - enum: ["16:9", "9:16", "1:1"] - default: "16:9" - description: Video aspect ratio - KlingVideoGenDuration: - type: string - enum: ["3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"] - default: "5" - description: Video length in seconds - KlingVideoGenCfgScale: - type: number - format: float - default: 0.5 - description: Flexibility in video generation. The higher the value, the lower the model's degree of flexibility, and the stronger the relevance to the user's prompt. - minimum: 0 - maximum: 1 - KlingCameraControl: - type: object - properties: - type: - $ref: "#/components/schemas/KlingCameraControlType" - config: - $ref: "#/components/schemas/KlingCameraConfig" - KlingCameraControlType: - type: string - enum: - [simple, down_back, forward_up, right_turn_forward, left_turn_forward] - description: "Predefined camera movements type. simple: Customizable camera movement. down_back: Camera descends and moves backward. forward_up: Camera moves forward and tilts up. right_turn_forward: Rotate right and move forward. left_turn_forward: Rotate left and move forward." - KlingCameraConfig: - type: object - properties: - horizontal: - type: number - minimum: -10 - maximum: 10 - description: Controls camera's movement along horizontal axis (x-axis). Negative indicates left, positive indicates right. - vertical: - type: number - minimum: -10 - maximum: 10 - description: Controls camera's movement along vertical axis (y-axis). Negative indicates downward, positive indicates upward. - pan: - type: number - minimum: -10 - maximum: 10 - description: Controls camera's rotation in vertical plane (x-axis). Negative indicates downward rotation, positive indicates upward rotation. - tilt: - type: number - minimum: -10 - maximum: 10 - description: Controls camera's rotation in horizontal plane (y-axis). Negative indicates left rotation, positive indicates right rotation. - roll: - type: number - minimum: -10 - maximum: 10 - description: Controls camera's rolling amount (z-axis). Negative indicates counterclockwise, positive indicates clockwise. - zoom: - type: number - minimum: -10 - maximum: 10 - description: Controls change in camera's focal length. Negative indicates narrower field of view, positive indicates wider field of view. - # Kling Video Generation Response Properties - KlingVideoResult: - type: object - properties: - id: - type: string - description: Generated video ID - url: - type: string - format: uri - description: URL for generated video - watermark_url: - type: string - format: uri - description: URL for generated video with watermark, hotlink protection format - duration: - type: string - description: Total video duration in seconds - # Kling Lip Sync Request Properties - KlingAudioUploadType: - type: string - enum: [file, url] - description: "Method of Transmitting Audio Files for Lip-Sync. Required when mode is audio2video." - KlingLipSyncMode: - type: string - enum: [text2video, audio2video] - description: "Video Generation Mode. text2video: Text-to-video generation mode; audio2video: Audio-to-video generation mode" - KlingLipSyncVoiceLanguage: - type: string - enum: [zh, en] - default: en - description: "The voice language corresponds to the Voice ID." - # Kling Video Effects Request Properties - KlingDualCharacterEffectsScene: - type: string - enum: [hug, kiss, heart_gesture] - description: Scene Name. Dual-character Effects (hug, kiss, heart_gesture). - KlingSingleImageEffectsScene: - type: string - enum: [bloombloom, dizzydizzy, fuzzyfuzzy, squish, expansion] - description: Scene Name. Single Image Effects (bloombloom, dizzydizzy, fuzzyfuzzy, squish, expansion). - KlingCharacterEffectModelName: - type: string - enum: [kling-v1, kling-v1-5, kling-v1-6] - default: kling-v1 - description: Model Name. Can be kling-v1, kling-v1-5, or kling-v1-6. - KlingSingleImageEffectModelName: - type: string - enum: [kling-v1-6] - description: Model Name. Only kling-v1-6 is supported for single image effects. - KlingSingleImageEffectDuration: - type: string - enum: ["5"] - description: Video Length in seconds. Only 5-second videos are supported. - KlingDualCharacterImages: - type: array - minItems: 2 - maxItems: 2 - items: - type: string - description: Reference Image Group. Must contain exactly 2 images. First image will be positioned on left side, second on right side of the composite. Each image follows the same requirements as single image effects. - # Kling Image Generation Request Properties - KlingImageGenAspectRatio: - type: string - enum: ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9"] - default: "16:9" - description: Aspect ratio of the generated images - KlingImageGenImageReferenceType: - type: string - enum: [subject, face] - description: Image reference type - KlingImageGenModelName: - type: string - enum: [kling-v1, kling-v1-5, kling-v2, kling-v3] - default: kling-v1 - description: Model Name - # Kling Image Generation Response Properties - KlingImageResult: - type: object - properties: - index: - type: integer - description: Image Number (0-9) - url: - type: string - format: uri - description: URL for generated image - # Kling Virtual Try On Request Properties - KlingVirtualTryOnModelName: - type: string - enum: [kolors-virtual-try-on-v1, kolors-virtual-try-on-v1-5] - default: kolors-virtual-try-on-v1 - description: Model Name - # Kling Requests and Responses - KlingText2VideoRequest: - type: object - properties: - model_name: - $ref: "#/components/schemas/KlingTextToVideoModelName" - multi_shot: - type: boolean - default: false - description: Whether to generate multi-shot video. When true, the prompt parameter is invalid. When false, the shot_type and multi_prompt parameters are invalid. - shot_type: - type: string - enum: [customize] - description: Storyboard method. Required when the multi_shot parameter is set to true. - prompt: - type: string - maxLength: 2500 - description: Positive text prompt. Use <<>> to specify a voice matching the voice_list parameter order. A task can reference up to 2 tones. When specifying a tone, the sound parameter value must be on. - multi_prompt: - type: array - description: Information about each storyboard, such as prompts and duration. Supports up to 6 storyboards, with a minimum of 1. Required when multi_shot is true and shot_type is customize. - items: - type: object - properties: - index: - type: integer - description: Shot sequence number - prompt: - type: string - maxLength: 512 - description: Prompt word for this storyboard. Maximum length 512 characters. - duration: - type: string - description: Duration of this storyboard in seconds. Must not exceed total task duration and must not be less than 1. Sum of all storyboard durations equals total task duration. - negative_prompt: - type: string - maxLength: 2500 - description: Negative text prompt. It is recommended to supplement negative prompt information through negative sentences directly within positive prompts. - cfg_scale: - $ref: "#/components/schemas/KlingVideoGenCfgScale" - mode: - $ref: "#/components/schemas/KlingVideoGenMode" - camera_control: - $ref: "#/components/schemas/KlingCameraControl" - aspect_ratio: - $ref: "#/components/schemas/KlingVideoGenAspectRatio" - duration: - $ref: "#/components/schemas/KlingVideoGenDuration" - sound: - type: string - enum: [on, off] - default: off - description: Whether to generate sound simultaneously when generating videos. Only V2.6 and subsequent versions of the model support this parameter. - watermark_info: - type: object - description: Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time. - properties: - enabled: - type: boolean - description: true means generate watermark, false means do not generate. - callback_url: - type: string - format: uri - description: The callback notification address - external_task_id: - type: string - description: Customized Task ID - KlingText2VideoResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information, displaying the failure reason when the task fails - task_info: - type: object - properties: - external_task_id: - type: string - watermark_info: - type: object - properties: - enabled: - type: boolean - final_unit_deduction: - type: string - description: The deduction units of task - created_at: - type: integer - description: Task creation time, Unix timestamp in milliseconds - updated_at: - type: integer - description: Task update time, Unix timestamp in milliseconds - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingVideoResult" - KlingImage2VideoRequest: - type: object - properties: - model_name: - $ref: "#/components/schemas/KlingVideoGenModelName" - image: - type: string - description: Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix. - image_tail: - type: string - description: Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix. Cannot be used simultaneously with dynamic_masks/static_mask or camera_control. - multi_shot: - type: boolean - default: false - description: Whether to generate multi-shot video. When true, the prompt parameter is invalid. When false, the shot_type and multi_prompt parameters are invalid. - shot_type: - type: string - enum: [customize] - description: Storyboard method. Required when the multi_shot parameter is set to true. - prompt: - type: string - maxLength: 2500 - description: Positive text prompt. Use <<>> to specify a voice matching the voice_list parameter order. A task can reference up to 2 tones. When specifying a tone, the sound parameter value must be on. - multi_prompt: - type: array - description: Information about each storyboard, such as prompts and duration. Supports up to 6 storyboards, with a minimum of 1. Required when multi_shot is true and shot_type is customize. - items: - type: object - properties: - index: - type: integer - description: Shot sequence number - prompt: - type: string - maxLength: 512 - description: Prompt word for this storyboard. Maximum length 512 characters. - duration: - type: string - description: Duration of this storyboard in seconds. Must not exceed total task duration and must not be less than 1. Sum of all storyboard durations equals total task duration. - negative_prompt: - type: string - maxLength: 2500 - description: Negative text prompt. It is recommended to supplement negative prompt information through negative sentences directly within positive prompts. - element_list: - type: array - description: Reference Element List based on element ID configuration. Supports up to 3 reference elements. The element_list and voice_list parameters are mutually exclusive. - items: - type: object - properties: - element_id: - type: integer - format: int64 - description: Element ID - cfg_scale: - $ref: "#/components/schemas/KlingVideoGenCfgScale" - mode: - $ref: "#/components/schemas/KlingVideoGenMode" - static_mask: - type: string - description: Static Brush Application Area (Mask image created by users using the motion brush). The aspect ratio must match the input image. - dynamic_masks: - type: array - items: - type: object - properties: - mask: - type: string - format: uri - description: Dynamic Brush Application Area (Mask image created by users using the motion brush). The aspect ratio must match the input image. - trajectories: - type: array - items: - type: object - properties: - x: - type: integer - description: The horizontal coordinate of trajectory point. Based on bottom-left corner of image as origin (0,0). - y: - type: integer - description: The vertical coordinate of trajectory point. Based on bottom-left corner of image as origin (0,0). - description: Dynamic Brush Configuration List (up to 6 groups). For 5-second videos, trajectory length must not exceed 77 coordinates. - camera_control: - $ref: "#/components/schemas/KlingCameraControl" - aspect_ratio: - $ref: "#/components/schemas/KlingVideoGenAspectRatio" - duration: - $ref: "#/components/schemas/KlingVideoGenDuration" - sound: - type: string - enum: [on, off] - default: off - description: Whether to generate sound simultaneously when generating videos. Only V2.6 and subsequent versions of the model support this parameter. - watermark_info: - type: object - description: Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time. - properties: - enabled: - type: boolean - description: true means generate watermark, false means do not generate. - callback_url: - type: string - format: uri - description: The callback notification address. Server will notify when the task status changes. - external_task_id: - type: string - description: Customized Task ID. Must be unique within a single user account. - KlingImage2VideoResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information, displaying the failure reason when the task fails - task_info: - type: object - properties: - external_task_id: - type: string - watermark_info: - type: object - properties: - enabled: - type: boolean - final_unit_deduction: - type: string - description: The deduction units of task - created_at: - type: integer - description: Task creation time, Unix timestamp in milliseconds - updated_at: - type: integer - description: Task update time, Unix timestamp in milliseconds - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingVideoResult" - KlingVideoExtendRequest: - type: object - properties: - video_id: - type: string - description: The ID of the video to be extended. Supports videos generated by text-to-video, image-to-video, and previous video extension operations. Cannot exceed 3 minutes total duration after extension. - prompt: - type: string - maxLength: 2500 - description: Positive text prompt for guiding the video extension - negative_prompt: - type: string - maxLength: 2500 - description: Negative text prompt for elements to avoid in the extended video - cfg_scale: - $ref: "#/components/schemas/KlingVideoGenCfgScale" - callback_url: - type: string - format: uri - description: The callback notification address. Server will notify when the task status changes. - KlingVideoExtendResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_info: - type: object - properties: - external_task_id: - type: string - created_at: - type: integer - description: Task creation time - updated_at: - type: integer - description: Task update time - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingVideoResult" - KlingOmniVideoRequest: - type: object - properties: - model_name: - type: string - enum: [kling-video-o1, kling-v3-omni] - default: kling-video-o1 - description: Model Name - multi_shot: - type: boolean - default: false - description: Whether to generate multi-shot video. When true, the prompt parameter is invalid. When false, the shot_type and multi_prompt parameters are invalid. - shot_type: - type: string - enum: [customize] - description: Storyboard method. Required when the multi_shot parameter is set to true. - prompt: - type: string - maxLength: 2500 - description: Text prompt words, which can include positive and negative descriptions. Must not exceed 2,500 characters. Can specify elements, images, or videos in the format <<<>>> such as <>, <<>>, <<>>. - multi_prompt: - type: array - description: Information about each storyboard, such as prompts and duration. Supports up to 6 storyboards, with a minimum of 1. Required when multi_shot is true and shot_type is customize. - items: - type: object - properties: - index: - type: integer - description: Shot sequence number - prompt: - type: string - maxLength: 512 - description: Prompt word for this storyboard. Maximum length 512 characters. - duration: - type: string - description: Duration of this storyboard in seconds. Must not exceed total task duration and must not be less than 1. Sum of all storyboard durations equals total task duration. - image_list: - type: array - description: Reference Image List. Can include reference images of the element, scene, style, etc., or be used as the first or last frame to generate videos. - items: - type: object - properties: - image_url: - type: string - description: Image Base64 encoding or image URL (ensure accessibility). Supported formats include .jpg/.jpeg/.png. File size cannot exceed 10MB. Width and height dimensions shall not be less than 300px, aspect ratio between 1:2.5 ~ 2.5:1. - type: - type: string - enum: [first_frame, end_frame] - description: Whether the image is in the first or last frame. first_frame is the first frame, end_frame is the last frame. Currently does not support only the end frame. - element_list: - type: array - description: Reference Element List based on element ID configuration. - items: - type: object - properties: - element_id: - type: integer - format: int64 - description: Element ID - video_list: - type: array - description: Reference Video list. Can be used as a reference video for feature or as a video to be edited, with the default being the video to be edited. - items: - type: object - properties: - video_url: - type: string - description: URL of uploaded video. Only .mp4/.mov formats are supported. Duration between 3-10 seconds. Resolution must be between 720px and 2160px. Frame rates of 24-60 fps supported. Only 1 video can be uploaded, with size not exceeding 200MB. - refer_type: - type: string - enum: [feature, base] - description: Reference video type. feature is the feature reference video, base is the video to be edited. - keep_original_sound: - type: string - enum: [yes, no] - description: Whether to keep the video original sound. yes indicates retention, no indicates non retention. - sound: - type: string - enum: [on, off] - default: "off" - description: Whether sound is generated simultaneously when generating videos. - mode: - type: string - enum: [pro, std] - default: std - description: "Video generation mode. std: Standard Mode, generating 720P videos, cost-effective. pro: Professional Mode, generating 1080P videos, higher quality video output." - aspect_ratio: - type: string - enum: [16:9, 9:16, 1:1] - description: The aspect ratio of the generated video frame (width:height). Required when first-frame reference or video editing features are not used. - duration: - type: string - enum: ["3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"] - default: "5" - description: "Video Length in seconds. When using video editing function (refer_type: base), output duration is the same as input video and this parameter is invalid." - watermark_info: - type: object - description: Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time. - properties: - enabled: - type: boolean - description: true means generate watermark, false means do not generate. - callback_url: - type: string - format: uri - description: The callback notification address for the result of this task. If configured, the server will actively notify when the task status changes. - external_task_id: - type: string - description: Customized Task ID. Must be unique within a single user account. - KlingOmniVideoResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information, displaying the failure reason when the task fails - task_info: - type: object - properties: - external_task_id: - type: string - watermark_info: - type: object - properties: - enabled: - type: boolean - final_unit_deduction: - type: string - description: The deduction units of task - created_at: - type: integer - description: Task creation time, Unix timestamp in milliseconds - updated_at: - type: integer - description: Task update time, Unix timestamp in milliseconds - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingVideoResult" - KlingOmniImageRequest: - type: object - required: [prompt] - properties: - model_name: - type: string - enum: [kling-image-o1, kling-v3-omni] - default: kling-image-o1 - description: Model Name - prompt: - type: string - maxLength: 2500 - description: Text prompt words, which can include positive and negative descriptions. Must not exceed 2,500 characters. The Omni model can achieve various capabilities through Prompt with elements and images. Specify an image in the format of <<<>>>, such as <<>>. - image_list: - type: array - description: Reference Image List. Supports inputting image Base64 encoding or image URL (ensure accessibility). Supported formats include .jpg/.jpeg/.png. File size cannot exceed 10MB. Width and height dimensions shall not be less than 300px, aspect ratio between 1:2.5 ~ 2.5:1. The sum of reference elements and reference images shall not exceed 10. - items: - type: object - properties: - image: - type: string - description: Image Base64 encoding or image URL (ensure accessibility) - element_list: - type: array - description: Reference Element List based on element ID configuration. The sum of reference elements and reference images shall not exceed 10. - items: - type: object - properties: - element_id: - type: integer - format: int64 - description: Element ID - resolution: - type: string - enum: ["1k", "2k", "4k"] - default: "1k" - description: Image generation resolution. 1k is 1K standard, 2k is 2K high-res, 4k is 4K high-res. - result_type: - type: string - enum: [single, series] - default: single - description: Control whether to generate a single image or a series of images. - n: - type: integer - minimum: 1 - maximum: 9 - default: 1 - description: Number of generated images. Value range [1,9]. - series_amount: - type: integer - minimum: 2 - maximum: 9 - default: 4 - description: Number of images in a series. Value range [2,9]. - aspect_ratio: - type: string - enum: ["16:9", "9:16", "1:1", "4:3", "3:4", "3:2", "2:3", "21:9", "auto"] - default: auto - description: Aspect ratio of the generated images (width:height). auto is to intelligently generate images based on incoming content. - callback_url: - type: string - format: uri - description: The callback notification address for the result of this task. If configured, the server will actively notify when the task status changes. - external_task_id: - type: string - description: Customized Task ID. Must be unique within a single user account. - KlingOmniImageResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information, displaying the failure reason when the task fails (such as triggering the content risk control of the platform, etc.) - task_info: - type: object - properties: - external_task_id: - type: string - description: Customer-defined task ID - final_unit_deduction: - type: string - description: The deduction units of task - created_at: - type: integer - description: Task creation time, Unix timestamp in milliseconds - updated_at: - type: integer - description: Task update time, Unix timestamp in milliseconds - task_result: - type: object - properties: - result_type: - type: string - enum: [single, series] - description: Whether the result is a single image or a series of images - images: - type: array - items: - $ref: "#/components/schemas/KlingImageResult" - series_images: - type: array - description: Series images result list - items: - type: object - properties: - index: - type: integer - description: Series-image sequence number - url: - type: string - format: uri - description: URL for generated image - KlingLipSyncInputObject: - type: object - required: [mode] - properties: - video_id: - type: string - description: "The ID of the video generated by Kling AI. Only supports 5-second and 10-second videos generated within the last 30 days." - video_url: - type: string - description: "Get link for uploaded video. Video files support .mp4/.mov, file size does not exceed 100MB, video length between 2-10s." - mode: - $ref: "#/components/schemas/KlingLipSyncMode" - text: - type: string - description: "Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters." - voice_id: - type: string - description: "Voice ID. Required when mode is text2video. The system offers a variety of voice options to choose from." - voice_language: - $ref: "#/components/schemas/KlingLipSyncVoiceLanguage" - voice_speed: - type: number - minimum: 0.8 - maximum: 2.0 - default: 1.0 - description: "Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place." - audio_type: - $ref: "#/components/schemas/KlingAudioUploadType" - audio_file: - type: string - description: "Local Path of Audio File. Supported formats: .mp3/.wav/.m4a/.aac, maximum file size of 5MB. Base64 code." - audio_url: - type: string - description: "Audio File Download URL. Supported formats: .mp3/.wav/.m4a/.aac, maximum file size of 5MB." - KlingLipSyncRequest: - type: object - required: [input] - properties: - input: - $ref: "#/components/schemas/KlingLipSyncInputObject" - callback_url: - type: string - format: uri - description: "The callback notification address. Server will notify when the task status changes." - KlingLipSyncResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_info: - type: object - properties: - external_task_id: - type: string - created_at: - type: integer - description: Task creation time - updated_at: - type: integer - description: Task update time - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingVideoResult" - KlingAvatarRequest: - type: object - required: [image] - properties: - image: - type: string - description: "Avatar Reference Image. Supports Base64 encoding or image URL. Supported formats: .jpg/.jpeg/.png. Max 10MB, min 300px width/height, aspect ratio between 1:2.5 and 2.5:1." - audio_id: - type: string - description: "Audio ID Generated via TTS API. Only supports 2-300 second audio generated within the last 30 days. Either audio_id or sound_file must be provided (mutually exclusive)." - sound_file: - type: string - description: "Sound File. Supports Base64-encoded audio or accessible audio URL. Accepted formats: .mp3/.wav/.m4a/.aac (max 5MB), 2-300 seconds. Either audio_id or sound_file must be provided (mutually exclusive)." - prompt: - type: string - maxLength: 2500 - description: "Positive text prompt. Can define avatar actions, emotions, and camera movements." - mode: - $ref: "#/components/schemas/KlingAvatarMode" - watermark_info: - type: object - properties: - enabled: - type: boolean - description: "Whether to generate watermarked results simultaneously." - callback_url: - type: string - format: uri - description: "The callback notification address for the result of this task." - external_task_id: - type: string - description: "Customized Task ID. Must be unique within a single user account." - KlingAvatarMode: - type: string - enum: [std, pro] - default: std - description: "Video generation mode. std: Standard Mode (cost-effective), pro: Professional Mode (longer duration, higher quality)." - KlingAvatarResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information - task_info: - type: object - properties: - external_task_id: - type: string - watermark_info: - type: object - properties: - enabled: - type: boolean - final_unit_deduction: - type: string - description: The deduction units of task - created_at: - type: integer - description: Task creation time - updated_at: - type: integer - description: Task update time - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingVideoResult" - KlingVideoEffectsRequest: - type: object - required: [effect_scene, input] - properties: - effect_scene: - oneOf: - - $ref: "#/components/schemas/KlingDualCharacterEffectsScene" - - $ref: "#/components/schemas/KlingSingleImageEffectsScene" - input: - $ref: "#/components/schemas/KlingVideoEffectsInput" - callback_url: - type: string - format: uri - description: The callback notification address for the result of this task. - external_task_id: - type: string - description: Customized Task ID. Must be unique within a single user account. - KlingVideoEffectsInput: - oneOf: - - $ref: "#/components/schemas/KlingSingleImageEffectInput" - - $ref: "#/components/schemas/KlingDualCharacterEffectInput" - KlingSingleImageEffectInput: - type: object - required: [model_name, image, duration] - properties: - model_name: - $ref: "#/components/schemas/KlingSingleImageEffectModelName" - image: - type: string - description: Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. - duration: - $ref: "#/components/schemas/KlingSingleImageEffectDuration" - KlingDualCharacterEffectInput: - type: object - required: [images, duration] - properties: - model_name: - $ref: "#/components/schemas/KlingCharacterEffectModelName" - mode: - $ref: "#/components/schemas/KlingVideoGenMode" - images: - $ref: "#/components/schemas/KlingDualCharacterImages" - duration: - $ref: "#/components/schemas/KlingVideoGenDuration" - KlingVideoEffectsResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_info: - type: object - properties: - external_task_id: - type: string - created_at: - type: integer - description: Task creation time - updated_at: - type: integer - description: Task update time - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingVideoResult" - KlingMotionControlRequest: - type: object - required: [image_url, video_url, character_orientation, mode] - properties: - model_name: - type: string - enum: [kling-v2-6, kling-v3] - default: "kling-v2-6" - description: Model name for motion control. Enum values - kling-v2-6, kling-v3. - prompt: - type: string - maxLength: 2500 - description: Text prompt words, which can include positive and negative descriptions. Cannot exceed 2500 characters. - image_url: - type: string - description: Reference Image. The characters, backgrounds, and other elements in the generated video are based on the reference image. Supports inputting image Base64 encoding or image URL (ensure accessibility). Supported image formats include .jpg / .jpeg / .png. The image file size cannot exceed 10MB, and the width and height dimensions of the image range from 300px to 65536px, and the aspect ratio of the image should be between 1:2.5 ~ 2.5:1. - video_url: - type: string - description: The URL of the reference video. The character actions in the generated video are consistent with the reference video. The video file supports .mp4/.mov, with a file size not exceeding 100MB, and only supports side lengths between 340px and 3850px. The lower limit of video duration should not be less than 3 seconds, and the upper limit depends on character_orientation. - element_list: - type: array - description: Reference Element List based on element ID configuration. Currently only one element can be introduced. - items: - type: object - properties: - element_id: - type: integer - format: int64 - description: Element ID - keep_original_sound: - type: string - enum: [yes, no] - default: "yes" - description: Whether to keep the original sound of the video. Enumeration values - yes (Keep the original sound), no (do not retain the original video sound). - character_orientation: - type: string - enum: [image, video] - description: Generate the orientation of the characters in the video. image - same orientation as the person in the picture (reference video duration should not exceed 10 seconds). video - consistent with the orientation of the characters in the video (reference video duration should not exceed 30 seconds). - mode: - type: string - enum: [std, pro] - description: Video generation mode. std - Standard Mode (cost-effective). pro - Professional Mode (longer duration but higher quality video output). - watermark_info: - type: object - description: Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time. - properties: - enabled: - type: boolean - description: true means generate watermark, false means do not generate. - callback_url: - type: string - format: uri - description: The callback notification address for the result of this task. If configured, the server will actively notify when the task status changes. - external_task_id: - type: string - description: Customized Task ID. Users can provide a customized task ID, which will not overwrite the system-generated task ID but can be used for task queries. Must be unique within a single user account. - KlingMotionControlResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information, displaying the failure reason when the task fails - task_info: - type: object - properties: - external_task_id: - type: string - description: Customer-defined task ID - watermark_info: - type: object - properties: - enabled: - type: boolean - final_unit_deduction: - type: string - description: The deduction units of task - created_at: - type: integer - description: Task creation time, Unix timestamp, unit ms - updated_at: - type: integer - description: Task update time, Unix timestamp, unit ms - task_result: - type: object - properties: - videos: - type: array - items: - $ref: "#/components/schemas/KlingMotionControlVideoResult" - KlingMotionControlVideoResult: - type: object - properties: - id: - type: string - description: Generated video ID; globally unique - url: - type: string - description: URL for generating videos - watermark_url: - type: string - description: URL for generating videos with watermark, hotlink protection format - duration: - type: string - description: Total video duration, unit - s (seconds) - KlingImageGenerationsRequest: - type: object - properties: - model_name: - $ref: "#/components/schemas/KlingImageGenModelName" - prompt: - type: string - maxLength: 2500 - description: Positive text prompt. Must not exceed 2,500 characters. - negative_prompt: - type: string - maxLength: 2500 - description: Negative text prompt. Cannot exceed 2500 characters. It is recommended to supplement negative prompt information through negative sentences directly within positive prompts. Not supported in Image-to-Image scenario (when image field is not empty). - image: - type: string - description: Reference Image - Base64 encoded string or image URL. Supported formats include .jpg/.jpeg/.png. File size cannot exceed 10MB. Width and height dimensions shall not be less than 300px, aspect ratio between 1:2.5 ~ 2.5:1. Required when image_reference is not empty. - image_reference: - $ref: "#/components/schemas/KlingImageGenImageReferenceType" - image_fidelity: - type: number - minimum: 0 - maximum: 1 - default: 0.5 - description: Reference intensity for user-uploaded images - human_fidelity: - type: number - minimum: 0 - maximum: 1 - default: 0.45 - description: Subject reference similarity - element_list: - type: array - description: Reference Element List based on element ID configuration. The sum of reference elements and reference images shall not exceed 10. - items: - type: object - properties: - element_id: - type: integer - format: int64 - description: Element ID - resolution: - type: string - enum: ["1k", "2k"] - default: "1k" - description: Image generation resolution. 1k is 1K standard, 2k is 2K high-res. - n: - type: integer - minimum: 1 - maximum: 9 - default: 1 - description: Number of generated images. Value range [1,9]. - aspect_ratio: - $ref: "#/components/schemas/KlingImageGenAspectRatio" - callback_url: - type: string - format: uri - description: The callback notification address - external_task_id: - type: string - description: Customized Task ID. Must be unique within a single user account. - required: - - prompt - KlingImageGenerationsResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information, displaying the failure reason when the task fails - final_unit_deduction: - type: string - description: The deduction units of task - created_at: - type: integer - description: Task creation time, Unix timestamp in milliseconds - updated_at: - type: integer - description: Task update time, Unix timestamp in milliseconds - task_result: - type: object - properties: - images: - type: array - items: - $ref: "#/components/schemas/KlingImageResult" - task_info: - type: object - properties: - external_task_id: - type: string - description: Customer-defined task ID - KlingVirtualTryOnRequest: - type: object - properties: - model_name: - $ref: "#/components/schemas/KlingVirtualTryOnModelName" - human_image: - type: string - description: Reference human image - Base64 encoded string or image URL - cloth_image: - type: string - description: Reference clothing image - Base64 encoded string or image URL - callback_url: - type: string - format: uri - description: The callback notification address - required: - - human_image - KlingVirtualTryOnResponse: - type: object - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - request_id: - type: string - description: Request ID - data: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - $ref: "#/components/schemas/KlingTaskStatus" - task_status_msg: - type: string - description: Task status information - created_at: - type: integer - description: Task creation time - updated_at: - type: integer - description: Task update time - task_result: - type: object - properties: - images: - type: array - items: - $ref: "#/components/schemas/KlingImageResult" - KlingResourcePackageResponse: - type: object - properties: - code: - type: integer - description: Error code; 0 indicates success - message: - type: string - description: Error information - request_id: - type: string - description: Request ID, generated by the system, used to track requests and troubleshoot problems - data: - type: object - properties: - code: - type: integer - description: Error code; 0 indicates success - msg: - type: string - description: Error information - resource_pack_subscribe_infos: - type: array - description: Resource package list - items: - type: object - properties: - resource_pack_name: - type: string - description: Resource package name - resource_pack_id: - type: string - description: Resource package ID - resource_pack_type: - type: string - description: Resource package type (decreasing_total=decreasing total, constant_period=constant periodicity) - enum: [decreasing_total, constant_period] - total_quantity: - type: number - format: float - description: Total quantity - remaining_quantity: - type: number - format: float - description: Remaining quantity (updated with a 12-hour delay) - purchase_time: - type: integer - format: int64 - description: Purchase time, Unix timestamp in ms - effective_time: - type: integer - format: int64 - description: Effective time, Unix timestamp in ms - invalid_time: - type: integer - format: int64 - description: Expiration time, Unix timestamp in ms - status: - type: string - description: Resource Package Status - enum: [toBeOnline, online, expired, runOut] - LTXText2VideoRequest: - type: object - properties: - prompt: - type: string - maxLength: 10000 - description: Text prompt describing the desired video content - model: - type: string - enum: [ltx-2-fast, ltx-2-pro] - description: Model to use for generation - duration: - type: integer - description: Video duration in seconds - enum: [6, 8, 10] - resolution: - type: string - enum: [1920x1080, 2560x1440, 3840x2160] - description: Output video resolution - fps: - type: integer - description: Frame rate in frames per second - default: 25 - enum: [25, 50] - generate_audio: - type: boolean - description: Generate audio for the video - default: true - required: - - prompt - - model - - duration - - resolution - LTXImage2VideoRequest: - type: object - properties: - image_uri: - type: string - description: Image to be used as the first frame of the video (HTTPS URL or base64 data URI) - prompt: - type: string - maxLength: 10000 - description: Text description of how the image should be animated - model: - type: string - enum: [ltx-2-fast, ltx-2-pro] - description: Model to use for generation - duration: - type: integer - description: Video duration in seconds - enum: [6, 8, 10] - resolution: - type: string - enum: [1920x1080, 2560x1440, 3840x2160] - description: Output video resolution - fps: - type: integer - description: Frame rate in frames per second - default: 25 - enum: [25, 50] - generate_audio: - type: boolean - description: Generate audio for the video - default: true - required: - - image_uri - - prompt - - model - - duration - - resolution - StripeEvent: - type: object - required: [id, object, type, data] - properties: - id: - type: string - object: - type: string - enum: ["event"] - data: - type: object - properties: - object: - type: object - type: - type: string - enum: [invoice.paid] - MinimaxVideoGenerationRequest: - type: object - description: Parameters for the Minimax video generation proxy request. - properties: - model: - type: string - description: "Required. ID of model. Options: MiniMax-Hailuo-02, T2V-01-Director, I2V-01-Director, S2V-01, I2V-01, I2V-01-live, T2V-01" - enum: - - MiniMax-Hailuo-02 - - T2V-01-Director - - I2V-01-Director - - S2V-01 - - I2V-01 - - I2V-01-live - - T2V-01 - prompt: - type: string - description: "Description of the video. Should be less than 2000 characters. Supports camera movement instructions in [brackets]." - maxLength: 2000 - prompt_optimizer: - type: boolean - description: "If true (default), the model will automatically optimize the prompt. Set to false for more precise control." - default: true - first_frame_image: - type: string - description: "URL or base64 encoding of the first frame image. Required when model is I2V-01, I2V-01-Director, or I2V-01-live." - subject_reference: - type: array - description: "Only available when model is S2V-01. The model will generate a video based on the subject uploaded through this parameter." - items: - type: object - properties: - image: - type: string - description: "URL or base64 encoding of the subject reference image." - mask: - type: string - description: "URL or base64 encoding of the mask for the subject reference image." - callback_url: - type: string - description: "Optional. URL to receive real-time status updates about the video generation task." - duration: - type: integer - description: "Video length in seconds. Only available for MiniMax-Hailuo-02" - enum: [6, 10] - default: 6 - resolution: - type: string - description: "Video resolution. Only available for MiniMax-Hailuo-02." - enum: ["768P", "1080P"] - default: "768P" - required: - - model - - MinimaxBaseResponse: - type: object - description: Common response structure used by Minimax APIs - properties: - status_code: - type: integer - description: "Status code. 0 indicates success, other values indicate errors." - status_msg: - type: string - description: "Specific error details or success message." - required: - - status_code - - status_msg - - MinimaxVideoGenerationResponse: - type: object - description: Response from the Minimax video generation API. - properties: - task_id: - type: string - description: "The task ID for the asynchronous video generation task." - base_resp: - $ref: "#/components/schemas/MinimaxBaseResponse" - required: - - task_id - - base_resp - MinimaxFileRetrieveResponse: - type: object - description: Response from retrieving a Minimax file download URL. - properties: - file: - type: object - properties: - file_id: - type: integer - description: Unique identifier for the file - bytes: - type: integer - description: File size in bytes - created_at: - type: integer - description: Unix timestamp when the file was created, in seconds - filename: - type: string - description: The name of the file - purpose: - type: string - description: The purpose of using the file - download_url: - type: string - description: The URL to download the video - base_resp: - $ref: "#/components/schemas/MinimaxBaseResponse" - required: - - file - - base_resp - MinimaxTaskResultResponse: - type: object - description: Response from querying a Minimax video generation task status. - properties: - task_id: - type: string - description: "The task ID being queried." - status: - type: string - description: "Task status: 'Queueing' (in queue), 'Preparing' (task is preparing), 'Processing' (generating), 'Success' (task completed successfully), or 'Fail' (task failed)." - enum: - - Queueing - - Preparing - - Processing - - Success - - Fail - file_id: - type: string - description: "After the task status changes to Success, this field returns the file ID corresponding to the generated video." - base_resp: - $ref: "#/components/schemas/MinimaxBaseResponse" - required: - - task_id - - status - - base_resp - BFLFluxKontextProGenerateRequest: - type: object - required: - - prompt - - input_image - properties: - prompt: - type: string - description: The text prompt describing what to edit on the image - input_image: - type: string - description: Base64 encoded image to be edited - steps: - type: integer - description: Number of inference steps - minimum: 1 - maximum: 50 - default: 50 - guidance: - type: number - description: The guidance scale for generation - minimum: 1.0 - maximum: 20.0 - default: 3.0 - BFLFluxKontextProGenerateResponse: - type: object - required: - - id - - polling_url - properties: - id: - type: string - description: Job ID for tracking - polling_url: - type: string - description: URL to poll for results - BFLFluxKontextMaxGenerateRequest: - type: object - required: - - prompt - - input_image - properties: - prompt: - type: string - description: The text prompt describing what to edit on the image - input_image: - type: string - description: Base64 encoded image to be edited - steps: - type: integer - description: Number of inference steps - minimum: 1 - maximum: 50 - default: 50 - guidance: - type: number - description: The guidance scale for generation - minimum: 1.0 - maximum: 20.0 - default: 3.0 - BFLFluxKontextMaxGenerateResponse: - type: object - required: - - id - - polling_url - properties: - id: - type: string - description: Job ID for tracking - polling_url: - type: string - description: URL to poll for results - BFLFluxPro1_1GenerateRequest: - type: object - required: - - prompt - - width - - height - properties: - prompt: - type: string - description: The main text prompt for image generation - image_prompt: - type: string - description: Optional image prompt - width: - type: integer - description: Width of the generated image - height: - type: integer - description: Height of the generated image - prompt_upsampling: - type: boolean - description: Whether to use prompt upsampling - seed: - type: integer - description: Random seed for reproducibility - safety_tolerance: - type: integer - description: Safety tolerance level - output_format: - type: string - enum: [jpeg, png] - description: Output image format - webhook_url: - type: string - description: Optional webhook URL for async processing - webhook_secret: - type: string - description: Optional webhook secret for async processing - - BFLFluxPro1_1GenerateResponse: - type: object - required: - - id - - polling_url - properties: - id: - type: string - description: Job ID for tracking - polling_url: - type: string - description: URL to poll for results - BFLFluxProGenerateRequest: - type: object - description: Request body for the BFL Flux Pro 1.1 Ultra image generation API. - properties: - prompt: - type: string - description: The text prompt for image generation. - negative_prompt: - type: string - description: The negative prompt for image generation. - width: - type: integer - description: The width of the image to generate. - minimum: 64 - maximum: 2048 - height: - type: integer - description: The height of the image to generate. - minimum: 64 - maximum: 2048 - num_inference_steps: - type: integer - description: The number of inference steps. - minimum: 1 - maximum: 100 - guidance_scale: - type: number - description: The guidance scale for generation. - minimum: 1.0 - maximum: 20.0 - seed: - type: integer - description: The seed value for reproducibility. - num_images: - type: integer - description: The number of images to generate. - minimum: 1 - maximum: 4 - required: - - prompt - - width - - height - - BFLFluxProGenerateResponse: - type: object - description: Response from the BFL Flux Pro 1.1 Ultra image generation API. - properties: - id: - type: string - description: The unique identifier for the generation task. - polling_url: - type: string - description: URL to poll for the generation result. - cost: - type: number - format: float - description: The cost of the generation task. - input_mp: - type: number - format: float - description: Input megapixels. - output_mp: - type: number - format: float - description: Output megapixels. - required: - - id - - polling_url - BFLFluxProStatusResponse: - type: object - description: Response from the BFL Flux Pro 1.1 Ultra status check API. - properties: - id: - type: string - description: The unique identifier for the generation task. - status: - $ref: "#/components/schemas/BFLStatus" - description: The status of the task. - result: - type: object - description: The result of the task (null if not completed). - nullable: true - progress: - type: number - format: float - description: The progress of the task (0.0 to 1.0). - minimum: 0.0 - maximum: 1.0 - details: - type: object - description: Additional details about the task (null if not available). - nullable: true - required: - - id - - status - - progress - BFLStatus: - type: string - description: Possible statuses for a BFL Flux Pro generation task. - enum: - - Task not found - - Pending - - Request Moderated - - Content Moderated - - Ready - - Error - example: Ready - BFLFlux2ProGenerateRequest: - type: object - description: Request body for the BFL Flux 2 Pro image generation API. - properties: - prompt: - type: string - description: Text description of the image to generate. - input_image: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_2: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_3: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_4: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_5: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_6: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_7: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_8: - type: string - description: Base64 encoded image for image-to-image generation. - input_image_9: - type: string - description: Base64 encoded image for image-to-image generation. - width: - type: integer - description: Width of the image. - default: 1024 - minimum: 256 - maximum: 2048 - height: - type: integer - description: Height of the image. - default: 1024 - minimum: 256 - maximum: 2048 - seed: - type: integer - description: Seed for reproducibility. - prompt_upsampling: - type: boolean - description: Automatically modify prompt for generation. - default: true - output_format: - type: string - description: Output format for the generated image. - default: jpeg - enum: - - jpeg - - png - safety_tolerance: - type: integer - description: Moderation tolerance level (Flux 2 Max only). - default: 2 - minimum: 0 - maximum: 5 - required: - - prompt - BFLFluxProFillInputs: - properties: - image: - type: string - title: Image - description: >- - A Base64-encoded string representing the image you wish to modify. Can contain alpha mask if desired. - mask: - anyOf: - - type: string - title: Mask - description: >- - A Base64-encoded string representing a mask for the areas you want to modify in the image. The mask should be the same dimensions as the image and in black and white. Black areas (0%) indicate no modification, while white areas (100%) specify areas for inpainting. Optional if you provide an alpha mask in the original image. Validation: The endpoint verifies that the dimensions of the mask match the original image. - prompt: - anyOf: - - type: string - title: Prompt - description: >- - The description of the changes you want to make. This text guides the inpainting process, allowing you to specify features, styles, or modifications for the masked area. - default: "" - example: ein fantastisches bild - steps: - anyOf: - - type: integer - maximum: 50 - minimum: 15 - title: Steps - description: Number of steps for the image generation process - default: 50 - example: 50 - prompt_upsampling: - anyOf: - - type: boolean - title: Prompt Upsampling - description: >- - Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation - default: false - seed: - anyOf: - - type: integer - title: Seed - description: Optional seed for reproducibility - guidance: - anyOf: - - type: number - maximum: 100 - minimum: 1.5 - title: Guidance - description: Guidance strength for the image generation process - default: 60 - output_format: - anyOf: - - $ref: "#/components/schemas/BFLOutputFormat" - description: Output format for the generated image. Can be 'jpeg' or 'png'. - default: jpeg - safety_tolerance: - type: integer - maximum: 6 - minimum: 0 - title: Safety Tolerance - description: >- - Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict. - default: 2 - example: 2 - webhook_url: - anyOf: - - type: string - maxLength: 2083 - minLength: 1 - format: uri - title: Webhook Url - description: URL to receive webhook notifications - webhook_secret: - anyOf: - - type: string - title: Webhook Secret - description: Optional secret for webhook signature verification - type: object - required: - - image - title: FluxProFillInputs - BFLAsyncResponse: - properties: - id: - type: string - title: Id - polling_url: - type: string - title: Polling Url - type: object - required: - - id - - polling_url - title: AsyncResponse - BFLAsyncWebhookResponse: - properties: - id: - type: string - title: Id - status: - type: string - title: Status - webhook_url: - type: string - title: Webhook Url - type: object - required: - - id - - status - - webhook_url - title: AsyncWebhookResponse - BFLHTTPValidationError: - properties: - detail: - items: - $ref: "#/components/schemas/BFLValidationError" - type: array - title: Detail - type: object - title: HTTPValidationError - BFLFluxProExpandInputs: - properties: - image: - type: string - title: Image - description: A Base64-encoded string representing the image you wish to expand. - top: - anyOf: - - type: integer - maximum: 2048 - minimum: 0 - title: Top - description: Number of pixels to expand at the top of the image - default: 0 - bottom: - anyOf: - - type: integer - maximum: 2048 - minimum: 0 - title: Bottom - description: Number of pixels to expand at the bottom of the image - default: 0 - left: - anyOf: - - type: integer - maximum: 2048 - minimum: 0 - title: Left - description: Number of pixels to expand on the left side of the image - default: 0 - right: - anyOf: - - type: integer - maximum: 2048 - minimum: 0 - title: Right - description: Number of pixels to expand on the right side of the image - default: 0 - prompt: - anyOf: - - type: string - title: Prompt - description: >- - The description of the changes you want to make. This text guides the expansion process, allowing you to specify features, styles, or modifications for the expanded areas. - default: "" - example: ein fantastisches bild - steps: - anyOf: - - type: integer - maximum: 50 - minimum: 15 - title: Steps - description: Number of steps for the image generation process - default: 50 - example: 50 - prompt_upsampling: - anyOf: - - type: boolean - title: Prompt Upsampling - description: >- - Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation - default: false - seed: - anyOf: - - type: integer - title: Seed - description: Optional seed for reproducibility - guidance: - anyOf: - - type: number - maximum: 100 - minimum: 1.5 - title: Guidance - description: Guidance strength for the image generation process - default: 60 - output_format: - anyOf: - - $ref: "#/components/schemas/BFLOutputFormat" - description: Output format for the generated image. Can be 'jpeg' or 'png'. - default: jpeg - safety_tolerance: - type: integer - maximum: 6 - minimum: 0 - title: Safety Tolerance - description: >- - Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict. - default: 2 - example: 2 - webhook_url: - anyOf: - - type: string - maxLength: 2083 - minLength: 1 - format: uri - title: Webhook Url - description: URL to receive webhook notifications - webhook_secret: - anyOf: - - type: string - title: Webhook Secret - description: Optional secret for webhook signature verification - type: object - required: - - image - title: FluxProExpandInputs - BFLCannyInputs: - properties: - prompt: - type: string - title: Prompt - description: Text prompt for image generation - example: ein fantastisches bild - control_image: - anyOf: - - type: string - title: Control Image - description: >- - Base64 encoded image to use as control input if no preprocessed image is provided - preprocessed_image: - anyOf: - - type: string - title: Preprocessed Image - description: >- - Optional pre-processed image that will bypass the control preprocessing step - canny_low_threshold: - anyOf: - - type: integer - maximum: 500 - minimum: 0 - title: Canny Low Threshold - description: Low threshold for Canny edge detection - default: 50 - canny_high_threshold: - anyOf: - - type: integer - maximum: 500 - minimum: 0 - title: Canny High Threshold - description: High threshold for Canny edge detection - default: 200 - prompt_upsampling: - anyOf: - - type: boolean - title: Prompt Upsampling - description: Whether to perform upsampling on the prompt - default: false - seed: - anyOf: - - type: integer - title: Seed - description: Optional seed for reproducibility - example: 42 - steps: - anyOf: - - type: integer - maximum: 50 - minimum: 15 - title: Steps - description: Number of steps for the image generation process - default: 50 - output_format: - anyOf: - - $ref: "#/components/schemas/BFLOutputFormat" - description: Output format for the generated image. Can be 'jpeg' or 'png'. - default: jpeg - guidance: - anyOf: - - type: number - maximum: 100 - minimum: 1 - title: Guidance - description: Guidance strength for the image generation process - default: 30 - safety_tolerance: - type: integer - maximum: 6 - minimum: 0 - title: Safety Tolerance - description: >- - Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict. - default: 2 - webhook_url: - anyOf: - - type: string - maxLength: 2083 - minLength: 1 - format: uri - title: Webhook Url - description: URL to receive webhook notifications - webhook_secret: - anyOf: - - type: string - title: Webhook Secret - description: Optional secret for webhook signature verification - type: object - required: - - prompt - title: CannyInputs - BFLDepthInputs: - properties: - prompt: - type: string - title: Prompt - description: Text prompt for image generation - example: ein fantastisches bild - control_image: - anyOf: - - type: string - title: Control Image - description: Base64 encoded image to use as control input - preprocessed_image: - anyOf: - - type: string - title: Preprocessed Image - description: >- - Optional pre-processed image that will bypass the control preprocessing step - prompt_upsampling: - anyOf: - - type: boolean - title: Prompt Upsampling - description: Whether to perform upsampling on the prompt - default: false - seed: - anyOf: - - type: integer - title: Seed - description: Optional seed for reproducibility - example: 42 - steps: - anyOf: - - type: integer - maximum: 50 - minimum: 15 - title: Steps - description: Number of steps for the image generation process - default: 50 - output_format: - anyOf: - - $ref: "#/components/schemas/BFLOutputFormat" - description: Output format for the generated image. Can be 'jpeg' or 'png'. - default: jpeg - guidance: - anyOf: - - type: number - maximum: 100 - minimum: 1 - title: Guidance - description: Guidance strength for the image generation process - default: 15 - safety_tolerance: - type: integer - maximum: 6 - minimum: 0 - title: Safety Tolerance - description: >- - Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict. - default: 2 - webhook_url: - anyOf: - - type: string - maxLength: 2083 - minLength: 1 - format: uri - title: Webhook Url - description: URL to receive webhook notifications - webhook_secret: - anyOf: - - type: string - title: Webhook Secret - description: Optional secret for webhook signature verification - type: object - required: - - prompt - title: DepthInputs - BFLOutputFormat: - type: string - enum: - - jpeg - - png - title: OutputFormat - BFLValidationError: - 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 - - RecraftImageGenerationRequest: - type: object - description: Parameters for the Recraft image generation proxy request. - properties: - prompt: - type: string - description: The text prompt describing the image to generate - model: - type: string - description: The model to use for generation (e.g., "recraftv3") - style: - type: string - description: The style to apply to the generated image (e.g., "digital_illustration") - style_id: - type: string - description: The style ID to apply to the generated image (e.g., "123e4567-e89b-12d3-a456-426614174000"). If style_id is provided, style should not be provided. - size: - type: string - description: The size of the generated image (e.g., "1024x1024") - controls: - type: object - description: The controls for the generated image - properties: - artistic_level: - type: integer - nullable: true - description: Defines artistic tone of your image. At a simple level, the person looks straight at the camera in a static and clean style. Dynamic and eccentric levels introduce movement and creativity. - minimum: 0 - maximum: 5 - colors: - type: array - description: An array of preferable colors - items: - $ref: "#/components/schemas/RGBColor" - background_color: - $ref: "#/components/schemas/RGBColor" - description: Use given color as a desired background color - no_text: - type: boolean - description: Do not embed text layouts - - n: - type: integer - description: The number of images to generate - minimum: 1 - maximum: 4 - required: - - prompt - - model - - size - - n - - RecraftImageGenerationResponse: - type: object - description: Response from the Recraft image generation API. - properties: - created: - type: integer - description: Unix timestamp when the generation was created - credits: - type: integer - description: Number of credits used for the generation - data: - type: array - description: Array of generated image information - items: - type: object - properties: - image_id: - type: string - description: Unique identifier for the generated image - url: - type: string - description: URL to access the generated image - required: - - created - - credits - - data - RecraftImageFeatures: - properties: - nsfw_score: - type: number - type: object - RecraftTextLayoutItem: - properties: - bbox: - items: - items: - type: number - x-go-type: float32 - type: array - type: array - text: - type: string - required: - - text - - bbox - type: object - RecraftImageColor: - properties: - rgb: - items: - type: integer - type: array - std: - items: - type: number - type: array - weight: - type: number - type: object - RecraftImageStyle: - enum: - - digital_illustration - - icon - - realistic_image - - vector_illustration - type: string - RecraftImageSubStyle: - enum: - - 2d_art_poster - - 3d - - 80s - - glow - - grain - - hand_drawn - - infantile_sketch - - kawaii - - pixel_art - - psychedelic - - seamless - - voxel - - watercolor - - broken_line - - colored_outline - - colored_shapes - - colored_shapes_gradient - - doodle_fill - - doodle_offset_fill - - offset_fill - - outline - - outline_gradient - - uneven_fill - - 70s - - cartoon - - doodle_line_art - - engraving - - flat_2 - - kawaii - - line_art - - linocut - - seamless - - b_and_w - - enterprise - - hard_flash - - hdr - - motion_blur - - natural_light - - studio_portrait - - line_circuit - - 2d_art_poster_2 - - engraving_color - - flat_air_art - - hand_drawn_outline - - handmade_3d - - stickers_drawings - - plastic - - pictogram - type: string - RecraftTransformModel: - enum: - - refm1 - - recraft20b - - recraftv2 - - recraftv3 - - recraftv4 - - recraftv4_pro - - flux1_1pro - - flux1dev - - imagen3 - - hidream_i1_dev - type: string - RecraftImageFormat: - enum: - - webp - - png - type: string - RecraftResponseFormat: - enum: - - url - - b64_json - type: string - RecraftImage: - properties: - b64_json: - type: string - features: - $ref: "#/components/schemas/RecraftImageFeatures" - image_id: - format: uuid - type: string - revised_prompt: - type: string - url: - type: string - required: - - image_id - type: object - RecraftUserControls: - properties: - artistic_level: - type: integer - background_color: - $ref: "#/components/schemas/RecraftImageColor" - colors: - items: - $ref: "#/components/schemas/RecraftImageColor" - type: array - no_text: - type: boolean - type: object - RecraftTextLayout: - items: - $ref: "#/components/schemas/RecraftTextLayoutItem" - type: array - RecraftProcessImageRequest: - properties: - image: - format: binary - type: string - image_format: - $ref: "#/components/schemas/RecraftImageFormat" - response_format: - $ref: "#/components/schemas/RecraftResponseFormat" - required: - - image - type: object - RecraftProcessImageResponse: - properties: - created: - type: integer - credits: - type: integer - image: - $ref: "#/components/schemas/RecraftImage" - required: - - created - - image - - credits - type: object - RecraftImageToImageRequest: - properties: - block_nsfw: - type: boolean - calculate_features: - type: boolean - controls: - $ref: "#/components/schemas/RecraftUserControls" - image: - format: binary - type: string - image_format: - $ref: "#/components/schemas/RecraftImageFormat" - model: - $ref: "#/components/schemas/RecraftTransformModel" - "n": - type: integer - negative_prompt: - type: string - prompt: - type: string - response_format: - $ref: "#/components/schemas/RecraftResponseFormat" - strength: - type: number - style: - $ref: "#/components/schemas/RecraftImageStyle" - style_id: - format: uuid - type: string - substyle: - $ref: "#/components/schemas/RecraftImageSubStyle" - text_layout: - $ref: "#/components/schemas/RecraftTextLayout" - required: - - prompt - - image - - strength - type: object - RecraftGenerateImageResponse: - properties: - created: - type: integer - credits: - type: integer - data: - items: - $ref: "#/components/schemas/RecraftImage" - type: array - required: - - created - - data - - credits - type: object - RecraftTransformImageWithMaskRequest: - properties: - block_nsfw: - type: boolean - calculate_features: - type: boolean - image: - format: binary - type: string - image_format: - $ref: "#/components/schemas/RecraftImageFormat" - mask: - format: binary - type: string - model: - $ref: "#/components/schemas/RecraftTransformModel" - "n": - type: integer - negative_prompt: - type: string - prompt: - type: string - response_format: - $ref: "#/components/schemas/RecraftResponseFormat" - style: - $ref: "#/components/schemas/RecraftImageStyle" - style_id: - format: uuid - type: string - substyle: - $ref: "#/components/schemas/RecraftImageSubStyle" - text_layout: - $ref: "#/components/schemas/RecraftTextLayout" - required: - - image - - mask - - prompt - type: object - RecraftCreateStyleRequest: - type: object - description: Request body for creating a Recraft style reference - properties: - style: - type: string - description: The base style of the generated images - enum: - - realistic_image - - digital_illustration - - vector_illustration - - icon - file1: - type: string - format: binary - description: First image file (PNG, JPG, or WEBP) - file2: - type: string - format: binary - description: Second image file (PNG, JPG, or WEBP) - file3: - type: string - format: binary - description: Third image file (PNG, JPG, or WEBP) - file4: - type: string - format: binary - description: Fourth image file (PNG, JPG, or WEBP) - file5: - type: string - format: binary - description: Fifth image file (PNG, JPG, or WEBP) - required: - - style - - file1 - RecraftCreateStyleResponse: - type: object - description: Response containing the created style ID - properties: - id: - type: string - format: uuid - description: The unique identifier of the created style - required: - - id - TencentHunyuan3DProRequest: - type: object - description: Request body for Tencent Hunyuan 3D Pro generation - properties: - Model: - type: string - description: | - Tencent HY 3D Global model version. - Defaults to 3.0, with optional choices: 3.0, 3.1. - When selecting version 3.1, the LowPoly parameter is unavailable. - enum: ["3.0", "3.1"] - default: "3.0" - example: "3.0" - Prompt: - type: string - description: | - Text description for 3D content generation. - Supports up to 1024 utf-8 characters. - Either Prompt or ImageBase64/ImageUrl is required, but not both. - maxLength: 1024 - example: "A cat" - ImageBase64: - type: string - description: | - Base64 encoded image for image-to-3D generation. - Resolution: min 128px, max 5000px per side. - Max size: 8MB (recommend 6MB before encoding). - Supported formats: jpg, png, jpeg, webp. - Either ImageBase64/ImageUrl or Prompt is required. - ImageUrl: - type: string - format: uri - description: | - URL of input image for image-to-3D generation. - Resolution: min 128px, max 5000px per side. - Max size: 8MB. - Supported formats: jpg, png, jpeg, webp. - Either ImageBase64/ImageUrl or Prompt is required. - EnablePBR: - type: boolean - description: Whether to enable PBR material generation. - default: false - FaceCount: - type: integer - description: Face count for 3D model generation. - minimum: 40000 - maximum: 1500000 - default: 500000 - GenerateType: - type: string - description: | - Generation task type: - - Normal: generates a geometric model with textures (default) - - LowPoly: model generated after intelligent polygon reduction - - Geometry: generate model without textures (white model) - - Sketch: generative model from sketch or line drawing - enum: ["Normal", "LowPoly", "Geometry", "Sketch"] - default: "Normal" - PolygonType: - type: string - description: | - Polygon type (only effective when GenerateType is LowPoly). - - triangle: triangular faces (default) - - quadrilateral: mix of quadrangle and triangle faces - enum: ["triangle", "quadrilateral"] - default: "triangle" - MultiViewImages: - type: array - description: | - Multi-perspective model images for 3D generation. - Each perspective is limited to one image. - Image size limit: max 8MB after encoding. - Image resolution: min 128px, max 5000px per side. - Supported formats: JPG, PNG. - items: - $ref: "#/components/schemas/TencentViewImage" - TencentViewImage: - type: object - description: A view image for multi-perspective 3D generation - properties: - ViewType: - type: string - description: | - The viewing angle type for this image. - - left: Left view - - right: Right view - - back: Rear view - - top: Top view (only supported in Model 3.1) - - bottom: Bottom view (only supported in Model 3.1) - - left_front: Left front 45 degree view (only supported in Model 3.1) - - right_front: Right front 45 degree view (only supported in Model 3.1) - enum: ["left", "right", "back", "top", "bottom", "left_front", "right_front"] - ViewImageBase64: - type: string - description: | - Base64 encoded image for this view. - Resolution: min 128px, max 5000px per side. - Max size: 8MB. - Supported formats: JPG, PNG. - ViewImageUrl: - type: string - format: uri - description: | - URL of the image for this view. - Resolution: min 128px, max 5000px per side. - Max size: 8MB. - Supported formats: JPG, PNG. - TencentHunyuan3DProResponse: - type: object - description: Response from Tencent Hunyuan 3D Pro submit endpoint - properties: - Response: - type: object - properties: - JobId: - type: string - description: Task ID (valid for 24 hours) - example: "1375367755519696896" - RequestId: - type: string - description: Unique request ID for troubleshooting - example: "13f47dd0-1af9-4383-b401-dae18d6e99fc" - Error: - type: object - description: Error object (present when request fails) - properties: - Code: - type: string - description: Error code - Message: - type: string - description: Error message - TencentHunyuan3DQueryRequest: - type: object - required: - - JobId - properties: - JobId: - type: string - description: The JobId returned from the submit endpoint - example: "1375367755519696896" - TencentHunyuan3DQueryResponse: - type: object - description: Response from Tencent Hunyuan 3D query endpoint - properties: - Response: - type: object - properties: - Status: - type: string - description: | - Task status: - - WAIT: waiting - - RUN: running - - FAIL: failed - - DONE: successful - enum: ["WAIT", "RUN", "FAIL", "DONE"] - ErrorCode: - type: string - description: Error code (empty string if no error) - ErrorMessage: - type: string - description: Error message if task failed (empty string if no error) - ResultFile3Ds: - type: array - description: Array of generated 3D files - items: - $ref: "#/components/schemas/TencentFile3D" - RequestId: - type: string - description: Unique request ID for troubleshooting - TencentFile3D: - type: object - description: 3D file information - properties: - Type: - type: string - description: 3D file format - enum: ["GLB", "OBJ"] - Url: - type: string - format: uri - description: File URL (valid for 24 hours) - PreviewImageUrl: - type: string - format: uri - description: Preview image URL - TencentErrorResponse: - type: object - description: Error response from Tencent API - properties: - Response: - type: object - properties: - Error: - type: object - properties: - Code: - type: string - description: Error code - Message: - type: string - description: Error message - RequestId: - type: string - description: Unique request ID for troubleshooting - TencentHunyuan3DUVRequest: - type: object - description: Request body for Tencent Hunyuan 3D UV unfolding - properties: - File: - $ref: "#/components/schemas/TencentInputFile3D" - TencentInputFile3D: - type: object - description: 3D file input for UV unwrapping - properties: - Type: - type: string - description: 3D file format type - enum: ["FBX", "OBJ", "GLB"] - example: "GLB" - Url: - type: string - format: uri - description: URL of the 3D file that needs UV unwrapping - example: "https://example.com/model.glb" - required: - - Type - - Url - TencentHunyuan3DUVResponse: - type: object - description: Response from Tencent Hunyuan 3D UV submit endpoint - properties: - Response: - type: object - properties: - JobId: - type: string - description: Task ID for the UV unwrapping job - example: "1384898587778465792" - RequestId: - type: string - description: Unique request ID for troubleshooting - example: "5265eb4a-0f4f-4cb1-9b3d-d9f1fb9347d2" - Error: - type: object - description: Error object (present when request fails) - properties: - Code: - type: string - description: Error code - Message: - type: string - description: Error message - TencentHunyuan3DTextureEditRequest: - type: object - description: Request body for Tencent Hunyuan 3D texture edit - required: - - File3D - properties: - File3D: - $ref: "#/components/schemas/TencentInputFile3D" - description: File URL of the 3D model that requires texture edit. Supported format FBX, less than 100000 faces. - Image: - $ref: "#/components/schemas/TencentImageInfo" - description: Reference image for 3D model texture editing. Either Base64 or Url must be provided. If both provided, Url prevails. Incompatible with Prompt. - Prompt: - type: string - maxLength: 1024 - description: Describes texture editing. Either Image or Prompt is required; they cannot coexist. - example: "a kitten" - EnablePBR: - type: boolean - description: Whether to enable the PBR texture parameter; only supported when using Prompt. - example: true - TencentImageInfo: - type: object - description: Reference image - Base64 data or image URL - properties: - ImageBase64: - type: string - description: Base64 encoded image. Resolution 128-4096 per side, converted Base64 less than 10MB. Formats jpg, jpeg, png. - ImageUrl: - type: string - format: uri - description: Image URL. If both Base64 and Url provided, Url prevails. - TencentHunyuan3DSmartTopologyRequest: - type: object - description: Request body for Tencent Hunyuan 3D Smart Topology (retopology/polygon reduction) - required: - - File3D - properties: - File3D: - $ref: "#/components/schemas/TencentInputFile3D" - description: Source 3D file model link. Supported formats GLB, OBJ. File size max 200MB. - PolygonType: - type: string - description: Polygon type for the output mesh. Defaults to triangle. - enum: ["triangle", "quadrilateral"] - example: "triangle" - FaceLevel: - type: string - description: Polygon reduction level. - enum: ["high", "medium", "low"] - example: "medium" - HitPawPhotoEnhancerRequest: - type: object - description: Request body for HitPaw Photo Enhancement API - required: - - model_name - - img_url - - extension - properties: - model_name: - type: string - description: | - The model name to use for enhancement. - - **Available Models:** - - face_2x, face_4x: Face Clear Model (2x/4x upscaling) - - face_v2_2x, face_v2_4x: Face Natural Model (2x/4x upscaling) - - general_2x, general_4x: General Enhance Model (2x/4x upscaling) - - high_fidelity_2x, high_fidelity_4x: High Fidelity Model (2x/4x upscaling) - - sharpen_denoise: Sharp Denoise Model - - detail_denoise: Detail Denoise Model - - generative_portrait: Generative Portrait Model - - generative: Generative Enhance Model - enum: - - face_2x - - face_4x - - face_v2_2x - - face_v2_4x - - general_2x - - general_4x - - high_fidelity_2x - - high_fidelity_4x - - sharpen_denoise - - detail_denoise - - generative_portrait - - generative - example: "generative_portrait" - img_url: - type: string - format: uri - description: URL of the image to be enhanced. Must be publicly accessible. - example: "https://example.com/image.jpg" - extension: - type: string - description: File extension of the image (e.g., ".jpg", ".png") - example: ".jpg" - exif: - type: boolean - description: Whether to preserve EXIF data (default false) - example: true - DPI: - type: integer - format: int64 - description: Target DPI for the output image - example: 300 - HitPawJobResponse: - type: object - description: Response from HitPaw Enhancement APIs (photo and video) - properties: - code: - type: integer - description: Status code, 200 indicates success - example: 200 - message: - type: string - description: Response message - example: "OK" - data: - type: object - properties: - job_id: - type: string - description: Unique identifier for the enhancement job - example: "f5007c0b-e902-4070-8c75-f337d896168f" - consume_coins: - type: integer - description: Number of coins consumed for this task - example: 75 - HitPawTaskStatusRequest: - type: object - description: Request body for HitPaw Task Status Query API - required: - - job_id - properties: - job_id: - type: string - description: Task ID obtained from Enhancement API response - example: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - HitPawTaskStatusResponse: - type: object - description: Response from HitPaw Task Status Query API - properties: - code: - type: integer - description: Status code, 200 indicates success - example: 200 - message: - type: string - description: Response message - example: "OK" - data: - type: object - properties: - job_id: - type: string - description: Task ID - example: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - status: - type: string - description: | - Task status: - - WAITING: The job is queued and waiting to be processed - - CONVERTING: Processing task in progress - - COMPLETED: Task completed successfully - - ERROR: Task failed - enum: ["WAITING", "CONVERTING", "COMPLETED", "ERROR"] - res_url: - type: string - format: uri - description: Result URL, only valid when status is COMPLETED - example: "https://example.com/result.jpg" - original_url: - type: string - format: uri - description: Original Image URL (photo enhancement only) - example: "https://example.com/original.jpg" - HitPawErrorResponse: - type: object - description: Error response from HitPaw API - properties: - error_code: - type: integer - description: Error code - message: - type: string - description: Error message - HitPawVideoEnhancerRequest: - type: object - description: Request body for HitPaw Video Enhancement API - required: - - video_url - - model_name - - resolution - properties: - video_url: - type: string - format: uri - description: URL of the video to be enhanced - example: "https://example.com/video.mp4" - model_name: - type: string - description: | - Model name to use for enhancement. - - **Available Models:** - - face_soft: Face Soft Model - - portrait_restore_1x: Portrait Restore Model 1x - - portrait_restore_2x: Portrait Restore Model 2x - - general_restore_1x: General Restore Model 1x - - general_restore_2x: General Restore Model 2x - - general_restore_4x: General Restore Model 4x - - ultrahd_restore: Ultra HD Model - - generative: Generative Model (SD) - enum: - - face_soft - - portrait_restore_1x - - portrait_restore_2x - - general_restore_1x - - general_restore_2x - - general_restore_4x - - ultrahd_restore - - generative - example: "general_restore_2x" - resolution: - type: array - description: Target resolution [width, height] - items: - type: integer - minItems: 2 - maxItems: 2 - example: [1920, 1080] - extension: - type: string - description: File extension for the output video (default ".mp4") - default: ".mp4" - example: ".mp4" - original_resolution: - type: array - description: Original video resolution [width, height] - items: - type: integer - minItems: 2 - maxItems: 2 - example: [1280, 720] - - # ElevenLabs Schemas - ElevenLabsVoiceSettings: - type: object - nullable: true - description: Voice settings configuration - properties: - stability: - type: number - format: double - nullable: true - minimum: 0 - maximum: 1 - default: 0.5 - description: Stability of the voice. Lower values introduce broader emotional range. - similarity_boost: - type: number - format: double - nullable: true - minimum: 0 - maximum: 1 - default: 0.75 - description: How closely the AI adheres to the original voice when replicating it. - style: - type: number - format: double - nullable: true - minimum: 0 - maximum: 1 - default: 0 - description: Style exaggeration. Amplifies the style of the original speaker. - use_speaker_boost: - type: boolean - nullable: true - default: true - description: Boosts similarity to the original speaker. Requires higher computational load. - speed: - type: number - format: double - nullable: true - minimum: 0.7 - maximum: 1.2 - default: 1.0 - description: Speed adjustment. 1.0 is default, values below slow down, values above speed up. - - ElevenLabsTTSRequest: - type: object - description: Request body for ElevenLabs Text to Speech - properties: - text: - type: string - description: The text that will be converted into speech. - model_id: - type: string - description: Identifier of the model to use. Query /v1/models to list available models. - default: eleven_multilingual_v2 - language_code: - type: string - nullable: true - description: Language code (ISO 639-1) to enforce for the model. If unsupported, an error is returned. - voice_settings: - $ref: "#/components/schemas/ElevenLabsVoiceSettings" - pronunciation_dictionary_locators: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsPronunciationDictionaryLocator" - description: List of pronunciation dictionary locators (id, version_id). Maximum 3 per request. - maxItems: 3 - seed: - type: integer - nullable: true - description: Seed for deterministic generation. Must be between 0 and 4294967295. - minimum: 0 - maximum: 4294967295 - previous_text: - type: string - nullable: true - description: Text that came before this request, used to improve speech continuity. - next_text: - type: string - nullable: true - description: Text that comes after this request, used to improve speech continuity. - previous_request_ids: - type: array - nullable: true - items: - type: string - description: Request IDs of previous generations for continuity. Maximum 3. - maxItems: 3 - next_request_ids: - type: array - nullable: true - items: - type: string - description: Request IDs of next generations for continuity. Maximum 3. - maxItems: 3 - apply_text_normalization: - type: string - enum: - - auto - - "on" - - "off" - default: auto - description: | - Controls text normalization. 'auto' lets the system decide, 'on' always applies normalization, - 'off' skips normalization. - apply_language_text_normalization: - type: boolean - default: false - description: Controls language-specific text normalization. Can heavily increase latency. Currently only supported for Japanese. - use_pvc_as_ivc: - type: boolean - default: false - description: Deprecated. If true, uses IVC version of voice instead of PVC. - required: - - text - - ElevenLabsPronunciationDictionaryLocator: - type: object - description: Locator for a pronunciation dictionary - properties: - pronunciation_dictionary_id: - type: string - description: The ID of the pronunciation dictionary - version_id: - type: string - description: The version ID of the pronunciation dictionary - required: - - pronunciation_dictionary_id - - version_id - - ElevenLabsValidationError: - type: object - description: Validation error response from ElevenLabs - properties: - detail: - type: object - description: Details about the validation error - properties: - status: - type: string - description: Error status - message: - type: string - description: Error message - - # ElevenLabs Speech-to-Text Schemas - ElevenLabsSTTRequest: - type: object - description: Request body for ElevenLabs Speech-to-Text - required: - - model_id - properties: - model_id: - type: string - enum: - - scribe_v1 - - scribe_v2 - description: The ID of the model to use for transcription. - file: - type: string - format: binary - description: | - The file to transcribe. All major audio and video formats are supported. - Exactly one of file or cloud_storage_url parameters must be provided. - The file size must be less than 3.0GB. - language_code: - type: string - nullable: true - description: | - An ISO-639-1 or ISO-639-3 language_code corresponding to the language of the audio file. - Can sometimes improve transcription performance if known beforehand. - Defaults to null, in this case the language is predicted automatically. - tag_audio_events: - type: boolean - default: true - description: Whether to tag audio events like (laughter), (footsteps), etc. in the transcription. - num_speakers: - type: integer - nullable: true - description: | - The maximum amount of speakers talking in the uploaded file. - Can help with predicting who speaks when. The maximum amount of speakers that can be predicted is 32. - Defaults to null, in this case the amount of speakers is set to the maximum value the model supports. - timestamps_granularity: - type: string - enum: - - none - - word - - character - default: word - description: | - The granularity of the timestamps in the transcription. - 'word' provides word-level timestamps and 'character' provides character-level timestamps per word. - diarize: - type: boolean - default: false - description: Whether to annotate which speaker is currently talking in the uploaded file. - diarization_threshold: - type: number - format: double - nullable: true - description: | - Diarization threshold to apply during speaker diarization. - A higher value means there will be a lower chance of one speaker being diarized as two different speakers. - Can only be set when diarize=True and num_speakers=None. Defaults to None. - additional_formats: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsSTTExportOptions" - description: A list of additional formats to export the transcript to. - file_format: - type: string - enum: - - pcm_s16le_16 - - other - default: other - description: | - The format of input audio. Options are 'pcm_s16le_16' or 'other'. - For pcm_s16le_16, the input audio must be 16-bit PCM at a 16kHz sample rate, single channel (mono). - cloud_storage_url: - type: string - nullable: true - description: | - The HTTPS URL of the file to transcribe. Exactly one of file or cloud_storage_url parameters must be provided. - The file must be accessible via HTTPS and the file size must be less than 2GB. - webhook: - type: boolean - default: false - description: | - Whether to send the transcription result to configured speech-to-text webhooks. - If set the request will return early without the transcription, which will be delivered later via webhook. - webhook_id: - type: string - nullable: true - description: | - Optional specific webhook ID to send the transcription result to. - Only valid when webhook is set to true. - temperature: - type: number - format: double - nullable: true - description: | - Controls the randomness of the transcription output. Accepts values between 0.0 and 2.0. - Higher values result in more diverse and less deterministic results. - seed: - type: integer - nullable: true - description: | - If specified, our system will make a best effort to sample deterministically. - Must be an integer between 0 and 2147483647. - minimum: 0 - maximum: 2147483647 - use_multi_channel: - type: boolean - default: false - description: | - Whether the audio file contains multiple channels where each channel contains a single speaker. - When enabled, each channel will be transcribed independently and the results will be combined. - A maximum of 5 channels is supported. - webhook_metadata: - type: string - nullable: true - description: | - Optional metadata to be included in the webhook response. - This should be a JSON string representing an object with a maximum depth of 2 levels and maximum size of 16KB. - entity_detection: - nullable: true - oneOf: - - type: string - - type: array - items: - type: string - description: | - Detect entities in the transcript. Can be 'all' to detect all entities, - a single entity type or category string, or a list of entity types/categories. - Categories include 'pii', 'phi', 'pci', 'other', 'offensive_language'. - When enabled, detected entities will be returned in the 'entities' field - with their text, type, and character positions. Usage of this parameter will incur additional costs. - keyterms: - type: array - nullable: true - items: - type: string - description: | - A list of keyterms to bias the transcription towards. - The number of keyterms cannot exceed 100 and each keyterm must be less than 50 characters. - - ElevenLabsSTTExportOptions: - type: object - description: Export format options for speech-to-text transcripts - required: - - format - properties: - format: - type: string - enum: - - segmented_json - - docx - - pdf - - txt - - html - - srt - description: The output format for the transcript export. - include_speakers: - type: boolean - default: true - description: Whether to include speaker labels in the export. - include_timestamps: - type: boolean - default: true - description: Whether to include timestamps in the export. - segment_on_silence_longer_than_s: - type: number - format: double - nullable: true - description: Segment the transcript when silence is longer than this value in seconds. - max_segment_duration_s: - type: number - format: double - nullable: true - description: Maximum duration of each segment in seconds. - max_segment_chars: - type: integer - nullable: true - description: Maximum number of characters per segment. - max_characters_per_line: - type: integer - nullable: true - description: Maximum characters per line (for txt and srt formats). - - ElevenLabsSTTResponse: - type: object - description: Response from ElevenLabs Speech-to-Text - properties: - language_code: - type: string - description: The detected language code (e.g. 'eng' for English). - language_probability: - type: number - format: double - description: The confidence score of the language detection (0 to 1). - text: - type: string - description: The raw text of the transcription. - words: - type: array - items: - $ref: "#/components/schemas/ElevenLabsSTTWord" - description: List of words with their timing information. - channel_index: - type: integer - nullable: true - description: The channel index this transcript belongs to (for multichannel audio). - additional_formats: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsSTTAdditionalFormat" - description: Requested additional formats of the transcript. - transcription_id: - type: string - nullable: true - description: The transcription ID of the response. - entities: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsSTTDetectedEntity" - description: List of detected entities with their text, type, and character positions. - transcripts: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsSTTTranscript" - description: List of transcripts for multichannel audio (when use_multi_channel is true). - message: - type: string - nullable: true - description: Message for webhook responses. - request_id: - type: string - nullable: true - description: Request ID for webhook responses. - - ElevenLabsSTTWord: - type: object - description: Word information from speech-to-text transcription - required: - - text - - type - - logprob - properties: - text: - type: string - description: The word or sound that was transcribed. - start: - type: number - format: double - nullable: true - description: The start time of the word or sound in seconds. - end: - type: number - format: double - nullable: true - description: The end time of the word or sound in seconds. - type: - type: string - enum: - - word - - spacing - - audio_event - description: | - The type of the word or sound. - 'audio_event' is used for non-word sounds like laughter or footsteps. - speaker_id: - type: string - nullable: true - description: Unique identifier for the speaker of this word. - logprob: - type: number - format: double - description: | - The log of the probability with which this word was predicted. - Logprobs are in range [-infinity, 0], higher logprobs indicate higher confidence. - characters: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsSTTCharacter" - description: The characters that make up the word and their timing information. - - ElevenLabsSTTCharacter: - type: object - description: Character information with timing - required: - - text - properties: - text: - type: string - description: The character that was transcribed. - start: - type: number - format: double - nullable: true - description: The start time of the character in seconds. - end: - type: number - format: double - nullable: true - description: The end time of the character in seconds. - - ElevenLabsSTTAdditionalFormat: - type: object - description: Additional format response for transcript export - required: - - requested_format - - file_extension - - content_type - - is_base64_encoded - - content - properties: - requested_format: - type: string - description: The requested format. - file_extension: - type: string - description: The file extension of the additional format. - content_type: - type: string - description: The content type of the additional format. - is_base64_encoded: - type: boolean - description: Whether the content is base64 encoded. - content: - type: string - description: The content of the additional format. - - ElevenLabsSTTDetectedEntity: - type: object - description: Detected entity in transcript - required: - - text - - entity_type - - start_char - - end_char - properties: - text: - type: string - description: The text that was identified as an entity. - entity_type: - type: string - description: The type of entity detected (e.g., 'credit_card', 'email_address', 'person_name'). - start_char: - type: integer - description: Start character position in the transcript text. - end_char: - type: integer - description: End character position in the transcript text. - - ElevenLabsSTTTranscript: - type: object - description: Individual transcript for multichannel audio - properties: - language_code: - type: string - description: The detected language code. - language_probability: - type: number - format: double - description: The confidence score of the language detection. - text: - type: string - description: The raw text of the transcription. - words: - type: array - items: - $ref: "#/components/schemas/ElevenLabsSTTWord" - description: List of words with their timing information. - channel_index: - type: integer - nullable: true - description: The channel index this transcript belongs to. - additional_formats: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsSTTAdditionalFormat" - description: Requested additional formats. - entities: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsSTTDetectedEntity" - description: List of detected entities. - - # ElevenLabs Speech-to-Speech (Voice Changer) Schemas - ElevenLabsSpeechToSpeechRequest: - type: object - description: Request body for ElevenLabs Speech-to-Speech (Voice Changer) - required: - - audio - properties: - audio: - type: string - format: binary - description: The audio file which holds the content and emotion that will control the generated speech. - model_id: - type: string - default: eleven_english_sts_v2 - description: | - Identifier of the model that will be used. Query GET /v1/models to list available models. - The model needs to have support for speech to speech (can_do_voice_conversion property). - voice_settings: - type: string - nullable: true - description: | - Voice settings overriding stored settings for the given voice. - They are applied only on the given request. Needs to be sent as a JSON encoded string. - seed: - type: integer - nullable: true - description: | - If specified, our system will make a best effort to sample deterministically. - Repeated requests with the same seed and parameters should return the same result. - Must be integer between 0 and 4294967295. - minimum: 0 - maximum: 4294967295 - remove_background_noise: - type: boolean - default: false - description: | - If set, will remove the background noise from your audio input using our audio isolation model. - Only applies to Voice Changer. - file_format: - type: string - nullable: true - enum: - - pcm_s16le_16 - - other - default: other - description: | - The format of input audio. Options are 'pcm_s16le_16' or 'other'. - For pcm_s16le_16, the input audio must be 16-bit PCM at a 16kHz sample rate, single channel (mono). - - # ElevenLabs Text-to-Dialogue Schemas - ElevenLabsTextToDialogueRequest: - type: object - description: Request body for ElevenLabs Text-to-Dialogue (multi-voice TTS) - required: - - inputs - properties: - inputs: - type: array - items: - $ref: "#/components/schemas/ElevenLabsDialogueInput" - description: | - A list of dialogue inputs, each containing text and a voice ID which will be converted into speech. - The maximum number of unique voice IDs is 10. - model_id: - type: string - default: eleven_v3 - description: | - Identifier of the model that will be used. Query GET /v1/models to list available models. - The model needs to have support for text to speech (can_do_text_to_speech property). - language_code: - type: string - nullable: true - description: | - Language code (ISO 639-1) used to enforce a language for the model and text normalization. - If the model does not support provided language code, an error will be returned. - settings: - $ref: "#/components/schemas/ElevenLabsDialogueSettings" - pronunciation_dictionary_locators: - type: array - nullable: true - items: - $ref: "#/components/schemas/ElevenLabsPronunciationDictionaryLocator" - description: | - A list of pronunciation dictionary locators (id, version_id) to be applied to the text. - They will be applied in order. You may have up to 3 locators per request. - maxItems: 3 - seed: - type: integer - nullable: true - description: | - If specified, our system will make a best effort to sample deterministically. - Repeated requests with the same seed and parameters should return the same result. - Must be integer between 0 and 4294967295. - minimum: 0 - maximum: 4294967295 - apply_text_normalization: - type: string - enum: - - auto - - "on" - - "off" - default: auto - description: | - Controls text normalization with three modes: - 'auto' - system automatically decides whether to apply text normalization - 'on' - text normalization will always be applied - 'off' - text normalization will be skipped - - ElevenLabsDialogueInput: - type: object - description: A single dialogue input containing text and voice ID - required: - - text - - voice_id - properties: - text: - type: string - description: The text to be converted into speech. - voice_id: - type: string - description: The ID of the voice to be used for the generation. - - ElevenLabsDialogueSettings: - type: object - nullable: true - description: Settings controlling the dialogue generation - properties: - stability: - type: number - format: double - nullable: true - default: 0.5 - description: | - Determines how stable the voice is and the randomness between each generation. - Lower values introduce broader emotional range for the voice. - Higher values can result in a monotonous voice with limited emotion. - - # ElevenLabs Audio Isolation Schemas - ElevenLabsAudioIsolationRequest: - type: object - description: Request body for audio isolation (removing background noise) - required: - - audio - properties: - audio: - type: string - format: binary - description: The audio file from which vocals/speech will be isolated. - file_format: - type: string - nullable: true - enum: - - pcm_s16le_16 - - other - default: other - description: | - The format of input audio. Options are 'pcm_s16le_16' or 'other'. - For pcm_s16le_16, the input audio must be 16-bit PCM at a 16kHz sample rate, single channel (mono). - Latency will be lower than with passing an encoded waveform. - preview_b64: - type: string - nullable: true - description: Optional preview image base64 for tracking this generation. - - ElevenLabsCreateVoiceRequest: - type: object - description: Request body for creating an instant voice clone - required: - - name - - files - properties: - name: - type: string - description: The name that identifies this voice. - files: - type: array - items: - type: string - format: binary - description: Audio recordings for voice cloning. - remove_background_noise: - type: boolean - default: false - description: If set, removes background noise from voice samples using audio isolation. - description: - type: string - nullable: true - description: A description of the voice. - labels: - type: string - nullable: true - description: JSON string of labels for the voice (language, accent, gender, age). - - ElevenLabsSoundGenerationRequest: - type: object - description: Request body for generating sound effects from text - required: - - text - properties: - text: - type: string - description: The text that will get converted into a sound effect. - loop: - type: boolean - default: false - description: | - Whether to create a sound effect that loops smoothly. - Only available for the 'eleven_text_to_sound_v2' model. - duration_seconds: - type: number - format: double - nullable: true - description: | - The duration of the sound which will be generated in seconds. - Must be at least 0.5 and at most 30. If set to null, the optimal - duration will be guessed using the prompt. Defaults to null. - prompt_influence: - type: number - format: double - description: | - A higher prompt influence makes your generation follow the prompt - more closely while also making generations less variable. - Must be a value between 0 and 1. Defaults to 0.3. - model_id: - type: string - default: eleven_text_to_sound_v2 - description: The model ID to use for the sound generation. - - KlingErrorResponse: - type: object - properties: - code: - type: integer - description: | - - 1000: Authentication failed - - 1001: Authorization is empty - - 1002: Authorization is invalid - - 1003: Authorization is not yet valid - - 1004: Authorization has expired - - 1100: Account exception - - 1101: Account in arrears (postpaid scenario) - - 1102: Resource pack depleted or expired (prepaid scenario) - - 1103: Unauthorized access to requested resource - - 1200: Invalid request parameters - - 1201: Invalid parameters - - 1202: Invalid request method - - 1203: Requested resource does not exist - - 1300: Trigger platform strategy - - 1301: Trigger content security policy - - 1302: API request too frequent - - 1303: Concurrency/QPS exceeds limit - - 1304: Trigger IP whitelist policy - - 5000: Internal server error - - 5001: Service temporarily unavailable - - 5002: Server internal timeout - message: - type: string - description: Human-readable error message - request_id: - type: string - description: Request ID for tracking and troubleshooting - required: - - code - - message - - request_id - - TripoTask: - type: object - properties: - task_id: - type: string - type: - type: string - status: - type: string - enum: - - queued - - running - - success - - failed - - cancelled - - unknown - - banned - - expired - input: - type: object - output: - type: object - properties: - model: - type: string - base_model: - type: string - pbr_model: - type: string - rendered_image: - type: string - riggable: - type: boolean - topology: - type: string - enum: - - "bip" - - "quad" - progress: - type: integer - minimum: 0 - maximum: 100 - create_time: - type: integer - required: - - task_id - - type - - status - - input - - output - - progress - - create_time - TripoSuccessTask: - type: object - properties: - code: - type: integer - enum: - - 0 - data: - type: object - properties: - task_id: - description: used for getTask - type: string - required: - - task_id - required: - - code - - data - TripoBalance: - type: object - properties: - balance: - type: number - frozen: - type: number - required: ["balance", "frozen"] - TripoErrorResponse: - type: object - properties: - code: - type: integer - enum: - - 1001 - - 2000 - - 2001 - - 2002 - - 2003 - - 2004 - - 2006 - - 2007 - - 2008 - - 2010 - message: - type: string - suggestion: - type: string - required: - - code - - message - - suggestion - TripoResponseSuccessCode: - type: integer - description: "Standard success code for Tripo API responses. Typically 0 for success." - example: 0 - TripoTextToModel: - type: string - description: "The type of the Tripo task, specifically for text-to-model operations." - enum: - - text_to_model - example: text_to_model - TripoModelVersion: - type: string - description: "Version of the Tripo model." - enum: - - "v2.5-20250123" - - "v2.0-20240919" - - "v1.4-20240625" - example: "v2.5-20250123" - TripoModelStyle: - type: string - description: "Style for the Tripo model generation." - enum: - - "person:person2cartoon" - - "animal:venom" - - "object:clay" - - "object:steampunk" - - "object:christmas" - - "object:barbie" - - "gold" - - "ancient_bronze" - example: "object:clay" - TripoImageToModel: - type: string - description: "Task type for Tripo image-to-model generation." - enum: - - "image_to_model" - example: "image_to_model" - TripoMultiviewToModel: - type: string - description: "Task type for Tripo multiview-to-model generation." - enum: - - "multiview_to_model" - example: "multiview_to_model" - TripoMultiviewMode: - type: string - description: "Mode for multiview generation, specifying view orientation." - enum: - - LEFT - - RIGHT - example: LEFT - TripoTextureQuality: - type: string - enum: - - standard - - detailed - TripoTextureAlignment: - type: string - enum: - - original_image - - geometry - TripoOrientation: - type: string - enum: - - align_image - - default - default: default - TripoTypeTextureModel: - type: string - enum: - - texture_model - TripoTypeRefineModel: - type: string - enum: - - refine_model - TripoTypeAnimatePrerigcheck: - type: string - enum: - - animate_prerigcheck - TripoTypeAnimateRig: - type: string - enum: - - animate_rig - TripoStandardFormat: - type: string - enum: - - glb - - fbx - TripoTopology: - type: string - enum: - - "bip" - - "quad" - TripoSpec: - type: string - enum: - - "mixamo" - - "tripo" - TripoTypeAnimateRetarget: - type: string - enum: - - animate_retarget - TripoAnimation: - type: string - enum: - - preset:idle - - preset:walk - - preset:climb - - preset:jump - - preset:run - - preset:slash - - preset:shoot - - preset:hurt - - preset:fall - - preset:turn - TripoTypeStylizeModel: - type: string - enum: - - stylize_model - TripoStylizeOptions: - type: string - enum: - - lego - - voxel - - voronoi - - minecraft - TripoTypeConvertModel: - type: string - enum: - - convert_model - TripoConvertFormat: - type: string - enum: - - GLTF - - USDZ - - FBX - - OBJ - - STL - - 3MF - TripoTextureFormat: - type: string - enum: - - BMP - - DPX - - HDR - - JPEG - - OPEN_EXR - - PNG - - TARGA - - TIFF - - WEBP - TripoGeometryQuality: - type: string - enum: - - standard - - detailed - LumaAspectRatio: - type: string - enum: - - "1:1" - - "16:9" - - "9:16" - - "4:3" - - "3:4" - - "21:9" - - "9:21" - description: The aspect ratio of the generation - example: "16:9" - default: "16:9" - LumaKeyframes: - type: object - description: The keyframes of the generation - properties: - frame0: - $ref: "#/components/schemas/LumaKeyframe" - frame1: - $ref: "#/components/schemas/LumaKeyframe" - example: - frame0: - type: image - url: "https://example.com/image.jpg" - frame1: - type: generation - id: "123e4567-e89b-12d3-a456-426614174000" - LumaVideoModel: - type: string - enum: - - ray-2 - - ray-flash-2 - - ray-1-6 - default: ray-2 - example: ray-2 - description: The video model used for the generation - LumaVideoModelOutputResolution: - anyOf: - - type: string - enum: - - 540p - - 720p - - 1080p - - 4k - - type: string - LumaVideoModelOutputDuration: - anyOf: - - type: string - enum: - - 5s - - 9s - - type: string - LumaImageModel: - type: string - enum: - - photon-1 - - photon-flash-1 - default: photon-1 - description: The image model used for the generation - LumaImageRef: - type: object - description: The image reference object - properties: - url: - type: string - format: uri - description: The URL of the image reference - weight: - type: number - description: The weight of the image reference - LumaImageIdentity: - type: object - description: The image identity object - properties: - images: - type: array - items: - type: string - format: uri - description: The URLs of the image identity - LumaModifyImageRef: - type: object - description: The modify image reference object - properties: - url: - type: string - format: uri - description: The URL of the image reference - weight: - type: number - description: The weight of the modify image reference - LumaGenerationReference: - type: object - description: The generation reference object - properties: - type: - type: string - enum: - - generation - default: generation - id: - type: string - format: uuid - description: The ID of the generation - required: - - type - - id - example: - type: generation - id: "123e4567-e89b-12d3-a456-426614174003" - LumaImageReference: - type: object - description: The image object - properties: - type: - type: string - enum: - - image - default: image - url: - type: string - format: uri - description: The URL of the image - required: - - type - - url - example: - type: image - url: "https://example.com/image.jpg" - LumaKeyframe: - oneOf: - - $ref: "#/components/schemas/LumaGenerationReference" - - $ref: "#/components/schemas/LumaImageReference" - discriminator: - propertyName: type - mapping: - generation: "#/components/schemas/LumaGenerationReference" - image: "#/components/schemas/LumaImageReference" - description: A keyframe can be either a Generation reference, an Image, or a Video - LumaGenerationType: - type: string - enum: - - video - - image - LumaState: - type: string - description: The state of the generation - enum: - - queued - - dreaming - - completed - - failed - example: completed - LumaAssets: - type: object - description: The assets of the generation - properties: - video: - type: string - format: uri - description: The URL of the video - image: - type: string - format: uri - description: The URL of the image - progress_video: - type: string - format: uri - description: The URL of the progress video - LumaGenerationRequest: - type: object - description: The generation request object - properties: - generation_type: - type: string - enum: - - video - default: video - prompt: - type: string - description: The prompt of the generation - aspect_ratio: - $ref: "#/components/schemas/LumaAspectRatio" - loop: - type: boolean - description: Whether to loop the video - keyframes: - $ref: "#/components/schemas/LumaKeyframes" - callback_url: - type: string - format: uri - description: The callback URL of the generation, a POST request with Generation object will be sent to the callback URL when the generation is dreaming, completed, or failed - model: - $ref: "#/components/schemas/LumaVideoModel" - resolution: - $ref: "#/components/schemas/LumaVideoModelOutputResolution" - duration: - $ref: "#/components/schemas/LumaVideoModelOutputDuration" - required: - - duration - - resolution - - prompt - - aspect_ratio - - model - LumaImageGenerationRequest: - type: object - description: The image generation request object - properties: - generation_type: - type: string - enum: - - image - default: image - model: - $ref: "#/components/schemas/LumaImageModel" - prompt: - type: string - description: The prompt of the generation - aspect_ratio: - $ref: "#/components/schemas/LumaAspectRatio" - callback_url: - type: string - format: uri - description: The callback URL for the generation - image_ref: - type: array - items: - $ref: "#/components/schemas/LumaImageRef" - style_ref: - type: array - items: - $ref: "#/components/schemas/LumaImageRef" - character_ref: - type: object - properties: - identity0: - $ref: "#/components/schemas/LumaImageIdentity" - modify_image_ref: - $ref: "#/components/schemas/LumaModifyImageRef" - LumaUpscaleVideoGenerationRequest: - type: object - description: The upscale generation request object - properties: - generation_type: - type: string - enum: - - upscale_video - default: upscale_video - resolution: - $ref: "#/components/schemas/LumaVideoModelOutputResolution" - callback_url: - type: string - format: uri - description: The callback URL for the upscale - LumaAudioGenerationRequest: - type: object - description: The audio generation request object - properties: - generation_type: - type: string - enum: - - add_audio - default: add_audio - prompt: - type: string - description: The prompt of the audio - negative_prompt: - type: string - description: The negative prompt of the audio - callback_url: - type: string - format: uri - description: The callback URL for the audio - LumaError: - type: object - description: The error object - properties: - detail: - type: string - description: The error message - example: - detail: "Invalid API key is provided" - LumaGeneration: - type: object - description: The generation response object - properties: - id: - type: string - format: uuid - description: The ID of the generation - generation_type: - $ref: "#/components/schemas/LumaGenerationType" - state: - $ref: "#/components/schemas/LumaState" - failure_reason: - type: string - description: The reason for the state of the generation - created_at: - type: string - format: date-time - description: The date and time when the generation was created - assets: - $ref: "#/components/schemas/LumaAssets" - model: - type: string - description: The model used for the generation - request: - oneOf: - - $ref: "#/components/schemas/LumaGenerationRequest" - - $ref: "#/components/schemas/LumaImageGenerationRequest" - - $ref: "#/components/schemas/LumaUpscaleVideoGenerationRequest" - - $ref: "#/components/schemas/LumaAudioGenerationRequest" - description: The request of the generation - example: - id: "123e4567-e89b-12d3-a456-426614174000" - state: "completed" - failure_reason: null - created_at: "2023-06-01T12:00:00Z" - assets: - video: "https://example.com/video.mp4" - model: "ray-2" - request: - prompt: "A serene lake surrounded by mountains at sunset" - aspect_ratio: "16:9" - loop: true - keyframes: - frame0: - type: image - url: "https://example.com/image.jpg" - frame1: - type: generation - id: "123e4567-e89b-12d3-a456-426614174000" - - PixverseTextVideoRequest: - type: object - required: - - aspect_ratio - - duration - - model - - prompt - - quality - properties: - aspect_ratio: - type: string - enum: ["16:9", "4:3", "1:1", "3:4", "9:16"] - duration: - type: integer - enum: [5, 8] - model: - type: string - enum: [v3.5] - motion_mode: - type: string - enum: [normal, fast] - negative_prompt: - type: string - prompt: - type: string - quality: - type: string - enum: [360p, 540p, 720p, 1080p] - seed: - type: integer - style: - type: string - enum: [anime, 3d_animation, clay, comic, cyberpunk] - template_id: - type: integer - water_mark: - type: boolean - PixverseVideoResponse: - type: object - properties: - ErrCode: - type: integer - ErrMsg: - type: string - Resp: - type: object - properties: - video_id: - type: integer - PixverseImageUploadResponse: - type: object - properties: - ErrCode: - type: integer - ErrMsg: - type: string - Resp: - type: object - properties: - img_id: - type: integer - PixverseImageVideoRequest: - type: object - required: - - img_id - - model - - duration - - quality - - prompt - properties: - img_id: - type: integer - model: - type: string - enum: [v3.5] - prompt: - type: string - duration: - type: integer - enum: [5, 8] - quality: - type: string - enum: [360p, 540p, 720p, 1080p] - motion_mode: - type: string - enum: [normal, fast] - seed: - type: integer - style: - type: string - enum: [anime, 3d_animation, clay, comic, cyberpunk] - template_id: - type: integer - water_mark: - type: boolean - PixverseTransitionVideoRequest: - type: object - required: - - first_frame_img - - last_frame_img - - model - - duration - - quality - - prompt - - motion_mode - - seed - properties: - first_frame_img: - type: integer - last_frame_img: - type: integer - model: - type: string - enum: [v3.5] - duration: - type: integer - enum: [5, 8] - quality: - type: string - enum: [360p, 540p, 720p, 1080p] - motion_mode: - type: string - enum: [normal, fast] - seed: - type: integer - prompt: - type: string - style: - type: string - enum: [anime, 3d_animation, clay, comic, cyberpunk] - template_id: - type: integer - water_mark: - type: boolean - PixverseVideoResultResponse: - type: object - properties: - ErrCode: - type: integer - ErrMsg: - type: string - Resp: - type: object - properties: - create_time: - type: string - id: - type: integer - modify_time: - type: string - negative_prompt: - type: string - outputHeight: - type: integer - outputWidth: - type: integer - prompt: - type: string - resolution_ratio: - type: integer - seed: - type: integer - size: - type: integer - status: - type: integer - enum: [1, 5, 6, 7, 8] - description: | - Video generation status codes: - * 1 - Generation successful - * 5 - Generating - * 6 - Deleted - * 7 - Contents moderation failed - * 8 - Generation failed - style: - type: string - url: - type: string - Veo2GenVidRequest: - type: object - properties: - instances: - type: array - items: - type: object - properties: - prompt: - type: string - description: Text description of the video - image: - type: object - description: Optional image to guide video generation - properties: - bytesBase64Encoded: - type: string - format: byte - gcsUri: - type: string - mimeType: - type: string - oneOf: - - required: [bytesBase64Encoded] - - required: [gcsUri] - required: - - prompt - parameters: - type: object - properties: - aspectRatio: - type: string - example: "16:9" - negativePrompt: - type: string - personGeneration: - type: string - enum: ["ALLOW", "BLOCK"] - sampleCount: - type: integer - seed: - type: integer - format: uint32 - storageUri: - type: string - description: Optional Cloud Storage URI to upload the video - durationSeconds: - type: integer - enhancePrompt: - type: boolean - Veo2GenVidResponse: - type: object - properties: - name: - type: string - description: Operation resource name - example: projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8 - required: - - name - Veo2GenVidPollRequest: - type: object - properties: - operationName: - type: string - description: Full operation name (from predict response) - example: projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/OPERATION_ID - required: - - operationName - Veo2GenVidPollResponse: - type: object - properties: - name: - type: string - done: - type: boolean - response: - type: object - properties: - "@type": - type: string - example: type.googleapis.com/cloud.ai.large_models.vision.GenerateVideoResponse - raiMediaFilteredCount: - type: integer - description: Count of media filtered by responsible AI policies - raiMediaFilteredReasons: - type: array - items: - type: string - description: Reasons why media was filtered by responsible AI policies - videos: - type: array - items: - type: object - properties: - gcsUri: - type: string - description: Cloud Storage URI of the video - bytesBase64Encoded: - type: string - description: Base64-encoded video content - mimeType: - type: string - description: Video MIME type - description: The actual prediction response if done is true - error: - type: object - description: Error details if operation failed - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - - VeoGenVidRequest: - type: object - properties: - instances: - type: array - items: - type: object - properties: - prompt: - type: string - description: Text description of the video - image: - type: object - description: Optional image to guide video generation - properties: - bytesBase64Encoded: - type: string - format: byte - gcsUri: - type: string - mimeType: - type: string - oneOf: - - required: [bytesBase64Encoded] - - required: [gcsUri] - lastFrame: - type: object - description: Optional last frame image to guide video generation - properties: - bytesBase64Encoded: - type: string - format: byte - gcsUri: - type: string - mimeType: - type: string - oneOf: - - required: [bytesBase64Encoded] - - required: [gcsUri] - required: - - prompt - parameters: - type: object - properties: - aspectRatio: - type: string - example: "16:9" - negativePrompt: - type: string - personGeneration: - type: string - enum: ["ALLOW", "BLOCK"] - sampleCount: - type: integer - seed: - type: integer - format: uint32 - storageUri: - type: string - description: Optional Cloud Storage URI to upload the video - durationSeconds: - type: integer - enhancePrompt: - type: boolean - generateAudio: - type: boolean - description: Generate audio for the video. Only supported by veo 3 models. - VeoGenVidResponse: - type: object - properties: - name: - type: string - description: Operation resource name - example: projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8 - required: - - name - VeoGenVidPollRequest: - type: object - properties: - operationName: - type: string - description: Full operation name (from predict response) - example: projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/OPERATION_ID - required: - - operationName - VeoGenVidPollResponse: - type: object - properties: - name: - type: string - done: - type: boolean - response: - type: object - properties: - "@type": - type: string - example: type.googleapis.com/cloud.ai.large_models.vision.GenerateVideoResponse - raiMediaFilteredCount: - type: integer - description: Count of media filtered by responsible AI policies - raiMediaFilteredReasons: - type: array - items: - type: string - description: Reasons why media was filtered by responsible AI policies - videos: - type: array - items: - type: object - properties: - gcsUri: - type: string - description: Cloud Storage URI of the video - bytesBase64Encoded: - type: string - description: Base64-encoded video content - mimeType: - type: string - description: Video MIME type - description: The actual prediction response if done is true - error: - type: object - description: Error details if operation failed - properties: - code: - type: integer - description: Error code - message: - type: string - description: Error message - - RunwayImageToVideoRequest: - type: object - properties: - promptImage: - $ref: "#/components/schemas/RunwayPromptImageObject" - seed: - type: integer - format: int64 - minimum: 0 - maximum: 4294967295 - description: Random seed for generation - model: - $ref: "#/components/schemas/RunwayModelEnum" - description: Model to use for generation - promptText: - type: string - maxLength: 1000 - description: Text prompt for the generation - duration: - $ref: "#/components/schemas/RunwayDurationEnum" - description: The number of seconds of duration for the output video. - ratio: - $ref: "#/components/schemas/RunwayAspectRatioEnum" - description: The resolution (aspect ratio) of the output video. Allowable values depend on the selected model. 1280:768 and 768:1280 are only supported for gen3a_turbo. - required: - - promptImage - - seed - - model - - duration - - ratio - RunwayImageToVideoResponse: - type: object - properties: - id: - type: string - description: Task ID - RunwayTextToImageResponse: - type: object - properties: - id: - type: string - description: Task ID - RunwayTaskStatusResponse: - type: object - properties: - id: - type: string - description: Task ID - status: - $ref: "#/components/schemas/RunwayTaskStatusEnum" - description: Task status - createdAt: - type: string - format: date-time - description: Task creation timestamp - output: - type: array - items: - type: string - description: Array of output video URLs - progress: - type: number - format: float - minimum: 0 - maximum: 1 - description: Float value between 0 and 1 representing the progress of the task. Only available if status is RUNNING. - required: - - id - - status - - createdAt - RunwayTaskStatusEnum: - type: string - description: Possible statuses for a Runway task. - enum: - - SUCCEEDED - - RUNNING - - FAILED - - PENDING - - CANCELLED - - THROTTLED - RunwayModelEnum: - type: string - description: Available Runway models for generation. - enum: - - gen4_turbo - - gen3a_turbo - RunwayPromptImageDetailedObject: - type: object - description: Represents an image with its position in the video sequence. - properties: - uri: - type: string - description: A HTTPS URL or data URI containing an encoded image. - position: - type: string - description: The position of the image in the output video. 'last' is currently supported for gen3a_turbo only. - enum: [first, last] - required: - - uri - - position - RunwayDurationEnum: - type: integer - enum: - - 5 - - 10 - RunwayAspectRatioEnum: - type: string - enum: - - "1280:720" - - "720:1280" - - "1104:832" - - "832:1104" - - "960:960" - - "1584:672" - - "1280:768" # gen3a_turbo only - - "768:1280" # gen3a_turbo only - RunwayTextToImageAspectRatioEnum: - type: string - enum: - - "1920:1080" - - "1080:1920" - - "1024:1024" - - "1360:768" - - "1080:1080" - - "1168:880" - - "1440:1080" - - "1080:1440" - - "1808:768" - - "2112:912" - RunwayPromptImageObject: - oneOf: - - type: string - description: A single HTTPS URL or data URI for the first frame image. - - type: array - description: An array of image objects with positions. No two images can have the same position. - items: - $ref: "#/components/schemas/RunwayPromptImageDetailedObject" - description: Image(s) to use for the video generation. Can be a single URI or an array of image objects with positions. - OpenAIImageGenerationResponse: - type: object - properties: - data: - type: array - items: - type: object - properties: - b64_json: - type: string - description: Base64 encoded image data - url: - type: string - description: URL of the image - revised_prompt: - type: string - description: Revised prompt - usage: - type: object - properties: - input_tokens: - type: integer - input_tokens_details: - type: object - properties: - text_tokens: - type: integer - image_tokens: - type: integer - output_tokens: - type: integer - output_tokens_details: - type: object - properties: - text_tokens: - type: integer - image_tokens: - type: integer - total_tokens: - type: integer - OpenAIImageGenerationRequest: - type: object - required: - - prompt - properties: - model: - type: string - description: The model to use for image generation - example: "dall-e-3" - prompt: - type: string - description: A text description of the desired image - example: "Draw a rocket in front of a blackhole in deep space" - n: - type: integer - description: The number of images to generate (1-10). Only 1 supported for dall-e-3. - example: 1 - quality: - type: string - description: The quality of the generated image - enum: [low, medium, high, standard, hd] - example: "high" - size: - type: string - description: Size of the image (e.g., 1024x1024, 1536x1024, auto) - example: "1024x1536" - output_format: - type: string - description: Format of the output image - enum: [png, webp, jpeg] - example: "png" - output_compression: - type: integer - description: Compression level for JPEG or WebP (0-100) - example: 100 - moderation: - type: string - description: Content moderation setting - enum: [low, auto] - example: "auto" - background: - type: string - description: Background transparency - enum: [transparent, opaque] - example: "opaque" - response_format: - type: string - description: Response format of image data - enum: [url, b64_json] - example: "b64_json" - style: - type: string - description: Style of the image (only for dall-e-3) - enum: [vivid, natural] - example: "vivid" - user: - type: string - description: A unique identifier for end-user monitoring - example: "user-1234" - OpenAIImageEditRequest: - type: object - required: - - model - - prompt - properties: - model: - type: string - description: The model to use for image editing - example: "gpt-image-1" - prompt: - type: string - description: A text description of the desired edit - example: "Give the rocketship rainbow coloring" - n: - type: integer - description: The number of images to generate - example: 1 - quality: - type: string - description: The quality of the edited image - example: "low" - size: - type: string - description: Size of the output image - example: "1024x1024" - output_format: - type: string - description: Format of the output image - enum: [png, webp, jpeg] - example: "png" - output_compression: - type: integer - description: Compression level for JPEG or WebP (0-100) - example: 100 - moderation: - type: string - description: Content moderation setting - enum: [low, auto] - example: "auto" - background: - type: string - description: Background transparency - example: "opaque" - user: - type: string - description: A unique identifier for end-user monitoring - example: "user-1234" - OpenAIVideoCreateRequest: - type: object - required: - - prompt - properties: - prompt: - type: string - description: Text prompt that describes the video to generate - example: "A calico cat playing a piano on stage" - input_reference: - type: string - format: binary - description: Optional image or video reference that guides generation - model: - type: string - description: The video generation model to use - enum: ["sora-2", "sora-2-pro"] - default: "sora-2" - seconds: - type: string - description: Clip duration in seconds - enum: ["4", "8", "12"] - default: "4" - size: - type: string - description: Output resolution formatted as width x height - enum: ["720x1280", "1280x720", "1024x1792", "1792x1024"] - default: "720x1280" - OpenAIVideoJob: - type: object - properties: - id: - type: string - description: Unique identifier for the video job - example: "video_123" - object: - type: string - description: The object type, which is always video - enum: [video] - example: "video" - model: - type: string - description: The video generation model that produced the job - example: "sora-2" - status: - type: string - description: Current lifecycle status of the video job - enum: [queued, in_progress, completed, failed] - example: "queued" - progress: - type: integer - description: Approximate completion percentage for the generation task - example: 0 - created_at: - type: integer - description: Unix timestamp (seconds) for when the job was created - example: 1712697600 - completed_at: - type: integer - description: Unix timestamp (seconds) for when the job completed, if finished - example: 1712698600 - expires_at: - type: integer - description: Unix timestamp (seconds) for when the downloadable assets expire, if set - example: 1712784000 - size: - type: string - description: The resolution of the generated video - example: "1024x1808" - seconds: - type: string - description: Duration of the generated clip in seconds - example: "8" - quality: - type: string - description: Quality of the generated video - example: "standard" - remixed_from_video_id: - type: string - description: Identifier of the source video if this video is a remix - example: "video_456" - error: - type: object - description: Error payload that explains why generation failed, if applicable - properties: - code: - type: string - description: Error code - message: - type: string - description: Human-readable error message - CustomerStorageResourceResponse: - type: object - properties: - download_url: - type: string - description: The signed URL to use for downloading the file from the specified path - upload_url: - type: string - description: The signed URL to use for uploading the file to the specified path - expires_at: - type: string - format: date-time - description: When the signed URL will expire - existing_file: - type: boolean - description: Whether an existing file with the same hash was found - Pikaffect: - type: string - enum: - - Cake-ify - - Crumble - - Crush - - Decapitate - - Deflate - - Dissolve - - Explode - - Eye-pop - - Inflate - - Levitate - - Melt - - Peel - - Poke - - Squish - - Ta-da - - Tear - PikaBody_generate_pikaffects_generate_pikaffects_post: - properties: - image: - type: string - format: binary - title: Image - pikaffect: - $ref: "#/components/schemas/Pikaffect" - title: Pikaffect - promptText: - anyOf: - - type: string - title: Prompttext - negativePrompt: - anyOf: - - type: string - title: Negativeprompt - seed: - anyOf: - - type: integer - title: Seed - type: object - # required: TODO: this should be required, but need to make optional to pass validation - # - image - title: Body_generate_pikaffects_generate_pikaffects_post - PikaGenerateResponse: - properties: - video_id: - type: string - title: Video Id - type: object - required: - - video_id - title: GenerateResponse - PikaHTTPValidationError: - properties: - detail: - items: - $ref: "#/components/schemas/PikaValidationError" - type: array - title: Detail - type: object - title: HTTPValidationError - PikaBody_generate_pikadditions_generate_pikadditions_post: - properties: - video: - type: string - format: binary - title: Video - image: - type: string - format: binary - title: Image - promptText: - anyOf: - - type: string - title: Prompttext - negativePrompt: - anyOf: - - type: string - title: Negativeprompt - seed: - anyOf: - - type: integer - title: Seed - type: object - # required: - # TODO: this should be required, but need to make optional to pass validation - # - video - # - image - title: Body_generate_pikadditions_generate_pikadditions_post - PikaBody_generate_pikaswaps_generate_pikaswaps_post: - properties: - video: - type: string - format: binary - title: Video - image: - anyOf: - - type: string - format: binary - title: Image - promptText: - anyOf: - - type: string - title: Prompttext - modifyRegionMask: - anyOf: - - type: string - format: binary - title: Modifyregionmask - description: >- - A mask image that specifies the region to modify, where the mask is white and the background is black - modifyRegionRoi: - anyOf: - - type: string - title: Modifyregionroi - description: Plaintext description of the object / region to modify - negativePrompt: - anyOf: - - type: string - title: Negativeprompt - seed: - anyOf: - - type: integer - title: Seed - type: object - # required: # TODO: this should be required, but need to make optional to pass validation - # - video - title: Body_generate_pikaswaps_generate_pikaswaps_post - PikaBody_generate_2_2_t2v_generate_2_2_t2v_post: - properties: - promptText: - type: string - title: Prompttext - negativePrompt: - type: string - nullable: true - title: Negativeprompt - seed: - type: integer - nullable: true - title: Seed - resolution: - $ref: "#/components/schemas/PikaResolutionEnum" - title: Resolution - duration: - $ref: "#/components/schemas/PikaDurationEnum" - title: Duration - aspectRatio: - type: number - maximum: 2.5 - minimum: 0.4 - default: 1.7777777777777777 - format: float - title: Aspectratio - description: Aspect ratio (width / height) - type: object - required: - - promptText - title: Body_generate_2_2_t2v_generate_2_2_t2v_post - PikaBody_generate_2_2_i2v_generate_2_2_i2v_post: - properties: - image: - type: string - format: binary - nullable: true # TODO: fix, this is not actually nullable, but needed to pass validation as it is not included in request body - title: Image - promptText: - type: string - nullable: true - title: Prompttext - negativePrompt: - type: string - nullable: true - title: Negativeprompt - seed: - type: integer - nullable: true - title: Seed - resolution: - title: Resolution - $ref: "#/components/schemas/PikaResolutionEnum" - duration: - $ref: "#/components/schemas/PikaDurationEnum" - title: Duration - type: object - # required: TODO: this should be required, but need to make optional to pass validation - # - image - title: Body_generate_2_2_i2v_generate_2_2_i2v_post - PikaBody_generate_2_2_c2v_generate_2_2_pikascenes_post: - properties: - images: - items: - type: string - format: binary - type: array - title: Images - ingredientsMode: - type: string - enum: - - creative - - precise - title: Ingredientsmode - promptText: - anyOf: - - type: string - title: Prompttext - negativePrompt: - anyOf: - - type: string - title: Negativeprompt - seed: - anyOf: - - type: integer - title: Seed - resolution: - type: string - title: Resolution - default: 1080p - duration: - type: integer - title: Duration - default: 5 - aspectRatio: - anyOf: - - type: number - maximum: 2.5 - minimum: 0.4 - title: Aspectratio - description: Aspect ratio (width / height) - type: object - required: - # - images # TODO: this should be required, but need to make optional to pass validation - - ingredientsMode - title: Body_generate_2_2_c2v_generate_2_2_pikascenes_post - PikaBody_generate_2_2_keyframe_generate_2_2_pikaframes_post: - properties: - keyFrames: - items: - type: string - format: binary - type: array - title: Keyframes - description: Array of keyframe images - promptText: - type: string - title: Prompttext - negativePrompt: - anyOf: - - type: string - title: Negativeprompt - seed: - anyOf: - - type: integer - title: Seed - resolution: - $ref: "#/components/schemas/PikaResolutionEnum" - title: Resolution - duration: - type: integer - minimum: 5 - maximum: 10 - title: Duration - type: object - required: - # - keyFrames # TODO: this should be required, but need to make optional to pass validation - - promptText - title: Body_generate_2_2_keyframe_generate_2_2_pikaframes_post - PikaVideoResponse: - properties: - id: - type: string - title: Id - status: - title: Status - description: The status of the video - $ref: "#/components/schemas/PikaStatusEnum" - url: - type: string - nullable: true - title: Url - default: null - progress: - type: integer - nullable: true - title: Progress - default: null - type: object - required: - - id - - status - title: VideoResponse - PikaStatusEnum: - type: string - enum: - - queued - - started - - finished - PikaValidationError: - 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 - PikaResolutionEnum: - type: string - enum: - - 1080p - - 720p - default: 1080p - PikaDurationEnum: - type: integer - enum: - - 5 - - 10 - default: 5 - - RGBColor: - type: object - description: RGB color values - properties: - rgb: - type: array - items: - type: integer - minimum: 0 - maximum: 255 - minItems: 3 - maxItems: 3 - required: - - rgb - example: - rgb: [255, 0, 0] - StabilityError: - type: object - properties: - id: - type: string - minLength: 1 - description: > - A unique identifier associated with this error. Please include this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - you file, as it will greatly assist us in diagnosing the root cause of the problem. - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: Short-hand name for an error, useful for discriminating between errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - some-field: is required - required: - - id - - name - - errors - example: - id: 2a1b2d4eafe2bc6ab4cd4d5c6133f513 - name: internal_error - errors: - - An unexpected server error has occurred, please try again later. - StabilityStabilityClientID: - type: string - maxLength: 256 - description: >- - The name of your application, used to help us communicate app-specific debugging or moderation issues to you. - example: my-awesome-app - StabilityStabilityClientUserID: - type: string - maxLength: 256 - description: >- - A unique identifier for your end user. Used to help us communicate user-specific debugging or moderation issues to you. Feel free to obfuscate this value to protect user privacy. - example: "DiscordUser#9999" - StabilityStabilityClientVersion: - type: string - maxLength: 256 - description: >- - The version of your application, used to help us communicate version-specific debugging or moderation issues to you. - example: 1.2.1 - StabilityContentModerationResponse: - type: object - properties: - id: - type: string - minLength: 1 - description: >- - A unique identifier associated with this error. Please include this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - you file, as it will greatly assist us in diagnosing the root cause of the problem. - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: >- - Our content moderation system has flagged some part of your request and subsequently denied it. You were not charged for this request. While this may at times be frustrating, it is necessary to maintain the integrity of our platform and ensure a safe experience for all users. - If you would like to provide feedback, please use the [Support Form](https://kb.stability.ai/knowledge-base/kb-tickets/new). - enum: - - content_moderation - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - description: Your request was flagged by our content moderation system. - example: - id: ed14db44362126aab3cbd25cca51ffe3 - name: content_moderation - errors: - - >- - Your request was flagged by our content moderation system, as a result your request was denied and you were not charged. - ImagenGenerateImageRequest: - type: object - properties: - instances: - type: array - items: - $ref: "#/components/schemas/ImagenImageGenerationInstance" - parameters: - $ref: "#/components/schemas/ImagenImageGenerationParameters" - required: - - instances - - parameters - ImagenGenerateImageResponse: - type: object - properties: - predictions: - type: array - items: - $ref: "#/components/schemas/ImagenImagePrediction" - ImagenImageGenerationInstance: - type: object - properties: - prompt: - type: string - description: Text prompt for image generation - required: - - prompt - ImagenImageGenerationParameters: - type: object - properties: - sampleCount: - type: integer - minimum: 1 - maximum: 4 - seed: - type: integer - format: uint32 - addWatermark: - type: boolean - aspectRatio: - type: string - enum: ["1:1", "9:16", "16:9", "3:4", "4:3"] - enhancePrompt: - type: boolean - includeRaiReason: - type: boolean - includeSafetyAttributes: - type: boolean - outputOptions: - $ref: "#/components/schemas/ImagenOutputOptions" - personGeneration: - type: string - enum: ["dont_allow", "allow_adult", "allow_all"] - safetySetting: - type: string - enum: ["block_most", "block_some", "block_few", "block_fewest"] - storageUri: - type: string - format: uri - ImagenImagePrediction: - type: object - properties: - mimeType: - type: string - description: MIME type of the generated image - prompt: - type: string - description: Enhanced or rewritten prompt used to generate this image - bytesBase64Encoded: - type: string - format: byte - description: Base64-encoded image content - ImagenOutputOptions: - type: object - properties: - mimeType: - type: string - enum: ["image/png", "image/jpeg"] - compressionQuality: - type: integer - minimum: 0 - maximum: 100 - - RenderingSpeed: - type: string - description: The rendering speed setting that controls the trade-off between generation speed and quality - enum: - - DEFAULT - - TURBO - - QUALITY - default: DEFAULT - IdeogramStyleType: - type: string - enum: ["AUTO", "GENERAL", "REALISTIC", "DESIGN", "FICTION"] - default: "GENERAL" - - StabilityCreativity: - type: number - minimum: 0.2 - maximum: 0.5 - default: 0.35 - description: - Controls the likelihood of creating additional details not heavily - conditioned by the init image. - StabilityGenerationID: - type: string - minLength: 64 - maxLength: 64 - description: - The `id` of a generation, typically used for async generations, - that can be used to check the status of the generation or retrieve the result. - example: a6dc6c6e20acda010fe14d71f180658f2896ed9b4ec25aa99a6ff06c796987c4 - StabilityImageGenerationSD3_Request: - type: object - properties: - prompt: - type: string - minLength: 1 - maxLength: 10000 - description: - "What you wish to see in the output image. A strong, descriptive - prompt that clearly defines - - elements, colors, and subjects will lead to better results." - mode: - type: string - enum: - - text-to-image - - image-to-image - default: text-to-image - description: - "Controls whether this is a text-to-image or image-to-image - generation, which affects which parameters are required: - - - **text-to-image** requires only the `prompt` parameter - - - **image-to-image** requires the `prompt`, `image`, and `strength` parameters" - title: GenerationMode - image: - type: string - description: - "The image to use as the starting point for the generation.\n\ - \nSupported formats:\n\n\n\n - jpeg\n - png\n - webp\n\nSupported dimensions:\n\ - \n\n\n - Every side must be at least 64 pixels\n\n> **Important:** This\ - \ parameter is only valid for **image-to-image** requests." - format: binary - strength: - type: number - minimum: 0 - maximum: 1 - description: - "Sometimes referred to as _denoising_, this parameter controls - how much influence the - - `image` parameter has on the generated image. A value of 0 would yield - an image that - - is identical to the input. A value of 1 would be as if you passed in - no image at all. - - - > **Important:** This parameter is only valid for **image-to-image** requests." - aspect_ratio: - type: string - enum: - - "21:9" - - "16:9" - - "3:2" - - "5:4" - - "1:1" - - "4:5" - - "2:3" - - "9:16" - - "9:21" - default: "1:1" - description: - "Controls the aspect ratio of the generated image. Defaults - to 1:1. - - - > **Important:** This parameter is only valid for **text-to-image** requests." - model: - type: string - enum: - - sd3.5-large - - sd3.5-large-turbo - - sd3.5-medium - default: sd3.5-large - description: - "The model to use for generation.\n\n- `sd3.5-large` requires\ - \ 6.5 credits per generation\n- `sd3.5-large-turbo` requires 4 credits\ - \ per generation\n- `sd3.5-medium` requires 3.5 credits per generation\n\ - - As of the April 17, 2025, `sd3-large`, `sd3-large-turbo` and `sd3-medium`\n\ - \n\n\n are re-routed to their `sd3.5-[model version]` equivalent, at\ - \ the same price." - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: - A specific value that is used to guide the 'randomness' of - the generation. (Omit this parameter or pass `0` to use a random seed.) - output_format: - type: string - enum: - - png - - jpeg - default: png - description: Dictates the `content-type` of the generated image. - style_preset: - type: string - enum: - - enhance - - anime - - photographic - - digital-art - - comic-book - - fantasy-art - - line-art - - analog-film - - neon-punk - - isometric - - low-poly - - origami - - modeling-compound - - cinematic - - 3d-model - - pixel-art - - tile-texture - description: Guides the image model towards a particular style. - negative_prompt: - type: string - maxLength: 10000 - description: - "Keywords of what you **do not** wish to see in the output - image. - - This is an advanced feature." - cfg_scale: - type: number - minimum: 1 - maximum: 10 - description: - How strictly the diffusion process adheres to the prompt text - (higher values keep your image closer to your prompt). The _Large_ and - _Medium_ models use a default of `4`. The _Turbo_ model uses a default - of `1`. - required: - - prompt - StabilityImageGenrationSD3_Response_200: - type: object - properties: - image: - type: string - description: The generated image, encoded to base64. - example: AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: "The reason the generation finished. - - - - `SUCCESS` = successful generation. - - - `CONTENT_FILTERED` = successful generation, however the output violated - our content moderation - - policy and has been blurred as a result." - example: SUCCESS - required: - - image - - finish_reason - StabilityImageGenrationSD3_Response_400: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationSD3_Response_413: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 4212a4b66fbe1cedca4bf2133d35dca5 - name: payload_too_large - errors: - - "body: payloads cannot be larger than 10MiB in size" - StabilityImageGenrationSD3_Response_422: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationSD3_Response_429: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: rate_limit_exceeded - name: rate_limit_exceeded - errors: - - You have exceeded the rate limit of 150 requests within a 10 second period, - and have been timed out for 60 seconds. - StabilityImageGenrationSD3_Response_500: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 2a1b2d4eafe2bc6ab4cd4d5c6133f513 - name: internal_error - errors: - - An unexpected server error has occurred, please try again later. - StabilityImageGenrationUpscaleConservative_Request: - type: object - properties: - image: - type: string - description: "The image you wish to upscale. - - - Supported Formats: - - - jpeg - - - png - - - webp - - - Validation Rules: - - - Every side must be at least 64 pixels - - - Total pixel count must be between 4,096 and 9,437,184 pixels - - - The aspect ratio must be between 1:2.5 and 2.5:1" - format: binary - example: ./some/image.png - prompt: - type: string - minLength: 1 - maxLength: 10000 - description: - "What you wish to see in the output image. A strong, descriptive - prompt that clearly defines - - elements, colors, and subjects will lead to better results. - - - To control the weight of a given word use the format `(word:weight)`, - - where `word` is the word you'd like to control the weight of and `weight` - - is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) - and (green:0.8)` - - would convey a sky that was blue and green, but more green than blue." - negative_prompt: - type: string - maxLength: 10000 - description: - "A blurb of text describing what you **do not** wish to see - in the output image. - - This is an advanced feature." - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: - A specific value that is used to guide the 'randomness' of - the generation. (Omit this parameter or pass `0` to use a random seed.) - output_format: - type: string - enum: - - jpeg - - png - - webp - default: png - description: Dictates the `content-type` of the generated image. - creativity: - $ref: "#/components/schemas/StabilityCreativity" - required: - - image - - prompt - StabilityImageGenrationUpscaleConservative_Response_200: - type: object - properties: - image: - type: string - description: The generated image, encoded to base64. - example: AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: "The reason the generation finished. - - - - `SUCCESS` = successful generation. - - - `CONTENT_FILTERED` = successful generation, however the output violated - our content moderation - - policy and has been blurred as a result." - example: SUCCESS - required: - - image - - finish_reason - StabilityImageGenrationUpscaleConservative_Response_400: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationUpscaleConservative_Response_413: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 4212a4b66fbe1cedca4bf2133d35dca5 - name: payload_too_large - errors: - - "body: payloads cannot be larger than 10MiB in size" - StabilityImageGenrationUpscaleConservative_Response_422: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationUpscaleConservative_Response_429: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: rate_limit_exceeded - name: rate_limit_exceeded - errors: - - You have exceeded the rate limit of 150 requests within a 10 second period, - and have been timed out for 60 seconds. - StabilityImageGenrationUpscaleConservative_Response_500: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 2a1b2d4eafe2bc6ab4cd4d5c6133f513 - name: internal_error - errors: - - An unexpected server error has occurred, please try again later. - StabilityImageGenrationUpscaleCreative_Request: - type: object - properties: - image: - type: string - description: "The image you wish to upscale. - - - Supported Formats: - - - jpeg - - - png - - - webp - - - Validation Rules: - - - Every side must be at least 64 pixels - - - Total pixel count must be between 4,096 and 1,048,576 pixels" - format: binary - example: ./some/image.png - prompt: - type: string - minLength: 1 - maxLength: 10000 - description: - "What you wish to see in the output image. A strong, descriptive - prompt that clearly defines - - elements, colors, and subjects will lead to better results. - - - To control the weight of a given word use the format `(word:weight)`, - - where `word` is the word you'd like to control the weight of and `weight` - - is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) - and (green:0.8)` - - would convey a sky that was blue and green, but more green than blue." - negative_prompt: - type: string - maxLength: 10000 - description: - "A blurb of text describing what you **do not** wish to see - in the output image. - - This is an advanced feature." - output_format: - type: string - enum: - - jpeg - - png - - webp - default: png - description: Dictates the `content-type` of the generated image. - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: - A specific value that is used to guide the 'randomness' of - the generation. (Omit this parameter or pass `0` to use a random seed.) - creativity: - type: number - minimum: 0.1 - maximum: 0.5 - default: 0.3 - description: - "Indicates how creative the model should be when upscaling - an image. - - Higher values will result in more details being added to the image during - upscaling." - style_preset: - type: string - enum: - - enhance - - anime - - photographic - - digital-art - - comic-book - - fantasy-art - - line-art - - analog-film - - neon-punk - - isometric - - low-poly - - origami - - modeling-compound - - cinematic - - 3d-model - - pixel-art - - tile-texture - description: Guides the image model towards a particular style. - required: - - image - - prompt - StabilityImageGenrationUpscaleCreative_Response_200: - type: object - properties: - id: - $ref: "#/components/schemas/StabilityGenerationID" - required: - - id - StabilityImageGenrationUpscaleCreative_Response_400: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationUpscaleCreative_Response_413: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 4212a4b66fbe1cedca4bf2133d35dca5 - name: payload_too_large - errors: - - "body: payloads cannot be larger than 10MiB in size" - StabilityImageGenrationUpscaleCreative_Response_422: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationUpscaleCreative_Response_429: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: rate_limit_exceeded - name: rate_limit_exceeded - errors: - - You have exceeded the rate limit of 150 requests within a 10 second period, - and have been timed out for 60 seconds. - StabilityImageGenrationUpscaleCreative_Response_500: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 2a1b2d4eafe2bc6ab4cd4d5c6133f513 - name: internal_error - errors: - - An unexpected server error has occurred, please try again later. - StabilityImageGenrationUpscaleFast_Request: - type: object - properties: - image: - type: string - description: "The image you wish to upscale. - - - Supported Formats: - - - jpeg - - - png - - - webp - - - Validation Rules: - - - Width must be between 32 and 1,536 pixels - - - Height must be between 32 and 1,536 pixels - - - Total pixel count must be between 1,024 and 1,048,576 pixels" - format: binary - example: ./some/image.png - output_format: - type: string - enum: - - jpeg - - png - - webp - default: png - description: Dictates the `content-type` of the generated image. - required: - - image - StabilityImageGenrationUpscaleFast_Response_200: - type: object - properties: - image: - type: string - description: The generated image, encoded to base64. - example: AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1... - seed: - type: number - minimum: 0 - maximum: 4294967294 - default: 0 - description: The seed used as random noise for this generation. - example: 343940597 - finish_reason: - type: string - enum: - - SUCCESS - - CONTENT_FILTERED - description: "The reason the generation finished. - - - - `SUCCESS` = successful generation. - - - `CONTENT_FILTERED` = successful generation, however the output violated - our content moderation - - policy and has been blurred as a result." - example: SUCCESS - required: - - image - - finish_reason - StabilityImageGenrationUpscaleFast_Response_400: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationUpscaleFast_Response_413: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 4212a4b66fbe1cedca4bf2133d35dca5 - name: payload_too_large - errors: - - "body: payloads cannot be larger than 10MiB in size" - StabilityImageGenrationUpscaleFast_Response_422: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - StabilityImageGenrationUpscaleFast_Response_429: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: rate_limit_exceeded - name: rate_limit_exceeded - errors: - - You have exceeded the rate limit of 150 requests within a 10 second period, - and have been timed out for 60 seconds. - StabilityGetResultResponse_202: - type: object - properties: - status: - type: string - enum: - - in-progress - id: - type: string - description: The ID of the generation result. - example: 1234567890 - APIKey: - type: object - properties: - id: - type: string - name: - type: string - description: - type: string - key_prefix: - type: string - created_at: - type: string - format: date-time - APIKeyWithPlaintext: - allOf: - - $ref: "#/components/schemas/APIKey" - - type: object - properties: - plaintext_key: - type: string - description: The full API key (only returned at creation) - GeminiGenerateContentRequest: - type: object - required: [contents] - properties: - contents: - type: array - items: - $ref: "#/components/schemas/GeminiContent" - tools: - type: array - items: - $ref: "#/components/schemas/GeminiTool" - safetySettings: - type: array - items: - $ref: "#/components/schemas/GeminiSafetySetting" - generationConfig: - $ref: "#/components/schemas/GeminiGenerationConfig" - systemInstruction: - $ref: "#/components/schemas/GeminiSystemInstructionContent" - videoMetadata: - $ref: "#/components/schemas/GeminiVideoMetadata" - uploadImagesToStorage: - type: boolean - description: If true, generated images will be uploaded to cloud storage and returned as signed URLs instead of inline base64 data. The URLs expire after 24 hours. - GeminiGenerateContentResponse: - type: object - properties: - candidates: - type: array - items: - $ref: "#/components/schemas/GeminiCandidate" - promptFeedback: - $ref: "#/components/schemas/GeminiPromptFeedback" - usageMetadata: - $ref: "#/components/schemas/GeminiUsageMetadata" - modelVersion: - type: string - description: The model version used to generate the response. - createTime: - type: string - description: Timestamp when the response was created. - responseId: - type: string - description: Unique identifier for the response. - GeminiUsageMetadata: - type: object - properties: - promptTokenCount: - type: integer - description: Number of tokens in the request. When cachedContent is set, this is still the total effective prompt size meaning this includes the number of tokens in the cached content. - candidatesTokenCount: - type: integer - description: Number of tokens in the response(s). - toolUsePromptTokenCount: - type: integer - description: Number of tokens present in tool-use prompt(s). - thoughtsTokenCount: - type: integer - description: Number of tokens present in thoughts output. - cachedContentTokenCount: - type: integer - description: Output only. Number of tokens in the cached part in the input (the cached content). - promptTokensDetails: - type: array - items: - $ref: "#/components/schemas/ModalityTokenCount" - description: Breakdown of prompt tokens by modality. - candidatesTokensDetails: - type: array - items: - $ref: "#/components/schemas/ModalityTokenCount" - description: Breakdown of candidate tokens by modality. - totalTokenCount: - type: integer - description: Total number of tokens (prompt + candidates). - trafficType: - type: string - description: Traffic type used for the request (e.g., PROVISIONED_THROUGHPUT). - ModalityTokenCount: - type: object - properties: - modality: - $ref: "#/components/schemas/Modality" - tokenCount: - type: integer - description: Number of tokens for the given modality. - Modality: - type: string - enum: - - MODALITY_UNSPECIFIED - - TEXT - - IMAGE - - VIDEO - - AUDIO - - DOCUMENT - description: Type of input or output content modality. - GeminiSystemInstructionContent: - type: object - required: [role, parts] - description: | - Available for gemini-2.0-flash and gemini-2.0-flash-lite. Instructions for the model to steer it toward better performance. For example, "Answer as concisely as possible" or "Don't use technical terms in your response". The text strings count toward the token limit. The role field of systemInstruction is ignored and doesn't affect the performance of the model. Note: Only text should be used in parts and content in each part should be in a separate paragraph. - properties: - role: - type: string - description: | - The identity of the entity that creates the message. The following values are supported: user: This indicates that the message is sent by a real person, typically a user-generated message. model: This indicates that the message is generated by the model. The model value is used to insert messages from the model into the conversation during multi-turn conversations. For non-multi-turn conversations, this field can be left blank or unset. - enum: - - user - - model - example: "user" - parts: - type: array - description: | - A list of ordered parts that make up a single message. Different parts may have different IANA MIME types. For limits on the inputs, such as the maximum number of tokens or the number of images, see the model specifications on the Google models page. - items: - $ref: "#/components/schemas/GeminiTextPart" - GeminiContent: - type: object - required: [role, parts] - description: | - The content of the current conversation with the model. For single-turn queries, this is a single instance. For multi-turn queries, this is a repeated field that contains conversation history and the latest request. - properties: - role: - type: string - enum: - - user - - model - example: "user" - parts: - type: array - items: - $ref: "#/components/schemas/GeminiPart" - GeminiTool: - type: object - description: | - A piece of code that enables the system to interact with external systems to perform an action, or set of actions, outside of knowledge and scope of the model. See Function calling. - properties: - functionDeclarations: - type: array - items: - $ref: "#/components/schemas/GeminiFunctionDeclaration" - GeminiSafetySetting: - type: object - description: | - Per request settings for blocking unsafe content. Enforced on GenerateContentResponse.candidates. - required: [category, threshold] - properties: - category: - $ref: "#/components/schemas/GeminiSafetyCategory" - threshold: - $ref: "#/components/schemas/GeminiSafetyThreshold" - GeminiSafetyCategory: - type: string - enum: - - HARM_CATEGORY_SEXUALLY_EXPLICIT - - HARM_CATEGORY_HATE_SPEECH - - HARM_CATEGORY_HARASSMENT - - HARM_CATEGORY_DANGEROUS_CONTENT - GeminiSafetyThreshold: - type: string - enum: - - OFF - - BLOCK_NONE - - BLOCK_LOW_AND_ABOVE - - BLOCK_MEDIUM_AND_ABOVE - - BLOCK_ONLY_HIGH - GeminiGenerationConfig: - type: object - properties: - temperature: - type: number - format: float - description: | - The temperature is used for sampling during response generation, which occurs when topP and topK are applied. Temperature controls the degree of randomness in token selection. Lower temperatures are good for prompts that require a less open-ended or creative response, while higher temperatures can lead to more diverse or creative results. A temperature of 0 means that the highest probability tokens are always selected. In this case, responses for a given prompt are mostly deterministic, but a small amount of variation is still possible. If the model returns a response that's too generic, too short, or the model gives a fallback response, try increasing the temperature - default: 1 - minimum: 0 - maximum: 2 - topP: - type: number - format: float - description: | - If specified, nucleus sampling is used. - Top-P changes how the model selects tokens for output. Tokens are selected from the most (see top-K) to least probable until the sum of their probabilities equals the top-P value. For example, if tokens A, B, and C have a probability of 0.3, 0.2, and 0.1 and the top-P value is 0.5, then the model will select either A or B as the next token by using temperature and excludes C as a candidate. - Specify a lower value for less random responses and a higher value for more random responses. - default: 0.95 - minimum: 0 - maximum: 1 - topK: - type: integer - description: | - Top-K changes how the model selects tokens for output. A top-K of 1 means the next selected token is the most probable among all tokens in the model's vocabulary. A top-K of 3 means that the next token is selected from among the 3 most probable tokens by using temperature. - default: 40 - minimum: 1 - example: 40 - maxOutputTokens: - type: integer - description: | - Maximum number of tokens that can be generated in the response. A token is approximately 4 characters. 100 tokens correspond to roughly 60-80 words. - minimum: 16 - maximum: 8192 - example: 2048 - seed: - type: integer - description: | - When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used. Available for the following models:, gemini-2.5-flash, gemini-2.5-pro, gemini-2.5-flash-preview-04-1, gemini-2.5-pro-preview-05-0, gemini-2.0-flash-lite-00, gemini-2.0-flash-001 - example: 343940597 - stopSequences: - type: array - items: - type: string - responseModalities: - type: array - items: - type: string - enum: - - TEXT - - IMAGE - imageConfig: - type: object - description: Configuration for image generation - properties: - imageOutputOptions: - type: object - description: Optional. The image output format for generated images. - properties: - mimeType: - type: string - description: Optional. The image format that the output should be saved as. - compressionQuality: - type: integer - description: Optional. The compression quality of the output image. - aspectRatio: - type: string - description: Aspect ratio for generated images - imageSize: - type: string - description: Optional. Specifies the size of generated images. Supported values are 1K, 2K, 4K. If not specified, the model will use default value 1K. - thinkingConfig: - type: object - description: Optional. Configuration for thinking features. Thinking is a process where the model breaks down a complex task into smaller steps to generate a higher-quality response. - properties: - includeThoughts: - type: boolean - description: Optional. If true, the model will include its thoughts in the response. - thinkingBudget: - type: integer - description: Optional. The token budget for the model's thinking process. The model will make a best effort to stay within this budget. - thinkingLevel: - type: string - description: Optional. The thinking level for the model. - enum: - - THINKING_LEVEL_UNSPECIFIED - - LOW - - MEDIUM - - HIGH - - MINIMAL - GeminiVideoMetadata: - type: object - description: | - For video input, the start and end offset of the video in Duration format. For example, to specify a 10 second clip starting at 1:00, set "startOffset": { "seconds": 60 } and "endOffset": { "seconds": 70 }. The metadata should only be specified while the video data is presented in inlineData or fileData. - properties: - startOffset: - $ref: "#/components/schemas/GeminiOffset" - endOffset: - $ref: "#/components/schemas/GeminiOffset" - GeminiOffset: - type: object - description: | - Represents a duration offset for video timeline positions. - properties: - seconds: - type: integer - description: | - Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive. - minimum: -315576000000 - maximum: 315576000000 - example: 60 - nanos: - type: integer - description: | - Signed fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values. - minimum: 0 - maximum: 999999999 - example: 0 - GeminiCandidate: - type: object - properties: - content: - $ref: "#/components/schemas/GeminiContent" - finishReason: - type: string - safetyRatings: - type: array - items: - $ref: "#/components/schemas/GeminiSafetyRating" - citationMetadata: - $ref: "#/components/schemas/GeminiCitationMetadata" - GeminiMimeType: - type: string - description: The media type of the file specified in the data or fileUri fields. Acceptable values include the following. For gemini-2.0-flash-lite and gemini-2.0-flash, the maximum length of an audio file is 8.4 hours and the maximum length of a video file (without audio) is one hour. For more information, see Gemini audio and video requirements. Text files must be UTF-8 encoded. The contents of the text file count toward the token limit. There is no limit on image resolution. - enum: - - application/pdf - - audio/mpeg - - audio/mp3 - - audio/wav - - image/png - - image/jpeg - - image/webp - - text/plain - - video/mov - - video/mpeg - - video/mp4 - - video/mpg - - video/avi - - video/wmv - - video/mpegps - - video/flv - GeminiPromptFeedback: - type: object - properties: - safetyRatings: - type: array - items: - $ref: "#/components/schemas/GeminiSafetyRating" - blockReason: - type: string - blockReasonMessage: - type: string - GeminiTextPart: - type: object - properties: - text: - type: string - description: A text prompt or code snippet. - example: "Answer as concisely as possible" - GeminiPart: - type: object - properties: - text: - type: string - description: A text prompt or code snippet. - example: "Write a story about a robot learning to paint" - inlineData: - $ref: "#/components/schemas/GeminiInlineData" - fileData: - $ref: "#/components/schemas/GeminiFileData" - GeminiFunctionDeclaration: - type: object - required: [name, parameters] - properties: - name: - type: string - description: - type: string - parameters: - type: object - description: JSON schema for the function parameters - GeminiSafetyRating: - type: object - properties: - category: - $ref: "#/components/schemas/GeminiSafetyCategory" - probability: - type: string - enum: - - NEGLIGIBLE - - LOW - - MEDIUM - - HIGH - - UNKNOWN - description: The probability that the content violates the specified safety category - GeminiCitationMetadata: - type: object - properties: - citations: - type: array - items: - $ref: "#/components/schemas/GeminiCitation" - GeminiInlineData: - type: object - description: | - Inline data in raw bytes. For gemini-2.0-flash-lite and gemini-2.0-flash, you can specify up to 3000 images by using inlineData. - properties: - mimeType: - $ref: "#/components/schemas/GeminiMimeType" - data: - type: string - description: | - The base64 encoding of the image, PDF, or video to include inline in the prompt. When including media inline, you must also specify the media type (mimeType) of the data. Size limit: 20MB - format: byte - GeminiFileData: - type: object - description: URI based data. - properties: - mimeType: - $ref: "#/components/schemas/GeminiMimeType" - fileUri: - type: string - description: URI - - GeminiCitation: - type: object - properties: - startIndex: - type: integer - endIndex: - type: integer - uri: - type: string - title: - type: string - license: - type: string - publicationDate: - type: string - format: date - authors: - type: array - items: - type: string - Rodin3DGenerateRequest: - type: object - required: - - images - properties: - images: - type: string - description: The reference images to generate 3D Assets. - seed: - type: integer - description: Seed. - tier: - $ref: "#/components/schemas/RodinTierType" - material: - $ref: "#/components/schemas/RodinMaterialType" - quality: - $ref: "#/components/schemas/RodinQualityType" - mesh_mode: - $ref: "#/components/schemas/RodinMeshModeType" - RodinTierType: - type: string - description: Rodin Tier para options - enum: [Regular, Sketch, Detail, Smooth] - RodinMaterialType: - type: string - description: Rodin Material para options - enum: [PBR, Shaded] - RodinQualityType: - type: string - description: Rodin Quality para options - enum: [extra-low, low, medium, high] - RodinMeshModeType: - type: string - description: Rodin Mesh_Mode para options - enum: [Quad, Raw] - Rodin3DCheckStatusRequest: - type: object - required: - - subscription_key - properties: - subscription_key: - type: string - description: subscription from generate endpoint - Rodin3DDownloadRequest: - type: object - required: - - task_uuid - properties: - task_uuid: - type: string - description: Task UUID - Rodin3DGenerateResponse: - type: object - properties: - message: - type: string - description: message - prompt: - type: string - description: prompt - submit_time: - type: string - description: Time - uuid: - type: string - description: Task UUID - jobs: - $ref: "#/components/schemas/RodinGenerateJobsData" - RodinGenerateJobsData: - type: object - properties: - uuids: - type: array - description: subjobs uuid. - items: - type: string - subscription_key: - type: string - description: Subscription Key. - Rodin3DCheckStatusResponse: - type: object - properties: - jobs: - type: array - description: Details for the generation status. - items: - $ref: "#/components/schemas/RodinCheckStatusJobItem" - RodinCheckStatusJobItem: - type: object - properties: - uuid: - type: string - description: sub uuid - status: - $ref: "#/components/schemas/RodinStatusOptions" - RodinStatusOptions: - type: string - enum: [Done, Failed, Generating, Waiting] - Rodin3DDownloadResponse: - type: object - properties: - list: - type: array - items: - $ref: "#/components/schemas/RodinResourceItem" - RodinResourceItem: - type: object - properties: - url: - type: string - description: Download url - name: - type: string - description: File name - CreateAPIKeyRequest: - type: object - required: - - name - properties: - name: - type: string - description: - type: string - StabilityImageGenrationUpscaleFast_Response_500: - type: object - properties: - id: - type: string - minLength: 1 - description: - "A unique identifier associated with this error. Please include - this in any [support tickets](https://kb.stability.ai/knowledge-base/kb-tickets/new) - - you file, as it will greatly assist us in diagnosing the root cause of - the problem." - example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 - name: - type: string - minLength: 1 - description: - Short-hand name for an error, useful for discriminating between - errors with the same status code. - example: bad_request - errors: - type: array - items: - type: string - minItems: 1 - description: One or more error messages indicating what went wrong. - example: - - "some-field: is required" - required: - - id - - name - - errors - example: - id: 2a1b2d4eafe2bc6ab4cd4d5c6133f513 - name: internal_error - errors: - - An unexpected server error has occurred, please try again later. - StableAudio25TextToAudioRequest: - type: object - description: Request parameters for Stable Audio 2.5 text-to-audio generation - properties: - prompt: - type: string - description: What you wish the output audio to be. A strong, descriptive prompt that clearly defines instruments, moods, styles, and genre will lead to better results. - maxLength: 10000 - duration: - type: number - description: Controls the duration in seconds of the generated audio. - minimum: 1 - maximum: 190 - default: 190 - seed: - type: number - description: A specific value that is used to guide the 'randomness' of the generation. (Omit this parameter or pass 0 to use a random seed.) - minimum: 0 - maximum: 4294967294 - default: 0 - steps: - type: integer - description: Controls the number of sampling steps. For stable-audio-2.5 accepts steps between 4 and 8 (defaults to 8). - minimum: 4 - maximum: 8 - default: 8 - cfg_scale: - type: number - description: How strictly the diffusion process adheres to the prompt text (higher values make your audio closer to your prompt). Defaults to 1 for stable-audio-2.5. - minimum: 1 - maximum: 25 - default: 1 - model: - $ref: "#/components/schemas/StableAudio25Model" - output_format: - $ref: "#/components/schemas/StableAudio25OutputFormat" - required: - - prompt - - model - StableAudio25AudioToAudioRequest: - type: object - description: Request parameters for Stable Audio audio-to-audio transformation - properties: - prompt: - type: string - description: What you wish the output audio to be. A strong, descriptive prompt that clearly defines instruments, moods, styles, and genre will lead to better results. - maxLength: 10000 - audio: - type: string - format: binary - description: The audio to be used as the starting point for the generation. Supported formats - mp3, wav. Audio must be between 6 and 190 seconds long. - duration: - type: number - description: Controls the duration in seconds of the generated audio. - minimum: 1 - maximum: 190 - default: 190 - seed: - type: number - description: A specific value that is used to guide the 'randomness' of the generation. (Omit this parameter or pass 0 to use a random seed.) - minimum: 0 - maximum: 4294967294 - default: 0 - steps: - type: integer - description: Controls the number of sampling steps. For stable-audio-2.5 accepts steps between 4 and 8 (defaults to 8). - minimum: 4 - maximum: 8 - default: 8 - cfg_scale: - type: number - description: How strictly the diffusion process adheres to the prompt text (higher values make your audio closer to your prompt). Defaults to 7 for stable-audio-2 and 1 for stable-audio-2.5. - minimum: 1 - maximum: 25 - model: - $ref: "#/components/schemas/StableAudio25Model" - output_format: - $ref: "#/components/schemas/StableAudio25OutputFormat" - strength: - type: number - description: Controls how much influence the audio parameter has on the generated audio. A value of 0 would yield audio that is identical to the input. A value of 1 would be as if you passed in no audio at all. Minimum value for stable-audio-2.5 is 0.01. - minimum: 0 - maximum: 1 - default: 1 - required: - - prompt - - audio - - model - StableAudio25InpaintRequest: - type: object - description: Request parameters for Stable Audio 2.5 audio inpainting - properties: - prompt: - type: string - description: What you wish the output audio to be. A strong, descriptive prompt that clearly defines instruments, moods, styles, and genre will lead to better results. - maxLength: 10000 - audio: - type: string - format: binary - description: The audio to be used as the starting point for the generation. Supported formats - mp3, wav. Audio must be between 6 and 190 seconds long. - duration: - type: number - description: Controls the duration in seconds of the generated audio. - minimum: 1 - maximum: 190 - default: 190 - seed: - type: number - description: A specific value that is used to guide the 'randomness' of the generation. (Omit this parameter or pass 0 to use a random seed.) - minimum: 0 - maximum: 4294967294 - default: 0 - steps: - type: integer - description: Controls the number of sampling steps. - minimum: 4 - maximum: 8 - default: 8 - output_format: - $ref: "#/components/schemas/StableAudio25OutputFormat" - mask_start: - type: number - description: Start time in seconds for the audio segment to be inpainted. - minimum: 0 - maximum: 190 - default: 30 - mask_end: - type: number - description: End time in seconds for the audio segment to be inpainted. - minimum: 0 - maximum: 190 - default: 190 - required: - - prompt - - audio - StableAudio25AudioResponse: - type: object - description: Response from Stable Audio 2.5 audio generation - properties: - id: - type: string - description: Unique identifier for the generation request - audio: - type: string - format: byte - description: Base64-encoded audio data - finish_reason: - type: string - description: Reason for completion - enum: ["SUCCESS", "ERROR", "CONTENT_FILTERED"] - StableAudio25Model: - type: string - description: The model to use for generation - enum: - - stable-audio-2.5 - StableAudio25OutputFormat: - type: string - description: Dictates the content-type of the generated audio - enum: - - mp3 - - wav - ModelResponseProperties: - type: object - description: Common properties for model responses - properties: - model: - type: string - description: The model used to generate the response - instructions: - type: string - - description: Instructions for the model on how to generate the response - max_output_tokens: - type: integer - - description: Maximum number of tokens to generate - temperature: - type: number - minimum: 0 - maximum: 2 - default: 1 - description: Controls randomness in the response - top_p: - type: number - minimum: 0 - maximum: 1 - default: 1 - description: Controls diversity of the response via nucleus sampling - truncation: - type: string - enum: [disabled, auto] - default: disabled - description: How to handle truncation of the response - InputFileContent: - properties: - type: - type: string - enum: - - input_file - description: The type of the input item. Always `input_file`. - default: input_file - x-stainless-const: true - file_id: - type: string - description: The ID of the file to be sent to the model. - filename: - type: string - description: The name of the file to be sent to the model. - file_data: - type: string - description: | - The content of the file to be sent to the model. - type: object - required: &a1 - - type - title: Input file - description: A file input to the model. - ResponseProperties: - type: object - properties: - previous_response_id: - type: string - description: | - The unique ID of the previous response to the model. Use this to - create multi-turn conversations. Learn more about - [conversation state](/docs/guides/conversation-state). - - model: - description: > - Model ID used to generate the response, like `gpt-4o` or `o3`. - OpenAI - - offers a wide range of models with different capabilities, - performance - - characteristics, and price points. Refer to the [model - guide](/docs/models) - - to browse and compare available models. - - $ref: "#/components/schemas/OpenAIModels" - - reasoning: - $ref: "#/components/schemas/Reasoning" - - max_output_tokens: - description: > - An upper bound for the number of tokens that can be generated for a - response, including visible output tokens and [reasoning - tokens](/docs/guides/reasoning). - type: integer - - instructions: - type: string - description: > - Inserts a system (or developer) message as the first item in the - model's context. - - - When using along with `previous_response_id`, the instructions from - a previous - - response will not be carried over to the next response. This makes - it simple - - to swap out system (or developer) messages in new responses. - - text: - type: object - properties: - format: - $ref: "#/components/schemas/TextResponseFormatConfiguration" - tools: - type: array - items: - $ref: "#/components/schemas/Tool" - tool_choice: - description: > - How the model should select which tool (or tools) to use when - generating - - a response. See the `tools` parameter to see how to specify which - tools - - the model can call. - oneOf: - - $ref: "#/components/schemas/ToolChoiceOptions" - - $ref: "#/components/schemas/ToolChoiceTypes" - - $ref: "#/components/schemas/ToolChoiceFunction" - truncation: - type: string - description: > - The truncation strategy to use for the model response. - - - `auto`: If the context of this response and previous ones exceeds - the model's context window size, the model will truncate the - response to fit the context window by dropping input items in the - middle of the conversation. - - `disabled` (default): If a model response will exceed the context - window - size for a model, the request will fail with a 400 error. - enum: - - auto - - disabled - - default: disabled - TextResponseFormatConfiguration: - description: > - An object specifying the format that the model must output. - - - Configuring `{ "type": "json_schema" }` enables Structured Outputs, - - which ensures the model will match your supplied JSON schema. Learn more - in the - - [Structured Outputs guide](/docs/guides/structured-outputs). - - - The default format is `{ "type": "text" }` with no additional options. - - - **Not recommended for gpt-4o and newer models:** - - - Setting to `{ "type": "json_object" }` enables the older JSON mode, - which - - ensures the message the model generates is valid JSON. Using - `json_schema` - - is preferred for models that support it. - oneOf: - - $ref: "#/components/schemas/ResponseFormatText" - - $ref: "#/components/schemas/TextResponseFormatJsonSchema" - - $ref: "#/components/schemas/ResponseFormatJsonObject" - ResponseFormatJsonObject: - type: object - title: JSON object - description: > - JSON object response format. An older method of generating JSON - responses. - - Using `json_schema` is recommended for models that support it. Note that - the - - model will not generate JSON without a system or user message - instructing it - - to do so. - properties: - type: - type: string - description: The type of response format being defined. Always `json_object`. - enum: - - json_object - x-stainless-const: true - required: - - type - ResponseFormatJsonSchema: - type: object - title: JSON schema - description: | - JSON Schema response format. Used to generate structured JSON responses. - Learn more about [Structured Outputs](/docs/guides/structured-outputs). - properties: - type: - type: string - default: json_schema - x-stainless-const: true - json_schema: - type: object - title: JSON schema - description: | - Structured Outputs configuration options, including a JSON Schema. - properties: - description: - type: string - description: > - A description of what the response format is for, used by the - model to - - determine how to respond in the format. - name: - type: string - description: > - The name of the response format. Must be a-z, A-Z, 0-9, or - contain - - underscores and dashes, with a maximum length of 64. - schema: - $ref: "#/components/schemas/ResponseFormatJsonSchemaSchema" - strict: - type: boolean - - default: false - description: > - Whether to enable strict schema adherence when generating the - output. - - If set to true, the model will always follow the exact schema - defined - - in the `schema` field. Only a subset of JSON Schema is supported - when - - `strict` is `true`. To learn more, read the [Structured Outputs - - guide](/docs/guides/structured-outputs). - required: - - name - required: - - type - - json_schema - ResponseFormatJsonSchemaSchema: - type: object - title: JSON schema - description: | - The schema for the response format, described as a JSON Schema object. - Learn how to build JSON schemas [here](https://json-schema.org/). - additionalProperties: true - ResponseFormatText: - type: object - title: Text - description: | - Default response format. Used to generate text responses. - properties: - type: - type: string - description: The type of response format being defined. Always `text`. - enum: - - text - x-stainless-const: true - required: - - type - TextResponseFormatJsonSchema: - type: object - title: JSON schema - description: | - JSON Schema response format. Used to generate structured JSON responses. - Learn more about [Structured Outputs](/docs/guides/structured-outputs). - properties: - type: - type: string - description: The type of response format being defined. Always `json_schema`. - enum: - - json_schema - x-stainless-const: true - description: - type: string - description: > - A description of what the response format is for, used by the model - to - - determine how to respond in the format. - name: - type: string - description: | - The name of the response format. Must be a-z, A-Z, 0-9, or contain - underscores and dashes, with a maximum length of 64. - schema: - $ref: "#/components/schemas/ResponseFormatJsonSchemaSchema" - strict: - type: boolean - default: false - description: > - Whether to enable strict schema adherence when generating the - output. - - If set to true, the model will always follow the exact schema - defined - - in the `schema` field. Only a subset of JSON Schema is supported - when - - `strict` is `true`. To learn more, read the [Structured Outputs - - guide](/docs/guides/structured-outputs). - required: - - type - - schema - - name - - Reasoning: - type: object - description: | - **o-series models only** - - Configuration options for - [reasoning models](https://platform.openai.com/docs/guides/reasoning). - title: Reasoning - properties: - effort: - $ref: "#/components/schemas/ReasoningEffort" - summary: - type: string - description: > - A summary of the reasoning performed by the model. This can be - - useful for debugging and understanding the model's reasoning - process. - - One of `auto`, `concise`, or `detailed`. - enum: - - auto - - concise - - detailed - - generate_summary: - type: string - deprecated: true - description: > - **Deprecated:** use `summary` instead. - - - A summary of the reasoning performed by the model. This can be - - useful for debugging and understanding the model's reasoning - process. - - One of `auto`, `concise`, or `detailed`. - enum: - - auto - - concise - - detailed - ReasoningEffort: - type: string - enum: - - low - - medium - - high - default: medium - description: | - **o-series models only** - - Constrains effort on reasoning for - [reasoning models](https://platform.openai.com/docs/guides/reasoning). - Currently supported values are `low`, `medium`, and `high`. Reducing - reasoning effort can result in faster responses and fewer tokens used - on reasoning in a response. - WebSearchPreviewTool: - properties: - type: - type: string - enum: - - web_search_preview - - web_search_preview_2025_03_11 - description: - The type of the web search tool. One of `web_search_preview` or - `web_search_preview_2025_03_11`. - default: web_search_preview - x-stainless-const: true - search_context_size: - type: string - enum: - - low - - medium - - high - description: - High level guidance for the amount of context window space to use - for the search. One of `low`, `medium`, or `high`. `medium` is the - default. - type: object - required: *a1 - title: Web search preview - description: This tool searches the web for relevant results to use in a - response. Learn more about the [web search - tool](https://platform.openai.com/docs/guides/tools-web-search). - ComputerUsePreviewTool: - properties: - type: - type: string - enum: - - computer_use_preview - description: The type of the computer use tool. Always `computer_use_preview`. - default: computer_use_preview - x-stainless-const: true - environment: - type: string - enum: - - windows - - mac - - linux - - ubuntu - - browser - description: The type of computer environment to control. - display_width: - type: integer - description: The width of the computer display. - display_height: - type: integer - description: The height of the computer display. - type: object - required: - - type - - environment - - display_width - - display_height - title: Computer use preview - description: A tool that controls a virtual computer. Learn more about the - [computer - tool](https://platform.openai.com/docs/guides/tools-computer-use). - Tool: - oneOf: - - $ref: "#/components/schemas/FileSearchTool" - - $ref: "#/components/schemas/FunctionTool" - - $ref: "#/components/schemas/WebSearchPreviewTool" - - $ref: "#/components/schemas/ComputerUsePreviewTool" - discriminator: - propertyName: type - ResponseErrorEvent: - type: object - description: Emitted when an error occurs. - properties: - type: - type: string - description: | - The type of the event. Always `error`. - enum: - - error - x-stainless-const: true - code: - type: string - description: | - The error code. - - message: - type: string - description: | - The error message. - param: - type: string - description: | - The error parameter. - - required: - - type - - code - - message - - param - ResponseOutputItemAddedEvent: - type: object - description: Emitted when a new output item is added. - properties: - type: - type: string - description: | - The type of the event. Always `response.output_item.added`. - enum: - - response.output_item.added - x-stainless-const: true - output_index: - type: integer - description: | - The index of the output item that was added. - item: - $ref: "#/components/schemas/OutputItem" - description: | - The output item that was added. - required: - - type - - output_index - - item - ResponseOutputItemDoneEvent: - type: object - description: Emitted when an output item is marked done. - properties: - type: - type: string - description: | - The type of the event. Always `response.output_item.done`. - enum: - - response.output_item.done - x-stainless-const: true - output_index: - type: integer - description: | - The index of the output item that was marked done. - item: - $ref: "#/components/schemas/OutputItem" - description: | - The output item that was marked done. - required: - - type - - output_index - - item - ToolChoiceFunction: - type: object - title: Function tool - description: | - Use this option to force the model to call a specific function. - properties: - type: - type: string - enum: - - function - description: For function calling, the type is always `function`. - x-stainless-const: true - name: - type: string - description: The name of the function to call. - required: - - type - - name - ToolChoiceOptions: - type: string - title: Tool choice mode - description: > - Controls which (if any) tool is called by the model. - - - `none` means the model will not call any tool and instead generates a - message. - - - `auto` means the model can pick between generating a message or calling - one or - - more tools. - - - `required` means the model must call one or more tools. - enum: - - none - - auto - - required - ToolChoiceTypes: - type: object - title: Hosted tool - description: > - Indicates that the model should use a built-in tool to generate a - response. - - [Learn more about built-in tools](/docs/guides/tools). - properties: - type: - type: string - description: | - The type of hosted tool the model should to use. Learn more about - [built-in tools](/docs/guides/tools). - - Allowed values are: - - `file_search` - - `web_search_preview` - - `computer_use_preview` - enum: - - file_search - - web_search_preview - - computer_use_preview - - web_search_preview_2025_03_11 - required: - - type - - ResponseFailedEvent: - type: object - description: | - An event that is emitted when a response fails. - properties: - type: - type: string - description: | - The type of the event. Always `response.failed`. - enum: - - response.failed - x-stainless-const: true - response: - $ref: "#/components/schemas/OpenAIResponse" - description: | - The response that failed. - required: - - type - - response - ResponseInProgressEvent: - type: object - description: Emitted when the response is in progress. - properties: - type: - type: string - description: | - The type of the event. Always `response.in_progress`. - enum: - - response.in_progress - x-stainless-const: true - response: - $ref: "#/components/schemas/OpenAIResponse" - description: | - The response that is in progress. - required: - - type - - response - ResponseIncompleteEvent: - type: object - description: | - An event that is emitted when a response finishes as incomplete. - properties: - type: - type: string - description: | - The type of the event. Always `response.incomplete`. - enum: - - response.incomplete - x-stainless-const: true - response: - $ref: "#/components/schemas/OpenAIResponse" - description: | - The response that was incomplete. - required: - - type - - response - ResponseCreatedEvent: - type: object - description: An event that is emitted when a response is created. - properties: - type: - type: string - description: The type of the event. Always `response.created`. - enum: - - response.created - x-stainless-const: true - response: - $ref: "#/components/schemas/OpenAIResponse" - description: The response that was created. - required: - - type - - response - - ResponseCompletedEvent: - type: object - description: Emitted when the model response is complete. - properties: - type: - type: string - description: The type of the event. Always `response.completed`. - enum: - - response.completed - x-stainless-const: true - response: - $ref: "#/components/schemas/OpenAIResponse" - description: Properties of the completed response. - required: - - type - - response - - ResponseContentPartAddedEvent: - type: object - description: Emitted when a new content part is added. - properties: - type: - type: string - description: The type of the event. Always `response.content_part.added`. - enum: - - response.content_part.added - x-stainless-const: true - item_id: - type: string - description: The ID of the output item that the content part was added to. - output_index: - type: integer - description: The index of the output item that the content part was added to. - content_index: - type: integer - description: The index of the content part that was added. - part: - $ref: "#/components/schemas/OutputContent" - description: The content part that was added. - required: - - type - - item_id - - output_index - - content_index - - part - - ResponseContentPartDoneEvent: - type: object - description: Emitted when a content part is done. - properties: - type: - type: string - description: The type of the event. Always `response.content_part.done`. - enum: - - response.content_part.done - x-stainless-const: true - item_id: - type: string - description: The ID of the output item that the content part was added to. - output_index: - type: integer - description: The index of the output item that the content part was added to. - content_index: - type: integer - description: The index of the content part that is done. - part: - $ref: "#/components/schemas/OutputContent" - description: The content part that is done. - required: - - type - - item_id - - output_index - - content_index - - part - ResponseTool: - oneOf: - - $ref: "#/components/schemas/WebSearchTool" - - $ref: "#/components/schemas/FileSearchTool" - - $ref: "#/components/schemas/FunctionTool" - - WebSearchTool: - type: object - properties: - type: - type: string - enum: [web_search] - description: The type of tool - domains: - type: array - items: - type: string - description: Optional list of domains to restrict search to - required: - - type - - FileSearchTool: - type: object - properties: - type: - type: string - enum: [file_search] - description: The type of tool - vector_store_ids: - type: array - items: - type: string - description: IDs of vector stores to search in - required: - - type - - vector_store_ids - - FunctionTool: - type: object - properties: - type: - type: string - enum: [function] - description: The type of tool - name: - type: string - description: Name of the function - description: - type: string - description: Description of what the function does - parameters: - type: object - description: JSON Schema object describing the function parameters - required: - - type - - name - - parameters - - OutputItem: - oneOf: - - $ref: "#/components/schemas/OutputMessage" - - $ref: "#/components/schemas/FileSearchToolCall" - - $ref: "#/components/schemas/FunctionToolCall" - - $ref: "#/components/schemas/WebSearchToolCall" - - $ref: "#/components/schemas/ComputerToolCall" - - $ref: "#/components/schemas/ReasoningItem" - WebSearchToolCall: - type: object - title: Web search tool call - description: | - The results of a web search tool call. See the - [web search guide](/docs/guides/tools-web-search) for more information. - properties: - id: - type: string - description: | - The unique ID of the web search tool call. - type: - type: string - enum: - - web_search_call - description: | - The type of the web search tool call. Always `web_search_call`. - x-stainless-const: true - status: - type: string - description: | - The status of the web search tool call. - enum: - - in_progress - - searching - - completed - - failed - required: - - id - - type - - status - - FileSearchToolCall: - type: object - title: File search tool call - description: > - The results of a file search tool call. See the - - [file search guide](/docs/guides/tools-file-search) for more - information. - properties: - id: - type: string - description: | - The unique ID of the file search tool call. - type: - type: string - enum: - - file_search_call - description: | - The type of the file search tool call. Always `file_search_call`. - x-stainless-const: true - status: - type: string - description: | - The status of the file search tool call. One of `in_progress`, - `searching`, `incomplete` or `failed`, - enum: - - in_progress - - searching - - completed - - incomplete - - failed - queries: - type: array - items: - type: string - description: | - The queries used to search for files. - results: - type: array - description: | - The results of the file search tool call. - items: - type: object - properties: - file_id: - type: string - description: | - The unique ID of the file. - text: - type: string - description: | - The text that was retrieved from the file. - filename: - type: string - description: | - The name of the file. - score: - type: number - format: float - description: | - The relevance score of the file - a value between 0 and 1. - - required: - - id - - type - - status - - queries - FunctionToolCall: - type: object - title: Function tool call - description: > - A tool call to run a function. See the - - [function calling guide](/docs/guides/function-calling) for more - information. - properties: - id: - type: string - description: | - The unique ID of the function tool call. - type: - type: string - enum: - - function_call - description: | - The type of the function tool call. Always `function_call`. - x-stainless-const: true - call_id: - type: string - description: | - The unique ID of the function tool call generated by the model. - name: - type: string - description: | - The name of the function to run. - arguments: - type: string - description: | - A JSON string of the arguments to pass to the function. - status: - type: string - description: | - The status of the item. One of `in_progress`, `completed`, or - `incomplete`. Populated when items are returned via API. - enum: - - in_progress - - completed - - incomplete - required: - - type - - call_id - - name - - arguments - - OutputMessage: - type: object - properties: - type: - type: string - enum: [message] - description: The type of output item - role: - type: string - enum: [assistant] - description: The role of the message - content: - type: array - items: - $ref: "#/components/schemas/OutputContent" - description: The content of the message - required: - - type - - role - - content - - OutputContent: - oneOf: - - $ref: "#/components/schemas/OutputTextContent" - - $ref: "#/components/schemas/OutputAudioContent" - - OutputTextContent: - type: object - properties: - type: - type: string - enum: [output_text] - description: The type of output content - text: - type: string - description: The text content - required: - - type - - text - - OutputAudioContent: - type: object - properties: - type: - type: string - enum: [output_audio] - description: The type of output content - data: - type: string - description: Base64-encoded audio data - transcript: - type: string - description: Transcript of the audio - required: - - type - - data - - transcript - - ResponseUsage: - type: object - description: | - Represents token usage details including input tokens, output tokens, - a breakdown of output tokens, and the total tokens used. - properties: - input_tokens: - type: integer - description: The number of input tokens. - input_tokens_details: - type: object - description: A detailed breakdown of the input tokens. - properties: - cached_tokens: - type: integer - description: | - The number of tokens that were retrieved from the cache. - [More on prompt caching](/docs/guides/prompt-caching). - required: - - cached_tokens - output_tokens: - type: integer - description: The number of output tokens. - output_tokens_details: - type: object - description: A detailed breakdown of the output tokens. - properties: - reasoning_tokens: - type: integer - description: The number of reasoning tokens. - required: - - reasoning_tokens - total_tokens: - type: integer - description: The total number of tokens used. - required: - - input_tokens - - input_tokens_details - - output_tokens - - output_tokens_details - - total_tokens - OpenAIResponse: - type: object - description: A response from the model - allOf: - - $ref: "#/components/schemas/ModelResponseProperties" - - $ref: "#/components/schemas/ResponseProperties" - - type: object - properties: - id: - type: string - description: Unique identifier for this Response. - object: - type: string - description: The object type of this resource - always set to `response`. - enum: - - response - x-stainless-const: true - status: - type: string - description: The status of the response generation. One of `completed`, `failed`, `in_progress`, or `incomplete`. - enum: - - completed - - failed - - in_progress - - incomplete - created_at: - type: number - description: Unix timestamp (in seconds) of when this Response was created. - error: - $ref: "#/components/schemas/ResponseError" - incomplete_details: - type: object - nullable: true - description: | - Details about why the response is incomplete. - properties: - reason: - type: string - description: The reason why the response is incomplete. - enum: - - max_output_tokens - - content_filter - output: - type: array - description: > - An array of content items generated by the model. - - - - The length and order of items in the `output` array is - dependent - on the model's response. - - Rather than accessing the first item in the `output` array - and - assuming it's an `assistant` message with the content generated by - the model, you might consider using the `output_text` property where - supported in SDKs. - items: - $ref: "#/components/schemas/OutputItem" - output_text: - type: string - nullable: true - description: > - SDK-only convenience property that contains the aggregated text - output - - from all `output_text` items in the `output` array, if any are - present. - - Supported in the Python and JavaScript SDKs. - x-oaiSupportedSDKs: - - python - - javascript - usage: - $ref: "#/components/schemas/ResponseUsage" - parallel_tool_calls: - type: boolean - description: | - Whether to allow the model to run tool calls in parallel. - default: true - - ResponseError: - type: object - description: An error object returned when the model fails to generate a Response. - - properties: - code: - $ref: "#/components/schemas/ResponseErrorCode" - message: - type: string - description: A human-readable description of the error. - required: - - code - - message - - ResponseErrorCode: - type: string - description: The error code for the response. - enum: - - server_error - - rate_limit_exceeded - - invalid_prompt - - vector_store_timeout - - invalid_image - - invalid_image_format - - invalid_base64_image - - invalid_image_url - - image_too_large - - image_too_small - - image_parse_error - - image_content_policy_violation - - invalid_image_mode - - image_file_too_large - - unsupported_image_media_type - - empty_image_file - - failed_to_download_image - - image_file_not_found - - OpenAIResponseStreamEvent: - type: object - description: Events that can be emitted during response streaming - anyOf: - - $ref: "#/components/schemas/ResponseCreatedEvent" - - $ref: "#/components/schemas/ResponseInProgressEvent" - - $ref: "#/components/schemas/ResponseCompletedEvent" - - $ref: "#/components/schemas/ResponseFailedEvent" - - $ref: "#/components/schemas/ResponseIncompleteEvent" - - $ref: "#/components/schemas/ResponseOutputItemAddedEvent" - - $ref: "#/components/schemas/ResponseOutputItemDoneEvent" - - $ref: "#/components/schemas/ResponseContentPartAddedEvent" - - $ref: "#/components/schemas/ResponseContentPartDoneEvent" - - $ref: "#/components/schemas/ResponseErrorEvent" - - InputMessage: - type: object - properties: - type: - type: string - enum: - - message - role: - type: string - enum: - - user - - system - - developer - status: - type: string - enum: - - in_progress - - completed - - incomplete - content: - $ref: "#/components/schemas/InputMessageContentList" - InputMessageContentList: - type: array - title: Input item content list - description: > - A list of one or many input items to the model, containing different - content - - types. - items: - $ref: "#/components/schemas/InputContent" - InputContent: - oneOf: - - $ref: "#/components/schemas/InputTextContent" - - $ref: "#/components/schemas/InputImageContent" - - $ref: "#/components/schemas/InputFileContent" - InputTextContent: - properties: - type: - type: string - enum: - - input_text - description: The type of the input item. Always `input_text`. - default: input_text - x-stainless-const: true - text: - type: string - description: The text input to the model. - type: object - required: - - type - - text - title: Input text - description: A text input to the model. - InputImageContent: - properties: - type: - type: string - enum: - - input_image - description: The type of the input item. Always `input_image`. - default: input_image - x-stainless-const: true - image_url: - type: string - description: - The URL of the image to be sent to the model. A fully qualified URL - or base64 encoded image in a data URL. - file_id: - type: string - description: The ID of the file to be sent to the model. - detail: - type: string - enum: - - low - - high - - auto - description: - The detail level of the image to be sent to the model. One of - `high`, `low`, or `auto`. Defaults to `auto`. - type: object - required: - - type - - detail - title: Input image - description: An image input to the model. Learn about [image - inputs](/docs/guides/vision). - - InputMessageResource: - allOf: - - $ref: "#/components/schemas/InputMessage" - - type: object - properties: - id: - type: string - description: | - The unique ID of the message input. - required: - - id - ItemResource: - description: | - Content item used to generate a response. - oneOf: - - $ref: "#/components/schemas/InputMessageResource" - - $ref: "#/components/schemas/OutputMessage" - - $ref: "#/components/schemas/FileSearchToolCall" - - $ref: "#/components/schemas/ComputerToolCall" - - $ref: "#/components/schemas/WebSearchToolCall" - - $ref: "#/components/schemas/FunctionToolCallResource" - discriminator: - propertyName: type - FunctionToolCallResource: - allOf: - - $ref: "#/components/schemas/FunctionToolCall" - - type: object - properties: - id: - type: string - description: | - The unique ID of the function tool call. - required: - - id - ComputerToolCall: - type: object - title: Computer tool call - description: > - A tool call to a computer use tool. See the - - [computer use guide](/docs/guides/tools-computer-use) for more - information. - properties: - type: - type: string - description: The type of the computer call. Always `computer_call`. - enum: - - computer_call - default: computer_call - id: - type: string - description: The unique ID of the computer call. - call_id: - type: string - description: | - An identifier used when responding to the tool call with output. - action: - type: object - status: - type: string - description: | - The status of the item. One of `in_progress`, `completed`, or - `incomplete`. Populated when items are returned via API. - enum: - - in_progress - - completed - - incomplete - required: - - type - - id - - action - - call_id - - pending_safety_checks - - status - ResponseItemList: - type: object - description: A list of Response items. - properties: - object: - type: string - description: The type of object returned, must be `list`. - enum: - - list - x-stainless-const: true - data: - type: array - description: A list of items used to generate this response. - items: - $ref: "#/components/schemas/ItemResource" - has_more: - type: boolean - description: Whether there are more items available. - first_id: - type: string - description: The ID of the first item in the list. - last_id: - type: string - description: The ID of the last item in the list. - required: - - object - - data - - has_more - - first_id - - last_id - Includable: - type: string - description: > - Specify additional output data to include in the model response. - Currently - - supported values are: - - - `file_search_call.results`: Include the search results of - the file search tool call. - - `message.input_image.image_url`: Include image urls from the input - message. - - - `computer_call_output.output.image_url`: Include image urls from the - computer call output. - enum: - - file_search_call.results - - message.input_image.image_url - - computer_call_output.output.image_url - CreateModelResponseProperties: - allOf: - - $ref: "#/components/schemas/ModelResponseProperties" - InputItem: - oneOf: - - $ref: "#/components/schemas/EasyInputMessage" - - $ref: "#/components/schemas/Item" - Item: - type: object - description: | - Content item used to generate a response. - oneOf: - - $ref: "#/components/schemas/InputMessage" - - $ref: "#/components/schemas/OutputMessage" - - $ref: "#/components/schemas/FileSearchToolCall" - - $ref: "#/components/schemas/ComputerToolCall" - - $ref: "#/components/schemas/WebSearchToolCall" - - $ref: "#/components/schemas/FunctionToolCall" - - $ref: "#/components/schemas/ReasoningItem" - ReasoningItem: - type: object - description: > - A description of the chain of thought used by a reasoning model while - generating - - a response. - title: Reasoning - properties: - type: - type: string - description: | - The type of the object. Always `reasoning`. - enum: - - reasoning - x-stainless-const: true - id: - type: string - description: | - The unique identifier of the reasoning content. - summary: - type: array - description: | - Reasoning text contents. - items: - type: object - properties: - type: - type: string - description: | - The type of the object. Always `summary_text`. - enum: - - summary_text - x-stainless-const: true - text: - type: string - description: > - A short summary of the reasoning used by the model when - generating - - the response. - required: - - type - - text - status: - type: string - description: | - The status of the item. One of `in_progress`, `completed`, or - `incomplete`. Populated when items are returned via API. - enum: - - in_progress - - completed - - incomplete - required: - - id - - summary - - type - EasyInputMessage: - type: object - title: Input message - description: > - A message input to the model with a role indicating instruction - following - - hierarchy. Instructions given with the `developer` or `system` role take - - precedence over instructions given with the `user` role. Messages with - the - - `assistant` role are presumed to have been generated by the model in - previous - - interactions. - properties: - role: - type: string - description: > - The role of the message input. One of `user`, `assistant`, `system`, - or - - `developer`. - enum: - - user - - assistant - - system - - developer - content: - description: > - Text, image, or audio input to the model, used to generate a - response. - - Can also contain previous assistant responses. - oneOf: - - type: string - title: Text input - description: | - A text input to the model. - - $ref: "#/components/schemas/InputMessageContentList" - type: - type: string - description: | - The type of the message input. Always `message`. - enum: - - message - x-stainless-const: true - required: - - role - - content - OpenAICreateResponse: - allOf: - - $ref: "#/components/schemas/CreateModelResponseProperties" - - $ref: "#/components/schemas/ResponseProperties" - - type: object - properties: - input: - description: > - Text, image, or file inputs to the model, used to generate a - response. - - - Learn more: - - - [Text inputs and outputs](/docs/guides/text) - - - [Image inputs](/docs/guides/images) - - - [File inputs](/docs/guides/pdf-files) - - - [Conversation state](/docs/guides/conversation-state) - - - [Function calling](/docs/guides/function-calling) - oneOf: - - type: string - title: Text input - description: > - A text input to the model, equivalent to a text input with - the - - `user` role. - - type: array - title: Input item list - description: | - A list of one or many input items to the model, containing - different content types. - items: - $ref: "#/components/schemas/InputItem" - include: - type: array - description: > - Specify additional output data to include in the model response. - Currently - - supported values are: - - - `file_search_call.results`: Include the search results of - the file search tool call. - - `message.input_image.image_url`: Include image urls from the - input message. - - - `computer_call_output.output.image_url`: Include image urls - from the computer call output. - items: - $ref: "#/components/schemas/Includable" - nullable: true - usage: - $ref: "#/components/schemas/ResponseUsage" - parallel_tool_calls: - type: boolean - description: | - Whether to allow the model to run tool calls in parallel. - default: true - nullable: true - store: - type: boolean - description: > - Whether to store the generated model response for later - retrieval via - - API. - default: true - nullable: true - stream: - description: | - If set to true, the model response data will be streamed to the client - as it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format). - See the [Streaming section below](/docs/api-reference/responses-streaming) - for more information. - type: boolean - nullable: true - default: false - required: - - model - - input - OpenAIModels: - type: string - enum: - # Base GPT-4 Models - - gpt-4 - - gpt-4-0314 - - gpt-4-0613 - - gpt-4-32k - - gpt-4-32k-0314 - - gpt-4-32k-0613 - - gpt-4-0125-preview - - gpt-4-turbo - - gpt-4-turbo-2024-04-09 - - gpt-4-turbo-preview - - gpt-4-1106-preview - - gpt-4-vision-preview - - # GPT-3.5 Models - - gpt-3.5-turbo - - gpt-3.5-turbo-16k - - gpt-3.5-turbo-0301 - - gpt-3.5-turbo-0613 - - gpt-3.5-turbo-1106 - - gpt-3.5-turbo-0125 - - gpt-3.5-turbo-16k-0613 - - # GPT-4.1 Models - - gpt-4.1 - - gpt-4.1-mini - - gpt-4.1-nano - - gpt-4.1-2025-04-14 - - gpt-4.1-mini-2025-04-14 - - gpt-4.1-nano-2025-04-14 - - # O-Series Models - - o1 - - o1-mini - - o1-preview - - o1-pro - - o1-2024-12-17 - - o1-preview-2024-09-12 - - o1-mini-2024-09-12 - - o1-pro-2025-03-19 - - - o3 - - o3-mini - - o3-2025-04-16 - - o3-mini-2025-01-31 - - - o4-mini - - o4-mini-2025-04-16 - - # GPT-4O Models - - gpt-4o - - gpt-4o-mini - - gpt-4o-2024-11-20 - - gpt-4o-2024-08-06 - - gpt-4o-2024-05-13 - - gpt-4o-mini-2024-07-18 - - # GPT-4O Special Purpose Models - - gpt-4o-audio-preview - - gpt-4o-audio-preview-2024-10-01 - - gpt-4o-audio-preview-2024-12-17 - - gpt-4o-mini-audio-preview - - gpt-4o-mini-audio-preview-2024-12-17 - - gpt-4o-search-preview - - gpt-4o-mini-search-preview - - gpt-4o-search-preview-2025-03-11 - - gpt-4o-mini-search-preview-2025-03-11 - - # Computer Use Models - - computer-use-preview - - computer-use-preview-2025-03-11 - - # GPT-5 models - - gpt-5 - - gpt-5-mini - - gpt-5-nano - # Other - - chatgpt-4o-latest - - MoonvalleyTextToVideoInferenceParams: - type: object - properties: - height: - type: integer - default: 1080 - description: Height of the generated video in pixels - width: - type: integer - default: 1920 - description: Width of the generated video in pixels - guidance_scale: - type: number - format: float - default: 10 - description: Guidance scale for generation control - seed: - type: integer - description: "Random seed for generation (default: random)" - default: 9 - steps: - type: integer - default: 80 - description: Number of denoising steps - use_negative_prompts: - type: boolean - default: true - description: Whether to use negative prompts - negative_prompt: - type: string - description: Negative prompt text - MoonvalleyVideoToVideoInferenceParams: - type: object - properties: - guidance_scale: - type: number - format: float - default: 10 - description: Guidance scale for generation control - seed: - type: integer - description: "Random seed for generation (default: random)" - default: 9 - steps: - type: integer - default: 80 - description: Number of denoising steps - use_negative_prompts: - type: boolean - default: true - description: Whether to use negative prompts - negative_prompt: - type: string - description: Negative prompt text - control_params: - type: object - properties: - motion_intensity: - type: integer - format: int32 - default: 6 - description: Intensity of motion control - MoonvalleyTextToImageRequest: - type: object - properties: - prompt_text: - type: string - image_url: - type: string - inference_params: - $ref: "#/components/schemas/MoonvalleyTextToVideoInferenceParams" - webhook_url: - type: string - MoonvalleyTextToVideoRequest: - type: object - properties: - prompt_text: - type: string - image_url: - type: string - inference_params: - $ref: "#/components/schemas/MoonvalleyTextToVideoInferenceParams" - webhook_url: - type: string - MoonvalleyVideoToVideoRequest: - type: object - required: [prompt_text, video_url, control_type] - properties: - prompt_text: - type: string - description: Describes the video to generate - video_url: - type: string - description: Url to control video - control_type: - type: string - enum: [motion_control, pose_control] - description: Supported types for video control - image_url: - type: string - description: Url to control image - inference_params: - $ref: "#/components/schemas/MoonvalleyVideoToVideoInferenceParams" - description: Parameters for video-to-video generation inference - webhook_url: - type: string - description: Optional webhook URL for notifications - MoonvalleyPromptResponse: - type: object - properties: - id: - type: string - status: - type: string - prompt_text: - type: string - output_url: - type: string - inference_params: - type: object - model_params: - type: object - meta: - type: object - frame_conditioning: - type: object - error: - type: object - MoonvalleyImageToVideoRequest: - allOf: - - $ref: "#/components/schemas/MoonvalleyTextToVideoRequest" - - type: object - properties: - keyframes: - type: object - additionalProperties: - type: object - properties: - image_url: - type: string - MoonvalleyResizeVideoRequest: - allOf: - - $ref: "#/components/schemas/MoonvalleyVideoToVideoRequest" - - type: object - properties: - frame_position: - type: array - items: - type: integer - minItems: 2 - maxItems: 2 - frame_resolution: - type: array - items: - type: integer - minItems: 2 - maxItems: 2 - scale: - type: array - items: - type: integer - minItems: 2 - maxItems: 2 - MoonvalleyUploadFileRequest: - type: object - properties: - file: - type: string - format: binary - MoonvalleyUploadFileResponse: - type: object - properties: - access_url: - type: string - - GithubReleaseWebhook: - type: object - description: GitHub release webhook payload based on official webhook documentation - properties: - action: - type: string - enum: - [ - published, - unpublished, - created, - edited, - deleted, - prereleased, - released, - ] - description: The action performed on the release - release: - type: object - description: The release object - properties: - id: - type: integer - description: The ID of the release - node_id: - type: string - description: The node ID of the release - url: - type: string - description: The API URL of the release - html_url: - type: string - description: The HTML URL of the release - assets_url: - type: string - description: The URL to the release assets - upload_url: - type: string - description: The URL to upload release assets - tag_name: - type: string - description: The tag name of the release - target_commitish: - type: string - description: The branch or commit the release was created from - name: - type: string - nullable: true - description: The name of the release - body: - type: string - nullable: true - description: The release notes/body - draft: - type: boolean - description: Whether the release is a draft - prerelease: - type: boolean - description: Whether the release is a prerelease - created_at: - type: string - format: date-time - description: When the release was created - published_at: - type: string - format: date-time - nullable: true - description: When the release was published - author: - $ref: "#/components/schemas/GithubUser" - tarball_url: - type: string - description: URL to the tarball - zipball_url: - type: string - description: URL to the zipball - assets: - type: array - items: - $ref: "#/components/schemas/GithubReleaseAsset" - description: Array of release assets - required: - - id - - node_id - - url - - html_url - - tag_name - - target_commitish - - draft - - prerelease - - created_at - - author - - tarball_url - - zipball_url - - assets - repository: - $ref: "#/components/schemas/GithubRepository" - sender: - $ref: "#/components/schemas/GithubUser" - organization: - $ref: "#/components/schemas/GithubOrganization" - installation: - $ref: "#/components/schemas/GithubInstallation" - enterprise: - $ref: "#/components/schemas/GithubEnterprise" - required: - - action - - release - - repository - - sender - - GithubUser: - type: object - description: A GitHub user - properties: - login: - type: string - description: The user's login name - id: - type: integer - description: The user's ID - node_id: - type: string - description: The user's node ID - avatar_url: - type: string - description: URL to the user's avatar - gravatar_id: - type: string - nullable: true - description: The user's gravatar ID - url: - type: string - description: The API URL of the user - html_url: - type: string - description: The HTML URL of the user - type: - type: string - enum: [Bot, User, Organization] - description: The type of user - site_admin: - type: boolean - description: Whether the user is a site admin - required: - - login - - id - - node_id - - avatar_url - - url - - html_url - - type - - site_admin - - GithubRepository: - type: object - description: A GitHub repository - properties: - id: - type: integer - description: The repository ID - node_id: - type: string - description: The repository node ID - name: - type: string - description: The name of the repository - full_name: - type: string - description: The full name of the repository (owner/repo) - private: - type: boolean - description: Whether the repository is private - owner: - $ref: "#/components/schemas/GithubUser" - html_url: - type: string - description: The HTML URL of the repository - description: - type: string - nullable: true - description: The repository description - fork: - type: boolean - description: Whether the repository is a fork - url: - type: string - description: The API URL of the repository - clone_url: - type: string - description: The clone URL of the repository - git_url: - type: string - description: The git URL of the repository - ssh_url: - type: string - description: The SSH URL of the repository - default_branch: - type: string - description: The default branch of the repository - created_at: - type: string - format: date-time - description: When the repository was created - updated_at: - type: string - format: date-time - description: When the repository was last updated - pushed_at: - type: string - format: date-time - description: When the repository was last pushed to - required: - - id - - node_id - - name - - full_name - - private - - owner - - html_url - - fork - - url - - clone_url - - git_url - - ssh_url - - default_branch - - created_at - - updated_at - - pushed_at - - GithubReleaseAsset: - type: object - description: A GitHub release asset - properties: - id: - type: integer - description: The asset ID - node_id: - type: string - description: The asset node ID - name: - type: string - description: The name of the asset - label: - type: string - nullable: true - description: The label of the asset - content_type: - type: string - description: The content type of the asset - state: - type: string - enum: [uploaded, open] - description: The state of the asset - size: - type: integer - description: The size of the asset in bytes - download_count: - type: integer - description: The number of downloads - created_at: - type: string - format: date-time - description: When the asset was created - updated_at: - type: string - format: date-time - description: When the asset was last updated - browser_download_url: - type: string - description: The browser download URL - uploader: - $ref: "#/components/schemas/GithubUser" - required: - - id - - node_id - - name - - content_type - - state - - size - - download_count - - created_at - - updated_at - - browser_download_url - - uploader - - GithubOrganization: - type: object - description: A GitHub organization - properties: - login: - type: string - description: The organization's login name - id: - type: integer - description: The organization ID - node_id: - type: string - description: The organization node ID - url: - type: string - description: The API URL of the organization - repos_url: - type: string - description: The API URL of the organization's repositories - events_url: - type: string - description: The API URL of the organization's events - hooks_url: - type: string - description: The API URL of the organization's hooks - issues_url: - type: string - description: The API URL of the organization's issues - members_url: - type: string - description: The API URL of the organization's members - public_members_url: - type: string - description: The API URL of the organization's public members - avatar_url: - type: string - description: URL to the organization's avatar - description: - type: string - nullable: true - description: The organization description - required: - - login - - id - - node_id - - url - - repos_url - - events_url - - hooks_url - - issues_url - - members_url - - public_members_url - - avatar_url - - GithubInstallation: - type: object - description: A GitHub App installation - properties: - id: - type: integer - description: The installation ID - account: - $ref: "#/components/schemas/GithubUser" - repository_selection: - type: string - enum: [selected, all] - description: Repository selection for the installation - access_tokens_url: - type: string - description: The API URL for access tokens - repositories_url: - type: string - description: The API URL for repositories - html_url: - type: string - description: The HTML URL of the installation - app_id: - type: integer - description: The GitHub App ID - target_id: - type: integer - description: The target ID - target_type: - type: string - description: The target type - permissions: - type: object - description: The installation permissions - events: - type: array - items: - type: string - description: The events the installation subscribes to - created_at: - type: string - format: date-time - description: When the installation was created - updated_at: - type: string - format: date-time - description: When the installation was last updated - single_file_name: - type: string - nullable: true - description: The single file name if applicable - required: - - id - - account - - repository_selection - - access_tokens_url - - repositories_url - - html_url - - app_id - - target_id - - target_type - - permissions - - events - - created_at - - updated_at - - GithubEnterprise: - type: object - description: A GitHub enterprise - properties: - id: - type: integer - description: The enterprise ID - slug: - type: string - description: The enterprise slug - name: - type: string - description: The enterprise name - node_id: - type: string - description: The enterprise node ID - avatar_url: - type: string - description: URL to the enterprise avatar - description: - type: string - nullable: true - description: The enterprise description - website_url: - type: string - nullable: true - description: The enterprise website URL - html_url: - type: string - description: The HTML URL of the enterprise - created_at: - type: string - format: date-time - description: When the enterprise was created - updated_at: - type: string - format: date-time - description: When the enterprise was last updated - required: - - id - - slug - - name - - node_id - - avatar_url - - html_url - - created_at - - updated_at - - ReleaseNote: - type: object - properties: - id: - type: integer - description: Unique identifier for the release note - project: - type: string - enum: [comfyui, comfyui_frontend, desktop, cloud] - description: The project this release note belongs to - version: - type: string - description: The version of the release - attention: - type: string - enum: [low, medium, high] - description: The attention level for this release - content: - type: string - description: The content of the release note in markdown format - published_at: - type: string - format: date-time - description: When the release note was published - required: - - id - - project - - version - - attention - - content - - published_at - - ViduCreation: - type: object - properties: - id: - type: string - url: - type: string - cover_url: - type: string - watermarked_url: - type: string - moderation_url: - type: array - items: - type: string - ViduState: - enum: - - created - - processing - - queueing - - success - - failed - type: string - ViduGetCreationsReply: - type: object - properties: - state: - $ref: "#/components/schemas/ViduState" - err_code: - type: string - creations: - type: array - items: - $ref: "#/components/schemas/ViduCreation" - id: - type: string - ViduTaskReply: - type: object - properties: - task_id: - type: string - state: - $ref: "#/components/schemas/ViduState" - model: - type: string - style: - enum: - - general - - anime - type: string - prompt: - type: string - images: - type: array - items: - type: string - duration: - type: integer - format: int32 - seed: - type: integer - format: int32 - aspect_ratio: - type: string - resolution: - type: string - movement_amplitude: - enum: - - auto - - small - - medium - - large - type: string - bgm: - type: boolean - description: Whether background music was added - payload: - type: string - description: Transparent transmission parameters - off_peak: - type: boolean - description: Off peak mode status - watermark: - type: boolean - description: Whether watermark was added - created_at: - type: string - format: date-time - credits: - type: integer - format: int32 - required: - - task_id - - state - - credits - ViduTaskRequest: - type: object - properties: - model: - type: string - description: "Model name: viduq3-pro, viduq2-pro-fast, viduq2-pro, viduq2-turbo, viduq1, viduq1-classic, vidu2.0" - style: - enum: - - general - - anime - type: string - prompt: - type: string - description: Text prompt for video generation (max 2000 characters) - images: - type: array - items: - type: string - description: Images for img2video (accepts 1 image as start frame) - audio: - type: boolean - description: Enable direct audio-video generation capability (default true for q3 model) - audio_type: - type: string - enum: - - all - - speech_only - - sound_effect_only - description: "Audio type when audio is true: all (sound effects + vocals), speech_only, sound_effect_only. Ineffective for q3 model" - voice_id: - type: string - description: Voice ID for audio (ineffective for q3 model) - is_rec: - type: boolean - description: Use recommended prompt (consumes additional 10 credits) - bgm: - type: boolean - description: Add background music to generated video (ineffective for q3 model) - duration: - type: integer - format: int32 - description: "Video duration in seconds. viduq3-pro: 1-16, viduq2-pro-fast: 1-10, viduq2-pro/turbo: 1-8" - seed: - type: integer - format: int32 - description: Random seed (defaults to random if not specified) - aspect_ratio: - type: string - resolution: - type: string - description: "Resolution: 360p, 540p, 720p, 1080p, 2K (availability depends on model and duration)" - movement_amplitude: - enum: - - auto - - small - - medium - - large - type: string - description: Movement amplitude of objects in frame (ineffective for q2, q3 models) - payload: - type: string - description: Transparent transmission parameters (max 1048576 characters) - off_peak: - type: boolean - description: Off peak mode (lower cost, tasks generated within 48 hours) - watermark: - type: boolean - description: Add watermark to video (default false) - wm_position: - type: integer - format: int32 - description: "Watermark position: 1 (top left), 2 (top right), 3 (bottom right, default), 4 (bottom left)" - wm_url: - type: string - description: Watermark image URL (uses default watermark if not provided) - meta_data: - type: string - description: Metadata identification, JSON format string for custom metadata - enhance: - type: boolean - callback_url: - type: string - description: Callback URL for task status updates - priority: - type: integer - format: int32 - ViduExtendRequest: - type: object - properties: - model: - type: string - description: Model name (viduq2-pro or viduq2-turbo) - video_creation_id: - type: string - description: Vidu video_creation_id, required with video_url - video_url: - type: string - description: Any video URL, required with video_creation_id - images: - type: array - items: - type: string - description: Extended reference image to the end frame (only accepts 1 image) - prompt: - type: string - description: Text prompt for video generation (max 2000 characters) - duration: - type: integer - format: int32 - description: Extended duration in seconds (1-7, default 5) - resolution: - type: string - description: Resolution (540p, 720p, 1080p) - payload: - type: string - description: Transparent transmission parameters (max 1048576 characters) - callback_url: - type: string - description: Callback URL for task status updates - required: - - model - ViduExtendReply: - type: object - properties: - task_id: - type: string - state: - $ref: "#/components/schemas/ViduState" - model: - type: string - video_creation_id: - type: string - video_url: - type: string - images: - type: array - items: - type: string - prompt: - type: string - duration: - type: integer - format: int32 - resolution: - type: string - payload: - type: string - credits: - type: integer - format: int32 - created_at: - type: string - format: date-time - required: - - task_id - - state - - credits - ViduImageSetting: - type: object - properties: - prompt: - type: string - description: Prompt for extending the previous frame - key_image: - type: string - description: Reference image for each key frame - duration: - type: integer - format: int32 - description: Duration between key frames in seconds (2-7, default 5) - required: - - key_image - ViduMultiframeRequest: - type: object - properties: - model: - type: string - description: Model name (viduq2-pro or viduq2-turbo) - start_image: - type: string - description: The first frame image (Base64 or URL) - image_settings: - type: array - items: - $ref: "#/components/schemas/ViduImageSetting" - description: Configuration for intelligent multi-frame generation (2-9 frames) - resolution: - type: string - description: Video resolution (540p, 720p, 1080p) - payload: - type: string - description: Transparent transmission parameters (max 1048576 characters) - callback_url: - type: string - description: Callback URL for task status updates - required: - - model - - start_image - - image_settings - ViduMultiframeReply: - type: object - properties: - task_id: - type: string - state: - $ref: "#/components/schemas/ViduState" - model: - type: string - start_image: - type: string - image_settings: - type: array - items: - $ref: "#/components/schemas/ViduImageSetting" - resolution: - type: string - payload: - type: string - credits: - type: integer - format: int32 - created_at: - type: string - format: date-time - required: - - task_id - - state - - credits - BytePlusImageGenerationRequest: - type: object - properties: - model: - type: string - enum: - - seedream-3-0-t2i-250415 - - seededit-3-0-i2i-250628 - - seedream-4-0-250828 - - seedream-4-5-251128 - - seedream-5-0-260128 - prompt: - type: string - description: Text description for image generation or transformation - image: - oneOf: - - type: string - description: Single image (URL or Base64) - - type: array - items: - type: string - maxItems: 14 - description: Multiple images (URLs or Base64) - supported by seedream-5.0-lite, 4.5 and 4.0 - description: | - Seedream-5.0-lite, 4.5 and 4.0, and seededit-3.0-i2i support this parameter. - - Enter the Base64 encoding or an accessible URL of the image to edit. Seedream-5.0-lite, 4.5 and 4.0 support inputting a single image or multiple images (see the multi-image blending example), while seededit-3.0-i2i only supports single-image input. - - • Image URL: Make sure that the image URL is accessible. - • Base64 encoding: The format must be data:image/;base64,. Note: must be in lowercase, e.g., data:image/png;base64,. - - An input image must meet the following requirements: - • Image format: jpeg, png (seedream-5.0-lite, 4.5 and 4.0 also support webp, bmp, tiff and gif) - • Aspect ratio (width/height): In the range [1/16, 16] for seedream-5.0-lite, 4.5 and 4.0; [1/3, 3] for seededit-3.0-i2i - • Width and height (px): > 14 - • Size: No more than 10 MB - • Maximum of 14 reference images - size: - type: string - description: | - "seedream-3-0-t2i-250415": Specifies the dimensions (width x height in pixels) of the generated image. Must be between [512x512, 2048x2048] - "seededit-3-0-i2i-250628": The width and height pixels of the generated image. Currently only supports adaptive. - "seedream-4-0-250828": Set the specification for the generated image. Two methods are available but cannot be used together. - Method 1 | Specify the resolution. Optional values: 1K, 2K, 4K - Method 2 | Specify width and height in pixels. Default: 2048x2048, total pixels: [1024x1024, 4096x4096], aspect ratio: [1/16, 16] - "seedream-4-5-251128": Two methods available. - Method 1 | Specify the resolution. Optional values: 2K, 4K - Method 2 | Specify width and height in pixels. Default: 2048x2048, total pixels: [2560x1440, 4096x4096], aspect ratio: [1/16, 16] - "seedream-5-0-260128": Two methods available. - Method 1 | Specify the resolution. Optional values: 2K, 3K - Method 2 | Specify width and height in pixels. Default: 2048x2048, total pixels: [2560x1440, ~3072x3072], aspect ratio: [1/16, 16] - response_format: - type: string - enum: - - url - - b64_json - description: Specifies the format of the generated image returned in the response - default: "url" - seed: - type: integer - description: "Random seed to control the stochasticity of image generation. Range: [-1, 2147483647]. If not specified, a seed will be automatically generated. To reproduce the same output, use the same seed value." - default: -1 - sequential_image_generation: - type: string - description: | - Controls whether to disable the batch generation feature. This parameter is only supported on seedream-5.0-lite, 4.5 and 4.0. Valid values: - auto: In automatic mode, the model automatically determines whether to return multiple images and how many images it will contain based on the user's prompt. - disabled: Disables batch generation feature. The model will only generate one image. - sequential_image_generation_options: - type: object - description: | - Only seedream-5.0-lite, 4.5 and 4.0 support this parameter. - Configuration for the batch image generation feature. This parameter is only effective when sequential_image_generation is set to auto. - properties: - max_images: - type: integer - description: "Specifies the maximum number of images to generate in this request. Number of input reference images + Number of generated images ≤ 15." - minimum: 1 - maximum: 15 - default: 15 - guidance_scale: - type: number - format: float - description: "Controls how closely the output image aligns with the input prompt. Range [1, 10]. Higher values result in stronger prompt adherence. Default 2.5 for seedream-3-0-t2i-250415 and 5.5 for seededit-3-0-i2i-250628. Not supported by seedream-5.0-lite, 4.5 and 4.0." - minimum: 1 - maximum: 10 - watermark: - type: boolean - description: "Specifies whether to add a watermark to the generated image. false = No watermark, true = Adds watermark with 'AI generated' label" - default: true - output_format: - type: string - enum: - - png - - jpeg - description: "Specifies the format of the output image. Only seedream-5.0-lite supports this parameter." - default: "jpeg" - stream: - type: boolean - description: "Whether to enable streaming output mode. Only seedream-5.0-lite, 4.5 and 4.0 support this parameter. false = All output images are returned at once. true = Each output image is returned immediately after generated." - default: false - optimize_prompt_options: - type: object - description: | - Configuration for prompt optimization feature. Only seedream-5.0-lite/4.5 (only supports standard mode) and seedream-4.0 support this parameter. - properties: - mode: - type: string - enum: - - standard - - fast - description: "Set the mode for the prompt optimization feature. standard = Higher quality, longer generation time. fast = Faster but at a more average quality." - default: "standard" - required: - - prompt - - model - BytePlusImageGenerationResponse: - type: object - properties: - model: - type: string - description: The model ID used for the request - example: "seedream-3-0-t2i-250415" - created: - type: integer - description: Unix timestamp (in seconds) indicating the time when the request was created - data: - type: array - items: - type: object - properties: - url: - type: string - format: uri - description: URL for image download (if response_format is "url") - b64_json: - type: string - description: Base64-encoded image data (if response_format is "b64_json") - size: - type: string - description: "The width and height of the image in pixels, in the format x. Only seedream-5.0-lite, 4.5 and 4.0 support this parameter." - description: Contains information about the generated image(s) - usage: - type: object - properties: - generated_images: - type: integer - description: Number of images generated by the model - output_tokens: - type: integer - description: The number of tokens used for the picture generated by the model. - total_tokens: - type: integer - description: The total number of tokens consumed by this request. - error: - type: object - properties: - code: - type: string - description: Error code - message: - type: string - description: Error message - description: Error information (if any) - BytePlusVideoGenerationRequest: - type: object - properties: - model: - type: string - description: The ID of the model to call. Available models include seedance-1-5-pro-251215, seedance-1-0-pro-250528, seedance-1-0-pro-fast-251015, seedance-1-0-lite-t2v-250428, seedance-1-0-lite-i2v-250428 - enum: - - seedance-1-5-pro-251215 - - seedance-1-0-pro-250528 - - seedance-1-0-lite-t2v-250428 - - seedance-1-0-lite-i2v-250428 - - seedance-1-0-pro-fast-251015 - content: - type: array - description: The input content for the model to generate a video - items: - $ref: "#/components/schemas/BytePlusVideoGenerationContent" - minItems: 1 - callback_url: - type: string - format: uri - description: Callback notification address for the result of this generation task - return_last_frame: - type: boolean - default: false - description: | - Whether to return the last frame image of the generated video. - true: Returns the last frame image of the generated video. After setting this parameter to true, you can obtain the last frame image by calling the Querying the information about a video generation task. The last frame image is in PNG format, with its pixel width and height consistent with those of the generated video, and it contains no watermarks. Using this parameter allows the generation of multiple consecutive videos: the last frame of the previously generated video is used as the first frame of the next video task, enabling quick generation of multiple consecutive videos. - false: Does not return the last frame image of the generated video. - generate_audio: - type: boolean - default: true - description: | - Only supported by Seedance 1.5 pro. Whether the generated video includes audio synchronized with the visuals. - true: The model outputs a video with synchronized audio. Seedance 1.5 pro can automatically generate matching voice, sound effects, or background music based on the prompt and visual content. It is recommended to enclose dialogue in double quotes. Example: A man stops a woman and says, "Remember, never point your finger at the moon." - false: The model outputs a silent video. - required: - - model - - content - BytePlusVideoGenerationContent: - type: object - properties: - type: - type: string - enum: - - text - - image_url - description: The type of the input content - text: - type: string - description: | - The input text information for the model. Includes text prompt and optional parameters. - - Text prompt (required): Description of the video to be generated using Chinese and English characters. - - Parameters (optional): Add --[parameters] after the text prompt to control video specifications: - - --resolution (--rs): 480p, 720p, 1080p (default: 720p) - - --ratio (--rt): 21:9, 16:9, 4:3, 1:1, 3:4, 9:16, 9:21, adaptive (default: 16:9 or adaptive) - - --duration (--dur): 3-12 seconds (default: 5) - - --framepersecond (--fps): 24 (default: 24) - - --watermark (--wm): true/false (default: false) - - --seed (--seed): -1 to 2^32-1 (default: -1) - - --camerafixed (--cf): true/false (default: false) - - Example: "A beautiful landscape --ratio 16:9 --resolution 720p --duration 5" - maxLength: 4096 - image_url: - type: object - properties: - url: - type: string - description: | - Image content for image-to-video generation (when type is "image") - Image URL: Make sure that the image URL is accessible. - Base64-encoded content: Format must be data:image/;base64, - required: - - type - BytePlusVideoGenerationResponse: - type: object - properties: - id: - type: string - description: The ID of the video generation task - required: - - id - BytePlusVideoGenerationQueryResponse: - type: object - properties: - id: - type: string - description: The ID of the video generation task - model: - type: string - description: The name and version of the model used by the task - status: - type: string - enum: - - queued - - running - - cancelled - - succeeded - - failed - description: The state of the task - error: - type: object - nullable: true - description: The error information. If the task succeeds, null is returned. If the task fails, the error information is returned. - properties: - code: - type: string - description: The error code - message: - type: string - description: The error message - created_at: - type: integer - description: The time when the task was created. The value is a UNIX timestamp in seconds. - updated_at: - type: integer - description: The time when the task was last updated. The value is a UNIX timestamp in seconds. - content: - type: object - description: The output after the video generation task is completed, which contains the download URL of the output video. - properties: - video_url: - type: string - description: The URL of the output video. For security purposes, the output video is cleared after 24 hours. - usage: - type: object - description: The token usage for the request - properties: - completion_tokens: - type: integer - description: The number of tokens generated by the model - total_tokens: - type: integer - description: For the video generation model, the number of input tokens is not calculated and defaults to 0. Therefore, total_tokens = completion_tokens. - WanVideoGenerationRequest: - type: object - properties: - model: - type: string - description: The ID of the model to call - enum: - - wan2.5-t2v-preview - - wan2.5-i2v-preview - - wan2.6-t2v - - wan2.6-i2v - - wan2.6-r2v - input: - type: object - description: Enter basic information, such as prompt words, etc. - properties: - prompt: - type: string - description: | - Text prompt words. Support Chinese and English, length not exceeding 800 characters. - For wan2.6-r2v with multiple reference videos, use 'character1', 'character2', etc. to refer to subjects - in the order of reference videos. Example: "Character1 sings on the roadside, Character2 dances beside it" - maxLength: 800 - negative_prompt: - type: string - description: Reverse prompt words are used to describe content that you do not want to see in the video screen - maxLength: 500 - audio_url: - type: string - description: "Audio file download URL. Supported formats: mp3 and wav. Cannot be used with reference_video_urls." - img_url: - type: string - description: "First frame image URL or Base64 encoded data. Required for I2V models. Image formats: JPEG, JPG, PNG, BMP, WEBP. Resolution: 360-2000 pixels. File size: max 10MB." - template: - type: string - description: "Video effect template name. Optional. Currently supported: squish, flying, carousel. When used, prompt parameter is ignored." - reference_video_urls: - type: array - description: | - Reference video URLs for wan2.6-r2v model only. Array of 1-3 video URLs. - Input restrictions: - - Format: mp4, mov - - Quantity: 1-3 videos - - Single video length: 2-30 seconds - - Single file size: max 30MB - - Cannot be used with audio_url - Reference duration: Single video max 5s, two videos max 2.5s each, three videos proportionally less. - Billing: Based on actual reference duration used. - items: - type: string - minItems: 1 - maxItems: 3 - required: - - prompt - parameters: - type: object - description: Video processing parameters - properties: - size: - type: string - description: | - Video resolution in format width*height. Supported resolutions vary by model: - For wan2.5 T2V: 480P (480*832, 832*480, 624*624), 720P, 1080P sizes - For wan2.6 T2V/R2V (no 480P): - 720P: 1280*720, 720*1280, 960*960, 1088*832, 832*1088 - 1080P: 1920*1080, 1080*1920, 1440*1440, 1632*1248, 1248*1632 - resolution: - type: string - description: | - Resolution level for I2V models. Supported values vary by model: - - wan2.5-i2v-preview: 480P, 720P, 1080P - - wan2.6-i2v: 720P, 1080P only (no 480P support) - enum: - - "480P" - - "720P" - - "1080P" - duration: - type: integer - description: | - The duration of the video generated, in seconds: - - wan2.5 models: 5 or 10 seconds - - wan2.6-t2v, wan2.6-i2v: 5, 10, or 15 seconds - - wan2.6-r2v: 5 or 10 seconds only (no 15s support) - enum: [5, 10, 15] - default: 5 - prompt_extend: - type: boolean - description: Is it enabled prompt intelligent rewriting. Default is true - default: true - shot_type: - type: string - description: | - Intelligent multi-lens control. Only active when prompt_extend is enabled. - For wan2.6 models only. - - multi: Intelligent disassembly into multiple lenses (default) - - single: Single lens generation - enum: - - multi - - single - default: multi - seed: - type: integer - description: Random number seed, used to control the randomness of the model generated content - minimum: 0 - maximum: 2147483647 - watermark: - type: boolean - description: Whether to add a watermark logo, the watermark is located in the lower right corner - default: false - audio: - type: boolean - description: Whether to add audio to the video - default: true - required: - - model - - input - WanVideoGenerationResponse: - type: object - properties: - output: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - type: string - description: Task status - enum: - - PENDING - - RUNNING - - SUCCEEDED - - FAILED - - CANCELED - - UNKNOWN - required: - - task_id - - task_status - request_id: - type: string - description: Unique request identifier - code: - type: string - description: The error code for the failed request (not returned if request is successful) - message: - type: string - description: Detailed information about the failed request (not returned if request is successful) - required: - - output - - request_id - WanTaskQueryResponse: - type: object - properties: - request_id: - type: string - description: Unique request identifier - output: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - type: string - description: Task status - enum: - - PENDING - - RUNNING - - SUCCEEDED - - FAILED - - CANCELED - - UNKNOWN - submit_time: - type: string - description: Task submission time - scheduled_time: - type: string - description: Task execution time - end_time: - type: string - description: Task completion time - video_url: - type: string - description: Video URL for completed video generation tasks. Link validity period 24 hours - check_audio: - type: string - description: Audio URL for I2V tasks with audio generation - orig_prompt: - type: string - description: Original input prompt (for video tasks) - actual_prompt: - type: string - description: Actual prompt after intelligent rewriting (for video tasks) - results: - type: array - description: List of task results for image generation tasks - items: - type: object - properties: - orig_prompt: - type: string - description: Original input prompt - actual_prompt: - type: string - description: Actual prompt after intelligent rewriting (if enabled) - url: - type: string - description: Generated image URL address - code: - type: string - description: Image error code (returned when some tasks fail) - message: - type: string - description: Image error information (returned when some tasks fail) - task_metrics: - type: object - description: Task result statistics for image generation tasks - properties: - TOTAL: - type: integer - description: Total number of tasks - SUCCEEDED: - type: integer - description: Number of successful tasks - FAILED: - type: integer - description: Number of failed tasks - code: - type: string - description: The error code for the failed request (not returned if request is successful) - message: - type: string - description: Detailed information about the failed request (not returned if request is successful) - required: - - task_id - - task_status - usage: - type: object - description: Output information statistics. Only successful results are counted - properties: - video_duration: - type: number - description: Duration of generated video in seconds (T2V tasks) - video_ratio: - type: string - description: Video resolution ratio (T2V tasks) - video_count: - type: integer - description: Number of generated videos (T2V tasks) - duration: - type: number - description: Duration of generated video in seconds (I2V tasks) - SR: - type: integer - description: Video resolution level (I2V tasks) - size: - type: string - description: Image resolution (T2I tasks) - image_count: - type: integer - description: Number of generated images (T2I tasks) - required: - - request_id - - output - WanImageGenerationRequest: - type: object - properties: - model: - type: string - description: The ID of the model to call for text-to-image generation - enum: - - wan2.5-t2i-preview - input: - type: object - description: Enter basic information, such as prompt words, etc. - properties: - prompt: - type: string - description: Positive prompt words to describe expected image elements and visual features. Support Chinese and English, length not exceeding 800 characters - negative_prompt: - type: string - description: Reverse prompt words to describe content that you do not want to see in the image - required: - - prompt - parameters: - type: object - description: Image processing parameters - properties: - size: - type: string - description: Output image resolution. Default is 1024*1024. Pixel range [512, 1440], up to 200 megapixels - default: "1024*1024" - n: - type: integer - description: Number of generated images. Range 1-4, default is 4 - minimum: 1 - maximum: 4 - default: 4 - seed: - type: integer - description: Random number seed to control randomness. Range [0, 2147483647] - minimum: 0 - maximum: 2147483647 - prompt_extend: - type: boolean - description: Enable prompt intelligent rewriting. Default is true - default: true - watermark: - type: boolean - description: Whether to add watermark logo in lower right corner - default: false - required: - - model - - input - WanImageGenerationResponse: - type: object - properties: - output: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - type: string - description: Task status - enum: - - PENDING - - RUNNING - - SUCCEEDED - - FAILED - - CANCELED - - UNKNOWN - required: - - task_id - - task_status - request_id: - type: string - description: Unique request identifier - code: - type: string - description: The error code for the failed request (not returned if request is successful) - message: - type: string - description: Detailed information about the failed request (not returned if request is successful) - required: - - request_id - - output - WanImage2ImageGenerationRequest: - type: object - properties: - model: - type: string - description: The ID of the model to call for image-to-image generation - enum: - - wan2.5-i2i-preview - input: - type: object - description: Enter basic information, such as prompt words, images, etc. - properties: - prompt: - type: string - description: Positive prompt words to describe expected image elements and visual features. Support Chinese and English, length not exceeding 2000 characters - maxLength: 2000 - images: - type: array - description: Array of image URLs for image-to-image generation - items: - type: string - description: Image URL. Supported formats JPEG, JPG, PNG, BMP, WEBP. Resolution width and height must be between 384 and 5000 pixels. File size no larger than 10MB. - minItems: 1 - maxItems: 2 - negative_prompt: - type: string - description: Reverse prompt words to describe content that you do not want to see in the image - maxLength: 500 - required: - - prompt - - images - parameters: - type: object - description: Image processing parameters - properties: - size: - type: string - description: Output image resolution. Default is 1280*1280. Width and height must be between 384 and 5000 pixels. - default: "1280*1280" - n: - type: integer - description: Number of generated images. Range 1-4, default is 1 - minimum: 1 - maximum: 4 - default: 1 - seed: - type: integer - description: Random number seed to control randomness. Range [0, 2147483647] - minimum: 0 - maximum: 2147483647 - watermark: - type: boolean - description: Whether to add watermark logo in lower right corner - default: false - required: - - model - - input - WanImage2ImageGenerationResponse: - type: object - properties: - output: - type: object - properties: - task_id: - type: string - description: Task ID - task_status: - type: string - description: Task status - enum: - - PENDING - - RUNNING - - SUCCEEDED - - FAILED - - CANCELED - - UNKNOWN - required: - - task_id - - task_status - request_id: - type: string - description: Unique request identifier - code: - type: string - description: The error code for the failed request (not returned if request is successful) - message: - type: string - description: Detailed information about the failed request (not returned if request is successful) - required: - - request_id - - output - TopazEnhanceGenRequest: - type: object - properties: - output_format: - type: string - enum: - - jpeg - - jpg - - png - - tiff - - tif - description: The desired format of the output image - default: jpeg - subject_detection: - type: string - enum: - - "All" - - "Foreground" - - "Background" - description: Specifies whether you want to detect all subjects in the image, only the foreground subject, or only the background for the AI model to run on - default: "All" - face_enhancement: - type: boolean - description: By default, faces (if any) are enhanced during image processing as well. Set face_enhancement to false if you don't want this - default: true - face_enhancement_creativity: - type: number - minimum: 0 - maximum: 1 - description: Choose the level of creativity for face enhancement from 0 to 1. Defaults to 0, and is ignored if face_enhancement is false - default: 0 - face_enhancement_strength: - type: number - minimum: 0 - maximum: 1 - description: Control how sharp the enhanced faces are relative to the background from 0 to 1. Defaults to 0.8, and is ignored if face_enhancement is false - default: 0.8 - image: - type: string - format: binary - description: The image file to be processed. Supported formats - jpeg (or jpg), png, tiff (or tif) - source_id: - type: string - description: Unique identifier of the source image - example: "d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b" - source_url: - type: string - description: The URL of the source image - example: "https://example.com/image.jpg" - model: - type: string - enum: - - "Reimagine" - description: The model to use for processing the image (Bloom - Creative Upscale) - default: "Reimagine" - output_height: - type: integer - minimum: 1 - maximum: 32000 - description: The desired height of the output image in pixels - output_width: - type: integer - minimum: 1 - maximum: 32000 - description: The desired width of the output image in pixels - crop_to_fill: - type: boolean - description: Default behavior is to letterbox the image if a differing aspect ratio is chosen. Enable crop_to_fill by setting this to true if you instead want to crop the image to fill the dimensions - default: false - prompt: - type: string - description: Text prompt for creative upscaling guidance - available for Reimagine only - example: "enter-your-prompt-here" - creativity: - type: integer - minimum: 1 - maximum: 9 - description: Creativity settings range from 1 to 9 - - available for Reimagine only - default: 3 - face_preservation: - type: string - enum: - - "true" - - "false" - description: To preserve the identity of characters - available for Reimagine only (must be string "true" or "false" due to Topaz API requirement) - default: "true" - color_preservation: - type: string - enum: - - "true" - - "false" - description: To preserve the original color - available for Reimagine only (must be string "true" or "false" due to Topaz API requirement) - default: "true" - required: - - model - TopazEnhanceGenResponse: - type: object - properties: - process_id: - type: string - description: Unique identifier for the processing job - example: "d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b" - source_id: - type: string - description: Unique identifier of the source image - example: "d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b" - eta: - type: integer - description: Expected completion time in Unix timestamp - example: 1617220000 - required: - - process_id - - eta - TopazStatusResponse: - type: object - properties: - process_id: - type: string - description: Unique identifier for the processing job - source_id: - type: string - description: Unique identifier of the source image - filename: - type: string - description: Original filename without extension - input_format: - type: string - description: Format of the input image - input_height: - type: integer - description: Height of the input image in pixels - input_width: - type: integer - description: Width of the input image in pixels - output_format: - type: string - description: Format of the output image - output_height: - type: integer - description: Height of the output image in pixels - output_width: - type: integer - description: Width of the output image in pixels - category: - type: string - description: Processing category (e.g., "Enhance") - model_type: - type: string - description: Type of model used (e.g., "Generative") - model: - type: string - description: Specific model used (e.g., "Reimagine") - subject_detection: - type: string - description: Subject detection setting - face_enhancement: - type: boolean - description: Whether face enhancement is enabled - face_enhancement_creativity: - type: number - description: Face enhancement creativity level - face_enhancement_strength: - type: number - description: Face enhancement strength level - crop_to_fill: - type: boolean - description: Whether crop to fill is enabled - options_json: - type: string - description: JSON string containing additional options - sync: - type: boolean - description: Whether this was a synchronous request - status: - type: string - enum: - - Pending - - Processing - - Completed - - Failed - - Cancelled - description: Current status of the processing job - progress: - type: number - minimum: 0 - maximum: 100 - description: Progress percentage (0-100) - eta: - type: integer - description: Expected completion time in Unix timestamp - creation_time: - type: integer - description: Creation time in Unix timestamp - modification_time: - type: integer - description: Last modification time in Unix timestamp - credits: - type: integer - description: Credits consumed for this job - required: - - process_id - - status - - credits - TopazDownloadResponse: - type: object - properties: - download_url: - type: string - description: Presigned URL to download the image - example: "https://example.com/d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b?presigned_headers" - head_url: - type: string - description: Presigned URL to get image metadata - example: "https://example.com/d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b?presigned_headers" - expiry: - type: integer - description: Expiration time of the presigned URLs in Unix timestamp - example: 1617220000 - required: - - download_url - - expiry - TopazVideoSourceResolution: - type: object - required: - - width - - height - properties: - width: - type: integer - description: Width of the video in pixels - example: 1920 - height: - type: integer - description: Height of the video in pixels - example: 1080 - TopazVideoOutputResolution: - type: object - required: - - width - - height - properties: - width: - type: integer - description: Desired output width in pixels - example: 3840 - height: - type: integer - description: Desired output height in pixels - example: 2160 - TopazVideoEnhancementFilter: - type: object - required: - - model - properties: - model: - type: string - description: Short code name for AI model - enum: - - aaa-9 - - ahq-12 - - alq-13 - - alqs-2 - - amq-13 - - amqs-2 - - ddv-3 - - dtd-4 - - dtds-2 - - dtv-4 - - dtvs-2 - - gcg-5 - - ghq-5 - - iris-2 - - iris-3 - - nxf-1 - - nyx-3 - - prob-4 - - rhea-1 - - rxl-1 - - thd-3 - - thf-4 - - thm-2 - - slf-1 # Starlight Fast - - slc-1 # Starlight Creative - example: prob-4 - videoType: - type: string - enum: - - Progressive - - Interlaced - - ProgressiveInterlaced - description: Frame/field type of the video - example: Progressive - auto: - type: string - enum: - - Auto - - Manual - - Relative - description: Parameter mode of the selected model - example: Auto - fieldOrder: - type: string - enum: - - TopFirst - - BottomFirst - - Auto - description: Optional specification of field order for interlaced input videos - example: Auto - focusFixLevel: - type: string - enum: - - None - - Normal - - Strong - description: Downscales video input for stronger correction of blurred subjects - example: Normal - compression: - type: number - minimum: -1 - maximum: 1 - description: Adjust strength of compression recovery - example: 0.1 - details: - type: number - minimum: -1 - maximum: 1 - description: Amount of detail reconstruction - example: 0.2 - prenoise: - type: number - minimum: 0 - maximum: 0.1 - description: Adds noise to input to reduce over-smoothing - example: 0.01 - noise: - type: number - minimum: -1 - maximum: 1 - description: Amount of noise reduction - example: 0.3 - halo: - type: number - minimum: -1 - maximum: 1 - description: Amount of halo reduction - example: 0.4 - preblur: - type: number - minimum: -1 - maximum: 1 - description: Adjust anti-aliasing and deblurring strength - example: 0.5 - blur: - type: number - minimum: -1 - maximum: 1 - description: Amount of sharpness applied - example: 0.6 - grain: - type: number - minimum: 0 - maximum: 0.1 - description: Adds grain after AI model processing - example: 0.02 - grainSize: - type: number - minimum: 0 - maximum: 5 - description: Size of generated grain - example: 1 - recoverOriginalDetailValue: - type: number - minimum: 0 - maximum: 1 - description: Reintroduce source details into the output video - example: 0.7 - creativity: - type: string - enum: - - low - - high - description: Creativity level for Starlight Creative (slc-1) only - isOptimizedMode: - type: boolean - description: Set to true for Starlight Creative (slc-1) only - TopazVideoFrameInterpolationFilter: - type: object - required: - - model - properties: - model: - type: string - description: Short code name for AI model - enum: - - aion-1 - - apf-2 - - apo-8 - - chf-3 - - chr-2 - example: apo-8 - slowmo: - type: number - minimum: 1 - maximum: 16 - description: Slow motion factor applied to input video - example: 2 - fps: - type: number - minimum: 15 - maximum: 240 - description: Output frame rate, does not increase duration - example: 60 - duplicate: - type: boolean - description: Analyze input for duplicate frames and remove them - example: true - duplicateThreshold: - type: number - minimum: 0.001 - maximum: 0.1 - description: Sensitivity of detection for duplicate frames - example: 0.01 - TopazCombinedCreateRequest: - oneOf: - - $ref: '#/components/schemas/TopazCreateRequestVideoSchema' - - $ref: '#/components/schemas/TopazCreateRequestImageSequenceSchema' - TopazCreateRequestVideoSchema: - title: Video AI - type: object - required: - - source - - filters - - output - properties: - source: - type: object - description: Source details for the video - required: - - container - - size - - duration - - frameCount - - frameRate - - resolution - properties: - container: - type: string - enum: - - mp4 - - mov - - mkv - description: The container format of the video file - example: mp4 - size: - type: integer - description: Size of the video file in bytes - example: 123456000 - duration: - type: number - description: Duration of the video file in seconds - example: 600 - frameCount: - type: number - description: Total number of frames in the video - example: 18000 - frameRate: - type: number - description: Frame rate of the video - example: 30 - resolution: - type: object - description: Resolution details of the video - required: - - width - - height - properties: - width: - type: integer - description: Width of the video in pixels - example: 1920 - height: - type: integer - description: Height of the video in pixels - example: 1080 - external: - $ref: '#/components/schemas/TopazExternalStorage' - filters: - $ref: '#/components/schemas/TopazInputFilters' - output: - $ref: '#/components/schemas/TopazOutputInformationVideo' - destination: - type: object - properties: - external: - $ref: '#/components/schemas/TopazExternalStorage' - overrides: - type: object - properties: - isPaidDiffusion: - type: boolean - TopazCreateRequestImageSequenceSchema: - title: Image Sequence - type: object - required: - - source - - filters - - output - - destination - properties: - source: - type: object - description: Source details for the video - required: - - container - - frameCount - - frameRate - - resolution - - external - properties: - container: - type: string - enum: - - DPX - - EXR - - JPEG - - PNG - - TIFF - description: The container format of the image files - example: TIFF - frameCount: - type: number - description: Total number of frames in the video, in this case, equal to the number of image files. - example: 18000 - frameRate: - type: number - description: Frame rate of the video - example: 30 - resolution: - type: object - description: Resolution details of the image - required: - - width - - height - properties: - width: - type: integer - description: Width of the image in pixels - example: 1920 - height: - type: integer - description: Height of the image in pixels - example: 1080 - startNumber: - type: integer - description: Optional starting frame number for image sequences - example: 120 - endNumber: - type: integer - description: Optional ending frame number for image sequences - example: 120 - external: - $ref: '#/components/schemas/TopazExternalStorage' - filters: - $ref: '#/components/schemas/TopazInputFilters' - output: - $ref: '#/components/schemas/TopazOutputInformationImageSequence' - destination: - type: object - properties: - external: - $ref: '#/components/schemas/TopazExternalStorage' - TopazExternalStorage: - type: object - required: - - provider - - credentials - - bucketName - - key - properties: - provider: - type: string - enum: [s3] - example: s3 - credentials: - $ref: '#/components/schemas/TopazCredentialsS3' - bucketName: - type: string - example: galaxies - key: - type: string - description: | - The example includes the standard specifier for image sequence requests, with optional directory path. It must begin with "%" and end with the integer specifier "d". The "0" in the example indicates left-padding with zeroes, and "6" indicates the number of digits in the file name. - Keys for video requests must be valid characters supported by S3. - example: milky_way/%06d.tiff - TopazCredentialsS3: - type: object - required: - - roleArn - - externalId - properties: - roleArn: - type: string - description: AWS ARN of the role to assume - example: arn:aws:iam::123456789:role/topazlabs - externalId: - type: string - description: Kind of like a secret string for extra layer of security - example: MSTnuGztXtTU25XKjVfMJCsujv6VtAGtv1TGSjtOL6M= - TopazInputFilters: - type: array - description: Array of EnhancementFilter or FrameInterpolationFilter objects - items: - anyOf: - - $ref: '#/components/schemas/TopazVideoEnhancementFilter' - - $ref: '#/components/schemas/TopazVideoFrameInterpolationFilter' - example: - - model: prob-4 - videoType: Progressive - auto: Auto - fieldOrder: Auto - focusFixLevel: Normal - compression: 0.1 - details: 0.2 - prenoise: 0.01 - noise: 0.3 - halo: 0.4 - preblur: 0.5 - blur: 0.6 - grain: 0.02 - grainSize: 1 - recoverOriginalDetailValue: 0.7 - - model: apo-8 - slowmo: 2 - fps: 60 - duplicate: true - duplicateThreshold: 0.01 - TopazOutputInformationVideo: - type: object - required: - - resolution - - frameRate - - audioCodec - - audioTransfer - properties: - resolution: - type: object - description: Desired output resolution - required: - - width - - height - properties: - width: - type: integer - description: Width in pixels. The maximum size depends on the encoder and can be referenced using the table below
H264 H265 ProRes AV1 VP9
4096 8192 16386 16384 8192
- example: 7680 - height: - type: integer - description: Height in pixels. The maximum size depends on the encoder and can be referenced using the table below
H264 H265 ProRes AV1 VP9
4096 8192 16386 8704 8192
- example: 4320 - frameRate: - type: number - description: Frame rate - example: 30 - audioBitrate: - type: string - description: Audio bitrate, if audioTransfer is Copy or Convert. Default values for the codec are used if not provided. - example: "320" - audioCodec: - type: string - enum: [AAC, AC3, PCM] - description: __Required if audioTransfer is Copy or Convert.__ - example: AAC - audioTransfer: - type: string - enum: [Copy, Convert, None] - example: Copy - codecId: - type: string - description: Video codec ID, if known. Defaults to videoEncoder. - example: h265-main-win-nvidia - videoEncoder: - type: string - enum: - - AV1 - - FFV1 - - H264 - - H265 - - ProRes - - QuickTime Animation - - QuickTime R210 - - QuickTime V210 - - VP9 - example: H265 - videoBitrate: - type: string - description: __Required if dynamicCompressionLevel is not provided.__ Constant bitrate, suffixed with "k" for kilobits or "m" for megabits per second. - example: "1k" - dynamicCompressionLevel: - type: string - enum: [Low, Mid, High] - description: __Required if videoBitrate is not provided.__ Automatic CQP selection. - example: Mid - videoProfile: - type: string - description: Codec profile specific to videoEncoder. The following are some combinations of available profiles based on the 'videoEncoder' selection
H264 H265 ProRes AV1 VP9
High Main, Main10 422 Proxy, 422 LT, 422 Std, 422 HQ 8-bit, 10-bit Good, Best
- example: Main - cropToFit: - type: boolean - description: Center cropping to fit the output dimensions - example: true - container: - type: string - enum: - - mp4 - - mov - - mkv - description: Desired output container - example: mp4 - TopazOutputInformationImageSequence: - type: object - required: - - resolution - - frameRate - properties: - resolution: - type: object - description: Desired output resolution - required: - - width - - height - properties: - width: - type: integer - description: Width in pixels. The maximum size depends on the encoder and can be referenced using the table below
H264 H265 ProRes AV1 VP9
4096 8192 16386 16384 8192
- example: 7680 - height: - type: integer - description: Height in pixels. The maximum size depends on the encoder and can be referenced using the table below
H264 H265 ProRes AV1 VP9
4096 8192 16386 8704 8192
- example: 4320 - frameRate: - type: number - description: Frame rate - example: 30 - codecId: - type: string - description: Video codec ID, if known. Defaults to videoEncoder. - example: h265-main-win-nvidia - videoEncoder: - type: string - enum: - - DPX - - EXR - - JPEG - - PNG - - TIFF - example: TIFF - videoProfile: - type: string - description: Codec profile specific to videoEncoder - example: Main - cropToFit: - type: boolean - description: Center cropping to fit the output dimensions - example: true - container: - type: string - enum: - - DPX - - EXR - - JPEG - - PNG - - TIFF - description: Desired output container, defaults to the input container - example: TIFF - TopazVideoCreateRequest: - $ref: '#/components/schemas/TopazCombinedCreateRequest' - TopazVideoRequestEstimates: - type: object - description: Lower and upper bound estimates - properties: - cost: - type: array - description: Cost range in credits - items: - type: integer - example: [10, 12] - time: - type: array - description: Time range in seconds - items: - type: integer - example: [600, 700] - TopazVideoCreateResponse: - type: object - properties: - requestId: - type: string - format: uuid - description: Unique identifier for the video processing request - example: "c1f96dc2-c448-00e6-82ed-14ecb6403c62" - estimates: - $ref: "#/components/schemas/TopazVideoRequestEstimates" - required: - - requestId - - estimates - TopazVideoAcceptResponse: - type: object - properties: - uploadId: - type: string - description: Upload ID for completing multi-part upload - example: "GDlWC7qIaE6okS41Xf/ktpuS5XzTRabg" - urls: - type: array - items: - type: string - description: URLs to PUT the parts to - example: - - "https://videocloud.s3.amazonaws.com/source.mp4?uploadPart1" - - "https://videocloud.s3.amazonaws.com/source.mp4?uploadPart2" - message: - type: string - description: Response message - example: "Accepted" - required: - - uploadId - - urls - TopazVideoCompleteUploadRequest: - type: object - required: - - uploadResults - properties: - md5Hash: - type: string - description: MD5 hash of the source video file in hex - example: 4d186321c1a7f0f354b297e8914ab240 - uploadResults: - type: array - description: An array of part number and ETag pairs of the uploaded parts. ETags are returned by S3 upon upload of the part. - items: - type: object - required: - - partNum - - eTag - properties: - partNum: - type: integer - description: Part number of the uploaded part, starting from 1 - example: 1 - eTag: - type: string - description: eTag value returned by S3 upon upload of the part - example: "d41d8cd98f00b204e9800998ecf8427e" - TopazVideoCompleteUploadResponse: - type: object - properties: - message: - type: string - description: Confirmation message - example: "Processing has been queued" - required: - - message - TopazVideoEnhancedDownload: - type: object - description: Signed download URL to the enhanced video file - properties: - url: - type: string - example: "https://videocloud.r2.cloudflarestorage.com/enhanced.mp4" - expiresIn: - type: integer - description: TTL in milliseconds - example: 86400000 - expiresAt: - type: integer - description: Time in milliseconds since UTC epoch - example: 1727213400000 - TopazVideoStatusResponse: - type: object - properties: - status: - type: string - enum: - - requested - - accepted - - initializing - - preprocessing - - processing - - postprocessing - - complete - - canceling - - canceled - - failed - description: Current status of the video processing - example: "processing" - progress: - type: number - minimum: 0 - maximum: 100 - description: Total progress percentage - example: 82 - estimates: - $ref: "#/components/schemas/TopazVideoRequestEstimates" - outputSize: - type: string - description: Size of output video - example: "10 GB" - averageFps: - type: number - description: Average processing speed of each node - example: 1.23 - combinedFps: - type: number - description: Combined processing speed of all nodes - example: 12.34 - message: - type: string - example: "Processing" - download: - $ref: "#/components/schemas/TopazVideoEnhancedDownload" - required: - - status - - # Meshy API Schemas - MeshyTextTo3DRequest: - oneOf: - - $ref: "#/components/schemas/MeshyTextTo3DPreviewRequest" - - $ref: "#/components/schemas/MeshyTextTo3DRefineRequest" - discriminator: - propertyName: mode - mapping: - preview: "#/components/schemas/MeshyTextTo3DPreviewRequest" - refine: "#/components/schemas/MeshyTextTo3DRefineRequest" - - MeshyTextTo3DPreviewRequest: - type: object - required: - - mode - - prompt - properties: - mode: - type: string - description: This field should be set to "preview" when creating a preview task. - enum: - - preview - prompt: - type: string - description: Describe what kind of object the 3D model is. Maximum 600 characters. - maxLength: 600 - art_style: - $ref: "#/components/schemas/MeshyArtStyle" - ai_model: - $ref: "#/components/schemas/MeshyAiModel" - topology: - $ref: "#/components/schemas/MeshyTopology" - target_polycount: - type: integer - description: Specify the target number of polygons in the generated model. Valid range is 100 to 300,000. - minimum: 100 - maximum: 300000 - default: 30000 - should_remesh: - type: boolean - description: Controls whether to enable the remesh phase. When false, returns highest-precision triangular mesh. - default: true - symmetry_mode: - $ref: "#/components/schemas/MeshySymmetryMode" - pose_mode: - $ref: "#/components/schemas/MeshyPoseMode" - is_a_t_pose: - type: boolean - description: Deprecated. Use pose_mode instead. Whether to generate the model in an A/T pose. - default: false - moderation: - type: boolean - description: When true, input content will be screened for potentially harmful content. - default: false - - MeshyTextTo3DRefineRequest: - type: object - required: - - mode - - preview_task_id - properties: - mode: - type: string - description: This field should be set to "refine" when creating a refine task. - enum: - - refine - preview_task_id: - type: string - description: The corresponding preview task id. The status of the given preview task must be SUCCEEDED. - enable_pbr: - type: boolean - description: Generate PBR Maps (metallic, roughness, normal) in addition to the base color. Note that enable_pbr should be set to false when using Sculpture style. - default: false - texture_prompt: - type: string - description: Provide an additional text prompt to guide the texturing process. Maximum 600 characters. - maxLength: 600 - texture_image_url: - type: string - description: Provide a 2d image to guide the texturing process. Supports .jpg, .jpeg, .png formats or base64-encoded data URI. - ai_model: - $ref: "#/components/schemas/MeshyAiModel" - moderation: - type: boolean - description: When true, input content will be screened for potentially harmful content. - default: false - - MeshyArtStyle: - type: string - description: Describe your desired art style of the object. - enum: - - realistic - - sculpture - default: realistic - - MeshyAiModel: - type: string - description: ID of the model to use. - enum: - - meshy-5 - - latest - default: latest - - MeshyTopology: - type: string - description: Specify the topology of the generated model. - enum: - - quad - - triangle - default: triangle - - MeshySymmetryMode: - type: string - description: Controls symmetry behavior during model generation. - enum: - - "off" - - auto - - "on" - default: auto - - MeshyPoseMode: - type: string - description: Specify the pose mode for the generated model. - enum: - - a-pose - - t-pose - - "" - - MeshyTextTo3DCreateResponse: - type: object - properties: - result: - type: string - description: The task id of the newly created Text to 3D task. - required: - - result - - MeshyTextTo3DTask: - type: object - properties: - id: - type: string - description: Unique identifier for the task. - type: - type: string - description: Type of the Text to 3D task. - enum: - - text-to-3d-preview - - text-to-3d-refine - model_urls: - $ref: "#/components/schemas/MeshyModelUrls" - prompt: - type: string - description: The unmodified prompt that was used to create the task. - negative_prompt: - type: string - description: Deprecated field maintained for backward compatibility. - art_style: - type: string - description: The unmodified art_style that was used to create the preview task. - texture_richness: - type: string - description: Deprecated field maintained for backward compatibility. - texture_prompt: - type: string - description: Additional text prompt provided to guide the texturing process during the refine stage. - texture_image_url: - type: string - description: Downloadable URL to the texture image that was used to guide the texturing process. - thumbnail_url: - type: string - description: Downloadable URL to the thumbnail image of the model file. - video_url: - type: string - description: Deprecated field returning the downloadable URL to the preview video. - progress: - type: integer - description: Progress of the task. 0 if not started, 100 when succeeded. - minimum: 0 - maximum: 100 - started_at: - type: integer - description: Timestamp of when the task was started, in milliseconds. 0 if not started. - created_at: - type: integer - description: Timestamp of when the task was created, in milliseconds. - finished_at: - type: integer - description: Timestamp of when the task was finished, in milliseconds. 0 if not finished. - status: - $ref: "#/components/schemas/MeshyTaskStatus" - texture_urls: - type: array - items: - $ref: "#/components/schemas/MeshyTextureUrls" - description: An array of texture URL objects that are generated from the task. - preceding_tasks: - type: integer - description: The count of preceding tasks. Only meaningful when status is PENDING. - task_error: - $ref: "#/components/schemas/MeshyTaskError" - required: - - id - - status - - MeshyModelUrls: - type: object - description: Downloadable URLs to the textured 3D model files generated by Meshy. - properties: - glb: - type: string - description: Downloadable URL to the GLB file. - fbx: - type: string - description: Downloadable URL to the FBX file. - usdz: - type: string - description: Downloadable URL to the USDZ file. - obj: - type: string - description: Downloadable URL to the OBJ file. - mtl: - type: string - description: Downloadable URL to the MTL file. - - MeshyTaskStatus: - type: string - description: Status of the task. - enum: - - PENDING - - IN_PROGRESS - - SUCCEEDED - - FAILED - - CANCELED - - MeshyTextureUrls: - type: object - description: Texture URL object containing PBR maps. - properties: - base_color: - type: string - description: Downloadable URL to the base color map image. - metallic: - type: string - description: Downloadable URL to the metallic map image. - normal: - type: string - description: Downloadable URL to the normal map image. - roughness: - type: string - description: Downloadable URL to the roughness map image. - - MeshyTaskError: - type: object - description: Error object that contains the error message if the task failed. - properties: - message: - type: string - description: Detailed error message. - - # Meshy Image to 3D Schemas - MeshyImageTo3DRequest: - type: object - required: - - image_url - properties: - image_url: - type: string - description: Provide an image for Meshy to use in model creation. Supports .jpg, .jpeg, .png formats or base64-encoded data URI. - model_type: - type: string - description: | - Specify the type of 3D mesh generation. - - standard: Regular high-detail 3D mesh generation. - - lowpoly: Generates low-poly mesh optimized for cleaner polygons. - When lowpoly is selected, ai_model, topology, target_polycount, should_remesh, save_pre_remeshed_model are ignored. - enum: - - standard - - lowpoly - default: standard - ai_model: - $ref: "#/components/schemas/MeshyAiModel" - topology: - $ref: "#/components/schemas/MeshyTopology" - target_polycount: - type: integer - description: Specify the target number of polygons in the generated model. Valid range is 100 to 300,000. - minimum: 100 - maximum: 300000 - default: 30000 - symmetry_mode: - $ref: "#/components/schemas/MeshySymmetryMode" - should_remesh: - type: boolean - description: Controls whether to enable the remesh phase. When false, returns highest-precision triangular mesh. - default: true - save_pre_remeshed_model: - type: boolean - description: When true, stores an extra GLB file before the remesh phase completes. Only takes effect when should_remesh is true. - default: false - should_texture: - type: boolean - description: Determines if textures are generated. When false, provides a mesh without textures. - default: true - enable_pbr: - type: boolean - description: Generate PBR Maps (metallic, roughness, normal) in addition to the base color. - default: false - pose_mode: - $ref: "#/components/schemas/MeshyPoseMode" - is_a_t_pose: - type: boolean - description: Deprecated. Use pose_mode instead. Whether to generate the model in an A/T pose. - default: false - texture_prompt: - type: string - description: Provide a text prompt to guide the texturing process. Maximum 600 characters. - maxLength: 600 - texture_image_url: - type: string - description: Provide a 2d image to guide the texturing process. Supports .jpg, .jpeg, .png formats or base64-encoded data URI. - moderation: - type: boolean - description: When true, input content will be screened for potentially harmful content. - default: false - - MeshyImageTo3DCreateResponse: - type: object - properties: - result: - type: string - description: The task id of the newly created Image to 3D task. - required: - - result - - MeshyImageTo3DTask: - type: object - properties: - id: - type: string - description: Unique identifier for the task. - type: - type: string - description: Type of the Image to 3D task. - enum: - - image-to-3d - model_urls: - $ref: "#/components/schemas/MeshyImageTo3DModelUrls" - thumbnail_url: - type: string - description: Downloadable URL to the thumbnail image of the model file. - texture_prompt: - type: string - description: The text prompt that was used to guide the texturing process. - texture_image_url: - type: string - description: Downloadable URL to the texture image that was used to guide the texturing process. - progress: - type: integer - description: Progress of the task. 0 if not started, 100 when succeeded. - minimum: 0 - maximum: 100 - started_at: - type: integer - description: Timestamp of when the task was started, in milliseconds. 0 if not started. - created_at: - type: integer - description: Timestamp of when the task was created, in milliseconds. - expires_at: - type: integer - description: Timestamp of when the task result expires, in milliseconds. - finished_at: - type: integer - description: Timestamp of when the task was finished, in milliseconds. 0 if not finished. - status: - $ref: "#/components/schemas/MeshyTaskStatus" - texture_urls: - type: array - items: - $ref: "#/components/schemas/MeshyTextureUrls" - description: An array of texture URL objects that are generated from the task. - preceding_tasks: - type: integer - description: The count of preceding tasks. Only meaningful when status is PENDING. - task_error: - $ref: "#/components/schemas/MeshyTaskError" - required: - - id - - status - - MeshyImageTo3DModelUrls: - type: object - description: Downloadable URLs to the 3D model files generated by Meshy. - properties: - glb: - type: string - description: Downloadable URL to the GLB file. - fbx: - type: string - description: Downloadable URL to the FBX file. - obj: - type: string - description: Downloadable URL to the OBJ file. - usdz: - type: string - description: Downloadable URL to the USDZ file. - mtl: - type: string - description: Downloadable URL to the MTL file. - pre_remeshed_glb: - type: string - description: Downloadable URL to the original GLB output before remeshing. Available only when should_remesh and save_pre_remeshed_model are both true. - - # Meshy Multi-Image to 3D Schemas - MeshyMultiImageTo3DRequest: - type: object - required: - - image_urls - properties: - image_urls: - type: array - items: - type: string - minItems: 1 - maxItems: 4 - description: Provide 1 to 4 images for Meshy to use in model creation. All images should depict the same object from different angles. - ai_model: - type: string - description: ID of the model to use. - enum: - - meshy-5 - - latest - default: latest - topology: - $ref: "#/components/schemas/MeshyTopology" - target_polycount: - type: integer - description: Specify the target number of polygons in the generated model. Valid range is 100 to 300,000. - minimum: 100 - maximum: 300000 - default: 30000 - symmetry_mode: - $ref: "#/components/schemas/MeshySymmetryMode" - should_remesh: - type: boolean - description: Controls whether to enable the remesh phase. When false, returns highest-precision triangular mesh. - default: true - save_pre_remeshed_model: - type: boolean - description: When true, stores an extra GLB file before the remesh phase completes. Only takes effect when should_remesh is true. - default: false - should_texture: - type: boolean - description: Determines if textures are generated. When false, provides a mesh without textures for 5 credits. - default: true - enable_pbr: - type: boolean - description: Generate PBR Maps (metallic, roughness, normal) in addition to the base color. - default: false - pose_mode: - $ref: "#/components/schemas/MeshyPoseMode" - is_a_t_pose: - type: boolean - description: Deprecated. Use pose_mode instead. Whether to generate the model in an A/T pose. - default: false - texture_prompt: - type: string - description: Provide a text prompt to guide the texturing process. Maximum 600 characters. - maxLength: 600 - texture_image_url: - type: string - description: Provide a 2d image to guide the texturing process. Supports .jpg, .jpeg, .png formats or base64-encoded data URI. - moderation: - type: boolean - description: When true, input content will be screened for potentially harmful content. - default: false - - MeshyMultiImageTo3DCreateResponse: - type: object - properties: - result: - type: string - description: The task id of the newly created Multi-Image to 3D task. - required: - - result - - MeshyMultiImageTo3DTask: - type: object - properties: - id: - type: string - description: Unique identifier for the task. - type: - type: string - description: Type of the Multi-Image to 3D task. - enum: - - multi-image-to-3d - model_urls: - $ref: "#/components/schemas/MeshyImageTo3DModelUrls" - thumbnail_url: - type: string - description: Downloadable URL to the thumbnail image of the model file. - texture_prompt: - type: string - description: The text prompt that was used to guide the texturing process. - progress: - type: integer - description: Progress of the task. 0 if not started, 100 when succeeded. - minimum: 0 - maximum: 100 - started_at: - type: integer - description: Timestamp of when the task was started, in milliseconds. 0 if not started. - created_at: - type: integer - description: Timestamp of when the task was created, in milliseconds. - expires_at: - type: integer - description: Timestamp of when the task result expires, in milliseconds. - finished_at: - type: integer - description: Timestamp of when the task was finished, in milliseconds. 0 if not finished. - status: - $ref: "#/components/schemas/MeshyTaskStatus" - texture_urls: - type: array - items: - $ref: "#/components/schemas/MeshyTextureUrls" - description: An array of texture URL objects that are generated from the task. - preceding_tasks: - type: integer - description: The count of preceding tasks. Only meaningful when status is PENDING. - task_error: - $ref: "#/components/schemas/MeshyTaskError" - required: - - id - - status - - # Meshy Remesh Schemas - MeshyRemeshRequest: - type: object - properties: - input_task_id: - type: string - description: The ID of the completed Image to 3D or Text to 3D task you wish to remesh. Required if model_url is not provided. - model_url: - type: string - description: A publicly accessible URL or data URI to a 3D model. Supported formats glb, gltf, obj, fbx, stl. Required if input_task_id is not provided. - target_formats: - type: array - items: - type: string - enum: - - glb - - fbx - - obj - - usdz - - blend - - stl - description: A list of target formats for the remeshed model. - default: - - glb - topology: - $ref: "#/components/schemas/MeshyTopology" - target_polycount: - type: integer - description: Specify the target number of polygons in the generated model. Valid range is 100 to 300,000. - minimum: 100 - maximum: 300000 - default: 30000 - resize_height: - type: number - description: Resize the model to a certain height measured in meters. 0 means no resizing. - default: 0 - origin_at: - type: string - description: Position of the origin. - enum: - - bottom - - center - - "" - convert_format_only: - type: boolean - description: If true, only changes the format of the input model file, ignoring other inputs like topology, resize_height, and target_polycount. - default: false - - MeshyRemeshCreateResponse: - type: object - properties: - result: - type: string - description: The id of the newly created remesh task. - required: - - result - - MeshyRemeshTask: - type: object - properties: - id: - type: string - description: Unique identifier for the task. - type: - type: string - description: Type of the Remesh task. - enum: - - remesh - model_urls: - $ref: "#/components/schemas/MeshyRemeshModelUrls" - progress: - type: integer - description: Progress of the task. 0 if not started, 100 when succeeded. - minimum: 0 - maximum: 100 - status: - $ref: "#/components/schemas/MeshyRemeshTaskStatus" - preceding_tasks: - type: integer - description: The count of preceding tasks. Only meaningful when status is PENDING. - created_at: - type: integer - description: Timestamp of when the task was created, in milliseconds. - started_at: - type: integer - description: Timestamp of when the task was started, in milliseconds. 0 if not started. - finished_at: - type: integer - description: Timestamp of when the task was finished, in milliseconds. 0 if not finished. - task_error: - $ref: "#/components/schemas/MeshyTaskError" - required: - - id - - status - - MeshyRemeshModelUrls: - type: object - description: Downloadable URLs to the remeshed 3D model files. - properties: - glb: - type: string - description: Downloadable URL to the GLB file. - fbx: - type: string - description: Downloadable URL to the FBX file. - obj: - type: string - description: Downloadable URL to the OBJ file. - usdz: - type: string - description: Downloadable URL to the USDZ file. - blend: - type: string - description: Downloadable URL to the Blender file. - stl: - type: string - description: Downloadable URL to the STL file. - - MeshyRemeshTaskStatus: - type: string - description: Status of the remesh task. - enum: - - PENDING - - PROCESSING - - SUCCEEDED - - FAILED - - # Meshy Rigging Schemas - MeshyRiggingRequest: - type: object - properties: - input_task_id: - type: string - description: The input task that needs to be rigged. Required if model_url is not provided. - model_url: - type: string - description: A publicly accessible URL or Data URI to a textured humanoid GLB file. Required if input_task_id is not provided. - height_meters: - type: number - description: The approximate height of the character model in meters. Must be a positive number. - default: 1.7 - texture_image_url: - type: string - description: The model's UV-unwrapped base color texture image. Publicly accessible URL or Data URI. Supports .png format. - - MeshyRiggingCreateResponse: - type: object - properties: - result: - type: string - description: The task id of the newly created rigging task. - required: - - result - - MeshyRiggingTask: - type: object - properties: - id: - type: string - description: Unique identifier for the task. - type: - type: string - description: Type of the Rigging task. - enum: - - rig - status: - $ref: "#/components/schemas/MeshyTaskStatus" - progress: - type: integer - description: Progress of the task (0-100). 0 if not started, 100 if succeeded. - minimum: 0 - maximum: 100 - created_at: - type: integer - description: Timestamp of when the task was created, in milliseconds. - started_at: - type: integer - description: Timestamp of when the task was started, in milliseconds. 0 if not started. - finished_at: - type: integer - description: Timestamp of when the task was finished, in milliseconds. 0 if not finished. - expires_at: - type: integer - description: Timestamp of when the task result expires, in milliseconds. - task_error: - $ref: "#/components/schemas/MeshyTaskError" - result: - $ref: "#/components/schemas/MeshyRiggingResult" - preceding_tasks: - type: integer - description: The count of preceding tasks. Only meaningful when status is PENDING. - required: - - id - - status - - MeshyRiggingResult: - type: object - description: Contains the output asset URLs if the task SUCCEEDED. - properties: - rigged_character_fbx_url: - type: string - description: Downloadable URL for the rigged character in FBX format. - rigged_character_glb_url: - type: string - description: Downloadable URL for the rigged character in GLB format. - basic_animations: - $ref: "#/components/schemas/MeshyRiggingBasicAnimations" - - MeshyRiggingBasicAnimations: - type: object - description: Contains URLs for default animations. - properties: - walking_glb_url: - type: string - description: Downloadable URL for walking animation in GLB format (with skin). - walking_fbx_url: - type: string - description: Downloadable URL for walking animation in FBX format (with skin). - walking_armature_glb_url: - type: string - description: Downloadable URL for walking animation armature in GLB format. - running_glb_url: - type: string - description: Downloadable URL for running animation in GLB format (with skin). - running_fbx_url: - type: string - description: Downloadable URL for running animation in FBX format (with skin). - running_armature_glb_url: - type: string - description: Downloadable URL for running animation armature in GLB format. - - # Meshy Retexture Schemas - MeshyRetextureRequest: - type: object - properties: - input_task_id: - type: string - description: The ID of the completed Image to 3D or Text to 3D task you wish to retexture. Required if model_url is not provided. - model_url: - type: string - description: A publicly accessible URL or Data URI to a 3D model. Supported formats glb, gltf, obj, fbx, stl. Required if input_task_id is not provided. - text_style_prompt: - type: string - description: Describe your desired texture style of the object using text. Maximum 600 characters. Required if image_style_url is not provided. - maxLength: 600 - image_style_url: - type: string - description: A 2d image to guide the texturing process. Supports jpg, jpeg, png formats or base64-encoded data URI. Required if text_style_prompt is not provided. - ai_model: - $ref: "#/components/schemas/MeshyAiModel" - enable_original_uv: - type: boolean - description: Use the original UV of the model instead of generating new UVs. - default: true - enable_pbr: - type: boolean - description: Generate PBR Maps (metallic, roughness, normal) in addition to the base color. - default: false - - MeshyRetextureCreateResponse: - type: object - properties: - result: - type: string - description: The task id of the newly created Retexture task. - required: - - result - - MeshyRetextureTask: - type: object - properties: - id: - type: string - description: Unique identifier for the task. - type: - type: string - description: Type of the Retexture task. - enum: - - retexture - model_urls: - $ref: "#/components/schemas/MeshyRetextureModelUrls" - text_style_prompt: - type: string - description: The text prompt that was used to create the texturing task. - image_style_url: - type: string - description: The image input that was used to create the texturing task. - thumbnail_url: - type: string - description: Downloadable URL to the thumbnail image of the model file. - progress: - type: integer - description: Progress of the task. 0 if not started, 100 when succeeded. - minimum: 0 - maximum: 100 - started_at: - type: integer - description: Timestamp of when the task was started, in milliseconds. 0 if not started. - created_at: - type: integer - description: Timestamp of when the task was created, in milliseconds. - expires_at: - type: integer - description: Timestamp of when the task result expires, in milliseconds. - finished_at: - type: integer - description: Timestamp of when the task was finished, in milliseconds. 0 if not finished. - status: - $ref: "#/components/schemas/MeshyTaskStatus" - texture_urls: - type: array - items: - $ref: "#/components/schemas/MeshyTextureUrls" - description: An array of texture URL objects that are generated from the task. - preceding_tasks: - type: integer - description: The count of preceding tasks. Only meaningful when status is PENDING. - task_error: - $ref: "#/components/schemas/MeshyTaskError" - required: - - id - - status - - MeshyRetextureModelUrls: - type: object - description: Downloadable URLs to the textured 3D model files. - properties: - glb: - type: string - description: Downloadable URL to the GLB file. - fbx: - type: string - description: Downloadable URL to the FBX file. - usdz: - type: string - description: Downloadable URL to the USDZ file. - - # Meshy Animation Schemas - MeshyAnimationRequest: - type: object - required: - - rig_task_id - - action_id - properties: - rig_task_id: - type: string - description: The id of a successfully completed rigging task (from POST /openapi/v1/rigging). The character from this task will be animated. - action_id: - type: integer - description: The identifier of the animation action to apply. - post_process: - $ref: "#/components/schemas/MeshyAnimationPostProcess" - - MeshyAnimationPostProcess: - type: object - description: Parameters for post-processing animation files. - required: - - operation_type - properties: - operation_type: - type: string - description: The type of operation to perform. - enum: - - change_fps - - fbx2usdz - - extract_armature - fps: - type: integer - description: The target frame rate. Default is 30. Applicable only when operation_type is change_fps. - enum: - - 24 - - 25 - - 30 - - 60 - default: 30 - - MeshyAnimationCreateResponse: - type: object - properties: - result: - type: string - description: The task id of the newly created animation task. - required: - - result - - MeshyAnimationTask: - type: object - properties: - id: - type: string - description: Unique identifier for the task. - type: - type: string - description: Type of the Animation task. - enum: - - animate - status: - $ref: "#/components/schemas/MeshyTaskStatus" - progress: - type: integer - description: Progress of the task (0-100). - minimum: 0 - maximum: 100 - created_at: - type: integer - description: Timestamp of when the task was created, in milliseconds. - started_at: - type: integer - description: Timestamp of when the task was started, in milliseconds. 0 if not started. - finished_at: - type: integer - description: Timestamp of when the task was finished, in milliseconds. 0 if not finished. - expires_at: - type: integer - description: Timestamp of when the task result expires, in milliseconds. - task_error: - $ref: "#/components/schemas/MeshyTaskError" - result: - $ref: "#/components/schemas/MeshyAnimationResult" - preceding_tasks: - type: integer - description: The count of preceding tasks. Only meaningful when status is PENDING. - required: - - id - - status - - MeshyAnimationResult: - type: object - description: Contains the output animation URLs if the task SUCCEEDED. - properties: - animation_glb_url: - type: string - description: Downloadable URL for the animation in GLB format. - animation_fbx_url: - type: string - description: Downloadable URL for the animation in FBX format. - processed_usdz_url: - type: string - description: Downloadable URL for the processed animation in USDZ format. - processed_armature_fbx_url: - type: string - description: Downloadable URL for the processed armature in FBX format. - processed_animation_fps_fbx_url: - type: string - description: Downloadable URL for the animation with changed FPS in FBX format. - - XAIImageGenerationRequest: - type: object - description: Request body for xAI Grok Imagine image generation - required: - - prompt - properties: - model: - type: string - description: Model to be used - default: grok-imagine-image - n: - type: integer - description: Number of images to be generated - minimum: 1 - maximum: 10 - default: 1 - prompt: - type: string - description: Prompt for image generation - response_format: - type: string - description: Response format to return the image in. Can be url or b64_json. - enum: - - url - - b64_json - default: url - aspect_ratio: - type: string - description: Aspect ratio of the generated image. Defaults to auto for automatically selecting the best ratio for the prompt. - enum: - - "1:1" - - "3:4" - - "4:3" - - "9:16" - - "16:9" - - "2:3" - - "3:2" - - "9:19.5" - - "19.5:9" - - "9:20" - - "20:9" - - "1:2" - - "2:1" - - "auto" - default: "auto" - resolution: - type: string - description: Resolution of the generated image. Defaults to 1k. - enum: - - 1k - - 2k - default: 1k - quality: - type: string - description: Quality of the output image. Currently a no-op, reserved for future use. - enum: - - low - - medium - - high - size: - type: string - description: Size of the image (not supported) - style: - type: string - description: Style of the image (not supported) - user: - type: string - description: A unique identifier representing your end-user, which can help xAI to monitor and detect abuse - - XAIImageEditRequest: - type: object - description: Request body for xAI Grok Imagine image editing - required: - - prompt - properties: - prompt: - type: string - description: Prompt for image editing - image: - $ref: "#/components/schemas/XAIImageObject" - images: - type: array - description: List of input images for multi-reference editing. Mutually exclusive with image. When multiple images are provided, refer to them as , , etc. in the prompt. - items: - $ref: "#/components/schemas/XAIImageObject" - mask: - $ref: "#/components/schemas/XAIImageObject" - model: - type: string - description: Model to be used - default: grok-imagine-image - n: - type: integer - description: Number of image edits to be generated - response_format: - type: string - description: Response format to return the image in. Can be url or b64_json. - enum: - - url - - b64_json - default: url - resolution: - type: string - description: Resolution of the generated image. Defaults to 1k. - enum: - - 1k - - 2k - default: 1k - aspect_ratio: - type: string - description: Aspect ratio of the output image for image editing with multiple images. For single image editing, do not set this. - enum: - - "1:1" - - "3:4" - - "4:3" - - "9:16" - - "16:9" - - "2:3" - - "3:2" - - "9:19.5" - - "19.5:9" - - "9:20" - - "20:9" - - "1:2" - - "2:1" - - "auto" - quality: - type: string - description: Quality of the output image. Currently a no-op, reserved for future use. - enum: - - low - - medium - - high - size: - type: string - description: Size of the image (not supported) - style: - type: string - description: Style of the image (not supported) - user: - type: string - description: A unique identifier representing your end-user, which can help xAI to monitor and detect abuse - - XAIImageObject: - type: object - description: Input image object for xAI endpoints - required: - - url - properties: - url: - type: string - description: URL of the input image (public URL or base64-encoded data URI) - type: - type: string - description: Type of the image input - enum: - - image_url - - XAIImageGenerationResponse: - type: object - description: Response from xAI image generation or editing - properties: - data: - type: array - description: A list of generated image objects - items: - $ref: "#/components/schemas/XAIGeneratedImage" - block_reason: - type: string - description: If the request was blocked by input moderation, contains the block reason - usage: - $ref: "#/components/schemas/XAIImageUsage" - - XAIGeneratedImage: - type: object - description: A generated image from xAI - properties: - url: - type: string - description: A url to the generated image (if response_format is url) - b64_json: - type: string - description: A base64-encoded string representation of the generated image in jpeg encoding (if response_format is b64_json) - mime_type: - type: string - description: The MIME type of the generated image (e.g. image/png, image/jpeg, image/webp). - XAIImageUsage: - type: object - description: Usage information for the image generation request - properties: - cost_in_usd_ticks: - type: integer - description: Accurate cost of this request in USD ticks (10,000,000,000 ticks = 1 USD) - - XAIVideoGenerationRequest: - type: object - description: Request body for xAI Grok Imagine video generation - required: - - prompt - properties: - prompt: - type: string - description: Prompt for video generation - model: - type: string - description: Model to be used - image: - $ref: "#/components/schemas/XAIImageObject" - duration: - type: integer - nullable: true - description: Video duration in seconds. Range [1, 15]. Default 8. - minimum: 1 - maximum: 15 - default: 8 - aspect_ratio: - type: string - description: Aspect ratio of the generated video - enum: - - "1:1" - - "16:9" - - "9:16" - - "4:3" - - "3:4" - - "3:2" - - "2:3" - default: "16:9" - resolution: - type: string - nullable: true - description: Resolution of the output video - size: - type: string - nullable: true - description: Size of the output video - output: - type: object - nullable: true - description: Optional output destination for generated video - user: - type: string - nullable: true - description: A unique identifier representing your end-user - - XAIVideoObject: - type: object - description: Input video object for xAI endpoints - required: - - url - properties: - url: - type: string - description: URL of the video (public URL or base64-encoded data URL). The video must have the .mp4 file extension and be encoded with .mp4 supported codecs such as H.265, H.264, AV1, etc. - - XAIVideoEditRequest: - type: object - description: Request body for xAI Grok Imagine video editing - required: - - prompt - - video - properties: - prompt: - type: string - description: Prompt for video editing - video: - $ref: "#/components/schemas/XAIVideoObject" - model: - type: string - nullable: true - description: Model to be used - output: - type: object - nullable: true - description: Optional output destination for generated video - user: - type: string - nullable: true - description: A unique identifier representing your end-user - - XAIVideoAsyncResponse: - type: object - description: Response from xAI video generation or editing (async operation) - properties: - request_id: - type: string - description: Unique identifier to poll for the completed video - - XAIVideoResultResponse: - type: object - description: Response from getting video generation result - properties: - status: - type: string - description: 'Status of the deferred request: "pending" or "done"' - enum: - - pending - - done - block_reason: - type: string - nullable: true - description: If the request was blocked by input moderation, contains the block reason - model: - type: string - description: The model used to generate the video - usage: - $ref: "#/components/schemas/XAIVideoUsage" - video: - $ref: "#/components/schemas/XAIGeneratedVideo" - - XAIVideoUsage: - type: object - description: Usage information for the video generation request - properties: - cost_in_usd_ticks: - type: integer - description: > - The cost of this request expressed in USD ticks. - One USD cent equals 100,000,000 ticks, so one US dollar equals 10,000,000,000 ticks. - - XAIGeneratedVideo: - type: object - description: A generated video from xAI - properties: - duration: - type: integer - description: Duration of the generated video in seconds - respect_moderation: - type: boolean - description: Whether the video generated by the model respects moderation rules - url: - type: string - nullable: true - description: A url to the generated video - RevePostprocessingOperation: - type: object - description: A postprocessing operation to apply after image generation. - required: - - process - properties: - process: - type: string - description: "The postprocessing operation: upscale, remove_background, fit_image, or effect." - enum: - - upscale - - remove_background - - fit_image - - effect - upscale_factor: - type: integer - description: Upscale factor (2, 3, or 4). Only used when process is upscale. - minimum: 2 - maximum: 4 - max_dim: - type: integer - description: Maximum dimension for fit_image. At least one of max_dim, max_width, or max_height must be set. - maximum: 1024 - max_width: - type: integer - description: Maximum width for fit_image. - maximum: 1024 - max_height: - type: integer - description: Maximum height for fit_image. - maximum: 1024 - effect_name: - type: string - description: Name of the effect to apply. Only used when process is effect. - effect_parameters: - type: object - description: Optional parameters to override default effect settings. - ReveImageCreateRequest: - type: object - description: Request body for Reve image creation. - required: - - prompt - properties: - prompt: - type: string - description: The text description of the desired image. Maximum length is 2560 characters. - maxLength: 2560 - aspect_ratio: - type: string - description: "The desired aspect ratio of the generated image." - enum: - - "16:9" - - "9:16" - - "3:2" - - "2:3" - - "4:3" - - "3:4" - - "1:1" - default: "3:2" - version: - type: string - description: "Model version to use. Supported: latest, reve-create@20250915." - default: "latest" - postprocessing: - type: array - description: Optional postprocessing operations to apply after generation. May add additional cost. - items: - $ref: "#/components/schemas/RevePostprocessingOperation" - test_time_scaling: - type: number - description: If included, the model will spend more effort making better images. Values between 1 and 15 are accepted. Adds additional credits cost. - minimum: 1 - maximum: 15 - ReveImageEditRequest: - type: object - description: Request body for Reve image editing. - required: - - edit_instruction - - reference_image - properties: - edit_instruction: - type: string - description: The text description of how to edit the provided image. Maximum length is 2560 characters. - maxLength: 2560 - reference_image: - type: string - description: A base64 encoded image to use as reference for the edit. - aspect_ratio: - type: string - description: "The desired aspect ratio. Defaults to the aspect ratio of the reference image if not provided." - enum: - - "16:9" - - "9:16" - - "3:2" - - "2:3" - - "4:3" - - "3:4" - - "1:1" - version: - type: string - description: "Model version to use. Supported: latest-fast, latest, reve-edit-fast@20251030, reve-edit@20250915." - default: "latest" - postprocessing: - type: array - description: Optional postprocessing operations to apply after generation. May add additional cost. - items: - $ref: "#/components/schemas/RevePostprocessingOperation" - test_time_scaling: - type: number - description: If included, the model will spend more effort making better images. Values between 1 and 15 are accepted. Adds additional credits cost. - minimum: 1 - maximum: 15 - ReveImageRemixRequest: - type: object - description: Request body for Reve image remixing. - required: - - prompt - - reference_images - properties: - prompt: - type: string - description: The text description of the desired image. May include xml img tags to refer to specific reference images by index. Maximum length is 2560 characters. - maxLength: 2560 - reference_images: - type: array - description: A list of 1-6 base64 encoded reference images. Each must be less than 10 MB. Total pixel count must be no more than 32 million pixels. - items: - type: string - minItems: 1 - maxItems: 6 - aspect_ratio: - type: string - description: "The desired aspect ratio. If not provided, smartly chosen by the model." - enum: - - "16:9" - - "9:16" - - "3:2" - - "2:3" - - "4:3" - - "3:4" - - "1:1" - version: - type: string - description: "Model version to use. Supported: latest-fast, latest, reve-remix-fast@20251030, reve-remix@20250915." - default: "latest" - postprocessing: - type: array - description: Optional postprocessing operations to apply after generation. May add additional cost. - items: - $ref: "#/components/schemas/RevePostprocessingOperation" - test_time_scaling: - type: number - description: If included, the model will spend more effort making better images. Values between 1 and 15 are accepted. Adds additional credits cost. - minimum: 1 - maximum: 15 - ReveImageResponse: - type: object - description: Response from the Reve image API. - properties: - image: - type: string - description: The base64 encoded image data. Empty if the request was not successful. - request_id: - type: string - description: A unique id for the request. - credits_used: - type: number - description: The number of credits used for this request. - credits_remaining: - type: number - description: The number of credits remaining in your budget. - version: - type: string - description: The specific model version used in the generation process. - content_violation: - type: boolean - description: Indicates whether the generated image violates the content policy. - BriaFiboEditRequest: - type: object - description: Request body for Bria FIBO Edit API - required: - - images - properties: - instruction: - type: string - description: Text-based edit instruction (e.g., "make the sky blue", "add a cat"). Either instruction or structured_instruction must be provided. - images: - type: array - items: - type: string - description: The source image to be edited. Publicly available URL or Base64-encoded. Accepted formats JPEG, JPG, PNG, WEBP. Must contain exactly one item. - minItems: 1 - maxItems: 1 - mask: - type: string - description: Optional mask image URL or Base64-encoded. Black areas will be preserved, white areas will be edited. - structured_instruction: - type: string - description: A string containing the structured edit instruction in JSON format. Use this instead of instruction for precise, programmatic control. - negative_prompt: - type: string - description: A text prompt specifying concepts, styles, or objects to exclude from the edited image. - guidance_scale: - type: number - format: float - description: Determines how closely the generated image should adhere to the instruction. - default: 5 - minimum: 3 - maximum: 5 - model_version: - type: string - description: The version of the model to use. - enum: - - FIBO - default: FIBO - steps_num: - type: integer - description: Number of diffusion steps. - default: 50 - minimum: 20 - maximum: 50 - seed: - type: integer - description: Seed for deterministic generation. If omitted, a random seed is used. - ip_signal: - type: boolean - description: If true, returns a warning for potential IP content in the instruction. - default: false - prompt_content_moderation: - type: boolean - description: If true, returns 422 on instruction moderation failure. - default: true - visual_input_content_moderation: - type: boolean - description: If true, returns 422 on images or mask moderation failure. - default: true - visual_output_content_moderation: - type: boolean - description: If true, returns 422 on visual output moderation failure. - default: true - - BriaStructuredInstructionRequest: - type: object - description: Request body for Bria Structured Instruction Generate API - required: - - images - - instruction - properties: - instruction: - type: string - description: Required. Text-based edit instruction (e.g., "make the sky blue", "add a cat"). - images: - type: array - items: - type: string - description: The source image to be edited. Publicly available URL or Base64-encoded. Must contain exactly one item. - minItems: 1 - maxItems: 1 - mask: - type: string - description: Optional mask image URL or Base64-encoded. Black areas will be preserved, white areas will be edited. - seed: - type: integer - description: Seed for deterministic generation. If omitted, a random seed is used. - ip_signal: - type: boolean - description: If true, returns a warning for potential IP content in the instruction. - default: false - prompt_content_moderation: - type: boolean - description: If true, returns 422 on instruction moderation failure. - default: true - visual_input_content_moderation: - type: boolean - description: If true, returns 422 on images or mask moderation failure. - default: true - - BriaAsyncResponse: - type: object - description: Asynchronous response from Bria API (202 Accepted) - properties: - request_id: - type: string - description: Unique identifier for the request. - status_url: - type: string - description: URL to poll for the result. - warning: - type: string - description: Optional warning message. - - BriaErrorResponse: - type: object - description: Error response from Bria API - properties: - error: - type: object - properties: - code: - type: integer - description: Error code. - message: - type: string - description: Error message. - details: - type: string - description: Additional error details. - request_id: - type: string - description: Unique identifier for the request. - - BriaStatusResponse: - type: object - description: Status response from Bria API - properties: - status: - type: string - description: Current status of the request. - enum: - - IN_PROGRESS - - COMPLETED - - ERROR - - UNKNOWN - request_id: - type: string - description: Unique identifier for the request. - result: - type: object - description: Result object (only present when status is COMPLETED) - properties: - image_url: - type: string - description: URL of the generated/edited image. - video_url: - type: string - description: URL of the generated video. - seed: - type: integer - description: Seed used for generation. - prompt: - type: string - description: Original prompt. - refined_prompt: - type: string - description: Refined version of the prompt. - structured_prompt: - type: string - description: The detailed JSON structured prompt. - error: - type: object - description: Error object (only present when status is ERROR) - properties: - code: - type: integer - description: Error code. - message: - type: string - description: Error message. - details: - type: string - description: Additional error details. - - BriaVideoRemoveBackgroundRequest: - type: object - description: Request body for Bria Video Remove Background API - required: - - video - properties: - video: - type: string - description: Publicly accessible URL of the input video. Input resolution supported up to 16000x16000 (16K). Max duration 60 seconds. - background_color: - type: string - description: Background color for the output video. If Transparent, the output codec must support alpha. - enum: - - Transparent - - Black - - White - - Gray - - Red - - Green - - Blue - - Yellow - - Cyan - - Magenta - - Orange - output_container_and_codec: - type: string - description: Output container and codec preset. - enum: - - mp4_h264 - - mp4_h265 - - webm_vp9 - - mov_h265 - - mov_proresks - - mkv_h264 - - mkv_h265 - - mkv_vp9 - - gif - preserve_audio: - type: boolean - description: Whether to preserve audio from the input video. - - BriaImageRemoveBackgroundRequest: - type: object - description: Request body for Bria Image Remove Background API - required: - - image - properties: - image: - type: string - description: The image to remove background from. Supported input types are Base64-encoded string or URL pointing to a publicly accessible image file. Accepted formats JPEG, JPG, PNG, WEBP. - preserve_alpha: - type: boolean - description: Controls whether partially transparent areas from the input image are retained in the output after background removal. - sync: - type: boolean - description: When false (default), the request is processed asynchronously. When true, the API holds the connection open until complete. - visual_input_content_moderation: - type: boolean - description: When enabled, applies content moderation to input visual. Returns 422 if the image fails moderation. - visual_output_content_moderation: - type: boolean - description: When enabled, applies content moderation to result visual. Returns 422 if the output fails moderation. - - BriaStatusNotFoundResponse: - type: object - description: Response when request_id is not found or expired - properties: - status: - type: string - enum: - - NOT_FOUND - required: - - status - - WavespeedFlashVSRRequest: - type: object - description: Request body for WavespeedAI FlashVSR video upscaling - properties: - video: - type: string - description: | - The video to upscale. Can be a URL to the video file or a base64-encoded video. - target_resolution: - type: string - description: Target resolution to upscale to. - enum: - - 720p - - 1080p - - 2k - - 4k - default: 1080p - duration: - type: number - description: | - Duration of the video in seconds - required: - - video - - duration - - WavespeedSeedVR2ImageRequest: - type: object - description: Request body for WavespeedAI SeedVR2 image upscaling - properties: - image: - type: string - description: The URL of the image to upscale. - target_resolution: - type: string - description: The target resolution of the output image. - enum: - - 2k - - 4k - - 8k - default: 4k - output_format: - type: string - description: The format of the output image. - enum: - - jpeg - - png - - webp - default: jpeg - enable_base64_output: - type: boolean - description: If enabled, the output will be encoded into a BASE64 string instead of a URL. - default: false - required: - - image - - WavespeedTaskResponse: - type: object - description: Response from WavespeedAI task submission - properties: - code: - type: integer - description: HTTP status code (e.g., 200 for success) - message: - type: string - description: Status message (e.g., "success") - data: - type: object - properties: - id: - type: string - description: Unique identifier for the prediction/task - model: - type: string - description: Model ID used for the prediction - outputs: - type: array - items: - type: string - description: Array of URLs to the generated content (empty when status is not completed) - urls: - type: object - properties: - get: - type: string - description: URL to retrieve the prediction result - has_nsfw_contents: - type: array - items: - type: boolean - description: Array of boolean values indicating NSFW detection for each output - status: - type: string - description: Status of the task - enum: - - created - - processing - - completed - - failed - created_at: - type: string - description: ISO timestamp of when the request was created - error: - type: string - description: Error message (empty if no error occurred) - timings: - type: object - properties: - inference: - type: integer - description: Inference time in milliseconds - - WavespeedTaskResultResponse: - type: object - description: Response from WavespeedAI task result query - properties: - code: - type: integer - description: HTTP status code (e.g., 200 for success) - message: - type: string - description: Status message (e.g., "success") - data: - type: object - properties: - id: - type: string - description: Unique identifier for the prediction/task - model: - type: string - description: Model ID used for the prediction - outputs: - type: array - items: - type: string - description: Array of URLs to the generated content (empty when status is not completed) - urls: - type: object - properties: - get: - type: string - description: URL to retrieve the prediction result - status: - type: string - description: Status of the task - enum: - - created - - processing - - completed - - failed - created_at: - type: string - description: ISO timestamp of when the request was created - error: - type: string - description: Error message (empty if no error occurred) - timings: - type: object - properties: - inference: - type: integer - description: Inference time in milliseconds - parameters: - PixverseAiTraceId: - name: Ai-trace-id - in: header - required: true - schema: - type: string - description: Unique UUID for each request. - - securitySchemes: - BearerAuth: - type: http - scheme: bearer - bearerFormat: JWT +{"components":{"headers":{"CommittedSpendCurrentHeader":{"description":"The USD cents the caller currently has committed to calls still in flight. On a `429` this EXCLUDES the refused call, whose commitment was rolled back before the refusal was sent; on an admitted response it INCLUDES the call being answered. Present alongside `X-Committed-Spend-Limit`.","schema":{"example":9600,"format":"int64","minimum":0,"type":"integer"}},"CommittedSpendLimitHeader":{"description":"The ceiling, in USD cents, on the partner spend the caller may have committed to calls still in flight - money held from the moment a call is admitted and released when that call finishes. It is not a budget, a balance, or any running total of what the caller has spent to date: settling an invoice frees no room under it, and letting an in-flight call finish does. Contrast `X-Concurrency-Limit`, which bounds those same in-flight calls counted as a NUMBER OF CALLS rather than priced. How the ceiling is SIZED is a separate question from what it measures, and it is not tier-independent: the ceiling moves with the account's lifetime paid spend, off the same thresholds the concurrent-call tier uses, so paying more raises it - see [partner-node concurrency limits](https://docs.comfy.org/tutorials/partner-nodes/concurrency-limits) for that ladder and for the concurrent-call bound that shares this `429`. Present on BOTH outcomes of an enforcing committed-spend gate - the `429` it raises and the success it admits - and absent while the gate is not enforcing, when it declines to decide and lets the call through, or on a `429` raised by the concurrent-call pool instead (a committed-spend `429` carries this trio and drops `X-Concurrency-*`).","schema":{"example":10000,"format":"int64","minimum":0,"type":"integer"}},"CommittedSpendRemainingHeader":{"description":"The USD cents of headroom left under the ceiling, floored at zero. It can be positive on a refusal: the refused call cost more than what was left, and a cheaper call would still be admitted. Present alongside `X-Committed-Spend-Limit`.","schema":{"example":400,"format":"int64","minimum":0,"type":"integer"}},"RouterErrorTypeHeader":{"description":"Coarse, machine-readable bucket for the failure, set by Router on every error response. It carries the same value as `RouterErrorResponse.error_type`, and on the `422` it is the ONLY machine-readable bucket, because that body is the FastAPI `detail[]` shape and has no `error_type` field of its own. A client can therefore branch on this header alone, before deciding which of the two Router error bodies it received.","required":true,"schema":{"$ref":"#/components/schemas/RouterErrorType"}},"RouterIdempotentReplayedHeader":{"description":"Present and `true` when this response was served from an `Idempotency-Key`'s record rather than by running the model again. It carries the original call's status, body and content type, and it is not billed a second time - the charge settled when the original completed. The header is ABSENT on a fresh run rather than sent as `false`, so branch on its presence.","schema":{"example":true,"type":"boolean"}},"RouterRequestIdHeader":{"description":"Server-generated identifier for this call, present on EVERY Router response - success, 4xx and 5xx alike, because an error response is exactly when a user needs an id to quote in a support request. The SAME value is written into the call's usage/audit event, which is what lets a complaint about a charge be joined to the charge itself instead of searched for by timestamp.\nIt is minted by the server and is never read from a request header of the same name: a caller-controlled id would let two unrelated calls collide in the audit trail, which would make the join actively misleading rather than merely absent. Sending this header on a request has no effect.","required":true,"schema":{"example":"6f1a1a6e-6a53-4a5f-9d3a-2b3b0a1f9c21","format":"uuid","type":"string"}},"RouterRetryAfterHeader":{"description":"Seconds to wait before retrying the SAME request with the SAME `Idempotency-Key`. It is set on the two answers such a retry can actually collect from: a `409` carrying `error_type: concurrency_limit_exceeded`, where the original call for that key is still running, and a `deadline_exceeded` `504`, where Comfy stopped holding the connection but still holds a handle to a generation the provider is running. In both cases the value is the interval Router itself would wait before asking again, which is the one honest number this route has for \"ask again later\". Absent when there is nothing to collect: an unkeyed call, a bound that expired before the provider accepted anything, or a `409` that refuses the key outright instead of asking the caller to wait.","schema":{"example":2,"minimum":1,"type":"integer"}},"RouterSchemaCacheControlHeader":{"description":"Freshness directives for the served schema document. `private` because the route is authenticated - the document itself is not caller-specific, but a shared cache must not hold a response to an authenticated request - and `must-revalidate` so a stale copy is revalidated against the `ETag` rather than served on.","schema":{"example":"private, max-age=300, must-revalidate","type":"string"}},"RouterSchemaETagHeader":{"description":"Strong entity tag over the served document's bytes, for `GET /v2/models/{provider}/{model}/openapi.json`. A per-model schema changes rarely and an SDK re-fetches it often, so a caller should store this value and send it back as `If-None-Match` to get a `304` instead of the document.\nIt is STRONG (no `W/` prefix) and it is a digest of the exact bytes served, so two processes serving the same schema issue the same tag - a tag that changed on restart would make the cache useless. `If-None-Match` is compared by the weak-comparison rule RFC 9110 mandates, so a cache that stored the tag weakly still matches.","required":true,"schema":{"example":"\"6b8c1f2e0a9d4c3b5e7f8a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f\"","type":"string"}}},"parameters":{"PixverseAiTraceId":{"description":"Unique UUID for each request.","in":"header","name":"Ai-trace-id","required":true,"schema":{"type":"string"}},"RouterCatalogCursor":{"description":"Opaque pagination cursor. Pass a previous page's `next_cursor` to fetch the next page; omit it for the first page. See `RouterPageCursor` for why the value is opaque and why this route paginates by cursor rather than by offset.\nA cursor that is malformed, over-long, or no longer valid is answered with a `400` carrying the Router error contract's `RouterErrorResponse` (`error_type: invalid_input`) - never a `500`, and never a silent fallback to the first page, which would make a walk loop forever.","in":"query","name":"cursor","schema":{"$ref":"#/components/schemas/RouterPageCursor"}},"RouterCatalogLimit":{"description":"Number of models to return in one page. Values above the declared maximum are outside the contract, but this route does not reject them: it serves the maximum instead, and the page size actually served is echoed back as `limit` on the response, so a clamp is always detectable by the caller. Treat the maximum as the real page stride - a client that asks for more and assumes it received more will miss rows. 0 and negative values are also accepted and select the default, which is why no `minimum` is declared: sub-1 is meaningful here, not invalid.\nThe cap of 100 is the one the node-listing endpoints already use (BE-8098): an uncapped page size on a list route is a trivially exploitable amplification, and this route is hit by SDKs on cold start.","in":"query","name":"limit","schema":{"default":20,"maximum":100,"type":"integer"}},"RouterIdempotencyKey":{"description":"Caller-generated key that makes retrying ONE logical call safe. A call that reached the caller with an answer is recorded against its key for 24 hours, and a retry carrying the same key is answered from that record instead of dispatching - and charging - the provider a second time, marked `Idempotent-Replayed: true`. Keys are scoped to the workspace your credential carries, or to your user when it carries none - so the keyspace is SHARED by every member of a workspace rather than private to one caller. Make a key unique across the whole workspace, not just within your own client: a second member who reuses a key string is answered from the first member's record, or refused `409` if the request differs. Because the scope follows the CREDENTIAL and not the person, a credential that carries no workspace at all scopes to your user id instead - so retrying one logical call under a different credential can land in a different namespace, where it is dispatched and charged again. Retry with the credential you started with. A keyed request with no authenticated caller is refused `401`. The guarantee is a BILLING one: a key is charged at most once. It is not a promise that a key is dispatched at most once, and it does not make a lost call resumable. Some answers are RECORDED but not replayable for the full 24 hours, and the billing guarantee is the half that always holds: the key stays consumed - the retry never re-runs and never re-charges - but it is answered `409 invalid_input` instead of being served the original body. That happens whenever Comfy does not hold a copy of the response it can still stand behind; a response past the replay size cap and a result addressed by an asset URL Comfy does not host are the two you are most likely to meet. The second is the one worth planning for, because it looks like an ordinary success: which models answer with a Comfy-hosted asset link, how long one stays valid, and what a result carries when an individual asset could not be copied are stated in one place, under Result assets in the API reference, and this paragraph does not restate them. On a model that returns its result on the original call, an answer still holding a partner's own asset link is replayed for a few minutes - which is where a dropped connection puts an SDK's automatic same-key re-send, and while the partner's link is certainly still alive - and refused after that rather than replayed dead. So a prompt retry of a partially re-hosted result behaves exactly like any other replay, and only a later one meets the `409`. That short window is deliberately NOT offered on a model that submits and is polled, because there the partner may have minted the URL long before your call collected it and its remaining life is unknowable - and those models do not need it: a call cut off mid-generation keeps its key holding the generation, so the same-key retry collects the ORIGINAL result rather than a recorded copy of it. A response past the size cap has no window either and is refused from the start. The action on any of these `409 invalid_input` refusals is the same: use a new key. Only an answer a provider actually produced is recorded, though. A refusal Router raises on its own BEFORE dispatching anything - not enabled for you yet (`403`), unknown model (`404`), not entitled to the model (`403`), a body the model's schema rejects or that names a different model than the path (`422`), a malformed request (`400 invalid_input`) - dispatched nothing and charged nothing, so it RELEASES the key: re-send the SAME key once you are on the rollout ramp or have corrected the request and it runs for real, rather than replaying the refusal or colliding with it as a `409`. That turns on whether a provider was reached, NEVER on the status, so a `400 content_policy_violation` - the partner's own answer to a call that ran, which some models meter - is recorded and replayed like any other answer. Releasing a refusal that dispatched nothing frees nothing chargeable, so it does not weaken the at-most-once billing guarantee above.\nGenerate a fresh key per logical call and reuse it across that call's retry attempts; a UUID is the intended shape. Persist the key BEFORE sending the request - a key held only in the memory of the process that crashed cannot be resent, and the retry that would have collected the result becomes a fresh, separately charged run.\nA retry that arrives while the original is still in flight is answered `409` with `Retry-After`: wait and re-send the same key. The same key presented with a DIFFERENT request is a `409` too, rather than a silent overwrite - and \"different\" is judged on the whole request, not the body alone: the method, the path and query string, and the body must all match the original.\nTHE KEY IS NEVER RETURNED IN ANY RESPONSE - not on the `200`, not on the `504`, not in any error body. It is yours to mint and yours to keep: a caller who did not keep it has no way to collect a generation they were billed for. A `deadline_exceeded` `504` on a generation the provider is still running answers a same-key retry with `504` and `Retry-After` again until it finishes, then with the result.\nOmitting the header is allowed and leaves the call unguarded rather than refused: there is nothing to check, so every retry is a fresh dispatch and a fresh charge.","in":"header","name":"Idempotency-Key","schema":{"example":"6f1a1a6e-6a53-4a5f-9d3a-2b3b0a1f9c21","maxLength":255,"minLength":1,"type":"string"}},"RouterModel":{"description":"Lowercase model segment of the canonical `{provider}/{model}[/{variant}]` model ID - the model to run within that provider.\nAs with `provider`, the schema is the shared `RouterModelSegment` component and its `pattern` documents the contract rather than enforcing it - see `RouterProvider`.","in":"path","name":"model","required":true,"schema":{"$ref":"#/components/schemas/RouterModelSegment"}},"RouterProvider":{"description":"Lowercase provider segment of the canonical `{provider}/{model}[/{variant}]` model ID - the partner whose model is being run.\nThe schema is `RouterProviderSegment`, the SAME component a catalog entry's `provider` field references, so an ID `GET /v2/models` lists cannot drift from the ids this route accepts. Its `pattern` is a CONTRACT statement, not enforcement: comfy-api installs no OpenAPI request validator and oapi-codegen binds path parameters as plain strings, so the handler must re-validate this segment itself before using it to select a provider or compose an upstream URL.","in":"path","name":"provider","required":true,"schema":{"$ref":"#/components/schemas/RouterProviderSegment"}}},"responses":{"RouterConcurrencyLimited":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterErrorResponse"}}},"description":"The caller is holding as much in-flight capacity as they are allowed and the request was refused before it reached the model. The bucket is `concurrency_limit_exceeded` in either case and `detail` says which bound was hit: the number of concurrent calls, or the committed spend of the calls still in flight, whose refusal also carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents). Retry once one of the caller's own in-flight calls finishes. The body is `RouterErrorResponse` and the bucket is repeated on `X-Comfy-Error-Type`.","headers":{"X-Comfy-Error-Type":{"$ref":"#/components/headers/RouterErrorTypeHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"},"X-Committed-Spend-Current":{"$ref":"#/components/headers/CommittedSpendCurrentHeader"},"X-Committed-Spend-Limit":{"$ref":"#/components/headers/CommittedSpendLimitHeader"},"X-Committed-Spend-Remaining":{"$ref":"#/components/headers/CommittedSpendRemainingHeader"}}},"RouterDeadlineExceeded":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterErrorResponse"}}},"description":"Comfy stopped holding the connection at its own configured bound (`deadline_exceeded`). The body and the two headers are exactly `RouterRequestError`'s; what this adds is the optional `Retry-After`, present when a retry with the same `Idempotency-Key` will collect the generation that is still running rather than dispatch a new one. See the `504` on `POST /v2/models/{provider}/{model}`.","headers":{"Retry-After":{"$ref":"#/components/headers/RouterRetryAfterHeader"},"X-Comfy-Error-Type":{"$ref":"#/components/headers/RouterErrorTypeHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"RouterIdempotencyConflict":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterErrorResponse"}}},"description":"The `Idempotency-Key` on this request is already held, and this request cannot be answered from its record. Two conditions share the status and `X-Comfy-Error-Type` is what separates them, because they are acted on in opposite ways. `concurrency_limit_exceeded` means the original call for this key is still running: wait `Retry-After` seconds and re-send THE SAME key, which collects that call's result rather than starting a second one. `invalid_input` means the key cannot serve this request at all - it was already used for a different request (the method, the path and query, or the body differ from the original), or the original completed (and, if it succeeded, was charged) and Router holds no copy of its response it can still stand behind - for example it was too large to store, or it names an asset Comfy does not host and so cannot promise still resolves, which on a direct-return model is replayed for a few minutes after the original call and refused after that - or the copy it holds is content-encoded in a way this request did not accept - and the answer is always a NEW key, never a re-send of this one. There is no `Retry-After` on any of these, because waiting changes nothing. `detail` says which case it is; the different-request case says nothing about how the call that does own the key turned out. The body is `RouterErrorResponse` and the bucket is repeated on `X-Comfy-Error-Type`.","headers":{"Retry-After":{"$ref":"#/components/headers/RouterRetryAfterHeader"},"X-Comfy-Error-Type":{"$ref":"#/components/headers/RouterErrorTypeHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"RouterModelValidationError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterValidationErrorResponse"}}},"description":"The request's contents were rejected against the model's schema. The body is `RouterValidationErrorResponse`, the FastAPI `detail[]` shape, so each offending field keeps its own specific `type` and `ctx`. `X-Comfy-Error-Type` carries the coarse bucket for the whole response.\nWhat this costs your `Idempotency-Key` depends on WHERE the rejection happened, judged on the same dispatch test every other status is judged on rather than on the status itself. Router validates against the model's own input schema BEFORE any provider call, and that refusal reached nothing: it is never charged, it does not consume the key, and the key is RELEASED - re-send the SAME key with the corrected body and the call runs for real, rather than replaying this `422` or colliding with it as a `409`. That is the common case, and it is called out because this is the one error a caller CAUSES, and therefore the one they are most likely to fix and re-send under the original key.\nA model that performs its OWN validation can also answer `422` on a call that really ran. That one DISPATCHED, so it is recorded and replayed like any other answer: a same-key retry is served the stored response, marked `Idempotent-Replayed: true`, and correcting the body requires a NEW key.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/RouterIdempotentReplayedHeader"},"X-Comfy-Error-Type":{"$ref":"#/components/headers/RouterErrorTypeHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"RouterRequestError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterErrorResponse"}}},"description":"A Router request-level failure - the request never reached the model, or failed for a reason the model itself did not report. The body is `RouterErrorResponse` and the bucket is repeated on `X-Comfy-Error-Type`.","headers":{"X-Comfy-Error-Type":{"$ref":"#/components/headers/RouterErrorTypeHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"RouterRunRequestError":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterErrorResponse"}}},"description":"A Router request-level failure - the request never reached the model, or failed for a reason the model itself did not report. The body is `RouterErrorResponse` and the bucket is repeated on `X-Comfy-Error-Type`. On this route the status is ALSO how the partner's own refusal of a call that really ran is returned - the `content_policy_violation` some models meter - and that answer is recorded against an `Idempotency-Key` and served to a same-key retry, so unlike the catalog reads' shared error this response can arrive carrying `Idempotent-Replayed: true`.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/RouterIdempotentReplayedHeader"},"X-Comfy-Error-Type":{"$ref":"#/components/headers/RouterErrorTypeHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}}},"schemas":{"APIKey":{"properties":{"created_at":{"format":"date-time","type":"string"},"description":{"type":"string"},"id":{"type":"string"},"key_prefix":{"type":"string"},"name":{"type":"string"}},"type":"object"},"APIKeyWithPlaintext":{"allOf":[{"$ref":"#/components/schemas/APIKey"},{"properties":{"plaintext_key":{"description":"The full API key (only returned at creation)","type":"string"}},"type":"object"}]},"ActionJobResult":{"properties":{"action_job_id":{"description":"Identifier of the job this result belongs to","type":"string"},"action_run_id":{"description":"Identifier of the run this result belongs to","type":"string"},"author":{"description":"The author of the commit","type":"string"},"avg_vram":{"description":"The average VRAM used by the job","type":"integer"},"branch_name":{"description":"Name of the relevant git branch","type":"string"},"comfy_run_flags":{"description":"The comfy run flags. E.g. `--low-vram`","type":"string"},"commit_hash":{"description":"The hash of the commit","type":"string"},"commit_id":{"description":"The ID of the commit","type":"string"},"commit_message":{"description":"The message of the commit","type":"string"},"commit_time":{"description":"The Unix timestamp when the commit was made","format":"int64","type":"integer"},"cuda_version":{"description":"CUDA version used","type":"string"},"end_time":{"description":"The end time of the job as a Unix timestamp.","format":"int64","type":"integer"},"git_repo":{"description":"The repository name","type":"string"},"id":{"description":"Unique identifier for the job result","format":"uuid","type":"string"},"job_trigger_user":{"description":"The user who triggered the job.","type":"string"},"machine_stats":{"$ref":"#/components/schemas/MachineStats"},"operating_system":{"description":"Operating system used","type":"string"},"peak_vram":{"description":"The peak VRAM used by the job","type":"integer"},"pr_number":{"description":"The pull request number","type":"string"},"python_version":{"description":"PyTorch version used","type":"string"},"pytorch_version":{"description":"PyTorch version used","type":"string"},"start_time":{"description":"The start time of the job as a Unix timestamp.","format":"int64","type":"integer"},"status":{"$ref":"#/components/schemas/WorkflowRunStatus"},"storage_file":{"$ref":"#/components/schemas/StorageFile"},"workflow_name":{"description":"Name of the workflow","type":"string"}},"type":"object"},"AnthropicCacheCreationUsage":{"description":"Per-TTL breakdown of cache-write input tokens for an Anthropic Messages API call.","properties":{"ephemeral_1h_input_tokens":{"type":"integer"},"ephemeral_5m_input_tokens":{"type":"integer"}},"type":"object"},"AnthropicCreateMessageRequest":{"additionalProperties":true,"description":"Request body for Anthropic Messages API (`/v1/messages`). Mirrors the upstream schema with strict typing only on fields the proxy reads (model, prompt extraction, streaming, billing). Other top-level fields (`tools`, `temperature`, `top_p`, `thinking`, `metadata`, etc.) pass through unchanged via `additionalProperties`.","properties":{"max_tokens":{"description":"Maximum number of tokens to generate before stopping.","type":"integer"},"messages":{"description":"Conversation turns. See Anthropic Messages API docs for the full content-block taxonomy.","items":{"$ref":"#/components/schemas/AnthropicMessageParam"},"type":"array"},"model":{"description":"Anthropic model identifier (e.g. `claude-sonnet-4-5`, `claude-opus-4-7`).","type":"string"},"stream":{"description":"When true, the response is a `text/event-stream` of Anthropic message events instead of a single JSON body.","type":"boolean"},"system":{"description":"Top-level system prompt. Anthropic also accepts an array form via passthrough.","type":"string"}},"required":["model","max_tokens","messages"],"type":"object"},"AnthropicCreateMessageResponse":{"additionalProperties":true,"description":"JSON shape of a non-streaming Messages API response. Most fields pass through; the proxy reads `usage` for billing.","properties":{"id":{"type":"string"},"model":{"type":"string"},"role":{"type":"string"},"stop_reason":{"nullable":true,"type":"string"},"stop_sequence":{"nullable":true,"type":"string"},"type":{"type":"string"},"usage":{"$ref":"#/components/schemas/AnthropicMessagesUsage"}},"type":"object"},"AnthropicMessageParam":{"additionalProperties":true,"description":"A single conversation turn. The proxy only reads `role` and `content` (string or array of content blocks) for prompt capture; additional fields pass through.","properties":{"content":{"description":"Either a string shorthand or an array of content blocks (text, image, document, tool_use, tool_result, ...).","x-go-type":"interface{}"},"role":{"enum":["user","assistant"],"type":"string"}},"required":["role","content"],"type":"object"},"AnthropicMessagesUsage":{"description":"Token usage for an Anthropic Messages API call.","properties":{"cache_creation":{"$ref":"#/components/schemas/AnthropicCacheCreationUsage"},"cache_creation_input_tokens":{"type":"integer"},"cache_read_input_tokens":{"type":"integer"},"input_tokens":{"type":"integer"},"output_tokens":{"type":"integer"}},"type":"object"},"AuditLog":{"properties":{"createdAt":{"description":"The date and time the event was created","format":"date-time","type":"string"},"event_id":{"description":"the id of the event","type":"string"},"event_type":{"description":"the type of the event","type":"string"},"params":{"additionalProperties":true,"description":"data related to the event","type":"object"}},"type":"object"},"BFLAsyncResponse":{"properties":{"id":{"title":"Id","type":"string"},"polling_url":{"title":"Polling Url","type":"string"}},"required":["id","polling_url"],"title":"AsyncResponse","type":"object"},"BFLAsyncWebhookResponse":{"properties":{"id":{"title":"Id","type":"string"},"status":{"title":"Status","type":"string"},"webhook_url":{"title":"Webhook Url","type":"string"}},"required":["id","status","webhook_url"],"title":"AsyncWebhookResponse","type":"object"},"BFLCannyInputs":{"properties":{"canny_high_threshold":{"anyOf":[{"maximum":500,"minimum":0,"type":"integer"}],"default":200,"description":"High threshold for Canny edge detection","title":"Canny High Threshold"},"canny_low_threshold":{"anyOf":[{"maximum":500,"minimum":0,"type":"integer"}],"default":50,"description":"Low threshold for Canny edge detection","title":"Canny Low Threshold"},"control_image":{"anyOf":[{"type":"string"}],"description":"Base64 encoded image to use as control input if no preprocessed image is provided","title":"Control Image"},"guidance":{"anyOf":[{"maximum":100,"minimum":1,"type":"number"}],"default":30,"description":"Guidance strength for the image generation process","title":"Guidance"},"output_format":{"anyOf":[{"$ref":"#/components/schemas/BFLOutputFormat"}],"default":"jpeg","description":"Output format for the generated image. Can be 'jpeg' or 'png'."},"preprocessed_image":{"anyOf":[{"type":"string"}],"description":"Optional pre-processed image that will bypass the control preprocessing step","title":"Preprocessed Image"},"prompt":{"description":"Text prompt for image generation","example":"ein fantastisches bild","title":"Prompt","type":"string"},"prompt_upsampling":{"anyOf":[{"type":"boolean"}],"default":false,"description":"Whether to perform upsampling on the prompt","title":"Prompt Upsampling"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict.","maximum":6,"minimum":0,"title":"Safety Tolerance","type":"integer"},"seed":{"anyOf":[{"type":"integer"}],"description":"Optional seed for reproducibility","example":42,"title":"Seed"},"steps":{"anyOf":[{"maximum":50,"minimum":15,"type":"integer"}],"default":50,"description":"Number of steps for the image generation process","title":"Steps"},"webhook_secret":{"anyOf":[{"type":"string"}],"description":"Optional secret for webhook signature verification","title":"Webhook Secret"},"webhook_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"}],"description":"URL to receive webhook notifications","title":"Webhook Url"}},"required":["prompt"],"title":"CannyInputs","type":"object"},"BFLDepthInputs":{"properties":{"control_image":{"anyOf":[{"type":"string"}],"description":"Base64 encoded image to use as control input","title":"Control Image"},"guidance":{"anyOf":[{"maximum":100,"minimum":1,"type":"number"}],"default":15,"description":"Guidance strength for the image generation process","title":"Guidance"},"output_format":{"anyOf":[{"$ref":"#/components/schemas/BFLOutputFormat"}],"default":"jpeg","description":"Output format for the generated image. Can be 'jpeg' or 'png'."},"preprocessed_image":{"anyOf":[{"type":"string"}],"description":"Optional pre-processed image that will bypass the control preprocessing step","title":"Preprocessed Image"},"prompt":{"description":"Text prompt for image generation","example":"ein fantastisches bild","title":"Prompt","type":"string"},"prompt_upsampling":{"anyOf":[{"type":"boolean"}],"default":false,"description":"Whether to perform upsampling on the prompt","title":"Prompt Upsampling"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict.","maximum":6,"minimum":0,"title":"Safety Tolerance","type":"integer"},"seed":{"anyOf":[{"type":"integer"}],"description":"Optional seed for reproducibility","example":42,"title":"Seed"},"steps":{"anyOf":[{"maximum":50,"minimum":15,"type":"integer"}],"default":50,"description":"Number of steps for the image generation process","title":"Steps"},"webhook_secret":{"anyOf":[{"type":"string"}],"description":"Optional secret for webhook signature verification","title":"Webhook Secret"},"webhook_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"}],"description":"URL to receive webhook notifications","title":"Webhook Url"}},"required":["prompt"],"title":"DepthInputs","type":"object"},"BFLEraseV1Request":{"description":"Request body for the BFL Flux Tools Erase v1 object removal API.","properties":{"dilate_pixels":{"default":10,"description":"Number of pixels to dilate the mask by before removal. Dilation helps cover object edges. Maximum is 25 pixels.","maximum":25,"minimum":0,"type":"integer"},"image":{"description":"Base64-encoded input image or HTTP(S) image URL.","type":"string"},"mask":{"description":"Base64-encoded black/white mask or HTTP(S) image URL. White pixels indicate the object to remove; black pixels are preserved. Must have the same dimensions as the input image.","type":"string"},"output_format":{"$ref":"#/components/schemas/BFLOutputFormat"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation. Between 0 and 5, 0 being most strict, 5 being least strict.","maximum":5,"minimum":0,"type":"integer"},"seed":{"description":"Optional seed for reproducibility.","example":42,"type":"integer"},"webhook_secret":{"description":"Optional secret for webhook signature verification.","type":"string"},"webhook_url":{"description":"URL to receive webhook notifications.","format":"uri","maxLength":2083,"minLength":1,"type":"string"}},"required":["image","mask"],"type":"object"},"BFLFlux2ProGenerateRequest":{"description":"Request body for the BFL Flux 2 Pro image generation API.","properties":{"height":{"default":1024,"description":"Height of the image.","maximum":2048,"minimum":256,"type":"integer"},"input_image":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_2":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_3":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_4":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_5":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_6":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_7":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_8":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"input_image_9":{"description":"Base64 encoded image for image-to-image generation.","type":"string"},"output_format":{"default":"jpeg","description":"Output format for the generated image.","enum":["jpeg","png"],"type":"string"},"prompt":{"description":"Text description of the image to generate.","type":"string"},"prompt_upsampling":{"default":true,"description":"Automatically modify prompt for generation.","type":"boolean"},"safety_tolerance":{"default":2,"description":"Moderation tolerance level (Flux 2 Max only).","maximum":5,"minimum":0,"type":"integer"},"seed":{"description":"Seed for reproducibility.","type":"integer"},"width":{"default":1024,"description":"Width of the image.","maximum":2048,"minimum":256,"type":"integer"}},"required":["prompt"],"type":"object"},"BFLFlux3Result":{"description":"Completed FLUX 3 video result.","properties":{"cost":{"description":"Provider-reported task cost, currently null ahead of BFL GA.","format":"float","nullable":true,"type":"number"},"sample":{"description":"Signed URL for the generated asset. The asset is re-hosted onto Comfy storage and this field rewritten to the Comfy-hosted URL, valid for 24 hours; a result whose re-host could not be performed keeps BFL's own short-lived delivery URL instead - roughly two hours for video, roughly ten minutes for images. Either way the link expires, so download the asset rather than storing the URL.","format":"uri","type":"string"}},"required":["sample"],"type":"object"},"BFLFlux3ResultResponse":{"description":"Current state of an asynchronous FLUX 3 task.","properties":{"cost":{"description":"Provider-reported cost in credits, populated once the task is Ready.","format":"float","nullable":true,"type":"number"},"id":{"description":"BFL task identifier.","type":"string"},"progress":{"description":"Optional generation progress reported by BFL.","format":"float","maximum":1,"minimum":0,"nullable":true,"type":"number"},"result":{"allOf":[{"$ref":"#/components/schemas/BFLFlux3Result"}],"nullable":true},"status":{"description":"Task status: Pending, Reasoning, Generating, Ready, Request Moderated, Content Moderated, Error, or Task not found.","type":"string"}},"required":["id","status"],"type":"object"},"BFLFlux3VideoRequest":{"additionalProperties":false,"description":"Request body for BFL FLUX 3 video generation. The mode field selects the generation type and decides which fields are required: t2v needs prompt; i2v needs prompt and keyframes; v2v needs prompt and start_video; draft_enhance needs draft_cache and accepts no other generation parameters.","example":{"mode":"t2v","prompt":"A slow dolly shot through a rain-soaked neon street at night"},"properties":{"aspect_ratio":{"default":"auto","description":"Output aspect ratio: auto, 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, or 9:16. auto lets BFL choose from the prompt and any references.","type":"string"},"draft":{"default":false,"description":"Draft mode: generate a fast preview whose result includes a draft_cache download URL. Send that bundle back with mode draft_enhance to render the full-quality version of the same generation.","type":"boolean"},"draft_cache":{"description":"draft_enhance only. Encrypted draft-cache bundle from a prior draft generation, as the base64-encoded downloaded bundle or its still-valid http(s) URL. The original inputs are embedded in the bundle.","type":"string"},"duration":{"default":"auto","description":"Video duration in seconds (any whole second from 5 to 20), or auto to fit the content.","oneOf":[{"maximum":20,"minimum":5,"type":"integer"},{"type":"string"}]},"generate_audio":{"default":true,"description":"Generate synchronized audio alongside the video.","type":"boolean"},"keyframes":{"description":"i2v only. Images that become frames of the video, each an http(s) URL or base64, one to ten total. Accepts a single image, a list of images (one starts the video, two start and end it, more spread evenly and need a set duration), or timestamped [seconds, image] pairs in time order, e.g. [[0, \"...\"], [3.5, \"...\"]]."},"mode":{"description":"Generation mode: t2v (text-to-video), i2v (image-continuation), v2v (video-continuation), or draft_enhance (full-quality render of a prior draft). Spelled-out aliases such as text-to-video are accepted.","type":"string"},"prompt":{"description":"Free-form prompt describing the video. Required for every mode except draft_enhance.","type":"string"},"resolution":{"default":"hd","description":"Video resolution class: hd, or fhd for a higher-resolution result finished by the video upsampler. Exact dimensions vary with the aspect ratio.","type":"string"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output harm moderation, 0 strictest. Sexual content is limited to level 3 and hate content to level 2 regardless of the requested tolerance; requests with conditioning media are limited to level 2.","maximum":4,"minimum":0,"type":"integer"},"start_video":{"description":"v2v only. The video to continue, an http(s) URL or base64 MP4; the generated clip carries on from its final frames.","type":"string"},"version":{"default":"latest","description":"Endpoint version. latest serves the current release; dated pinnable release tags are added as they are published.","type":"string"}},"required":["mode"],"type":"object"},"BFLFlux3VideoResponse":{"description":"Immediate asynchronous response from the BFL FLUX 3 video API.","properties":{"cost":{"description":"Provider-reported cost in credits for this request, when available.","format":"float","nullable":true,"type":"number"},"id":{"description":"BFL task identifier.","type":"string"},"input_mp":{"description":"Input megapixels, when reported.","format":"float","nullable":true,"type":"number"},"output_mp":{"description":"Output megapixels, when reported.","format":"float","nullable":true,"type":"number"},"polling_url":{"description":"URL to poll until the task reaches a terminal status. The host varies by region; treat it as opaque and pass it to the get_result proxy endpoint via the polling_url parameter.","format":"uri","type":"string"}},"required":["id","polling_url"],"type":"object"},"BFLFluxKontextMaxGenerateRequest":{"description":"Request body for the BFL FLUX.1 Kontext [max] API. Edits input_image when one is supplied; generates from the prompt alone when it is not.","example":{"prompt":"A watercolor painting of a lighthouse at dawn, soft light on the water"},"properties":{"aspect_ratio":{"description":"Aspect ratio of the output between 21:9 and 9:21, e.g. 16:9. Defaults to the input image's aspect ratio when one is given, otherwise 1:1.","example":"16:9","type":"string"},"input_image":{"description":"Image to edit, as a base64-encoded image or an http(s) URL. Optional; without it the model generates from the prompt alone.","type":"string"},"input_image_2":{"description":"Additional reference image, base64-encoded or an http(s) URL (experimental multi-reference).","type":"string"},"input_image_3":{"description":"Additional reference image, base64-encoded or an http(s) URL (experimental multi-reference).","type":"string"},"input_image_4":{"description":"Additional reference image, base64-encoded or an http(s) URL (experimental multi-reference).","type":"string"},"output_format":{"default":"png","description":"Output image format.","enum":["jpeg","png","webp"],"type":"string"},"prompt":{"description":"Text prompt describing the edit to apply to input_image, or the image to generate when no input_image is given.","type":"string"},"prompt_upsampling":{"default":false,"description":"Whether to upsample the prompt. If active, the prompt is automatically modified for more creative generation.","type":"boolean"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation, between 0 (most strict) and 6 (least strict).","maximum":6,"minimum":0,"type":"integer"},"seed":{"description":"Optional seed for reproducibility. A random seed is used when omitted.","example":42,"type":"integer"},"webhook_secret":{"description":"Optional secret for webhook signature verification.","type":"string"},"webhook_url":{"description":"URL to receive webhook notifications.","format":"uri","maxLength":2083,"minLength":1,"type":"string"}},"required":["prompt"],"type":"object"},"BFLFluxKontextMaxGenerateResponse":{"properties":{"id":{"description":"Job ID for tracking","type":"string"},"polling_url":{"description":"URL to poll for results","type":"string"}},"required":["id","polling_url"],"type":"object"},"BFLFluxKontextProGenerateRequest":{"description":"Request body for the BFL FLUX.1 Kontext [pro] API. Edits input_image when one is supplied; generates from the prompt alone when it is not.","example":{"prompt":"A watercolor painting of a lighthouse at dawn, soft light on the water"},"properties":{"aspect_ratio":{"description":"Aspect ratio of the output between 21:9 and 9:21, e.g. 16:9. Defaults to the input image's aspect ratio when one is given, otherwise 1:1.","example":"16:9","type":"string"},"input_image":{"description":"Image to edit, as a base64-encoded image or an http(s) URL. Optional; without it the model generates from the prompt alone.","type":"string"},"input_image_2":{"description":"Additional reference image, base64-encoded or an http(s) URL (experimental multi-reference).","type":"string"},"input_image_3":{"description":"Additional reference image, base64-encoded or an http(s) URL (experimental multi-reference).","type":"string"},"input_image_4":{"description":"Additional reference image, base64-encoded or an http(s) URL (experimental multi-reference).","type":"string"},"output_format":{"default":"png","description":"Output image format.","enum":["jpeg","png","webp"],"type":"string"},"prompt":{"description":"Text prompt describing the edit to apply to input_image, or the image to generate when no input_image is given.","type":"string"},"prompt_upsampling":{"default":false,"description":"Whether to upsample the prompt. If active, the prompt is automatically modified for more creative generation.","type":"boolean"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation, between 0 (most strict) and 6 (least strict).","maximum":6,"minimum":0,"type":"integer"},"seed":{"description":"Optional seed for reproducibility. A random seed is used when omitted.","example":42,"type":"integer"},"webhook_secret":{"description":"Optional secret for webhook signature verification.","type":"string"},"webhook_url":{"description":"URL to receive webhook notifications.","format":"uri","maxLength":2083,"minLength":1,"type":"string"}},"required":["prompt"],"type":"object"},"BFLFluxKontextProGenerateResponse":{"properties":{"id":{"description":"Job ID for tracking","type":"string"},"polling_url":{"description":"URL to poll for results","type":"string"}},"required":["id","polling_url"],"type":"object"},"BFLFluxPro1_1GenerateRequest":{"description":"Request body for the BFL FLUX 1.1 [pro] image generation API.","example":{"height":768,"prompt":"An impressionist landscape of rolling hills under a summer sky","width":1024},"properties":{"height":{"default":768,"description":"Height of the generated image in pixels. Must be a multiple of 32.","maximum":1440,"minimum":256,"multipleOf":32,"type":"integer"},"image_prompt":{"description":"Optional base64-encoded image to use with FLUX Redux.","type":"string"},"output_format":{"default":"jpeg","description":"Output image format.","enum":["jpeg","png","webp"],"type":"string"},"prompt":{"description":"Text prompt for image generation.","type":"string"},"prompt_upsampling":{"default":false,"description":"Whether to upsample the prompt. If active, the prompt is automatically modified for more creative generation.","type":"boolean"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation, between 0 (most strict) and 6 (least strict).","maximum":6,"minimum":0,"type":"integer"},"seed":{"description":"Optional seed for reproducibility. A random seed is used when omitted.","example":42,"type":"integer"},"webhook_secret":{"description":"Optional secret for webhook signature verification.","type":"string"},"webhook_url":{"description":"URL to receive webhook notifications.","format":"uri","maxLength":2083,"minLength":1,"type":"string"},"width":{"default":1024,"description":"Width of the generated image in pixels. Must be a multiple of 32.","maximum":1440,"minimum":256,"multipleOf":32,"type":"integer"}},"required":["prompt"],"type":"object"},"BFLFluxPro1_1GenerateResponse":{"properties":{"id":{"description":"Job ID for tracking","type":"string"},"polling_url":{"description":"URL to poll for results","type":"string"}},"required":["id","polling_url"],"type":"object"},"BFLFluxProExpandInputs":{"properties":{"bottom":{"anyOf":[{"maximum":2048,"minimum":0,"type":"integer"}],"default":0,"description":"Number of pixels to expand at the bottom of the image","title":"Bottom"},"guidance":{"anyOf":[{"maximum":100,"minimum":1.5,"type":"number"}],"default":60,"description":"Guidance strength for the image generation process","title":"Guidance"},"image":{"description":"A Base64-encoded string representing the image you wish to expand.","title":"Image","type":"string"},"left":{"anyOf":[{"maximum":2048,"minimum":0,"type":"integer"}],"default":0,"description":"Number of pixels to expand on the left side of the image","title":"Left"},"output_format":{"anyOf":[{"$ref":"#/components/schemas/BFLOutputFormat"}],"default":"jpeg","description":"Output format for the generated image. Can be 'jpeg' or 'png'."},"prompt":{"anyOf":[{"type":"string"}],"default":"","description":"The description of the changes you want to make. This text guides the expansion process, allowing you to specify features, styles, or modifications for the expanded areas.","example":"ein fantastisches bild","title":"Prompt"},"prompt_upsampling":{"anyOf":[{"type":"boolean"}],"default":false,"description":"Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation","title":"Prompt Upsampling"},"right":{"anyOf":[{"maximum":2048,"minimum":0,"type":"integer"}],"default":0,"description":"Number of pixels to expand on the right side of the image","title":"Right"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict.","example":2,"maximum":6,"minimum":0,"title":"Safety Tolerance","type":"integer"},"seed":{"anyOf":[{"type":"integer"}],"description":"Optional seed for reproducibility","title":"Seed"},"steps":{"anyOf":[{"maximum":50,"minimum":15,"type":"integer"}],"default":50,"description":"Number of steps for the image generation process","example":50,"title":"Steps"},"top":{"anyOf":[{"maximum":2048,"minimum":0,"type":"integer"}],"default":0,"description":"Number of pixels to expand at the top of the image","title":"Top"},"webhook_secret":{"anyOf":[{"type":"string"}],"description":"Optional secret for webhook signature verification","title":"Webhook Secret"},"webhook_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"}],"description":"URL to receive webhook notifications","title":"Webhook Url"}},"required":["image"],"title":"FluxProExpandInputs","type":"object"},"BFLFluxProFillInputs":{"properties":{"guidance":{"anyOf":[{"maximum":100,"minimum":1.5,"type":"number"}],"default":60,"description":"Guidance strength for the image generation process","title":"Guidance"},"image":{"description":"A Base64-encoded string representing the image you wish to modify. Can contain alpha mask if desired.","title":"Image","type":"string"},"mask":{"anyOf":[{"type":"string"}],"description":"A Base64-encoded string representing a mask for the areas you want to modify in the image. The mask should be the same dimensions as the image and in black and white. Black areas (0%) indicate no modification, while white areas (100%) specify areas for inpainting. Optional if you provide an alpha mask in the original image. Validation: The endpoint verifies that the dimensions of the mask match the original image.","title":"Mask"},"output_format":{"anyOf":[{"$ref":"#/components/schemas/BFLOutputFormat"}],"default":"jpeg","description":"Output format for the generated image. Can be 'jpeg' or 'png'."},"prompt":{"anyOf":[{"type":"string"}],"default":"","description":"The description of the changes you want to make. This text guides the inpainting process, allowing you to specify features, styles, or modifications for the masked area.","example":"ein fantastisches bild","title":"Prompt"},"prompt_upsampling":{"anyOf":[{"type":"boolean"}],"default":false,"description":"Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation","title":"Prompt Upsampling"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation. Between 0 and 6, 0 being most strict, 6 being least strict.","example":2,"maximum":6,"minimum":0,"title":"Safety Tolerance","type":"integer"},"seed":{"anyOf":[{"type":"integer"}],"description":"Optional seed for reproducibility","title":"Seed"},"steps":{"anyOf":[{"maximum":50,"minimum":15,"type":"integer"}],"default":50,"description":"Number of steps for the image generation process","example":50,"title":"Steps"},"webhook_secret":{"anyOf":[{"type":"string"}],"description":"Optional secret for webhook signature verification","title":"Webhook Secret"},"webhook_url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"}],"description":"URL to receive webhook notifications","title":"Webhook Url"}},"required":["image"],"title":"FluxProFillInputs","type":"object"},"BFLFluxProGenerateRequest":{"description":"Request body for the BFL FLUX 1.1 [pro] Ultra image generation API. Ultra selects the output size from aspect_ratio rather than explicit pixel dimensions.","example":{"aspect_ratio":"16:9","prompt":"A lighthouse on a rocky coast at golden hour, cinematic"},"properties":{"aspect_ratio":{"default":"16:9","description":"Aspect ratio of the image between 21:9 and 9:21, e.g. 16:9.","type":"string"},"image_prompt":{"description":"Optional base64-encoded image to remix.","type":"string"},"image_prompt_strength":{"default":0.1,"description":"Blend between the prompt and the image prompt, from 0 (prompt only) to 1 (image prompt only).","maximum":1,"minimum":0,"type":"number"},"output_format":{"default":"jpeg","description":"Output image format.","enum":["jpeg","png","webp"],"type":"string"},"prompt":{"description":"Text prompt for image generation.","type":"string"},"prompt_upsampling":{"default":false,"description":"Whether to upsample the prompt. If active, the prompt is automatically modified for more creative generation.","type":"boolean"},"raw":{"default":false,"description":"Generate less processed, more natural-looking images.","type":"boolean"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation, between 0 (most strict) and 6 (least strict).","maximum":6,"minimum":0,"type":"integer"},"seed":{"description":"Optional seed for reproducibility. A random seed is used when omitted.","example":42,"type":"integer"},"webhook_secret":{"description":"Optional secret for webhook signature verification.","type":"string"},"webhook_url":{"description":"URL to receive webhook notifications.","format":"uri","maxLength":2083,"minLength":1,"type":"string"}},"required":["prompt"],"type":"object"},"BFLFluxProGenerateResponse":{"description":"Response from the BFL Flux Pro 1.1 Ultra image generation API.","properties":{"cost":{"description":"The cost of the generation task.","format":"float","type":"number"},"id":{"description":"The unique identifier for the generation task.","type":"string"},"input_mp":{"description":"Input megapixels.","format":"float","type":"number"},"output_mp":{"description":"Output megapixels.","format":"float","type":"number"},"polling_url":{"description":"URL to poll for the generation result.","type":"string"}},"required":["id","polling_url"],"type":"object"},"BFLHTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/BFLValidationError"},"title":"Detail","type":"array"}},"title":"HTTPValidationError","type":"object"},"BFLOutputFormat":{"enum":["jpeg","png","webp"],"title":"OutputFormat","type":"string"},"BFLValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"title":"Location","type":"array"},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationError","type":"object"},"BFLVideoUpscaleV1Request":{"description":"Request body for the BFL Flux Tools Video Upscale v1 API. Charges are based on the delivered output only; input resolution and upscale factor are not billed separately.","example":{"input_video":"https://example.com/clip.mp4","upscale_factor":2},"properties":{"creativity":{"default":1,"description":"0 preserves the source precisely and sharpens it; 1 allows creative detail enhancement, which does not strictly preserve faces or products.","maximum":1,"minimum":0,"type":"integer"},"input_video":{"description":"Video to upscale, either an HTTP(S) URL or a base64-encoded MP4. At most 20 seconds of source footage and 50MB.","type":"string"},"prompt":{"description":"Optional description of the clip's content, steering the enhanced detail. Leave empty for a neutral upscale.","type":"string"},"safety_tolerance":{"default":2,"description":"Tolerance level for prompt and output frame moderation, 0 being most strict.","maximum":4,"minimum":0,"type":"integer"},"upscale_factor":{"default":2,"description":"Output scaling relative to the source resolution. The output preserves the source aspect ratio and is capped at roughly 14.4 megapixels per frame, so very large sources scale by less than the requested factor.","format":"float","maximum":3,"minimum":1.5,"type":"number"},"webhook_secret":{"description":"Optional secret for webhook signature verification.","type":"string"},"webhook_url":{"description":"URL to receive webhook notifications.","format":"uri","maxLength":2083,"minLength":1,"type":"string"}},"required":["input_video"],"type":"object"},"BFLVtoV1Request":{"description":"Request body for the BFL Flux Tools VTO v1 virtual try-on API.","properties":{"garment":{"description":"Image of one or more garments (maps internally to input_image_2).","type":"string"},"output_format":{"$ref":"#/components/schemas/BFLOutputFormat"},"person":{"description":"Person image (maps internally to input_image).","type":"string"},"prompt":{"description":"Text prompt for VTO generation.","example":"TRY-ON: The person of image 1 wearing the garments of image 2.","type":"string"},"safety_tolerance":{"default":2,"description":"Tolerance level for input and output moderation. Between 0 and 5 for public use.","maximum":5,"minimum":0,"type":"integer"},"seed":{"description":"Optional seed for reproducibility.","example":42,"type":"integer"},"webhook_secret":{"description":"Optional secret for webhook signature verification.","type":"string"},"webhook_url":{"description":"URL to receive webhook notifications.","format":"uri","maxLength":2083,"minLength":1,"type":"string"}},"required":["prompt","person","garment"],"type":"object"},"BeebleAlphaMode":{"description":"Alpha mode: auto, fill, custom, or select","enum":["auto","fill","custom","select"],"type":"string"},"BeebleCreateSwitchXRequest":{"description":"Request to create and start a SwitchX generation job.","properties":{"alpha_mode":{"$ref":"#/components/schemas/BeebleAlphaMode"},"alpha_uri":{"description":"URI of a custom alpha matte. Required when alpha_mode is custom or select. Ignored for auto or fill.","nullable":true,"type":"string"},"callback_url":{"description":"HTTPS URL for webhook notification on completion or failure.","nullable":true,"type":"string"},"generation_type":{"$ref":"#/components/schemas/BeebleGenerationType"},"idempotency_key":{"description":"Idempotency key for safe retries. If a job with the same key already exists for your account, the API returns the existing job's status instead of creating a duplicate.","maxLength":256,"minLength":1,"nullable":true,"type":"string"},"max_resolution":{"default":1080,"description":"Maximum output resolution: 720 or 1080 (default: 1080).","nullable":true,"type":"integer"},"prompt":{"description":"Text description of desired output (max 2,000 chars). At least one of prompt or reference_image_uri is required.","maxLength":2000,"nullable":true,"type":"string"},"reference_image_uri":{"description":"URI of the reference image for style transfer. Accepts the same URI types as source_uri.","nullable":true,"type":"string"},"source_uri":{"description":"URI of the source image or video. Accepts beeble://uploads/{id}/{filename}, https URLs, or data:{mime};base64 URIs (max 50 MB).","type":"string"}},"required":["generation_type","source_uri","alpha_mode"],"type":"object"},"BeebleGenerationType":{"description":"Output type: image or video","enum":["image","video"],"type":"string"},"BeebleSwitchXOutputUrls":{"description":"Signed URLs for SwitchX job outputs.","properties":{"alpha":{"description":"Alpha matte URL.","nullable":true,"type":"string"},"render":{"description":"Composited output URL.","nullable":true,"type":"string"},"source":{"description":"Preprocessed source URL.","nullable":true,"type":"string"}},"type":"object"},"BeebleSwitchXStatusResponse":{"description":"Status response for a SwitchX job.","properties":{"alpha_mode":{"description":"auto, fill, custom, or select","nullable":true,"type":"string"},"completed_at":{"description":"ISO 8601 timestamp when the job completed or failed.","nullable":true,"type":"string"},"created_at":{"description":"ISO 8601 timestamp when the job was created.","nullable":true,"type":"string"},"error":{"description":"Error message (present when status is failed).","nullable":true,"type":"string"},"generation_type":{"description":"image or video","nullable":true,"type":"string"},"id":{"description":"Job identifier (swx_...)","type":"string"},"modified_at":{"description":"ISO 8601 timestamp of the last status change.","nullable":true,"type":"string"},"output":{"allOf":[{"$ref":"#/components/schemas/BeebleSwitchXOutputUrls"}],"description":"Output URLs (present when status is completed). URLs are signed and expire after 72 hours; re-fetch this endpoint for fresh URLs.","nullable":true},"progress":{"description":"Progress percentage (0-100).","nullable":true,"type":"integer"},"status":{"description":"Current job status.","enum":["in_queue","processing","completed","failed"],"type":"string"},"webhook":{"allOf":[{"$ref":"#/components/schemas/BeebleWebhookStatus"}],"description":"Webhook delivery status (present only when callback_url was provided).","nullable":true}},"required":["id","status"],"type":"object"},"BeebleUploadRequest":{"description":"Request to create a presigned upload URL.","properties":{"filename":{"description":"Filename with extension. Accepted: .mp4, .mov, .png, .jpg, .jpeg, .webp","maxLength":255,"minLength":3,"type":"string"}},"required":["filename"],"type":"object"},"BeebleUploadResponse":{"description":"Response with presigned upload URL and beeble:// URI.","properties":{"beeble_uri":{"description":"beeble:// URI to reference this file in SwitchX generation calls (source_uri, reference_image_uri, or alpha_uri).","type":"string"},"id":{"description":"Upload ID (upload_...)","type":"string"},"upload_url":{"description":"Presigned PUT URL for uploading your file. Expires after 1 hour.","type":"string"}},"required":["id","upload_url","beeble_uri"],"type":"object"},"BeebleWebhookStatus":{"description":"Webhook delivery status for a SwitchX job.","properties":{"attempts":{"description":"Number of delivery attempts so far.","nullable":true,"type":"integer"},"last_error":{"description":"Error message from the last failed delivery attempt.","nullable":true,"type":"string"},"status":{"description":"pending, delivered, or failed","nullable":true,"type":"string"}},"type":"object"},"BriaAsyncResponse":{"description":"Asynchronous response from Bria API (202 Accepted)","properties":{"request_id":{"description":"Unique identifier for the request.","type":"string"},"status_url":{"description":"URL to poll for the result.","type":"string"},"warning":{"description":"Optional warning message.","type":"string"}},"type":"object"},"BriaEraseRequest":{"description":"Request body for Bria Eraser API","properties":{"image":{"description":"The image to edit. Supported input types are Base64-encoded string or URL pointing to a publicly accessible image file. Accepted formats JPEG, JPG, PNG, WEBP.","type":"string"},"mask":{"description":"The mask defining the area to erase. Base64-encoded string or URL pointing to a publicly accessible image file. White pixels (255) mark the region to remove, black pixels (0) are preserved.","type":"string"},"mask_type":{"description":"The type of mask provided, either \"manual\" (default) or \"automatic\".","type":"string"},"preserve_alpha":{"description":"Controls whether partially transparent areas from the input image are retained in the output.","type":"boolean"},"sync":{"description":"When false (default), the request is processed asynchronously. When true, the API holds the connection open until complete.","type":"boolean"},"visual_input_content_moderation":{"description":"When enabled, applies content moderation to input visual. Returns 422 if the image fails moderation.","type":"boolean"},"visual_output_content_moderation":{"description":"When enabled, applies content moderation to result visual. Returns 422 if the output fails moderation.","type":"boolean"}},"required":["image","mask"],"type":"object"},"BriaErrorResponse":{"description":"Error response from Bria API","properties":{"error":{"properties":{"code":{"description":"Error code.","type":"integer"},"details":{"description":"Additional error details.","type":"string"},"message":{"description":"Error message.","type":"string"}},"type":"object"},"request_id":{"description":"Unique identifier for the request.","type":"string"}},"type":"object"},"BriaFiboEditRequest":{"description":"Request body for Bria FIBO Edit API","properties":{"guidance_scale":{"default":5,"description":"Determines how closely the generated image should adhere to the instruction.","format":"float","maximum":5,"minimum":3,"type":"number"},"images":{"description":"The source image to be edited. Publicly available URL or Base64-encoded. Accepted formats JPEG, JPG, PNG, WEBP. Must contain exactly one item.","items":{"type":"string"},"maxItems":1,"minItems":1,"type":"array"},"instruction":{"description":"Text-based edit instruction (e.g., \"make the sky blue\", \"add a cat\"). Either instruction or structured_instruction must be provided.","type":"string"},"ip_signal":{"default":false,"description":"If true, returns a warning for potential IP content in the instruction.","type":"boolean"},"mask":{"description":"Optional mask image URL or Base64-encoded. Black areas will be preserved, white areas will be edited.","type":"string"},"model_version":{"default":"FIBO","description":"The version of the model to use.","enum":["FIBO"],"type":"string"},"negative_prompt":{"description":"A text prompt specifying concepts, styles, or objects to exclude from the edited image.","type":"string"},"prompt_content_moderation":{"default":true,"description":"If true, returns 422 on instruction moderation failure.","type":"boolean"},"seed":{"description":"Seed for deterministic generation. If omitted, a random seed is used.","type":"integer"},"steps_num":{"default":50,"description":"Number of diffusion steps.","maximum":50,"minimum":20,"type":"integer"},"structured_instruction":{"description":"A string containing the structured edit instruction in JSON format. Use this instead of instruction for precise, programmatic control.","type":"string"},"visual_input_content_moderation":{"default":true,"description":"If true, returns 422 on images or mask moderation failure.","type":"boolean"},"visual_output_content_moderation":{"default":true,"description":"If true, returns 422 on visual output moderation failure.","type":"boolean"}},"required":["images"],"type":"object"},"BriaGenFillRequest":{"description":"Request body for Bria Generative Fill API","properties":{"image":{"description":"The image to edit. Supported input types are Base64-encoded string or URL pointing to a publicly accessible image file. Accepted formats JPEG, JPG, PNG, WEBP.","type":"string"},"mask":{"description":"The mask defining the area to fill. Base64-encoded string or URL pointing to a publicly accessible image file. White pixels (255) mark the region to generate into, black pixels (0) are preserved.","type":"string"},"negative_prompt":{"description":"A text prompt specifying concepts, styles, or objects to exclude from the generated area.","type":"string"},"preserve_alpha":{"description":"Controls whether partially transparent areas from the input image are retained in the output.","type":"boolean"},"prompt":{"description":"Text description of what to generate inside the masked area.","type":"string"},"prompt_content_moderation":{"description":"When enabled, applies content moderation to the prompt. Returns 422 if the prompt fails moderation.","type":"boolean"},"refine_prompt":{"description":"When true (default), the prompt is automatically adjusted for optimal generation results.","type":"boolean"},"seed":{"description":"Seed for deterministic generation. If omitted, a random seed is used.","type":"integer"},"sync":{"description":"When false (default), the request is processed asynchronously. When true, the API holds the connection open until complete.","type":"boolean"},"visual_input_content_moderation":{"description":"When enabled, applies content moderation to input visual. Returns 422 if the image fails moderation.","type":"boolean"},"visual_output_content_moderation":{"description":"When enabled, applies content moderation to result visual. Returns 422 if the output fails moderation.","type":"boolean"}},"required":["image","mask","prompt"],"type":"object"},"BriaImageExpansionRequest":{"description":"Request body for Bria Image Expansion API","properties":{"aspect_ratio":{"description":"Aspect ratio of the expanded canvas, either a predefined ratio string (\"1:1\", \"2:3\", \"3:2\", \"3:4\", \"4:3\", \"4:5\", \"5:4\", \"9:16\", \"16:9\") or a float between 0.5 and 3.0. When provided, canvas_size, original_image_size, and original_image_location are ignored."},"canvas_size":{"description":"Width and height of the expanded canvas in pixels. Defaults to [1000, 1000]. Maximum canvas area is 5000x5000 pixels.","items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"image":{"description":"The image to expand. Supported input types are Base64-encoded string or URL pointing to a publicly accessible image file. Accepted formats JPEG, JPG, PNG, WEBP.","type":"string"},"negative_prompt":{"description":"A text prompt specifying concepts, styles, or objects to exclude from the expanded area.","type":"string"},"original_image_location":{"description":"Position [x, y] of the original image's top-left corner on the canvas. Required together with original_image_size when aspect_ratio is not provided.","items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"original_image_size":{"description":"Width and height of the original image placed on the canvas. Required together with original_image_location when aspect_ratio is not provided.","items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"preserve_alpha":{"description":"Controls whether partially transparent areas from the input image are retained in the output.","type":"boolean"},"prompt":{"description":"Text prompt guiding the content generated in the expanded area. Auto-generated when omitted.","type":"string"},"prompt_content_moderation":{"description":"When enabled, applies content moderation to the prompt. Returns 422 if the prompt fails moderation.","type":"boolean"},"seed":{"description":"Seed for deterministic generation. If omitted, a random seed is used.","type":"integer"},"sync":{"description":"When false (default), the request is processed asynchronously. When true, the API holds the connection open until complete.","type":"boolean"},"visual_input_content_moderation":{"description":"When enabled, applies content moderation to input visual. Returns 422 if the image fails moderation.","type":"boolean"},"visual_output_content_moderation":{"description":"When enabled, applies content moderation to result visual. Returns 422 if the output fails moderation.","type":"boolean"}},"required":["image"],"type":"object"},"BriaImageRemoveBackgroundRequest":{"description":"Request body for Bria Image Remove Background API","properties":{"image":{"description":"The image to remove background from. Supported input types are Base64-encoded string or URL pointing to a publicly accessible image file. Accepted formats JPEG, JPG, PNG, WEBP.","type":"string"},"preserve_alpha":{"description":"Controls whether partially transparent areas from the input image are retained in the output after background removal.","type":"boolean"},"sync":{"description":"When false (default), the request is processed asynchronously. When true, the API holds the connection open until complete.","type":"boolean"},"visual_input_content_moderation":{"description":"When enabled, applies content moderation to input visual. Returns 422 if the image fails moderation.","type":"boolean"},"visual_output_content_moderation":{"description":"When enabled, applies content moderation to result visual. Returns 422 if the output fails moderation.","type":"boolean"}},"required":["image"],"type":"object"},"BriaIncreaseResolutionRequest":{"description":"Request body for Bria Increase Resolution API","properties":{"desired_increase":{"description":"Resolution multiplier to apply. Supported values are 2 and 4. Maximum output resolution is 8192x8192.","type":"integer"},"image":{"description":"The image to upscale. Supported input types are Base64-encoded string or URL pointing to a publicly accessible image file. Accepted formats JPEG, JPG, PNG, WEBP.","type":"string"},"preserve_alpha":{"description":"Controls whether partially transparent areas from the input image are retained in the output.","type":"boolean"},"sync":{"description":"When false (default), the request is processed asynchronously. When true, the API holds the connection open until complete.","type":"boolean"},"visual_input_content_moderation":{"description":"When enabled, applies content moderation to input visual. Returns 422 if the image fails moderation.","type":"boolean"},"visual_output_content_moderation":{"description":"When enabled, applies content moderation to result visual. Returns 422 if the output fails moderation.","type":"boolean"}},"required":["image"],"type":"object"},"BriaStatusNotFoundResponse":{"description":"Response when request_id is not found or expired","properties":{"status":{"enum":["NOT_FOUND"],"type":"string"}},"required":["status"],"type":"object"},"BriaStatusResponse":{"description":"Status response from Bria API","properties":{"error":{"description":"Error object (only present when status is ERROR)","properties":{"code":{"description":"Error code.","type":"integer"},"details":{"description":"Additional error details.","type":"string"},"message":{"description":"Error message.","type":"string"}},"type":"object"},"request_id":{"description":"Unique identifier for the request.","type":"string"},"result":{"description":"Result object (only present when status is COMPLETED)","properties":{"image_url":{"description":"URL of the generated/edited image.","type":"string"},"prompt":{"description":"Original prompt.","type":"string"},"refined_prompt":{"description":"Refined version of the prompt.","type":"string"},"seed":{"description":"Seed used for generation.","type":"integer"},"structured_prompt":{"description":"The detailed JSON structured prompt.","type":"string"},"video_url":{"description":"URL of the generated video.","type":"string"}},"type":"object"},"status":{"description":"Current status of the request.","enum":["IN_PROGRESS","COMPLETED","ERROR","UNKNOWN"],"type":"string"}},"type":"object"},"BriaStructuredInstructionRequest":{"description":"Request body for Bria Structured Instruction Generate API","properties":{"images":{"description":"The source image to be edited. Publicly available URL or Base64-encoded. Must contain exactly one item.","items":{"type":"string"},"maxItems":1,"minItems":1,"type":"array"},"instruction":{"description":"Required. Text-based edit instruction (e.g., \"make the sky blue\", \"add a cat\").","type":"string"},"ip_signal":{"default":false,"description":"If true, returns a warning for potential IP content in the instruction.","type":"boolean"},"mask":{"description":"Optional mask image URL or Base64-encoded. Black areas will be preserved, white areas will be edited.","type":"string"},"prompt_content_moderation":{"default":true,"description":"If true, returns 422 on instruction moderation failure.","type":"boolean"},"seed":{"description":"Seed for deterministic generation. If omitted, a random seed is used.","type":"integer"},"visual_input_content_moderation":{"default":true,"description":"If true, returns 422 on images or mask moderation failure.","type":"boolean"}},"required":["images","instruction"],"type":"object"},"BriaVideoGreenScreenRequest":{"description":"Request body for Bria Video Green Screen API","properties":{"green_shade":{"description":"The solid background shade applied behind the foreground for chroma keying. Defaults to broadcast_green.","enum":["broadcast_green","chroma_green","blue_screen"],"type":"string"},"output_container_and_codec":{"description":"Output container and codec preset.","enum":["mp4_h264","mp4_h265","webm_vp9","mov_h265","mov_proresks","mkv_h264","mkv_h265","mkv_vp9","gif"],"type":"string"},"preserve_audio":{"description":"Whether to preserve audio from the input video.","type":"boolean"},"video":{"description":"Publicly accessible URL of the input video. Input resolution supported up to 16000x16000 (16K). Max duration 60 seconds.","type":"string"}},"required":["video"],"type":"object"},"BriaVideoRemoveBackgroundRequest":{"description":"Request body for Bria Video Remove Background API","properties":{"background_color":{"description":"Background color for the output video. If Transparent, the output codec must support alpha.","enum":["Transparent","Black","White","Gray","Red","Green","Blue","Yellow","Cyan","Magenta","Orange"],"type":"string"},"output_container_and_codec":{"description":"Output container and codec preset.","enum":["mp4_h264","mp4_h265","webm_vp9","mov_h265","mov_proresks","mkv_h264","mkv_h265","mkv_vp9","gif"],"type":"string"},"preserve_audio":{"description":"Whether to preserve audio from the input video.","type":"boolean"},"video":{"description":"Publicly accessible URL of the input video. Input resolution supported up to 16000x16000 (16K). Max duration 60 seconds.","type":"string"}},"required":["video"],"type":"object"},"BriaVideoReplaceBackgroundRequest":{"description":"Request body for Bria Video Replace Background API","properties":{"background_url":{"description":"Publicly accessible URL of the background asset (image or video) to composite behind the foreground. Must match the foreground aspect ratio.","type":"string"},"output_container_and_codec":{"description":"Output container and codec preset.","enum":["mp4_h264","mp4_h265","webm_vp9","mov_h265","mov_proresks","mkv_h264","mkv_h265","mkv_vp9","gif"],"type":"string"},"preserve_audio":{"description":"Whether to preserve audio from the input (foreground) video.","type":"boolean"},"video":{"description":"Publicly accessible URL of the input (foreground) video. Input resolution supported up to 16000x16000 (16K). Max duration 60 seconds.","type":"string"}},"required":["video","background_url"],"type":"object"},"BulkNodeVersionResult":{"properties":{"error_message":{"description":"Error message if retrieval failed (only present if status is error)","type":"string"},"identifier":{"$ref":"#/components/schemas/NodeVersionIdentifier"},"node_version":{"$ref":"#/components/schemas/NodeVersion"},"status":{"description":"Status of the retrieval operation","enum":["success","not_found","error"],"type":"string"}},"required":["identifier","status"],"type":"object"},"BulkNodeVersionsRequest":{"properties":{"node_versions":{"description":"List of node ID and version pairs to retrieve","items":{"$ref":"#/components/schemas/NodeVersionIdentifier"},"type":"array"}},"required":["node_versions"],"type":"object"},"BulkNodeVersionsResponse":{"properties":{"node_versions":{"description":"List of retrieved node versions with their status","items":{"$ref":"#/components/schemas/BulkNodeVersionResult"},"type":"array"}},"required":["node_versions"],"type":"object"},"BytePlusFile":{"description":"File object returned by POST /api/v3/files and GET /api/v3/files/{id}. See https://docs.byteplus.com/en/docs/ModelArk/1873424.\n","properties":{"bytes":{"description":"File size in bytes. Returned only when status is `active`.","type":"integer"},"created_at":{"description":"Unix timestamp (seconds) when the file was uploaded.","type":"integer"},"error":{"description":"Error details returned only when status is `failed`.","nullable":true,"properties":{"code":{"description":"Error code.","type":"string"},"message":{"description":"Error description.","type":"string"}},"type":"object"},"expire_at":{"description":"Unix timestamp (seconds) when the file expires.","type":"integer"},"id":{"description":"The unique ID of the file.","type":"string"},"mime_type":{"description":"MIME type of the file. Returned only when status is `active`.","type":"string"},"object":{"description":"Fixed to `file`.","type":"string"},"preprocess_configs":{"$ref":"#/components/schemas/BytePlusFilePreprocessConfigs"},"purpose":{"description":"The purpose of the file.","type":"string"},"status":{"description":"Processing status of the file.","enum":["processing","active","failed"],"type":"string"}},"type":"object"},"BytePlusFilePreprocessConfigs":{"description":"Preprocessing rules applied to the uploaded file by file type.","nullable":true,"properties":{"video":{"nullable":true,"properties":{"fps":{"default":1,"description":"Number of frames per second sampled from the video at upload\ntime. Higher values capture more detail but consume more tokens\nduring inference (range [10k, 80k] tokens per video).\n","format":"float","maximum":5,"minimum":0.2,"nullable":true,"type":"number"},"model":{"description":"Video-understanding model ID or endpoint ID whose frame-sampling\nstrategy should be applied during preprocessing. If omitted, the\npre-`seed-1.8` default strategy is used.\n","type":"string"}},"type":"object"}},"type":"object"},"BytePlusFileUploadRequest":{"description":"Multipart upload payload for POST /api/v3/files. The binary `file` is required; everything else mirrors the upstream optional fields. See https://docs.byteplus.com/en/docs/ModelArk/1870405.\n","properties":{"expire_at":{"description":"Unix timestamp (seconds, UTC) at which the file should be expired.\nRange: [now + 86400, now + 2592000] (1 day to 30 days).\nDefault: now + 604800 (7 days).\n","type":"integer"},"file":{"description":"The binary file to upload.","format":"binary","type":"string"},"preprocess_configs":{"$ref":"#/components/schemas/BytePlusFilePreprocessConfigs"},"purpose":{"default":"user_data","description":"Purpose of the uploaded file. `user_data` is a general-purpose value\nand the only one currently documented by BytePlus.\n","type":"string"}},"required":["file","purpose"],"type":"object"},"BytePlusImageGenerationRequest":{"properties":{"guidance_scale":{"description":"Controls how closely the output image aligns with the input prompt. Range [1, 10]. Higher values result in stronger prompt adherence. Default 2.5 for seedream-3-0-t2i-250415 and 5.5 for seededit-3-0-i2i-250628. Not supported by seedream-5.0-pro, 5.0-lite, 4.5 and 4.0.","format":"float","maximum":10,"minimum":1,"type":"number"},"image":{"description":"Seedream-5.0-pro, 5.0-lite, 4.5 and 4.0, and seededit-3.0-i2i support this parameter.\n\nEnter the Base64 encoding or an accessible URL of the image to edit. Seedream-5.0-pro, 5.0-lite, 4.5 and 4.0 support inputting a single image or multiple images (see the multi-image blending example), while seededit-3.0-i2i only supports single-image input.\n\n• Image URL: Make sure that the image URL is accessible.\n• Base64 encoding: The format must be data:image/\u003cimage format\u003e;base64,\u003cBase64 encoding\u003e. Note: \u003cimage format\u003e must be in lowercase, e.g., data:image/png;base64,\u003cbase64_image\u003e.\n\nAn input image must meet the following requirements:\n• Image format: jpeg, png (seedream-5.0-pro, 5.0-lite, 4.5 and 4.0 also support webp, bmp, tiff and gif; seedream-5.0-pro also supports heic and heif)\n• Aspect ratio (width/height): In the range [1/16, 16] for seedream-5.0-pro, 5.0-lite, 4.5 and 4.0; [1/3, 3] for seededit-3.0-i2i\n• Width and height (px): \u003e 14\n• Size: No more than 10 MB (30 MB for seedream-5.0-pro)\n• Total pixels: No more than 6000x6000 (36,000,000 px) for seedream-5.0-pro\n• Maximum of 14 reference images (10 for seedream-5.0-pro)\n\nIn the layer-separation scenario (layer_decomposition enabled), image is required and only a single input image is supported (passing multiple images returns an error). Input images must be png, jpeg, webp, bmp, tiff or gif (heic and heif are not supported), up to 30 MB, with total pixels in the range [512x512, 6000x6000] and aspect ratio in [1/16, 16].\n","oneOf":[{"description":"Single image (URL or Base64)","type":"string"},{"description":"Multiple images (URLs or Base64) - supported by seedream-5.0-pro, 5.0-lite, 4.5 and 4.0","items":{"type":"string"},"maxItems":14,"type":"array"}]},"layer_decomposition":{"default":false,"description":"Controls whether layer separation is enabled. Only seedream-5.0-pro supports this parameter.\ntrue: Layer-separation mode. The model decomposes the single input image into one base image plus multiple layers (up to 16), and returns the position and content information of each produced layer, including the stacking order (z_index), bounding box (bounding_box), name (name) and description (description).\nfalse: Standard image-generation mode; no layer separation is performed.\nNotes on layer-separation mode: only a single input image is supported (passing multiple images returns an error); if any single layer fails to generate, the whole request fails — partial success is not supported; at most 17 images are returned (1 base image + 16 layers). sequential_image_generation, sequential_image_generation_options, tools and stream return an error if passed.\n","type":"boolean"},"model":{"enum":["seedream-3-0-t2i-250415","seededit-3-0-i2i-250628","seedream-4-0-250828","seedream-4-5-251128","seedream-5-0-260128","seedream-5-0-pro-260628"],"type":"string"},"optimize_prompt_options":{"description":"Configuration for prompt optimization feature. Only seedream-5.0-pro/5.0-lite/4.5 (only support standard mode) and seedream-4.0 support this parameter.\n","properties":{"mode":{"default":"standard","description":"Set the mode for the prompt optimization feature. standard = Higher quality, longer generation time. fast = Faster but at a more average quality.","enum":["standard","fast"],"type":"string"}},"type":"object"},"output_format":{"default":"jpeg","description":"Specifies the format of the output image. Only seedream-5.0-pro and 5.0-lite support this parameter. In the layer-separation scenario, output_format only controls the format of the base image; every layer is always output as png.","enum":["png","jpeg"],"type":"string"},"prompt":{"description":"Text description for image generation or transformation.\nOptional in the layer-separation scenario (seedream-5.0-pro with layer_decomposition enabled): if a prompt is provided, the model recognizes and separates the elements you specify according to the prompt intent; if no prompt is provided, the model automatically detects all major elements in the image and separates them into independent layers.\n","type":"string"},"response_format":{"default":"url","description":"Specifies the format of the generated image returned in the response","enum":["url","b64_json"],"type":"string"},"seed":{"default":-1,"description":"Random seed to control the stochasticity of image generation. Range: [-1, 2147483647]. If not specified, a seed will be automatically generated. To reproduce the same output, use the same seed value.","type":"integer"},"sequential_image_generation":{"description":"Controls whether to disable the batch generation feature. This parameter is only supported on seedream-5.0-lite, 4.5 and 4.0 (not supported by seedream-5.0-pro). Valid values:\nauto: In automatic mode, the model automatically determines whether to return multiple images and how many images it will contain based on the user's prompt.\ndisabled: Disables batch generation feature. The model will only generate one image.\n","type":"string"},"sequential_image_generation_options":{"description":"Only seedream-5.0-lite, 4.5 and 4.0 support this parameter (not supported by seedream-5.0-pro).\nConfiguration for the batch image generation feature. This parameter is only effective when sequential_image_generation is set to auto.\n","properties":{"max_images":{"default":15,"description":"Specifies the maximum number of images to generate in this request. Number of input reference images + Number of generated images ≤ 15.","maximum":15,"minimum":1,"type":"integer"}},"type":"object"},"size":{"description":"\"seedream-3-0-t2i-250415\": Specifies the dimensions (width x height in pixels) of the generated image. Must be between [512x512, 2048x2048]\n\"seededit-3-0-i2i-250628\": The width and height pixels of the generated image. Currently only supports adaptive.\n\"seedream-4-0-250828\": Set the specification for the generated image. Two methods are available but cannot be used together.\n Method 1 | Specify the resolution. Optional values: 1K, 2K, 4K\n Method 2 | Specify width and height in pixels. Default: 2048x2048, total pixels: [1024x1024, 4096x4096], aspect ratio: [1/16, 16]\n\"seedream-4-5-251128\": Two methods available.\n Method 1 | Specify the resolution. Optional values: 2K, 4K\n Method 2 | Specify width and height in pixels. Default: 2048x2048, total pixels: [2560x1440, 4096x4096], aspect ratio: [1/16, 16]\n\"seedream-5-0-260128\": Two methods available.\n Method 1 | Specify the resolution. Optional values: 2K, 3K\n Method 2 | Specify width and height in pixels. Default: 2048x2048, total pixels: [2560x1440, ~3072x3072], aspect ratio: [1/16, 16]\n\"seedream-5-0-pro-260628\": Two methods available (cannot be used together).\n Method 1 | Specify the resolution and describe the aspect ratio, shape or purpose of the image in the prompt; the model decides the final size. Optional values: 1K, 2K\n Method 2 | Specify width and height in pixels. Default: 1024x1024, total pixels: [1024x1024 (1048576), 2048x2048 (4194304)], aspect ratio: [1/16, 16]\n\"seedream-5-0-pro-260628\" with layer_decomposition enabled: Only the resolution-level method is supported. Optional values: 1K, 1.5K, 2K, auto. Default: auto.\n The base image is output at the specified resolution with the aspect ratio of the original input image; each layer is output close to the specified resolution, keeping the aspect ratio it had in the original image.\n auto: Output is based on the size and aspect ratio of the input image. Inputs within [1280x720, ~2048x2048] are output at the original input size; inputs smaller than 1K are output at 1K; inputs larger than 2K are output at 2K.\n","type":"string"},"stream":{"default":false,"description":"Whether to enable streaming output mode. Only seedream-5.0-lite, 4.5 and 4.0 support this parameter (not supported by seedream-5.0-pro). false = All output images are returned at once. true = Each output image is returned immediately after generated.","type":"boolean"},"watermark":{"default":true,"description":"Specifies whether to add a watermark to the generated image. false = No watermark, true = Adds watermark with 'AI generated' label","type":"boolean"}},"required":["model"],"type":"object"},"BytePlusImageGenerationResponse":{"properties":{"created":{"description":"Unix timestamp (in seconds) indicating the time when the request was created","type":"integer"},"data":{"description":"Contains information about the generated image(s).\nIn the layer-separation scenario, the first element of the array is the base image (z_index=0), and the following elements are the layers, ordered by increasing z_index.\n","items":{"properties":{"b64_json":{"description":"Base64-encoded image data (if response_format is \"b64_json\")","type":"string"},"bounding_box":{"description":"The bounding-box information of the region that the current layer occupies within the base image. Only layers return this field; the base image covers the whole canvas and does not return bounding_box. Returned only when layer_decomposition is true.","properties":{"absolute":{"description":"The absolute pixel coordinates of the layer's bounding box, in the output base image's coordinate system with the top-left corner at (0, 0). Coordinate format: [left, top, right, bottom].","items":{"type":"integer"},"type":"array"},"normalized":{"description":"The per-mille quantized (normalized) coordinates of the layer's bounding box, proportionally mapped to a discrete integer range of [0, 1000] based on the base image size, truncated at a maximum of 1000. Coordinate format: [left, top, right, bottom].","items":{"type":"integer"},"type":"array"}},"type":"object"},"description":{"description":"A detailed description of the current separated element, providing richer layer characteristics (such as color, state, material) than name. Only layers return this field; the base image does not. Returned only when layer_decomposition is true.","type":"string"},"name":{"description":"The name/label of the current separated element, automatically generated by the model from the characteristics of the separated subject. Only layers return this field; the base image does not. Returned only when layer_decomposition is true.","type":"string"},"output_format":{"description":"The file format of the output image. Only seedream-5.0-pro supports this field.","type":"string"},"size":{"description":"The width and height of the image in pixels, in the format \u003cwidth\u003ex\u003cheight\u003e. Only seedream-5.0-pro, 5.0-lite, 4.5 and 4.0 support this parameter.","type":"string"},"url":{"description":"URL for image download (if response_format is \"url\")","format":"uri","type":"string"},"z_index":{"description":"The stacking order of the layer, increasing from bottom to top: 0 is the bottom-most layer (the base image); larger values sit higher. Use it to recompose the layers into the complete image at the correct stacking order. Returned only when layer_decomposition is true.","type":"integer"}},"type":"object"},"type":"array"},"error":{"description":"Error information (if any)","properties":{"code":{"description":"Error code","type":"string"},"message":{"description":"Error message","type":"string"}},"type":"object"},"model":{"description":"The model ID used for the request","example":"seedream-3-0-t2i-250415","type":"string"},"usage":{"properties":{"generated_images":{"description":"Number of images generated by the model","type":"integer"},"input_images":{"description":"The number of images input to the model. Only seedream-5.0-pro supports this field.","type":"integer"},"output_tokens":{"description":"The number of tokens used for the picture generated by the model.","type":"integer"},"total_tokens":{"description":"The total number of tokens consumed by this request.","type":"integer"}},"type":"object"}},"type":"object"},"BytePlusMediaKitEnhanceVideoRequest":{"properties":{"bit_depth":{"description":"Output colour bit depth, one of 8, 10 or 12. Only supported by the professional tool version.","type":"integer"},"bitrate":{"description":"Target average bitrate in kbps, in the range 10 to 150000. Overrides bitrate_level.","type":"integer"},"bitrate_level":{"description":"Target bitrate level, one of low, medium (default) or high.","type":"string"},"callback_url":{"description":"URL notified when the task completes.","type":"string"},"enhance_style":{"description":"Enhancement style, either hd (default) or natural.","type":"string"},"fps":{"description":"Output frame rate up to 120. Defaults to the source frame rate; a higher value triggers frame interpolation.","type":"number"},"resolution":{"description":"Output resolution level, one of 720p, 1080p, 2k or 4k. Mutually exclusive with resolution_limit.","type":"string"},"resolution_limit":{"description":"Locks the short side of the output to this pixel value in the range 64 to 2160 and scales the long side proportionally. Mutually exclusive with resolution.","type":"integer"},"scene":{"description":"Scene preset, one of aigc, short_series, ugc or old_film. Only effective for the standard tool version.","type":"string"},"tool_version":{"description":"Enhancement tier, either standard or professional. Defaults to standard. The professional tier costs ten times the standard tier.","type":"string"},"video_url":{"description":"Publicly reachable HTTP or HTTPS URL of the source video. Input resolution is supported up to 2K and the recommended maximum file size is 10 GB.","type":"string"}},"required":["video_url"],"type":"object"},"BytePlusMediaKitEnhanceVideoResponse":{"properties":{"request_id":{"type":"string"},"success":{"type":"boolean"},"task_id":{"description":"The ID used to poll the task.","type":"string"}},"type":"object"},"BytePlusMediaKitTaskError":{"properties":{"code":{"description":"The provider error code, for example DownloadFileError.","type":"string"},"message":{"description":"The failure reason.","type":"string"},"type":{"description":"The error class, for example BadRequest.","type":"string"}},"type":"object"},"BytePlusMediaKitTaskResponse":{"properties":{"created_at":{"type":"integer"},"error":{"$ref":"#/components/schemas/BytePlusMediaKitTaskError"},"expires_at":{"type":"integer"},"finished_at":{"type":"integer"},"queue_id":{"type":"string"},"request_id":{"type":"string"},"result":{"$ref":"#/components/schemas/BytePlusMediaKitTaskResult"},"status":{"description":"The task state. completed is the terminal success state.","type":"string"},"success":{"type":"boolean"},"task_id":{"type":"string"},"task_type":{"type":"string"}},"type":"object"},"BytePlusMediaKitTaskResult":{"properties":{"duration":{"description":"Duration of the output video in seconds.","format":"double","type":"number"},"fps":{"description":"Frame rate of the output video.","format":"double","type":"number"},"resolution":{"description":"Resolution tier of the output video, determined by its short side.","type":"string"},"tool_version":{"type":"string"},"video_url":{"description":"Download URL of the enhanced video, valid for 24 hours.","type":"string"}},"type":"object"},"BytePlusResponseAppliedContextEdit":{"description":"One applied context-edit, discriminated by `type`.","discriminator":{"mapping":{"clear_thinking":"#/components/schemas/BytePlusResponseAppliedContextEditClearThinking","clear_tool_uses":"#/components/schemas/BytePlusResponseAppliedContextEditClearToolUses"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BytePlusResponseAppliedContextEditClearThinking"},{"$ref":"#/components/schemas/BytePlusResponseAppliedContextEditClearToolUses"}]},"BytePlusResponseAppliedContextEditClearThinking":{"additionalProperties":true,"properties":{"cleared_thinking_turns":{"description":"Number of reasoning turns that were removed.","type":"integer"},"type":{"default":"clear_thinking","enum":["clear_thinking"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseAppliedContextEditClearToolUses":{"additionalProperties":true,"properties":{"cleared_tool_uses":{"description":"Number of tool invocations that were removed.","type":"integer"},"type":{"default":"clear_tool_uses","enum":["clear_tool_uses"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseAppliedContextManagement":{"additionalProperties":true,"description":"Context-management strategies that were actually applied during this response. Unlike the request-side `BytePlusResponseContextManagement` (which configures strategies), this echoes the strategies the server invoked, with counts of what was cleared.\n","properties":{"applied_edits":{"items":{"$ref":"#/components/schemas/BytePlusResponseAppliedContextEdit"},"type":"array"}},"type":"object"},"BytePlusResponseContextEdit":{"description":"A single context-edit strategy, discriminated by `type`.","discriminator":{"mapping":{"clear_thinking":"#/components/schemas/BytePlusResponseContextEditClearThinking","clear_tool_uses":"#/components/schemas/BytePlusResponseContextEditClearToolUses"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BytePlusResponseContextEditClearThinking"},{"$ref":"#/components/schemas/BytePlusResponseContextEditClearToolUses"}]},"BytePlusResponseContextEditClearThinking":{"additionalProperties":true,"description":"Clears chain-of-thought content per the `keep` strategy.","properties":{"keep":{"oneOf":[{"additionalProperties":true,"properties":{"type":{"default":"thinking_turns","enum":["thinking_turns"],"type":"string"},"value":{"default":1,"description":"Retain chain-of-thought for the most recent N turns.","type":"integer"}},"required":["type"],"type":"object"},{"description":"Retain all chain-of-thought.","enum":["all"],"type":"string"}]},"type":{"default":"clear_thinking","enum":["clear_thinking"],"type":"string"}},"required":["type","keep"],"type":"object"},"BytePlusResponseContextEditClearToolUses":{"additionalProperties":true,"description":"Clears tool-call content when the conversation exceeds a threshold.","properties":{"clear_tool_input":{"default":false,"description":"Whether to clear tool-call parameters.","type":"boolean"},"exclude_tools":{"description":"Tool names that are never cleared.","items":{"type":"string"},"type":"array"},"keep":{"additionalProperties":true,"properties":{"type":{"default":"tool_uses","enum":["tool_uses"],"type":"string"},"value":{"default":3,"description":"Retain tool-call content for the most recent N turns.","type":"integer"}},"required":["type"],"type":"object"},"trigger":{"additionalProperties":true,"properties":{"type":{"default":"tool_uses","enum":["tool_uses"],"type":"string"},"value":{"description":"Trigger cleanup when tool-call turns reach N.","type":"integer"}},"required":["type","value"],"type":"object"},"type":{"default":"clear_tool_uses","enum":["clear_tool_uses"],"type":"string"}},"required":["type","keep","trigger"],"type":"object"},"BytePlusResponseContextManagement":{"additionalProperties":true,"description":"Context-management strategies (`clear_thinking`, `clear_tool_uses`) applied to keep the context window manageable.\n","properties":{"edits":{"items":{"$ref":"#/components/schemas/BytePlusResponseContextEdit"},"type":"array"}},"type":"object"},"BytePlusResponseCreateRequest":{"additionalProperties":true,"properties":{"caching":{"additionalProperties":true,"description":"Context-cache configuration.","properties":{"prefix":{"default":false,"description":"When true, only create the public prefix cache; the model does not respond.\n","type":"boolean"},"type":{"enum":["enabled","disabled"],"type":"string"}},"type":"object"},"context_management":{"$ref":"#/components/schemas/BytePlusResponseContextManagement"},"expire_at":{"description":"Unix timestamp (seconds, UTC) at which the stored response and cache expire. Range (creation_time, creation_time + 604800]. Default: creation_time + 259200 (3 days).\n","type":"integer"},"include":{"description":"Additional output fields to include. Currently supported: `reasoning.encrypted_content` (encrypted+compressed reasoning for manual multi-turn reuse).\n","items":{"type":"string"},"type":"array"},"input":{"description":"Text content or list of input items provided to the model.","oneOf":[{"description":"Plain text input, equivalent to a single user message.","type":"string"},{"items":{"$ref":"#/components/schemas/BytePlusResponseInputItem"},"type":"array"}]},"instructions":{"description":"System/developer message prepended as the first instruction. Not compatible with `caching` — if `caching.type` is `enabled`, setting `instructions` returns an error.\n","nullable":true,"type":"string"},"max_output_tokens":{"description":"Maximum output tokens (response + chain-of-thought).","nullable":true,"type":"integer"},"max_tool_calls":{"maximum":10,"minimum":1,"type":"integer"},"model":{"description":"Model ID or Endpoint ID. See https://docs.byteplus.com/en/docs/ModelArk/1330310 for the model list and https://docs.byteplus.com/en/docs/ModelArk/1099522 for Endpoint IDs.\n","type":"string"},"previous_response_id":{"description":"ID of the previous response, used to continue a multi-turn conversation. Insert ~100ms between requests to avoid failures.\n","nullable":true,"type":"string"},"reasoning":{"additionalProperties":true,"description":"Limits the workload of deep thinking.","properties":{"effort":{"description":"`minimal` disables thinking entirely. With `thinking.type =\ndisabled`, only `minimal` is allowed.\n","enum":["minimal","low","medium","high"],"type":"string"}},"type":"object"},"store":{"default":true,"description":"When true, the response is persisted and retrievable by ID for multi-turn use.\n","nullable":true,"type":"boolean"},"temperature":{"default":1,"format":"float","maximum":2,"minimum":0,"nullable":true,"type":"number"},"text":{"additionalProperties":true,"description":"Output-format configuration.","properties":{"format":{"$ref":"#/components/schemas/BytePlusResponseTextFormat"}},"type":"object"},"thinking":{"additionalProperties":true,"description":"Controls deep-thinking mode.","properties":{"type":{"description":"`enabled`: always reason before responding.\n`disabled`: respond without additional reasoning.\n`auto`: model decides per-query.\n","enum":["enabled","disabled","auto"],"type":"string"}},"type":"object"},"tool_choice":{"description":"Tool-selection mode. Only seed-1-6 models support this field.","oneOf":[{"enum":["none","auto","required"],"type":"string"},{"$ref":"#/components/schemas/BytePlusResponseToolChoiceObject"}]},"tools":{"items":{"$ref":"#/components/schemas/BytePlusResponseTool"},"type":"array"},"top_p":{"default":0.7,"format":"float","maximum":1,"minimum":0,"nullable":true,"type":"number"}},"required":["model","input"],"type":"object"},"BytePlusResponseError":{"description":"Error details. Null when the response succeeded.","nullable":true,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"BytePlusResponseInputFile":{"additionalProperties":true,"description":"File input (currently PDF only). Provide exactly one of `file_id`, `file_data`, or `file_url`. `filename` is required with `file_data`.\n","properties":{"file_data":{"description":"Base64-encoded file (single file \u003c= 50 MB).","type":"string"},"file_id":{"description":"ID of a file uploaded via the Files API. Must be `active`.","type":"string"},"file_url":{"description":"Publicly accessible URL (single file \u003c= 50 MB).","type":"string"},"filename":{"description":"Required when `file_data` is set.","type":"string"},"type":{"enum":["input_file"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseInputFunctionCall":{"additionalProperties":true,"description":"A tool/function invocation produced by the model in a prior turn.","properties":{"arguments":{"description":"JSON-encoded string of the function arguments.","type":"string"},"call_id":{"description":"Unique ID of the tool call generated by the model.","type":"string"},"name":{"type":"string"},"status":{"type":"string"},"type":{"enum":["function_call"],"type":"string"}},"required":["type","arguments","call_id","name"],"type":"object"},"BytePlusResponseInputFunctionCallOutput":{"additionalProperties":true,"description":"Output returned by a tool, paired with the function_call via call_id.","properties":{"call_id":{"type":"string"},"output":{"type":"string"},"status":{"type":"string"},"type":{"enum":["function_call_output"],"type":"string"}},"required":["type","call_id","output"],"type":"object"},"BytePlusResponseInputImage":{"additionalProperties":true,"properties":{"detail":{"default":"auto","enum":["high","low","auto"],"type":"string"},"file_id":{"description":"ID of a file uploaded via the Files API. Must be `active`.","type":"string"},"image_pixel_limit":{"additionalProperties":true,"description":"Optional pixel-count bounds. Overrides `detail` when set. Image pixel count must stay in [196, 36_000_000].\n","nullable":true,"properties":{"max_pixels":{"type":"integer"},"min_pixels":{"type":"integer"}},"type":"object"},"image_url":{"description":"Image URL or `data:image/...;base64,...` payload.","type":"string"},"type":{"enum":["input_image"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseInputItem":{"description":"One entry in the `input` array of a Responses request. Discriminated by the `type` field. See https://docs.byteplus.com/en/docs/ModelArk/1585128.\n","discriminator":{"mapping":{"function_call":"#/components/schemas/BytePlusResponseInputFunctionCall","function_call_output":"#/components/schemas/BytePlusResponseInputFunctionCallOutput","message":"#/components/schemas/BytePlusResponseInputMessage","reasoning":"#/components/schemas/BytePlusResponseInputReasoning"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BytePlusResponseInputMessage"},{"$ref":"#/components/schemas/BytePlusResponseInputFunctionCall"},{"$ref":"#/components/schemas/BytePlusResponseInputFunctionCallOutput"},{"$ref":"#/components/schemas/BytePlusResponseInputReasoning"}]},"BytePlusResponseInputMessage":{"additionalProperties":true,"description":"A message sent to the model (or a stored prior message when `status` is set). Role precedence: developer/system \u003e user; assistant messages represent prior model output.\n","properties":{"content":{"oneOf":[{"description":"Plain text content, equivalent to a single input_text item.","type":"string"},{"items":{"$ref":"#/components/schemas/BytePlusResponseMessageContent"},"type":"array"}]},"partial":{"description":"Enables Continuation mode. Set the last message's role to `assistant` and `partial` to true; the model continues from its existing content.\n","type":"boolean"},"role":{"enum":["user","system","assistant","developer"],"type":"string"},"status":{"description":"Status of a previously stored message. Only used when echoing previous inputs back to the model.\n","enum":["in_progress","completed","incomplete"],"type":"string"},"type":{"default":"message","enum":["message"],"type":"string"}},"required":["type","role","content"],"type":"object"},"BytePlusResponseInputReasoning":{"additionalProperties":true,"description":"Chain-of-thought block. Used both as input (manual reasoning injection for seed-1-8, seed-2-0, deepseek-v3-2) and as a response output item. As input, prefer `previous_response_id` in multi-turn conversations.\n","properties":{"content":{"description":"Original (un-summarized) reasoning content. Returned on output items; not used on input.\n","items":{"additionalProperties":true,"properties":{"text":{"type":"string"},"type":{"default":"reasoning_text","enum":["reasoning_text"],"type":"string"}},"required":["type"],"type":"object"},"type":"array"},"encrypted_content":{"description":"Encrypted+compressed original reasoning content. Returned only when `reasoning.encrypted_content` is in the request's `include` list. Supported from seed-2-0-pro-260328.\n","type":"string"},"id":{"type":"string"},"status":{"enum":["in_progress","completed","incomplete"],"type":"string"},"summary":{"items":{"additionalProperties":true,"properties":{"text":{"type":"string"},"type":{"default":"summary_text","enum":["summary_text"],"type":"string"}},"required":["type"],"type":"object"},"type":"array"},"type":{"enum":["reasoning"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseInputText":{"additionalProperties":true,"properties":{"text":{"type":"string"},"translation_options":{"additionalProperties":true,"description":"Translation-scenario configuration. Only supported by seed-translation-250728.\n","properties":{"source_language":{"type":"string"},"target_language":{"type":"string"}},"required":["target_language"],"type":"object"},"type":{"enum":["input_text"],"type":"string"}},"required":["type","text"],"type":"object"},"BytePlusResponseInputVideo":{"additionalProperties":true,"properties":{"file_id":{"description":"ID of a file uploaded via the Files API. Must be `active`.","type":"string"},"fps":{"description":"Frames-per-second extracted from the video.","format":"float","maximum":5,"minimum":0.2,"type":"number"},"type":{"enum":["input_video"],"type":"string"},"video_url":{"description":"Video URL or `data:video/...;base64,...` payload.","type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseMessageContent":{"description":"One content item inside a message. Discriminated by `type`: `input_text` for text, `input_image` for images, `input_video` for videos, `input_file` for PDF/file uploads. File-backed types may reference a Files API id via `file_id`.\n","discriminator":{"mapping":{"input_file":"#/components/schemas/BytePlusResponseInputFile","input_image":"#/components/schemas/BytePlusResponseInputImage","input_text":"#/components/schemas/BytePlusResponseInputText","input_video":"#/components/schemas/BytePlusResponseInputVideo"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BytePlusResponseInputText"},{"$ref":"#/components/schemas/BytePlusResponseInputImage"},{"$ref":"#/components/schemas/BytePlusResponseInputVideo"},{"$ref":"#/components/schemas/BytePlusResponseInputFile"}]},"BytePlusResponseObject":{"description":"Non-streaming response body returned by POST /api/v3/responses. See https://docs.byteplus.com/en/docs/ModelArk/1783703.\n","properties":{"caching":{"additionalProperties":true,"properties":{"prefix":{"type":"boolean"},"type":{"enum":["enabled","disabled"],"type":"string"}},"type":"object"},"context_management":{"$ref":"#/components/schemas/BytePlusResponseAppliedContextManagement"},"created_at":{"description":"Unix timestamp (seconds) when the response was created.","type":"integer"},"error":{"$ref":"#/components/schemas/BytePlusResponseError"},"expire_at":{"description":"Unix timestamp (seconds) when the stored response expires.","type":"integer"},"id":{"description":"Unique ID of the response. Use as `previous_response_id` to continue the conversation.","type":"string"},"incomplete_details":{"additionalProperties":true,"description":"Populated when `status` is `incomplete`.","nullable":true,"properties":{"reason":{"description":"e.g. `max_output_tokens`, `content_filter`.","type":"string"}},"type":"object"},"instructions":{"description":"Echo of the request's `instructions` field.","nullable":true,"type":"string"},"max_output_tokens":{"nullable":true,"type":"integer"},"max_tool_calls":{"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"model":{"description":"Model ID that generated the response.","type":"string"},"object":{"default":"response","enum":["response"],"type":"string"},"output":{"description":"Ordered output items produced by the model.","items":{"$ref":"#/components/schemas/BytePlusResponseOutputItem"},"type":"array"},"previous_response_id":{"nullable":true,"type":"string"},"reasoning":{"additionalProperties":true,"properties":{"effort":{"enum":["minimal","low","medium","high"],"type":"string"}},"type":"object"},"service_tier":{"description":"TPM-guarantee-package usage. `default` means none.","enum":["default"],"type":"string"},"status":{"enum":["in_progress","completed","incomplete","failed","cancelled"],"type":"string"},"store":{"nullable":true,"type":"boolean"},"stream":{"nullable":true,"type":"boolean"},"temperature":{"format":"float","nullable":true,"type":"number"},"text":{"additionalProperties":true,"description":"Echo of the request's `text` field.","properties":{"format":{"$ref":"#/components/schemas/BytePlusResponseTextFormat"}},"type":"object"},"thinking":{"additionalProperties":true,"properties":{"type":{"enum":["enabled","disabled","auto"],"type":"string"}},"type":"object"},"tool_choice":{"oneOf":[{"enum":["none","auto","required"],"type":"string"},{"$ref":"#/components/schemas/BytePlusResponseToolChoiceObject"}]},"tools":{"items":{"$ref":"#/components/schemas/BytePlusResponseTool"},"type":"array"},"top_p":{"format":"float","nullable":true,"type":"number"},"usage":{"$ref":"#/components/schemas/BytePlusResponseUsage"}},"required":["id","object","created_at","model","status","output"],"type":"object"},"BytePlusResponseOutputContent":{"description":"One content block in an assistant message. `output_text` carries natural-language text and optional annotations; `refusal` carries a refusal message.\n","discriminator":{"mapping":{"output_text":"#/components/schemas/BytePlusResponseOutputText","refusal":"#/components/schemas/BytePlusResponseOutputRefusal"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BytePlusResponseOutputText"},{"$ref":"#/components/schemas/BytePlusResponseOutputRefusal"}]},"BytePlusResponseOutputItem":{"description":"One item in a response's `output` array. Discriminated by `type`: `message` for assistant messages, `function_call` for tool invocations, `reasoning` for chain-of-thought blocks. Mirrors the input item shapes the model can read back via `previous_response_id`.\n","discriminator":{"mapping":{"function_call":"#/components/schemas/BytePlusResponseInputFunctionCall","message":"#/components/schemas/BytePlusResponseOutputMessage","reasoning":"#/components/schemas/BytePlusResponseInputReasoning"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BytePlusResponseOutputMessage"},{"$ref":"#/components/schemas/BytePlusResponseInputFunctionCall"},{"$ref":"#/components/schemas/BytePlusResponseInputReasoning"}]},"BytePlusResponseOutputMessage":{"additionalProperties":true,"description":"An assistant message produced by the model.","properties":{"content":{"items":{"$ref":"#/components/schemas/BytePlusResponseOutputContent"},"type":"array"},"id":{"type":"string"},"partial":{"description":"True when this message is a continuation-mode partial reply.","type":"boolean"},"role":{"default":"assistant","enum":["assistant"],"type":"string"},"status":{"enum":["in_progress","completed","incomplete"],"type":"string"},"type":{"default":"message","enum":["message"],"type":"string"}},"required":["type","id","role","content"],"type":"object"},"BytePlusResponseOutputRefusal":{"additionalProperties":true,"properties":{"refusal":{"type":"string"},"type":{"default":"refusal","enum":["refusal"],"type":"string"}},"required":["type","refusal"],"type":"object"},"BytePlusResponseOutputText":{"additionalProperties":true,"properties":{"annotations":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"text":{"type":"string"},"type":{"default":"output_text","enum":["output_text"],"type":"string"}},"required":["type","text"],"type":"object"},"BytePlusResponseTextFormat":{"description":"Text-output format discriminated by `type`. `text` returns natural language, `json_object` returns a free-form JSON object, `json_schema` constrains output to a caller-supplied JSON Schema.\n","discriminator":{"mapping":{"json_object":"#/components/schemas/BytePlusResponseTextFormatJSONObject","json_schema":"#/components/schemas/BytePlusResponseTextFormatJSONSchema","text":"#/components/schemas/BytePlusResponseTextFormatText"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BytePlusResponseTextFormatText"},{"$ref":"#/components/schemas/BytePlusResponseTextFormatJSONObject"},{"$ref":"#/components/schemas/BytePlusResponseTextFormatJSONSchema"}]},"BytePlusResponseTextFormatJSONObject":{"additionalProperties":true,"properties":{"type":{"default":"json_object","enum":["json_object"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseTextFormatJSONSchema":{"additionalProperties":true,"properties":{"description":{"description":"Hint the model uses when generating the response.","nullable":true,"type":"string"},"name":{"description":"Caller-defined name for the JSON structure.","type":"string"},"schema":{"additionalProperties":true,"description":"JSON Schema the model output must conform to.","type":"object"},"strict":{"default":false,"nullable":true,"type":"boolean"},"type":{"default":"json_schema","enum":["json_schema"],"type":"string"}},"required":["type","name","schema"],"type":"object"},"BytePlusResponseTextFormatText":{"additionalProperties":true,"properties":{"type":{"default":"text","enum":["text"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseTool":{"additionalProperties":true,"description":"A tool the model may invoke. Currently only `function` is supported.","properties":{"description":{"type":"string"},"name":{"type":"string"},"parameters":{"additionalProperties":true,"description":"JSON Schema describing the function's parameters.","type":"object"},"type":{"default":"function","enum":["function"],"type":"string"}},"required":["type","name","parameters"],"type":"object"},"BytePlusResponseToolChoiceObject":{"additionalProperties":true,"description":"Forces the model to call a specific tool. When `type` is `function`, `name` is required.\n","properties":{"name":{"type":"string"},"type":{"enum":["function"],"type":"string"}},"required":["type"],"type":"object"},"BytePlusResponseUsage":{"description":"Token-usage breakdown for billing and observability.","properties":{"input_tokens":{"description":"Total tokens in the request.","type":"integer"},"input_tokens_details":{"additionalProperties":true,"description":"Breakdown of input tokens (cache hits, etc).","properties":{"cached_tokens":{"description":"Tokens served from the context cache.","type":"integer"}},"type":"object"},"output_tokens":{"description":"Total tokens generated by the model.","type":"integer"},"output_tokens_details":{"additionalProperties":true,"description":"Breakdown of output tokens (reasoning, etc).","properties":{"reasoning_tokens":{"description":"Tokens consumed by chain-of-thought.","type":"integer"}},"type":"object"},"tool_usage":{"additionalProperties":true,"description":"Per-tool invocation counts.","properties":{"image_process":{"description":"Number of image-processing tool calls.","type":"integer"},"mcp":{"description":"Number of MCP tool calls.","type":"integer"},"web_search":{"description":"Number of web-search tool invocations.","type":"integer"}},"type":"object"},"tool_usage_details":{"additionalProperties":true,"description":"Per-tool breakdown of sub-tool invocation counts.","properties":{"image_process":{"additionalProperties":true,"description":"e.g. `{\"zoom\":1,\"point\":1,\"grounding\":1}`.","type":"object"},"mcp":{"additionalProperties":true,"description":"e.g. `{\"mcp_server_tos\":1,\"mcp_server_tls\":1}`.","type":"object"},"web_search":{"additionalProperties":true,"description":"e.g. `{\"toutiao\":1,\"moji\":1,\"search_engine\":1}`.","type":"object"}},"type":"object"},"total_tokens":{"description":"input_tokens + output_tokens.","type":"integer"}},"required":["input_tokens","output_tokens","total_tokens"],"type":"object"},"BytePlusTTSAudioConfig":{"description":"Output audio configuration.","properties":{"enable_subtitle":{"description":"Whether to enable the subtitle service. When enabled, the response includes utterance- and word-level timestamps (default: false).\n","type":"boolean"},"format":{"description":"Output audio format: wav (default), mp3, pcm or ogg_opus.","type":"string"},"loudness_rate":{"description":"-50 to 100; 100 means 2.0x volume, -50 means 0.5x volume (default: 0).","type":"integer"},"pitch_rate":{"description":"-12 to 12 (default: 0).","type":"integer"},"sample_rate":{"description":"Output sample rate: 8000, 16000, 24000 (default), 32000, 44100 or 48000.","type":"integer"},"speech_rate":{"description":"-50 to 100; 100 means 2.0x speed, -50 means 0.5x speed (default: 0).","type":"integer"}},"type":"object"},"BytePlusTTSCreateRequest":{"description":"Request body for a BytePlus Seed Audio 1.0 generation.","properties":{"audio_config":{"$ref":"#/components/schemas/BytePlusTTSAudioConfig"},"model":{"description":"Model identifier. Supported models: seed-audio-1.0 and seed-audio-1.0-multilingual.","type":"string"},"references":{"description":"Reference resources. Omit for text-only generation. Up to 3 audio references (each up to 30 seconds and 10 MB; wav, mp3, pcm or ogg_opus) or exactly 1 image reference (up to 10 MB; jpeg, png or webp). Image references cannot be mixed with audio references.\n","items":{"$ref":"#/components/schemas/BytePlusTTSReference"},"type":"array"},"text_prompt":{"description":"Prompt or text to synthesize (max 3,000 characters). When audio references are provided, reference them by order using @Audio1, @Audio2 and @Audio3.\n","maxLength":3000,"type":"string"},"watermark":{"$ref":"#/components/schemas/BytePlusTTSWatermark"}},"required":["model","text_prompt"],"type":"object"},"BytePlusTTSCreateResponse":{"description":"Response body for a BytePlus Seed Audio 1.0 generation.","properties":{"audio":{"description":"Generated audio data, Base64-encoded.","type":"string"},"code":{"description":"Status code. Refer to the official error-code document for details.","type":"integer"},"duration":{"description":"Duration after speed or post-processing, in seconds.","format":"double","type":"number"},"message":{"description":"Status details.","type":"string"},"original_duration":{"description":"Original model output duration in seconds. Used for billing and capped at 120 seconds.","format":"double","type":"number"},"subtitle":{"$ref":"#/components/schemas/BytePlusTTSSubtitle"},"url":{"description":"Temporary audio URL, valid for 2 hours.","type":"string"}},"type":"object"},"BytePlusTTSReference":{"description":"A single reference resource. For an audio reference, provide exactly one of speaker, audio_data or audio_url. For an image reference, provide exactly one of image_data or image_url.\n","properties":{"audio_data":{"description":"Base64-encoded reference audio.","type":"string"},"audio_url":{"description":"URL of a remote reference audio file.","type":"string"},"image_data":{"description":"Base64-encoded reference image.","type":"string"},"image_url":{"description":"URL of a remote reference image.","type":"string"},"speaker":{"description":"Voice ID. Can be a supported Doubao TTS voice or a voice-clone voice ID.","type":"string"}},"type":"object"},"BytePlusTTSSubtitle":{"description":"Subtitle information for the audio. Present only when audio_config.enable_subtitle is set to true in the request.\n","properties":{"sentences":{"description":"Utterance-level subtitle information.","items":{"$ref":"#/components/schemas/BytePlusTTSSubtitleSegment"},"type":"array"},"text":{"description":"Subtitle text corresponding to the audio.","type":"string"},"words":{"description":"Word-level subtitle information.","items":{"$ref":"#/components/schemas/BytePlusTTSSubtitleSegment"},"type":"array"}},"type":"object"},"BytePlusTTSSubtitleSegment":{"description":"A single subtitle segment with timestamps.","properties":{"end_time":{"description":"Segment end time, in milliseconds from the beginning of the audio.","type":"integer"},"start_time":{"description":"Segment start time, in milliseconds from the beginning of the audio.","type":"integer"},"text":{"description":"The complete text of the segment.","type":"string"}},"type":"object"},"BytePlusTTSWatermark":{"description":"Watermark configuration object. An empty object is accepted.","properties":{"aigc_metadata":{"description":"Implicit watermark. Adds metadata to the synthesized audio header.","properties":{"content_producer":{"description":"Name or code of the synthesis service provider.","type":"string"},"content_propagator":{"description":"Name or code of the content distribution service provider.","type":"string"},"enable":{"description":"Whether to enable the implicit watermark (default: false).","type":"boolean"},"produce_id":{"description":"Content production ID.","type":"string"},"propagate_id":{"description":"Content distribution ID.","type":"string"}},"type":"object"},"aigc_watermark":{"description":"Explicit watermark switch. Adds an audio rhythm marker at the end of the synthesized audio (default: false).\n","type":"boolean"}},"type":"object"},"BytePlusVideoGenerationContent":{"properties":{"audio_url":{"description":"Input audio object. Only Seedance 2.5, 2.0 \u0026 2.0 fast support audio input. Seedance 2.0 \u0026 2.0 fast cannot use audio alone - they must include at least 1 image or video; Seedance 2.5 supports audio-only input.","properties":{"url":{"description":"Audio URL, Base64 encoding, or Asset ID.\nAudio URL: Public URL of the audio (wav, mp3).\nBase64: Format data:audio/\u003cformat\u003e;base64,\u003ccontent\u003e\nAsset ID: Format asset://\u003cASSET_ID\u003e\n","type":"string"}},"type":"object"},"image_url":{"properties":{"url":{"description":"Image content for image-to-video generation (when type is \"image_url\")\nImage URL: Make sure that the image URL is accessible.\nBase64-encoded content: Format must be data:image/\u003cformat\u003e;base64,\u003ccontent\u003e\nAsset ID: Format asset://\u003cASSET_ID\u003e\n","type":"string"}},"type":"object"},"role":{"description":"The role/position of the content item.\nFor images: first_frame, last_frame, or reference_image.\nFor videos: reference_video (Seedance 2.5, 2.0 \u0026 2.0 fast only).\nFor audio: reference_audio (Seedance 2.5, 2.0 \u0026 2.0 fast only).\n","enum":["first_frame","last_frame","reference_image","reference_video","reference_audio"],"type":"string"},"text":{"description":"The input text information for the model. Includes text prompt and optional parameters.\n\nText prompt (required): Description of the video to be generated using Chinese and English characters.\n\nParameters (optional): Add --[parameters] after the text prompt to control video specifications:\n- --resolution (--rs): 480p, 720p, 1080p (default: 720p)\n- --ratio (--rt): 21:9, 16:9, 4:3, 1:1, 3:4, 9:16, 9:21, adaptive (default: 16:9 or adaptive)\n- --duration (--dur): 3-12 seconds (default: 5)\n- --framepersecond (--fps): 24 (default: 24)\n- --watermark (--wm): true/false (default: false)\n- --seed (--seed): -1 to 2^32-1 (default: -1)\n- --camerafixed (--cf): true/false (default: false)\n\nExample: \"A beautiful landscape --ratio 16:9 --resolution 720p --duration 5\"\n","maxLength":4096,"type":"string"},"type":{"description":"The type of the input content","enum":["text","image_url","video_url","audio_url"],"type":"string"},"video_url":{"description":"Input video object. Only Seedance 2.5, 2.0 \u0026 2.0 fast support video input.","properties":{"url":{"description":"Video URL or Asset ID.\nVideo URL: Public URL of the video (mp4, mov).\nAsset ID: Format asset://\u003cASSET_ID\u003e\n","type":"string"}},"type":"object"}},"required":["type"],"type":"object"},"BytePlusVideoGenerationQueryResponse":{"properties":{"content":{"description":"The output after the video generation task is completed, which contains the download URL of the output video and, when BytePlus returns one, the download URL of its last frame. Both `video_url` and `last_frame_url` are RE-HOSTED onto Comfy storage; every other field here is BytePlus's own. Nullable - BytePlus clears the URLs 24 hours after the task, and a succeeded document polled after that can carry `content` absent or null.","nullable":true,"properties":{"last_frame_url":{"description":"Download URL for the last frame of the generated video, returned when the request set `return_last_frame`. Do not infer the image format from this URL: BytePlus documents the last frame as PNG on the request side, Router re-hosts whatever bytes it is served and types them from the upstream Content-Type or a content sniff, and `image/jpeg` is only the last-resort fallback when both fail. Router re-hosts the last frame onto Comfy storage and rewrites this field, so it is normally a Comfy-signed URL valid for up to 24 hours - signed for 24 hours when minted and replayed from a 23-hour memo, so a later poll can hand back one with as little as an hour left. When the re-host could not be performed the field keeps BytePlus's own URL instead, which BytePlus clears 24 hours after the task. Either way the link expires, so download the frame rather than storing the URL.","type":"string"},"output_format":{"description":"Container format of the generated video (mp4 or mov), when BytePlus nests it inside `content`. Seedance models more commonly return it as a TOP-LEVEL sibling of `content` - see the top-level `output_format` field - and Router reads whichever of the two is present.","type":"string"},"video_url":{"description":"Download URL for the output video. Router re-hosts the video onto Comfy storage and rewrites this field, so it is normally a Comfy-signed URL valid for up to 24 hours - signed for 24 hours when minted and replayed from a 23-hour memo, so a later poll can hand back one with as little as an hour left. When the re-host could not be performed the field keeps BytePlus's own URL instead, which BytePlus clears 24 hours after the task and caps at 100 downloads on some models. Either way the link expires, so download the video rather than storing the URL.","type":"string"}},"type":"object"},"created_at":{"description":"The time when the task was created. The value is a UNIX timestamp in seconds.","type":"integer"},"duration":{"description":"The duration of the generated video in seconds. Declared as a number rather than an integer because BytePlus is not consistent about it - video tasks have been observed returning whole seconds and sibling BytePlus surfaces report fractional durations - so a client must not assume an integral value. BytePlus's own field, returned on succeeded video tasks and forwarded unchanged.","type":"number"},"error":{"description":"The error information. If the task succeeds, null is returned. If the task fails, the error information is returned.","nullable":true,"properties":{"code":{"description":"The error code","type":"string"},"message":{"description":"The error message","type":"string"}},"type":"object"},"id":{"description":"The ID of the video generation task","type":"string"},"model":{"description":"The name and version of the model used by the task","type":"string"},"output_format":{"description":"Container format of the generated video (mp4 or mov), returned at the TOP LEVEL as a sibling of `content` - this is where the Seedance video task query returns it. BytePlus's own field, forwarded unchanged.","type":"string"},"resolution":{"description":"The resolution of the generated video, for example `1080p`. BytePlus's own field, returned on succeeded video tasks and forwarded unchanged.","type":"string"},"seed":{"description":"The generation seed actually used for the task. BytePlus's own field, returned on succeeded video tasks and forwarded unchanged.","format":"int64","type":"integer"},"status":{"description":"The state of the task","enum":["queued","running","cancelled","succeeded","failed","expired"],"type":"string"},"updated_at":{"description":"The time when the task was last updated. The value is a UNIX timestamp in seconds.","type":"integer"},"usage":{"description":"The token usage for the request","properties":{"completion_tokens":{"description":"The number of tokens generated by the model","type":"integer"},"total_tokens":{"description":"For the video generation model, the number of input tokens is not calculated and defaults to 0. Therefore, total_tokens = completion_tokens.","type":"integer"}},"type":"object"}},"type":"object"},"BytePlusVideoGenerationRequest":{"properties":{"callback_url":{"description":"Callback notification address for the result of this generation task","format":"uri","type":"string"},"content":{"description":"The input content for the model to generate a video","items":{"$ref":"#/components/schemas/BytePlusVideoGenerationContent"},"minItems":1,"type":"array"},"duration":{"description":"Video duration in seconds. Seedance 2.5: [4,30] or -1 (auto; video editing tasks support only -1). Seedance 2.0 \u0026 2.0 fast: [4,15] or -1 (auto). Seedance 1.5 pro: [4,12] or -1. Seedance 1.0: [2,12].\n","type":"integer"},"execution_expires_after":{"description":"Task timeout threshold in seconds. Default 172800 (48h). Range: [3600, 259200].\n","type":"integer"},"generate_audio":{"default":true,"description":"Supported by Seedance 2.5, 2.0, 2.0 fast, and 1.5 pro. Whether the generated video includes audio synchronized with the visuals.\ntrue: The model outputs a video with synchronized audio.\nfalse: The model outputs a silent video.\n","type":"boolean"},"model":{"description":"The ID of the model to call. Available models include seedance-1-5-pro-251215, seedance-1-0-pro-250528, seedance-1-0-pro-fast-251015, seedance-1-0-lite-t2v-250428, seedance-1-0-lite-i2v-250428","enum":["seedance-1-5-pro-251215","seedance-1-0-pro-250528","seedance-1-0-lite-t2v-250428","seedance-1-0-lite-i2v-250428","seedance-1-0-pro-fast-251015","dreamina-seedance-2-0-260128","dreamina-seedance-2-0-fast-260128","dreamina-seedance-2-0-mini","dreamina-seedance-2-5-260628"],"type":"string"},"output_format":{"default":"mp4","description":"Seedance 2.5 only. Container format of the output video.\nmp4: General-purpose container (H.264/AAC, yuv420p) with broad compatibility and smaller file size.\nmov: Professional container (H.264 High 4:4:4 Predictive/PCM, yuv444p) with high color precision, suited for post-production; larger file size.\n","type":"string"},"ratio":{"description":"Aspect ratio of the generated video. Seedance 2.0 \u0026 2.0 fast, 1.5 pro default: adaptive.\n","enum":["16:9","4:3","1:1","3:4","9:16","21:9","adaptive"],"type":"string"},"resolution":{"description":"Video resolution. Seedance 2.5, 2.0 \u0026 2.0 fast, 1.5 pro, 1.0 lite default: 720p. Seedance 1.0 pro \u0026 pro-fast default: 1080p.\nNote: Seedance 2.0 \u0026 2.0 fast do not support 1080p. Seedance 2.5 supports 480p, 720p, and 1080p.\n","enum":["480p","720p","1080p","4k"],"type":"string"},"return_last_frame":{"default":false,"description":"Whether to return the last frame image of the generated video.\ntrue: Returns the last frame image of the generated video. After setting this parameter to true, you can obtain the last frame image by calling the Querying the information about a video generation task. The last frame image is in PNG format, with its pixel width and height consistent with those of the generated video, and it contains no watermarks. Using this parameter allows the generation of multiple consecutive videos: the last frame of the previously generated video is used as the first frame of the next video task, enabling quick generation of multiple consecutive videos.\nfalse: Does not return the last frame image of the generated video.\n","type":"boolean"},"seed":{"description":"Seed integer for controlling randomness. Range: [-1, 2^32-1]. -1 uses a random seed.\n","type":"integer"},"service_tier":{"description":"Service tier for processing. Seedance 2.5, 2.0 \u0026 2.0 fast do not support flex (offline inference).\n","enum":["default","flex"],"type":"string"},"watermark":{"default":false,"description":"Whether the generated video includes a watermark.","type":"boolean"}},"required":["model","content"],"type":"object"},"BytePlusVideoGenerationResponse":{"properties":{"id":{"description":"The ID of the video generation task","type":"string"}},"required":["id"],"type":"object"},"ClaimMyNodeRequest":{"properties":{"GH_TOKEN":{"description":"GitHub token to verify if the user owns the repo of the node","type":"string"}},"required":["GH_TOKEN"],"type":"object"},"ComfyCloudCancellationStatus":{"enum":["cancellation_requested","unchanged"],"type":"string"},"ComfyCloudTaskStatus":{"enum":["queued","running","completed","failed","cancelled"],"type":"string"},"ComfyNode":{"properties":{"category":{"description":"UI category where the node is listed, used for grouping nodes.","type":"string"},"comfy_node_name":{"description":"Unique identifier for the node","type":"string"},"deprecated":{"description":"Indicates if the node is deprecated. Deprecated nodes are hidden in the UI.","type":"boolean"},"description":{"description":"Brief description of the node's functionality or purpose.","type":"string"},"experimental":{"description":"Indicates if the node is experimental, subject to changes or removal.","type":"boolean"},"function":{"description":"Name of the entry-point function to execute the node.","type":"string"},"input_types":{"description":"Defines input parameters","type":"string"},"output_is_list":{"description":"Boolean values indicating if each output is a list.","items":{"type":"boolean"},"type":"array"},"policy":{"$ref":"#/components/schemas/ComfyNodePolicy"},"return_names":{"description":"Names of the outputs for clarity in workflows.","type":"string"},"return_types":{"description":"Specifies the types of outputs produced by the node.","type":"string"}},"type":"object"},"ComfyNodeCloudBuildInfo":{"properties":{"build_id":{"type":"string"},"location":{"type":"string"},"project_id":{"type":"string"},"project_number":{"type":"string"}},"type":"object"},"ComfyNodePolicy":{"enum":["ComfyNodePolicyActive","ComfyNodePolicyBanned","ComfyNodePolicyLocalOnly"],"type":"string"},"ComfyNodeUpdateRequest":{"properties":{"category":{"description":"UI category where the node is listed, used for grouping nodes.","type":"string"},"deprecated":{"description":"Indicates if the node is deprecated. Deprecated nodes are hidden in the UI.","type":"boolean"},"description":{"description":"Brief description of the node's functionality or purpose.","type":"string"},"experimental":{"description":"Indicates if the node is experimental, subject to changes or removal.","type":"boolean"},"function":{"description":"Name of the entry-point function to execute the node.","type":"string"},"input_types":{"description":"Defines input parameters","type":"string"},"output_is_list":{"description":"Boolean values indicating if each output is a list.","items":{"type":"boolean"},"type":"array"},"policy":{"$ref":"#/components/schemas/ComfyNodePolicy"},"return_names":{"description":"Names of the outputs for clarity in workflows.","type":"string"},"return_types":{"description":"Specifies the types of outputs produced by the node.","type":"string"}},"type":"object"},"ComputerToolCall":{"description":"A tool call to a computer use tool. See the\n[computer use guide](/docs/guides/tools-computer-use) for more information.\n","properties":{"action":{"type":"object"},"call_id":{"description":"An identifier used when responding to the tool call with output.\n","type":"string"},"id":{"description":"The unique ID of the computer call.","type":"string"},"pending_safety_checks":{"description":"The pending safety checks for the computer call.\n","items":{"additionalProperties":true,"type":"object"},"type":"array"},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or\n`incomplete`. Populated when items are returned via API.\n","enum":["in_progress","completed","incomplete"],"type":"string"},"type":{"default":"computer_call","description":"The type of the computer call. Always `computer_call`.","enum":["computer_call"],"type":"string"}},"required":["type","id","action","call_id","pending_safety_checks","status"],"title":"Computer tool call","type":"object"},"ComputerUsePreviewTool":{"description":"A tool that controls a virtual computer. Learn more about the [computer tool](https://platform.openai.com/docs/guides/tools-computer-use).","properties":{"display_height":{"description":"The height of the computer display.","type":"integer"},"display_width":{"description":"The width of the computer display.","type":"integer"},"environment":{"description":"The type of computer environment to control.","enum":["windows","mac","linux","ubuntu","browser"],"type":"string"},"type":{"default":"computer_use_preview","description":"The type of the computer use tool. Always `computer_use_preview`.","enum":["computer_use_preview"],"type":"string","x-stainless-const":true}},"required":["type","environment","display_width","display_height"],"title":"Computer use preview","type":"object"},"CouponResponse":{"properties":{"amount_off":{"description":"Amount off in cents","type":"integer"},"currency":{"description":"Currency for amount_off","type":"string"},"duration":{"description":"How long the coupon lasts","enum":["once","repeating","forever"],"type":"string"},"duration_in_months":{"description":"Number of months for repeating coupons","type":"integer"},"id":{"description":"The Stripe coupon ID","type":"string"},"max_redemptions":{"description":"Maximum number of times this coupon can be redeemed","type":"integer"},"metadata":{"additionalProperties":{"type":"string"},"description":"Set of key-value pairs for storing additional information","type":"object"},"name":{"description":"Name of the coupon displayed to customers","type":"string"},"percent_off":{"description":"Percent off discount (0-100)","format":"double","type":"number"},"redeem_by":{"description":"Unix timestamp specifying the last time at which the coupon can be redeemed","format":"int64","type":"integer"},"times_redeemed":{"description":"Number of times this coupon has been redeemed","type":"integer"},"valid":{"description":"Whether the coupon can still be redeemed","type":"boolean"}},"required":["id","duration","valid"],"type":"object"},"CreateAPIKeyRequest":{"properties":{"description":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"CreateCouponRequest":{"properties":{"amount_off":{"description":"Amount off in cents","minimum":0,"type":"integer"},"currency":{"description":"Currency for amount_off (required if amount_off is set)","enum":["usd"],"type":"string"},"duration":{"default":"once","description":"How long the coupon lasts","enum":["once","repeating","forever"],"type":"string"},"duration_in_months":{"description":"Required if duration is repeating","minimum":1,"type":"integer"},"max_redemptions":{"description":"Maximum number of times this coupon can be redeemed","minimum":1,"type":"integer"},"metadata":{"additionalProperties":{"type":"string"},"description":"Set of key-value pairs for storing additional information","type":"object"},"name":{"description":"Name of the coupon displayed to customers","type":"string"},"percent_off":{"description":"Percent off discount (0-100)","format":"double","maximum":100,"minimum":0,"type":"number"},"redeem_by":{"description":"Unix timestamp specifying the last time at which the coupon can be redeemed","format":"int64","type":"integer"}},"type":"object"},"CreateCustomerRequest":{"description":"Optional request body for customer creation (BE-1490). Carries the Cloudflare Turnstile token produced by the frontend widget, verified server-side at signup, and the originating client build. All fields are optional; clients that do not run the Turnstile widget may send an empty body or omit the body entirely.","properties":{"signup_source":{"description":"The originating client build, from the frontend __DISTRIBUTION__ define (cloud | desktop | localhost). Attribution only — emitted as the signup_source property on the account:created analytics event and never used to gate, exempt, or authorize anything. Unrecognized values are bucketed to \"other\"; omit for clients that do not set it.","type":"string"},"turnstile_token":{"description":"The Cloudflare Turnstile token (cf-turnstile-response) produced by the frontend widget. Verified server-side against Cloudflare siteverify. Omit or leave empty for clients without Turnstile (e.g. local OSS), which are exempt from the verification requirement.","type":"string"}},"type":"object"},"CreateModelResponseProperties":{"allOf":[{"$ref":"#/components/schemas/ModelResponseProperties"},{"properties":{"model":{"$ref":"#/components/schemas/OpenAIModels"}},"type":"object"}]},"CreatePromoCodeRequest":{"properties":{"coupon_id":{"description":"The Stripe coupon ID to create the promotional code for","type":"string"},"expire_days":{"default":30,"description":"Number of days until the promotion code expires","minimum":1,"type":"integer"},"max_redemptions":{"description":"Maximum number of times this code can be redeemed","minimum":1,"type":"integer"}},"required":["coupon_id"],"type":"object"},"Customer":{"properties":{"createdAt":{"description":"The date and time the user was created","format":"date-time","type":"string"},"email":{"description":"The email address for this user","type":"string"},"has_fund":{"description":"Whether the user has funds","type":"boolean"},"id":{"description":"The firebase UID of the user","type":"string"},"is_admin":{"description":"Whether the user is an admin","type":"boolean"},"metronome_id":{"description":"The Metronome customer ID","type":"string"},"name":{"description":"The name for this user","type":"string"},"stripe_id":{"description":"The Stripe customer ID","type":"string"},"subscription_tier":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTier"}],"description":"The cached subscription tier level","nullable":true},"updatedAt":{"description":"The date and time the user was last updated","format":"date-time","type":"string"}},"required":["id"],"type":"object"},"CustomerAdmin":{"properties":{"cloud_subscription_end_date":{"description":"The date when the subscription is set to end (ISO 8601 format)","format":"date-time","nullable":true,"type":"string"},"cloud_subscription_is_active":{"description":"Whether the customer has an active cloud subscription","type":"boolean"},"cloud_subscription_renewal_date":{"description":"The next renewal date for the subscription (ISO 8601 format)","format":"date-time","nullable":true,"type":"string"},"cloud_subscription_subscription_id":{"description":"The active subscription ID if one exists","nullable":true,"type":"string"},"createdAt":{"description":"The date and time the user was created","format":"date-time","type":"string"},"email":{"description":"The email address for this user","type":"string"},"has_fund":{"description":"Whether the user has funds","type":"boolean"},"id":{"description":"The firebase UID of the user","type":"string"},"is_admin":{"description":"Whether the user is an admin","type":"boolean"},"metronome_id":{"description":"The Metronome customer ID","type":"string"},"name":{"description":"The name for this user","type":"string"},"stripe_id":{"description":"The Stripe customer ID","type":"string"},"subscription_tier":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTier"}],"description":"The subscription tier level (e.g. FREE, STANDARD, CREATOR, PRO)","nullable":true},"updatedAt":{"description":"The date and time the user was last updated","format":"date-time","type":"string"}},"required":["id"],"type":"object"},"CustomerStorageResourceResponse":{"properties":{"download_url":{"description":"The signed URL to use for downloading the file from the specified path","type":"string"},"existing_file":{"description":"Whether an existing file with the same hash was found","type":"boolean"},"expires_at":{"description":"When the signed URL will expire","format":"date-time","type":"string"},"upload_url":{"description":"The signed URL to use for uploading the file to the specified path","type":"string"}},"type":"object"},"CustomerUsageTimeSeries":{"description":"Grouped gross spend per billing period, breakdown, and summary for a customer.","properties":{"breakdown":{"description":"Per-group totals over the whole range, ordered by spend descending.","items":{"$ref":"#/components/schemas/UsageBreakdownRow"},"type":"array"},"buckets":{"description":"One entry per (billing period, group) with non-zero gross spend.","items":{"$ref":"#/components/schemas/UsageBucket"},"type":"array"},"ending_before":{"description":"Exclusive end of the returned range.","format":"date-time","type":"string"},"granularity":{"description":"Bucket size of the time series.","enum":["hour","day","month"],"type":"string"},"group_by":{"description":"Dimension the spend is grouped by.","enum":["model","endpoint","product"],"type":"string"},"groups":{"description":"Distinct group keys present in the range, ordered by spend descending.","items":{"type":"string"},"type":"array"},"starting_on":{"description":"Inclusive start of the returned range.","format":"date-time","type":"string"},"summary":{"$ref":"#/components/schemas/UsageSummary"}},"required":["group_by","granularity","starting_on","ending_before","groups","buckets","breakdown","summary"],"type":"object"},"EasyInputMessage":{"description":"A message input to the model with a role indicating instruction following\nhierarchy. Instructions given with the `developer` or `system` role take\nprecedence over instructions given with the `user` role. Messages with the\n`assistant` role are presumed to have been generated by the model in previous\ninteractions.\n","properties":{"content":{"description":"Text, image, or audio input to the model, used to generate a response.\nCan also contain previous assistant responses.\n","oneOf":[{"description":"A text input to the model.\n","title":"Text input","type":"string"},{"$ref":"#/components/schemas/InputMessageContentList"}]},"role":{"description":"The role of the message input. One of `user`, `assistant`, `system`, or\n`developer`.\n","enum":["user","assistant","system","developer"],"type":"string"},"type":{"description":"The type of the message input. Always `message`.\n","enum":["message"],"type":"string","x-stainless-const":true}},"required":["role","content"],"title":"Input message","type":"object"},"ElevenLabsAudioIsolationRequest":{"description":"Request body for audio isolation (removing background noise)","properties":{"audio":{"description":"The audio file from which vocals/speech will be isolated.","format":"binary","type":"string"},"file_format":{"default":"other","description":"The format of input audio. Options are 'pcm_s16le_16' or 'other'.\nFor pcm_s16le_16, the input audio must be 16-bit PCM at a 16kHz sample rate, single channel (mono).\nLatency will be lower than with passing an encoded waveform.\n","enum":["pcm_s16le_16","other"],"nullable":true,"type":"string"},"preview_b64":{"description":"Optional preview image base64 for tracking this generation.","nullable":true,"type":"string"}},"required":["audio"],"type":"object"},"ElevenLabsCreateVoiceRequest":{"description":"Request body for creating an instant voice clone","properties":{"description":{"description":"A description of the voice.","nullable":true,"type":"string"},"files":{"description":"Audio recordings for voice cloning.","items":{"format":"binary","type":"string"},"type":"array"},"labels":{"description":"JSON string of labels for the voice (language, accent, gender, age).","nullable":true,"type":"string"},"name":{"description":"The name that identifies this voice.","type":"string"},"remove_background_noise":{"default":false,"description":"If set, removes background noise from voice samples using audio isolation.","type":"boolean"}},"required":["name","files"],"type":"object"},"ElevenLabsDialogueInput":{"description":"A single dialogue input containing text and voice ID","properties":{"text":{"description":"The text to be converted into speech.","type":"string"},"voice_id":{"description":"The ID of the voice to be used for the generation.","type":"string"}},"required":["text","voice_id"],"type":"object"},"ElevenLabsDialogueSettings":{"description":"Settings controlling the dialogue generation","nullable":true,"properties":{"stability":{"default":0.5,"description":"Determines how stable the voice is and the randomness between each generation.\nLower values introduce broader emotional range for the voice.\nHigher values can result in a monotonous voice with limited emotion.\n","format":"double","nullable":true,"type":"number"}},"type":"object"},"ElevenLabsPronunciationDictionaryLocator":{"description":"Locator for a pronunciation dictionary","properties":{"pronunciation_dictionary_id":{"description":"The ID of the pronunciation dictionary","type":"string"},"version_id":{"description":"The version ID of the pronunciation dictionary","type":"string"}},"required":["pronunciation_dictionary_id","version_id"],"type":"object"},"ElevenLabsSTTAdditionalFormat":{"description":"Additional format response for transcript export","properties":{"content":{"description":"The content of the additional format.","type":"string"},"content_type":{"description":"The content type of the additional format.","type":"string"},"file_extension":{"description":"The file extension of the additional format.","type":"string"},"is_base64_encoded":{"description":"Whether the content is base64 encoded.","type":"boolean"},"requested_format":{"description":"The requested format.","type":"string"}},"required":["requested_format","file_extension","content_type","is_base64_encoded","content"],"type":"object"},"ElevenLabsSTTCharacter":{"description":"Character information with timing","properties":{"end":{"description":"The end time of the character in seconds.","format":"double","nullable":true,"type":"number"},"start":{"description":"The start time of the character in seconds.","format":"double","nullable":true,"type":"number"},"text":{"description":"The character that was transcribed.","type":"string"}},"required":["text"],"type":"object"},"ElevenLabsSTTDetectedEntity":{"description":"Detected entity in transcript","properties":{"end_char":{"description":"End character position in the transcript text.","type":"integer"},"entity_type":{"description":"The type of entity detected (e.g., 'credit_card', 'email_address', 'person_name').","type":"string"},"start_char":{"description":"Start character position in the transcript text.","type":"integer"},"text":{"description":"The text that was identified as an entity.","type":"string"}},"required":["text","entity_type","start_char","end_char"],"type":"object"},"ElevenLabsSTTExportOptions":{"description":"Export format options for speech-to-text transcripts","properties":{"format":{"description":"The output format for the transcript export.","enum":["segmented_json","docx","pdf","txt","html","srt"],"type":"string"},"include_speakers":{"default":true,"description":"Whether to include speaker labels in the export.","type":"boolean"},"include_timestamps":{"default":true,"description":"Whether to include timestamps in the export.","type":"boolean"},"max_characters_per_line":{"description":"Maximum characters per line (for txt and srt formats).","nullable":true,"type":"integer"},"max_segment_chars":{"description":"Maximum number of characters per segment.","nullable":true,"type":"integer"},"max_segment_duration_s":{"description":"Maximum duration of each segment in seconds.","format":"double","nullable":true,"type":"number"},"segment_on_silence_longer_than_s":{"description":"Segment the transcript when silence is longer than this value in seconds.","format":"double","nullable":true,"type":"number"}},"required":["format"],"type":"object"},"ElevenLabsSTTRequest":{"description":"Request body for ElevenLabs Speech-to-Text","properties":{"additional_formats":{"description":"A list of additional formats to export the transcript to.","items":{"$ref":"#/components/schemas/ElevenLabsSTTExportOptions"},"nullable":true,"type":"array"},"cloud_storage_url":{"description":"The HTTPS URL of the file to transcribe. Exactly one of file or cloud_storage_url parameters must be provided.\nThe file must be accessible via HTTPS and the file size must be less than 2GB.\n","nullable":true,"type":"string"},"diarization_threshold":{"description":"Diarization threshold to apply during speaker diarization.\nA higher value means there will be a lower chance of one speaker being diarized as two different speakers.\nCan only be set when diarize=True and num_speakers=None. Defaults to None.\n","format":"double","nullable":true,"type":"number"},"diarize":{"default":false,"description":"Whether to annotate which speaker is currently talking in the uploaded file.","type":"boolean"},"entity_detection":{"description":"Detect entities in the transcript. Can be 'all' to detect all entities,\na single entity type or category string, or a list of entity types/categories.\nCategories include 'pii', 'phi', 'pci', 'other', 'offensive_language'.\nWhen enabled, detected entities will be returned in the 'entities' field\nwith their text, type, and character positions. Usage of this parameter will incur additional costs.\n","nullable":true,"oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"file":{"description":"The file to transcribe. All major audio and video formats are supported.\nExactly one of file or cloud_storage_url parameters must be provided.\nThe file size must be less than 3.0GB.\n","format":"binary","type":"string"},"file_format":{"default":"other","description":"The format of input audio. Options are 'pcm_s16le_16' or 'other'.\nFor pcm_s16le_16, the input audio must be 16-bit PCM at a 16kHz sample rate, single channel (mono).\n","enum":["pcm_s16le_16","other"],"type":"string"},"keyterms":{"description":"A list of keyterms to bias the transcription towards.\nThe number of keyterms cannot exceed 100 and each keyterm must be less than 50 characters.\n","items":{"type":"string"},"nullable":true,"type":"array"},"language_code":{"description":"An ISO-639-1 or ISO-639-3 language_code corresponding to the language of the audio file.\nCan sometimes improve transcription performance if known beforehand.\nDefaults to null, in this case the language is predicted automatically.\n","nullable":true,"type":"string"},"model_id":{"description":"The ID of the model to use for transcription.","enum":["scribe_v1","scribe_v2"],"type":"string"},"num_speakers":{"description":"The maximum amount of speakers talking in the uploaded file.\nCan help with predicting who speaks when. The maximum amount of speakers that can be predicted is 32.\nDefaults to null, in this case the amount of speakers is set to the maximum value the model supports.\n","nullable":true,"type":"integer"},"seed":{"description":"If specified, our system will make a best effort to sample deterministically.\nMust be an integer between 0 and 2147483647.\n","maximum":2147483647,"minimum":0,"nullable":true,"type":"integer"},"tag_audio_events":{"default":true,"description":"Whether to tag audio events like (laughter), (footsteps), etc. in the transcription.","type":"boolean"},"temperature":{"description":"Controls the randomness of the transcription output. Accepts values between 0.0 and 2.0.\nHigher values result in more diverse and less deterministic results.\n","format":"double","nullable":true,"type":"number"},"timestamps_granularity":{"default":"word","description":"The granularity of the timestamps in the transcription.\n'word' provides word-level timestamps and 'character' provides character-level timestamps per word.\n","enum":["none","word","character"],"type":"string"},"use_multi_channel":{"default":false,"description":"Whether the audio file contains multiple channels where each channel contains a single speaker.\nWhen enabled, each channel will be transcribed independently and the results will be combined.\nA maximum of 5 channels is supported.\n","type":"boolean"},"webhook":{"default":false,"description":"Whether to send the transcription result to configured speech-to-text webhooks.\nIf set the request will return early without the transcription, which will be delivered later via webhook.\n","type":"boolean"},"webhook_id":{"description":"Optional specific webhook ID to send the transcription result to.\nOnly valid when webhook is set to true.\n","nullable":true,"type":"string"},"webhook_metadata":{"description":"Optional metadata to be included in the webhook response.\nThis should be a JSON string representing an object with a maximum depth of 2 levels and maximum size of 16KB.\n","nullable":true,"type":"string"}},"required":["model_id"],"type":"object"},"ElevenLabsSTTResponse":{"description":"Response from ElevenLabs Speech-to-Text","properties":{"additional_formats":{"description":"Requested additional formats of the transcript.","items":{"$ref":"#/components/schemas/ElevenLabsSTTAdditionalFormat"},"nullable":true,"type":"array"},"channel_index":{"description":"The channel index this transcript belongs to (for multichannel audio).","nullable":true,"type":"integer"},"entities":{"description":"List of detected entities with their text, type, and character positions.","items":{"$ref":"#/components/schemas/ElevenLabsSTTDetectedEntity"},"nullable":true,"type":"array"},"language_code":{"description":"The detected language code (e.g. 'eng' for English).","type":"string"},"language_probability":{"description":"The confidence score of the language detection (0 to 1).","format":"double","type":"number"},"message":{"description":"Message for webhook responses.","nullable":true,"type":"string"},"request_id":{"description":"Request ID for webhook responses.","nullable":true,"type":"string"},"text":{"description":"The raw text of the transcription.","type":"string"},"transcription_id":{"description":"The transcription ID of the response.","nullable":true,"type":"string"},"transcripts":{"description":"List of transcripts for multichannel audio (when use_multi_channel is true).","items":{"$ref":"#/components/schemas/ElevenLabsSTTTranscript"},"nullable":true,"type":"array"},"words":{"description":"List of words with their timing information.","items":{"$ref":"#/components/schemas/ElevenLabsSTTWord"},"type":"array"}},"type":"object"},"ElevenLabsSTTTranscript":{"description":"Individual transcript for multichannel audio","properties":{"additional_formats":{"description":"Requested additional formats.","items":{"$ref":"#/components/schemas/ElevenLabsSTTAdditionalFormat"},"nullable":true,"type":"array"},"channel_index":{"description":"The channel index this transcript belongs to.","nullable":true,"type":"integer"},"entities":{"description":"List of detected entities.","items":{"$ref":"#/components/schemas/ElevenLabsSTTDetectedEntity"},"nullable":true,"type":"array"},"language_code":{"description":"The detected language code.","type":"string"},"language_probability":{"description":"The confidence score of the language detection.","format":"double","type":"number"},"text":{"description":"The raw text of the transcription.","type":"string"},"words":{"description":"List of words with their timing information.","items":{"$ref":"#/components/schemas/ElevenLabsSTTWord"},"type":"array"}},"type":"object"},"ElevenLabsSTTWord":{"description":"Word information from speech-to-text transcription","properties":{"characters":{"description":"The characters that make up the word and their timing information.","items":{"$ref":"#/components/schemas/ElevenLabsSTTCharacter"},"nullable":true,"type":"array"},"end":{"description":"The end time of the word or sound in seconds.","format":"double","nullable":true,"type":"number"},"logprob":{"description":"The log of the probability with which this word was predicted.\nLogprobs are in range [-infinity, 0], higher logprobs indicate higher confidence.\n","format":"double","type":"number"},"speaker_id":{"description":"Unique identifier for the speaker of this word.","nullable":true,"type":"string"},"start":{"description":"The start time of the word or sound in seconds.","format":"double","nullable":true,"type":"number"},"text":{"description":"The word or sound that was transcribed.","type":"string"},"type":{"description":"The type of the word or sound.\n'audio_event' is used for non-word sounds like laughter or footsteps.\n","enum":["word","spacing","audio_event"],"type":"string"}},"required":["text","type","logprob"],"type":"object"},"ElevenLabsSharedVoice":{"properties":{"accent":{"type":"string"},"age":{"type":"string"},"category":{"enum":["generated","cloned","premade","professional","famous","high_quality"],"type":"string"},"cloned_by_count":{"type":"integer"},"date_unix":{"type":"integer"},"description":{"nullable":true,"type":"string"},"descriptive":{"type":"string"},"featured":{"type":"boolean"},"fiat_rate":{"description":"The rate of the voice in USD per 1000 credits. null if default.","format":"double","nullable":true,"type":"number"},"free_users_allowed":{"type":"boolean"},"gender":{"type":"string"},"image_url":{"nullable":true,"type":"string"},"instagram_username":{"nullable":true,"type":"string"},"is_added_by_user":{"nullable":true,"type":"boolean"},"is_bookmarked":{"nullable":true,"type":"boolean"},"language":{"nullable":true,"type":"string"},"live_moderation_enabled":{"type":"boolean"},"locale":{"nullable":true,"type":"string"},"name":{"type":"string"},"notice_period":{"nullable":true,"type":"integer"},"play_api_usage_character_count_1y":{"type":"integer"},"preview_url":{"nullable":true,"type":"string"},"public_owner_id":{"type":"string"},"rate":{"format":"double","nullable":true,"type":"number"},"tiktok_username":{"nullable":true,"type":"string"},"twitter_username":{"nullable":true,"type":"string"},"usage_character_count_1y":{"type":"integer"},"usage_character_count_7d":{"type":"integer"},"use_case":{"type":"string"},"verified_languages":{"description":"The verified languages of the voice.","items":{"$ref":"#/components/schemas/ElevenLabsVerifiedVoiceLanguage"},"nullable":true,"type":"array"},"voice_id":{"type":"string"},"youtube_username":{"nullable":true,"type":"string"}},"required":["public_owner_id","voice_id","date_unix","name","accent","gender","age","descriptive","use_case","category","usage_character_count_1y","usage_character_count_7d","play_api_usage_character_count_1y","cloned_by_count","free_users_allowed","live_moderation_enabled","featured"],"type":"object"},"ElevenLabsSharedVoicesPaginatedResponse":{"description":"Paginated response shape returned by the shared-voices proxy to match the\nfrontend's `RichComboWidget` progressive-fetch contract.\n","properties":{"has_more":{"description":"Whether there are more shared voices in subsequent pages.","type":"boolean"},"items":{"description":"The list of shared voices on this page.","items":{"$ref":"#/components/schemas/ElevenLabsSharedVoice"},"type":"array"}},"required":["items","has_more"],"type":"object"},"ElevenLabsSoundGenerationRequest":{"description":"Request body for generating sound effects from text","properties":{"duration_seconds":{"description":"The duration of the sound which will be generated in seconds.\nMust be at least 0.5 and at most 30. If set to null, the optimal\nduration will be guessed using the prompt. Defaults to null.\n","format":"double","nullable":true,"type":"number"},"loop":{"default":false,"description":"Whether to create a sound effect that loops smoothly.\nOnly available for the 'eleven_text_to_sound_v2' model.\n","type":"boolean"},"model_id":{"default":"eleven_text_to_sound_v2","description":"The model ID to use for the sound generation.","type":"string"},"prompt_influence":{"description":"A higher prompt influence makes your generation follow the prompt\nmore closely while also making generations less variable.\nMust be a value between 0 and 1. Defaults to 0.3.\n","format":"double","type":"number"},"text":{"description":"The text that will get converted into a sound effect.","type":"string"}},"required":["text"],"type":"object"},"ElevenLabsSpeechToSpeechRequest":{"description":"Request body for ElevenLabs Speech-to-Speech (Voice Changer)","properties":{"audio":{"description":"The audio file which holds the content and emotion that will control the generated speech.","format":"binary","type":"string"},"file_format":{"default":"other","description":"The format of input audio. Options are 'pcm_s16le_16' or 'other'.\nFor pcm_s16le_16, the input audio must be 16-bit PCM at a 16kHz sample rate, single channel (mono).\n","enum":["pcm_s16le_16","other"],"nullable":true,"type":"string"},"model_id":{"default":"eleven_english_sts_v2","description":"Identifier of the model that will be used. Query GET /v1/models to list available models.\nThe model needs to have support for speech to speech (can_do_voice_conversion property).\n","type":"string"},"remove_background_noise":{"default":false,"description":"If set, will remove the background noise from your audio input using our audio isolation model.\nOnly applies to Voice Changer.\n","type":"boolean"},"seed":{"description":"If specified, our system will make a best effort to sample deterministically.\nRepeated requests with the same seed and parameters should return the same result.\nMust be integer between 0 and 4294967295.\n","maximum":4294967295,"minimum":0,"nullable":true,"type":"integer"},"voice_settings":{"description":"Voice settings overriding stored settings for the given voice.\nThey are applied only on the given request. Needs to be sent as a JSON encoded string.\n","nullable":true,"type":"string"}},"required":["audio"],"type":"object"},"ElevenLabsTTSRequest":{"description":"Request body for ElevenLabs Text to Speech","properties":{"apply_language_text_normalization":{"default":false,"description":"Controls language-specific text normalization. Can heavily increase latency. Currently only supported for Japanese.","type":"boolean"},"apply_text_normalization":{"default":"auto","description":"Controls text normalization. 'auto' lets the system decide, 'on' always applies normalization,\n'off' skips normalization.\n","enum":["auto","on","off"],"type":"string"},"language_code":{"description":"Language code (ISO 639-1) to enforce for the model. If unsupported, an error is returned.","nullable":true,"type":"string"},"model_id":{"default":"eleven_multilingual_v2","description":"Identifier of the model to use. Query /v1/models to list available models.","type":"string"},"next_request_ids":{"description":"Request IDs of next generations for continuity. Maximum 3.","items":{"type":"string"},"maxItems":3,"nullable":true,"type":"array"},"next_text":{"description":"Text that comes after this request, used to improve speech continuity.","nullable":true,"type":"string"},"previous_request_ids":{"description":"Request IDs of previous generations for continuity. Maximum 3.","items":{"type":"string"},"maxItems":3,"nullable":true,"type":"array"},"previous_text":{"description":"Text that came before this request, used to improve speech continuity.","nullable":true,"type":"string"},"pronunciation_dictionary_locators":{"description":"List of pronunciation dictionary locators (id, version_id). Maximum 3 per request.","items":{"$ref":"#/components/schemas/ElevenLabsPronunciationDictionaryLocator"},"maxItems":3,"nullable":true,"type":"array"},"seed":{"description":"Seed for deterministic generation. Must be between 0 and 4294967295.","maximum":4294967295,"minimum":0,"nullable":true,"type":"integer"},"text":{"description":"The text that will be converted into speech.","type":"string"},"use_pvc_as_ivc":{"default":false,"description":"Deprecated. If true, uses IVC version of voice instead of PVC.","type":"boolean"},"voice_settings":{"$ref":"#/components/schemas/ElevenLabsVoiceSettings"}},"required":["text"],"type":"object"},"ElevenLabsTextToDialogueRequest":{"description":"Request body for ElevenLabs Text-to-Dialogue (multi-voice TTS)","properties":{"apply_text_normalization":{"default":"auto","description":"Controls text normalization with three modes:\n'auto' - system automatically decides whether to apply text normalization\n'on' - text normalization will always be applied\n'off' - text normalization will be skipped\n","enum":["auto","on","off"],"type":"string"},"inputs":{"description":"A list of dialogue inputs, each containing text and a voice ID which will be converted into speech.\nThe maximum number of unique voice IDs is 10.\n","items":{"$ref":"#/components/schemas/ElevenLabsDialogueInput"},"type":"array"},"language_code":{"description":"Language code (ISO 639-1) used to enforce a language for the model and text normalization.\nIf the model does not support provided language code, an error will be returned.\n","nullable":true,"type":"string"},"model_id":{"default":"eleven_v3","description":"Identifier of the model that will be used. Query GET /v1/models to list available models.\nThe model needs to have support for text to speech (can_do_text_to_speech property).\n","type":"string"},"pronunciation_dictionary_locators":{"description":"A list of pronunciation dictionary locators (id, version_id) to be applied to the text.\nThey will be applied in order. You may have up to 3 locators per request.\n","items":{"$ref":"#/components/schemas/ElevenLabsPronunciationDictionaryLocator"},"maxItems":3,"nullable":true,"type":"array"},"seed":{"description":"If specified, our system will make a best effort to sample deterministically.\nRepeated requests with the same seed and parameters should return the same result.\nMust be integer between 0 and 4294967295.\n","maximum":4294967295,"minimum":0,"nullable":true,"type":"integer"},"settings":{"$ref":"#/components/schemas/ElevenLabsDialogueSettings"}},"required":["inputs"],"type":"object"},"ElevenLabsValidationError":{"description":"Validation error response from ElevenLabs","properties":{"detail":{"description":"Details about the validation error","properties":{"message":{"description":"Error message","type":"string"},"status":{"description":"Error status","type":"string"}},"type":"object"}},"type":"object"},"ElevenLabsVerifiedVoiceLanguage":{"properties":{"accent":{"description":"The voice's accent, if applicable.","nullable":true,"type":"string"},"language":{"description":"The language of the voice.","type":"string"},"locale":{"description":"The voice's locale, if applicable.","nullable":true,"type":"string"},"model_id":{"description":"The voice's model ID.","type":"string"},"preview_url":{"description":"The voice's preview URL, if applicable.","nullable":true,"type":"string"}},"required":["language","model_id"],"type":"object"},"ElevenLabsVoice":{"description":"A voice from the authenticated account's voice library (e.g. a premade voice).","properties":{"category":{"description":"Voice category (e.g. \"premade\", \"cloned\", \"generated\", \"professional\").","type":"string"},"description":{"nullable":true,"type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Free-form string labels attached to the voice (e.g. accent, gender, age, use_case).","nullable":true,"type":"object"},"name":{"type":"string"},"preview_url":{"nullable":true,"type":"string"},"verified_languages":{"description":"The verified languages of the voice.","items":{"$ref":"#/components/schemas/ElevenLabsVerifiedVoiceLanguage"},"nullable":true,"type":"array"},"voice_id":{"type":"string"}},"required":["voice_id","name","category"],"type":"object"},"ElevenLabsVoiceSettings":{"description":"Voice settings configuration","nullable":true,"properties":{"similarity_boost":{"default":0.75,"description":"How closely the AI adheres to the original voice when replicating it.","format":"double","maximum":1,"minimum":0,"nullable":true,"type":"number"},"speed":{"default":1,"description":"Speed adjustment. 1.0 is default, values below slow down, values above speed up.","format":"double","maximum":1.2,"minimum":0.7,"nullable":true,"type":"number"},"stability":{"default":0.5,"description":"Stability of the voice. Lower values introduce broader emotional range.","format":"double","maximum":1,"minimum":0,"nullable":true,"type":"number"},"style":{"default":0,"description":"Style exaggeration. Amplifies the style of the original speaker.","format":"double","maximum":1,"minimum":0,"nullable":true,"type":"number"},"use_speaker_boost":{"default":true,"description":"Boosts similarity to the original speaker. Requires higher computational load.","nullable":true,"type":"boolean"}},"type":"object"},"ElevenLabsVoicesPaginatedResponse":{"description":"Paginated response shape returned by the premade-voices proxy.\nMirrors ElevenLabs `/v2/voices`, renaming `voices` to `items` to\nmatch the frontend's `RichComboWidget` progressive-fetch contract.\n","properties":{"has_more":{"description":"Whether there are more voices in subsequent pages.","type":"boolean"},"items":{"description":"The list of premade voices on this page.","items":{"$ref":"#/components/schemas/ElevenLabsVoice"},"type":"array"},"next_page_token":{"description":"Cursor to pass to the next request to fetch the next page.","nullable":true,"type":"string"}},"required":["items","has_more"],"type":"object"},"Error":{"properties":{"details":{"description":"Optional detailed information about the error or hints for resolving it.","items":{"type":"string"},"type":"array"},"message":{"description":"A clear and concise description of the error.","type":"string"}},"type":"object"},"ErrorResponse":{"properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"type":"object"},"FalMinimaxH3MaxImageToVideoRequest":{"description":"Request body for the MiniMax H3 Max image-to-video model (minimax/h3-max/image-to-video): generate a video from a text prompt plus optional first and last frame images.","properties":{"duration":{"default":5,"description":"Duration of the generated video in seconds.","type":"integer"},"enable_safety_checker":{"default":true,"description":"Enable the safety checker.","type":"boolean"},"end_image_url":{"description":"URL of the image to use as the last frame.","type":"string"},"image_url":{"description":"URL of the image to use as the first frame.","type":"string"},"prompt":{"description":"Text prompt for video generation.","type":"string"},"prompt_expansion_mode":{"description":"How much effort to spend rewriting the prompt before generation: balanced or quality.","type":"string"},"resolution":{"default":"768P","description":"Resolution of the generated video: 480P or 768P.","type":"string"},"seed":{"description":"Random seed. A random seed is selected when omitted.","type":"integer"},"sync_mode":{"description":"Return the generated video as base64 instead of a CDN URL.","type":"boolean"}},"required":["prompt","prompt_expansion_mode"],"type":"object"},"FalMinimaxH3MaxReferenceToVideoRequest":{"description":"Request body for the MiniMax H3 Max reference-to-video model (minimax/h3-max/reference-to-video): generate a video from a text prompt plus reference images, videos, or audio clips. The reference files must add up to at most 12. Reference inputs beyond fal's included token allowance add a per-token charge, which fal folds into the billable units.","properties":{"aspect_ratio":{"default":"adaptive","description":"Aspect ratio: adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, or 9:16.","type":"string"},"duration":{"default":5,"description":"Duration of the generated video in seconds.","type":"integer"},"enable_safety_checker":{"default":true,"description":"Enable the safety checker.","type":"boolean"},"prompt":{"description":"Text prompt for video generation. Refer to reference assets by their modality.","type":"string"},"prompt_expansion_mode":{"description":"How much effort to spend rewriting the prompt before generation: balanced or quality.","type":"string"},"reference_audio_urls":{"description":"Audio reference clips (2-15 seconds each).","items":{"type":"string"},"type":"array"},"reference_image_urls":{"description":"Subject or style reference images.","items":{"type":"string"},"type":"array"},"reference_video_urls":{"description":"Motion reference clips (2-15 seconds each).","items":{"type":"string"},"type":"array"},"resolution":{"default":"768P","description":"Resolution of the generated video: 480P or 768P.","type":"string"},"seed":{"description":"Random seed. A random seed is selected when omitted.","type":"integer"},"sync_mode":{"description":"Return the generated video as base64 instead of a CDN URL.","type":"boolean"}},"required":["prompt","prompt_expansion_mode"],"type":"object"},"FalMinimaxH3MaxTextToVideoRequest":{"description":"Request body for the MiniMax H3 Max text-to-video model (minimax/h3-max/text-to-video): generate a video from a text prompt.","properties":{"aspect_ratio":{"default":"16:9","description":"Aspect ratio: 21:9, 16:9, 4:3, 1:1, 3:4, or 9:16.","type":"string"},"duration":{"default":5,"description":"Duration of the generated video in seconds.","type":"integer"},"enable_safety_checker":{"default":true,"description":"Enable the safety checker.","type":"boolean"},"prompt":{"description":"Text prompt for video generation.","type":"string"},"prompt_expansion_mode":{"description":"How much effort to spend rewriting the prompt before generation: balanced or quality.","type":"string"},"resolution":{"default":"768P","description":"Resolution of the generated video: 480P or 768P.","type":"string"},"seed":{"description":"Random seed. A random seed is selected when omitted.","type":"integer"},"sync_mode":{"description":"Return the generated video as base64 instead of a CDN URL.","type":"boolean"}},"required":["prompt","prompt_expansion_mode"],"type":"object"},"FalMinimaxH3MaxVideoResponse":{"description":"Result of a completed MiniMax H3 Max video generation.","properties":{"expanded_prompt":{"description":"The prompt after expansion, as sent to the model.","type":"string"},"timings":{"additionalProperties":true,"description":"End-to-end timing breakdown (seconds).","type":"object"},"video":{"description":"The generated video file.","properties":{"content_type":{"description":"MIME type of the video file.","type":"string"},"file_name":{"description":"Name of the video file.","type":"string"},"file_size":{"description":"Size of the video file in bytes.","type":"integer"},"url":{"description":"URL of the generated video.","type":"string"}},"type":"object"}},"required":["video"],"type":"object"},"FalPatinaMaterialExtractRequest":{"description":"Request body for the fal PATINA extract model (fal-ai/patina/material/extract): extract a texture from an input image and generate a complete tiling PBR material.","properties":{"enable_prompt_expansion":{"default":true,"description":"Expand the prompt with an LLM for richer detail.","type":"boolean"},"enable_safety_checker":{"default":true,"description":"Enable the safety checker for generated images.","type":"boolean"},"image_size":{"description":"Output texture dimensions. Either a preset string (square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9) or an object with integer width and height. Defaults to square_hd."},"image_url":{"description":"URL of the image to extract a texture from.","type":"string"},"maps":{"default":["basecolor","normal","roughness","metalness","height"],"description":"Which PBR maps to predict. Defaults to all five.","items":{"type":"string"},"type":"array"},"num_images":{"default":1,"description":"Number of texture images to generate.","type":"integer"},"num_inference_steps":{"default":8,"description":"Number of denoising steps for texture generation.","type":"integer"},"output_format":{"default":"png","description":"Output image format for textures and PBR maps: jpeg, png, or webp.","type":"string"},"prompt":{"description":"Describe which texture to extract from the image.","type":"string"},"seed":{"description":"Random seed for reproducible generation.","type":"integer"},"strength":{"default":0.6,"description":"How much to transform the input image.","type":"number"},"tile_size":{"default":128,"description":"Tile size in latent space (64 = 512px, 128 = 1024px).","type":"integer"},"tile_stride":{"default":64,"description":"Tile stride in latent space.","type":"integer"},"tiling_mode":{"default":"both","description":"Tiling direction: both, horizontal, or vertical.","type":"string"},"upscale_factor":{"default":"0","description":"Upscale factor for predicted PBR maps. One of 0 (no upscaling), 2 (2x), or 4 (4x), as a string or number."}},"required":["prompt","image_url"],"type":"object"},"FalPatinaMaterialImage":{"description":"A generated texture or PBR map image.","properties":{"map_type":{"description":"The PBR map type (basecolor, normal, roughness, metalness, height). Absent for the base texture image.","type":"string"},"url":{"description":"URL of the generated image.","type":"string"}},"type":"object"},"FalPatinaMaterialRequest":{"description":"Request body for the fal PATINA material generation model.","properties":{"enable_prompt_expansion":{"default":true,"description":"Expand the prompt with an LLM for richer detail.","type":"boolean"},"enable_safety_checker":{"default":true,"description":"Enable the safety checker for generated images.","type":"boolean"},"image_size":{"description":"Output texture dimensions. Either a preset string (square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9) or an object with integer width and height. Defaults to square_hd (1024x1024). Drives the per-megapixel price."},"image_url":{"description":"URL of an input image for image-to-image or inpainting.","type":"string"},"maps":{"default":["basecolor","normal","roughness","metalness","height"],"description":"Which PBR maps to predict. Each predicted map adds a per-megapixel charge. Defaults to all five.","items":{"type":"string"},"type":"array"},"mask_url":{"description":"URL of a mask image for inpainting. Requires image_url.","type":"string"},"num_images":{"default":1,"description":"Number of texture images to generate.","type":"integer"},"num_inference_steps":{"default":8,"description":"Number of denoising steps for texture generation.","type":"integer"},"output_format":{"default":"png","description":"Output image format for textures and PBR maps: jpeg, png, or webp.","type":"string"},"prompt":{"description":"The text prompt describing the material/texture to generate.","type":"string"},"seed":{"description":"Random seed for reproducible generation.","type":"integer"},"strength":{"default":0.6,"description":"How much to transform the input image. Only used when image_url is provided.","type":"number"},"tile_size":{"default":128,"description":"Tile size in latent space (64 = 512px, 128 = 1024px).","type":"integer"},"tile_stride":{"default":64,"description":"Tile stride in latent space.","type":"integer"},"tiling_mode":{"default":"both","description":"Tiling direction: both, horizontal, or vertical.","type":"string"},"upscale_factor":{"default":"0","description":"Upscale factor for predicted PBR maps. One of 0 (no upscaling), 2 (2x), or 4 (4x), as a string or number. Upscaling adds a per-(pre-upscaling)-megapixel-per-map surcharge."}},"required":["prompt"],"type":"object"},"FalPatinaMaterialResponse":{"description":"Response from the fal PATINA material generation model.","properties":{"images":{"description":"Generated tileable texture image plus the predicted PBR material maps. The base texture has only a url; each map entry also carries a map_type.","items":{"$ref":"#/components/schemas/FalPatinaMaterialImage"},"type":"array"},"prompt":{"description":"The prompt used for texture generation (possibly expanded).","type":"string"},"seed":{"description":"Seed used for texture generation.","type":"integer"},"timings":{"additionalProperties":true,"description":"End-to-end timing breakdown (seconds).","type":"object"}},"type":"object"},"FalPatinaRequest":{"description":"Request body for the fal PATINA image-to-image model (fal-ai/patina): predict PBR maps from a single input image.","properties":{"enable_safety_checker":{"default":true,"description":"Enable the safety checker for images.","type":"boolean"},"image_url":{"description":"URL of the input image (photograph or render).","type":"string"},"maps":{"default":["basecolor","normal","roughness","metalness","height"],"description":"Which PBR maps to predict. Defaults to all five.","items":{"type":"string"},"type":"array"},"output_format":{"default":"png","description":"Output image format: jpeg, png, or webp.","type":"string"},"seed":{"description":"Random seed for reproducible denoising.","type":"integer"},"sync_mode":{"default":false,"description":"If true, return images as data URIs instead of CDN URLs.","type":"boolean"}},"required":["image_url"],"type":"object"},"FalQueueStatus":{"description":"fal queue status object, returned both when submitting a request and when polling its status.","properties":{"queue_position":{"description":"Position in the queue (when IN_QUEUE).","type":"integer"},"request_id":{"description":"The fal queue request id.","type":"string"},"response_url":{"description":"fal's queue result URL for this request.","type":"string"},"status":{"description":"Queue status: IN_QUEUE, IN_PROGRESS, or COMPLETED.","type":"string"},"status_url":{"description":"fal's queue status URL for this request.","type":"string"}},"required":["status","request_id"],"type":"object"},"FeaturesResponse":{"properties":{"partner_node_conversion_rate":{"description":"The conversion rate for partner nodes","example":0.5,"type":"number"}},"required":["partner_node_conversion_rate"],"type":"object"},"FileSearchTool":{"properties":{"type":{"description":"The type of tool","enum":["file_search"],"type":"string"},"vector_store_ids":{"description":"IDs of vector stores to search in","items":{"type":"string"},"type":"array"}},"required":["type","vector_store_ids"],"type":"object"},"FileSearchToolCall":{"description":"The results of a file search tool call. See the\n[file search guide](/docs/guides/tools-file-search) for more information.\n","properties":{"id":{"description":"The unique ID of the file search tool call.\n","type":"string"},"queries":{"description":"The queries used to search for files.\n","items":{"type":"string"},"type":"array"},"results":{"description":"The results of the file search tool call.\n","items":{"properties":{"file_id":{"description":"The unique ID of the file.\n","type":"string"},"filename":{"description":"The name of the file.\n","type":"string"},"score":{"description":"The relevance score of the file - a value between 0 and 1.\n","format":"float","type":"number"},"text":{"description":"The text that was retrieved from the file.\n","type":"string"}},"type":"object"},"type":"array"},"status":{"description":"The status of the file search tool call. One of `in_progress`,\n`searching`, `incomplete` or `failed`,\n","enum":["in_progress","searching","completed","incomplete","failed"],"type":"string"},"type":{"description":"The type of the file search tool call. Always `file_search_call`.\n","enum":["file_search_call"],"type":"string","x-stainless-const":true}},"required":["id","type","status","queries"],"title":"File search tool call","type":"object"},"FishAudioASRRequest":{"description":"Request body for Fish Audio Speech to Text","properties":{"audio":{"description":"Audio file to transcribe.","format":"binary","type":"string"},"ignore_timestamps":{"description":"Skip precise timestamp computation for faster processing. Default true.","type":"boolean"},"language":{"description":"Optional language hint (ISO 639-1). The language is auto-detected regardless.","nullable":true,"type":"string"}},"required":["audio"],"type":"object"},"FishAudioASRResponse":{"description":"Transcription result from Fish Audio Speech to Text","properties":{"duration":{"description":"Duration of the audio in seconds.","format":"double","type":"number"},"language":{"description":"Detected language name for display.","nullable":true,"type":"string"},"language_code":{"description":"Detected language as an ISO 639-1 code.","nullable":true,"type":"string"},"segments":{"description":"Timestamped transcript segments.","items":{"$ref":"#/components/schemas/FishAudioASRSegment"},"type":"array"},"text":{"description":"The transcribed text.","type":"string"}},"required":["text","duration"],"type":"object"},"FishAudioASRSegment":{"description":"A timestamped transcript segment","properties":{"end":{"description":"Segment end time in seconds.","format":"double","type":"number"},"start":{"description":"Segment start time in seconds.","format":"double","type":"number"},"text":{"description":"Segment text.","type":"string"}},"type":"object"},"FishAudioCreateModelRequest":{"description":"Request body for creating a Fish Audio voice model","properties":{"cover_image":{"description":"Cover image; required when visibility is public.","format":"binary","type":"string"},"description":{"description":"Optional model description.","nullable":true,"type":"string"},"enhance_audio_quality":{"description":"Enhance reference audio quality. Default true.","type":"boolean"},"generate_sample":{"description":"Auto-generate a sample for the model. Default false.","type":"boolean"},"tags":{"description":"Categorization tags.","items":{"type":"string"},"type":"array"},"texts":{"description":"Transcripts corresponding to the reference clips; transcribed automatically when omitted.","items":{"type":"string"},"type":"array"},"title":{"description":"Name of the voice model.","type":"string"},"train_mode":{"description":"Training mode. fast makes the model instantly available.","type":"string"},"type":{"description":"Model type. Must be tts.","type":"string"},"visibility":{"description":"Model visibility: public, unlist or private. Default public.","type":"string"},"voices":{"description":"1-20 reference audio clips for voice cloning.","items":{"format":"binary","type":"string"},"type":"array"}},"required":["type","title","train_mode","voices"],"type":"object"},"FishAudioProsodyControl":{"description":"Speed and volume adjustments for Fish Audio TTS output.","properties":{"normalize_loudness":{"description":"Normalize output loudness for more consistent perceived volume. Default true.","type":"boolean"},"speed":{"description":"Speaking rate multiplier. Range 0.5-2.0, default 1.0.","type":"number"},"volume":{"description":"Volume adjustment in decibels. 0 = no change. Default 0.","type":"number"}},"type":"object"},"FishAudioTTSRequest":{"description":"Request body for Fish Audio Text to Speech","properties":{"chunk_length":{"description":"Text segment size for processing. Range 100-300, default 300.","type":"integer"},"condition_on_previous_chunks":{"description":"Use previous audio as context for voice consistency. Default true.","type":"boolean"},"early_stop_threshold":{"description":"Early stopping threshold for batch processing. Range 0-1, default 1.","type":"number"},"features":{"description":"Optional request-scoped TTS feature flags forwarded verbatim to the inference backend.","items":{"type":"string"},"type":"array"},"format":{"description":"Output audio format: wav, pcm, mp3 or opus. Default mp3.","type":"string"},"latency":{"description":"Latency-quality trade-off: normal (best quality), balanced (reduced latency) or low (lowest latency). Default normal.","type":"string"},"max_new_tokens":{"description":"Maximum audio tokens to generate per text chunk. Default 1024.","type":"integer"},"min_chunk_length":{"description":"Minimum characters before splitting into a new chunk. Range 0-100, default 50.","type":"integer"},"mp3_bitrate":{"description":"MP3 bitrate in kbps: 64, 128 or 192. Only applies when format is mp3. Default 128.","type":"integer"},"normalize":{"description":"Normalizes text for English and Chinese, improving stability for numbers. Default true.","type":"boolean"},"opus_bitrate":{"description":"Opus bitrate in bps: -1000 (automatic), 24000, 32000, 48000 or 64000. Only applies when format is opus. Default -1000.","type":"integer"},"prosody":{"$ref":"#/components/schemas/FishAudioProsodyControl"},"reference_id":{"description":"Voice model ID(s) from the Fish Audio library or custom models. A string for single-speaker synthesis; an array of model IDs for multi-speaker dialogue (S2 family only), with `\u003c|speaker:N|\u003e` tags in the text marking speaker changes.\n","oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"repetition_penalty":{"description":"Penalty for repeating audio patterns. Values above 1.0 reduce repetition. Default 1.2.","type":"number"},"sample_rate":{"description":"Audio sample rate in Hz. When null, uses the format's default (44100 Hz for most formats, 48000 Hz for opus).","nullable":true,"type":"integer"},"temperature":{"description":"Controls expressiveness. Higher is more varied, lower is more consistent. Range 0-1, default 0.7.","type":"number"},"text":{"description":"The text to convert to speech.","type":"string"},"top_p":{"description":"Controls diversity via nucleus sampling. Range 0-1, default 0.7.","type":"number"}},"required":["text"],"type":"object"},"FreeTierGrantState":{"description":"State of a withheld first-time free tier credit grant. \"verification_required\" means the grant was denied pending account verification (e.g. unverified email or a blocked email domain). \"deferred\" means the grant was temporarily deferred and may succeed on a later request. Absent when no grant was withheld.\n","enum":["verification_required","deferred"],"type":"string"},"FreepikErrorResponse":{"properties":{"error":{"type":"string"},"message":{"type":"string"}},"type":"object"},"FreepikMagnificRelightRequest":{"properties":{"advanced_settings":{"properties":{"blacks":{"default":50,"description":"Adjust the level of black color in the image.","maximum":100,"minimum":0,"type":"integer"},"brightness":{"default":50,"description":"Adjust the level of brightness in the image.","maximum":100,"minimum":0,"type":"integer"},"contrast":{"default":50,"description":"Adjust the level of contrast in the image.","maximum":100,"minimum":0,"type":"integer"},"engine":{"default":"automatic","description":"Engine preset for relighting:\n- balanced: Well-rounded, general-purpose option\n- cool: Brighter with cooler tones\n- real: Aims to enhance photographic quality (Experimental)\n- illusio: Optimized for illustrations and drawings\n- fairy: Suited for fantasy-themed images\n- colorful_anime: Ideal for anime, cartoons, and vibrant colors\n- hard_transform: Significantly alters the original image\n- softy: Slightly softer effect, suitable for graphic designs\n","enum":["automatic","balanced","cool","real","illusio","fairy","colorful_anime","hard_transform","softy"],"type":"string"},"fixed_generation":{"default":false,"description":"When enabled, using the same settings will consistently produce the same image.","type":"boolean"},"saturation":{"default":50,"description":"Adjust the level of saturation in the image.","maximum":100,"minimum":0,"type":"integer"},"transfer_light_a":{"default":"automatic","description":"Adjusts the intensity of light transfer.","enum":["automatic","low","medium","normal","high","high_on_faces"],"type":"string"},"transfer_light_b":{"default":"automatic","description":"Also modifies light transfer intensity. Can be combined with transfer_light_a for varied effects.","enum":["automatic","composition","straight","smooth_in","smooth_out","smooth_both","reverse_both","soft_in","soft_out","soft_mid","strong_mid","style_shift","strong_shift"],"type":"string"},"whites":{"default":50,"description":"Adjust the level of white color in the image.","maximum":100,"minimum":0,"type":"integer"}},"type":"object"},"change_background":{"default":true,"description":"When enabled, changes the background based on prompt and/or reference image. Useful for product placement and portraits.","type":"boolean"},"image":{"description":"Base64 or URL of the image to do the relight","type":"string"},"interpolate_from_original":{"default":false,"description":"When enabled, makes the final image interpolate from the original using the light transfer strength slider.","type":"boolean"},"light_transfer_strength":{"default":100,"description":"Level of light transfer intensity. 0% keeps closest to original, 100% is maximum transfer.","maximum":100,"minimum":0,"type":"integer"},"preserve_details":{"default":true,"description":"Maintains texture and small details of the original image. Good for product photography, texts, etc.","type":"boolean"},"prompt":{"description":"You can guide the generation process and influence the light transfer with a descriptive prompt.\nIMPORTANT: You can emphasize specific aspects of the light in your prompt by using a number in parentheses, ranging from 1 to 1.4, like \"(dark scene:1.3)\".\n","type":"string"},"style":{"default":"standard","description":"Style preset for the relight operation.","enum":["standard","darker_but_realistic","clean","smooth","brighter","contrasted_n_hdr","just_composition"],"type":"string"},"transfer_light_from_lightmap":{"description":"Base64 or URL of the lightmap for light transfer. Incompatible with 'transfer_light_from_reference_image'","type":"string"},"transfer_light_from_reference_image":{"description":"Base64 or URL of the reference image for light transfer. Incompatible with 'transfer_light_from_lightmap'","type":"string"},"webhook_url":{"description":"Optional callback URL that will receive asynchronous notifications whenever the task changes status.","example":"https://www.example.com/webhook","format":"uri","type":"string"}},"required":["image"],"type":"object"},"FreepikMagnificStyleTransferRequest":{"properties":{"engine":{"default":"balanced","description":"Engine preset for style transfer","enum":["balanced","definio","illusio","3d_cartoon","colorful_anime","caricature","real","super_real","softy"],"type":"string"},"fixed_generation":{"default":false,"description":"When enabled, using the same settings will consistently produce the same image.","type":"boolean"},"flavor":{"default":"faithful","description":"Flavor of the transferring style","enum":["faithful","gen_z","psychedelia","detaily","clear","donotstyle","donotstyle_sharp"],"type":"string"},"image":{"description":"Base64 or URL of the image to do the style transfer","type":"string"},"is_portrait":{"default":false,"description":"Indicates whether the image should be processed as a portrait.","type":"boolean"},"portrait_beautifier":{"description":"Facial beautification on portrait images. Only used if is_portrait is true.","enum":["beautify_face","beautify_face_max"],"type":"string"},"portrait_style":{"default":"standard","description":"Visual style applied to portrait images. Only used if is_portrait is true.","enum":["standard","pop","super_pop"],"type":"string"},"prompt":{"description":"Prompt for the AI model","type":"string"},"reference_image":{"description":"Base64 or URL of the reference image for style transfer","type":"string"},"structure_strength":{"default":50,"description":"Allows to maintain the structure of the original image","maximum":100,"minimum":0,"type":"integer"},"style_strength":{"default":100,"description":"Percentage of style strength","maximum":100,"minimum":0,"type":"integer"},"webhook_url":{"description":"Optional callback URL for async notifications.","example":"https://www.example.com/webhook","format":"uri","type":"string"}},"required":["image","reference_image"],"type":"object"},"FreepikMagnificUpscalerCreativeRequest":{"properties":{"creativity":{"default":0,"description":"Increase or decrease AI's creativity. Valid values range [-10, 10].","maximum":10,"minimum":-10,"type":"integer"},"engine":{"default":"automatic","description":"Magnific model engines.","enum":["automatic","magnific_illusio","magnific_sharpy","magnific_sparkle"],"type":"string"},"fractality":{"default":0,"description":"Control the strength of the prompt and intricacy per square pixel. Valid values range [-10, 10].","maximum":10,"minimum":-10,"type":"integer"},"hdr":{"default":0,"description":"Increase or decrease the level of definition and detail. Valid values range [-10, 10].","maximum":10,"minimum":-10,"type":"integer"},"image":{"description":"Base64 image or URL to upscale. The resulted image can't exceed maximum allowed size of 25.3 million pixels.","type":"string"},"optimized_for":{"default":"standard","description":"Styles to optimize the upscale process.","enum":["standard","soft_portraits","hard_portraits","art_n_illustration","videogame_assets","nature_n_landscapes","films_n_photography","3d_renders","science_fiction_n_horror"],"type":"string"},"prompt":{"description":"Prompt to guide the upscale process. Reusing the same prompt for AI-generated images will improve the results.","type":"string"},"resemblance":{"default":0,"description":"Adjust the level of resemblance to the original image. Valid values range [-10, 10].","maximum":10,"minimum":-10,"type":"integer"},"scale_factor":{"default":"2x","description":"Configure scale factor of the image. For higher scales, the image will take longer to process.","enum":["2x","4x","8x","16x"],"type":"string"},"webhook_url":{"description":"Optional callback URL that will receive asynchronous notifications whenever the task changes status.","example":"https://www.example.com/webhook","format":"uri","type":"string"}},"required":["image"],"type":"object"},"FreepikMagnificUpscalerPrecisionV2Request":{"properties":{"flavor":{"description":"Image processing flavor:\n- sublime: Optimized for artistic and illustrated images\n- photo: Optimized for photographic images\n- photo_denoiser: Specialized for photos with noise reduction\n","enum":["sublime","photo","photo_denoiser"],"type":"string"},"image":{"description":"Source image to upscale. Accepts either:\n- A publicly accessible HTTPS URL pointing to the image\n- A base64-encoded image string\n","type":"string"},"scale_factor":{"description":"Image scaling factor. Determines how much larger the output will be compared to input.","maximum":16,"minimum":2,"type":"integer"},"sharpen":{"default":7,"description":"Image sharpness intensity control. Higher values increase edge definition and clarity.","maximum":100,"minimum":0,"type":"integer"},"smart_grain":{"default":7,"description":"Intelligent grain/texture enhancement. Higher values add more fine-grained texture.","maximum":100,"minimum":0,"type":"integer"},"ultra_detail":{"default":30,"description":"Ultra detail enhancement level. Higher values create more intricate details.","maximum":100,"minimum":0,"type":"integer"},"webhook_url":{"description":"Optional callback URL that will receive asynchronous notifications when the upscaling task completes.","format":"uri","type":"string"}},"required":["image"],"type":"object"},"FreepikSkinEnhancerCreativeRequest":{"properties":{"image":{"description":"Input image. Supports Base64 encoding or HTTPS URL (must be publicly accessible).","example":"https://example.com/portrait.jpg","type":"string"},"sharpen":{"default":0,"description":"Sharpening intensity","maximum":100,"minimum":0,"type":"integer"},"smart_grain":{"default":2,"description":"Smart grain intensity","maximum":100,"minimum":0,"type":"integer"},"webhook_url":{"description":"Optional callback URL for async notifications.","example":"https://www.example.com/webhook","format":"uri","type":"string"}},"required":["image"],"type":"object"},"FreepikSkinEnhancerFaithfulRequest":{"properties":{"image":{"description":"Input image. Supports Base64 encoding or HTTPS URL (must be publicly accessible).","example":"https://example.com/portrait.jpg","type":"string"},"sharpen":{"default":0,"description":"Sharpening intensity","maximum":100,"minimum":0,"type":"integer"},"skin_detail":{"default":80,"description":"Skin detail enhancement level","maximum":100,"minimum":0,"type":"integer"},"smart_grain":{"default":2,"description":"Smart grain intensity","maximum":100,"minimum":0,"type":"integer"},"webhook_url":{"description":"Optional callback URL for async notifications.","example":"https://www.example.com/webhook","format":"uri","type":"string"}},"required":["image"],"type":"object"},"FreepikSkinEnhancerFlexibleRequest":{"properties":{"image":{"description":"Input image. Supports Base64 encoding or HTTPS URL (must be publicly accessible).","example":"https://example.com/portrait.jpg","type":"string"},"optimized_for":{"default":"enhance_skin","description":"Optimization target for flexible skin enhancer","enum":["enhance_skin","improve_lighting","enhance_everything","transform_to_real","no_make_up"],"type":"string"},"sharpen":{"default":0,"description":"Sharpening intensity","maximum":100,"minimum":0,"type":"integer"},"smart_grain":{"default":2,"description":"Smart grain intensity","maximum":100,"minimum":0,"type":"integer"},"webhook_url":{"description":"Optional callback URL for async notifications.","example":"https://www.example.com/webhook","format":"uri","type":"string"}},"required":["image"],"type":"object"},"FreepikTaskData":{"properties":{"generated":{"description":"URLs to the generated images.","items":{"format":"uri","type":"string"},"type":"array"},"status":{"enum":["CREATED","IN_PROGRESS","COMPLETED","FAILED"],"type":"string"},"task_id":{"example":"046b6c7f-0b8a-43b9-b35d-6489e6daee91","format":"uuid","type":"string"}},"type":"object"},"FreepikTaskResponse":{"properties":{"data":{"$ref":"#/components/schemas/FreepikTaskData"}},"required":["data"],"type":"object"},"FunctionTool":{"properties":{"description":{"description":"Description of what the function does","type":"string"},"name":{"description":"Name of the function","type":"string"},"parameters":{"description":"JSON Schema object describing the function parameters","type":"object"},"type":{"description":"The type of tool","enum":["function"],"type":"string"}},"required":["type","name","parameters"],"type":"object"},"FunctionToolCall":{"description":"A tool call to run a function. See the\n[function calling guide](/docs/guides/function-calling) for more information.\n","properties":{"arguments":{"description":"A JSON string of the arguments to pass to the function.\n","type":"string"},"call_id":{"description":"The unique ID of the function tool call generated by the model.\n","type":"string"},"id":{"description":"The unique ID of the function tool call.\n","type":"string"},"name":{"description":"The name of the function to run.\n","type":"string"},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or\n`incomplete`. Populated when items are returned via API.\n","enum":["in_progress","completed","incomplete"],"type":"string"},"type":{"description":"The type of the function tool call. Always `function_call`.\n","enum":["function_call"],"type":"string","x-stainless-const":true}},"required":["type","call_id","name","arguments"],"title":"Function tool call","type":"object"},"GeminiCandidate":{"properties":{"citationMetadata":{"$ref":"#/components/schemas/GeminiCitationMetadata"},"content":{"$ref":"#/components/schemas/GeminiContent"},"finishReason":{"type":"string"},"safetyRatings":{"items":{"$ref":"#/components/schemas/GeminiSafetyRating"},"type":"array"}},"type":"object"},"GeminiCitation":{"properties":{"authors":{"items":{"type":"string"},"type":"array"},"endIndex":{"type":"integer"},"license":{"type":"string"},"publicationDate":{"format":"date","type":"string"},"startIndex":{"type":"integer"},"title":{"type":"string"},"uri":{"type":"string"}},"type":"object"},"GeminiCitationMetadata":{"properties":{"citations":{"items":{"$ref":"#/components/schemas/GeminiCitation"},"type":"array"}},"type":"object"},"GeminiContent":{"description":"The content of the current conversation with the model. For single-turn queries, this is a single instance. For multi-turn queries, this is a repeated field that contains conversation history and the latest request.\n","properties":{"parts":{"items":{"$ref":"#/components/schemas/GeminiPart"},"type":"array"},"role":{"enum":["user","model"],"example":"user","type":"string"}},"required":["role","parts"],"type":"object"},"GeminiFileData":{"description":"URI based data.","properties":{"fileUri":{"description":"URI","type":"string"},"mimeType":{"$ref":"#/components/schemas/GeminiMimeType"}},"type":"object"},"GeminiFunctionDeclaration":{"properties":{"description":{"type":"string"},"name":{"type":"string"},"parameters":{"description":"JSON schema for the function parameters","type":"object"}},"required":["name","parameters"],"type":"object"},"GeminiGenerateContentRequest":{"example":{"contents":[{"parts":[{"text":"Describe a robot learning to paint, in two sentences."}],"role":"user"}]},"properties":{"contents":{"items":{"$ref":"#/components/schemas/GeminiContent"},"type":"array"},"generationConfig":{"$ref":"#/components/schemas/GeminiGenerationConfig"},"safetySettings":{"items":{"$ref":"#/components/schemas/GeminiSafetySetting"},"type":"array"},"systemInstruction":{"$ref":"#/components/schemas/GeminiSystemInstructionContent"},"tools":{"items":{"$ref":"#/components/schemas/GeminiTool"},"type":"array"},"uploadImagesToStorage":{"description":"If true, generated images will be uploaded to cloud storage and returned as signed URLs instead of inline base64 data. The URLs expire after 24 hours.","type":"boolean"},"videoMetadata":{"$ref":"#/components/schemas/GeminiVideoMetadata"}},"required":["contents"],"type":"object"},"GeminiGenerateContentResponse":{"properties":{"candidates":{"items":{"$ref":"#/components/schemas/GeminiCandidate"},"type":"array"},"createTime":{"description":"Timestamp when the response was created.","type":"string"},"modelVersion":{"description":"The model version used to generate the response.","type":"string"},"promptFeedback":{"$ref":"#/components/schemas/GeminiPromptFeedback"},"responseId":{"description":"Unique identifier for the response.","type":"string"},"usageMetadata":{"$ref":"#/components/schemas/GeminiUsageMetadata"}},"type":"object"},"GeminiGenerationConfig":{"properties":{"imageConfig":{"description":"Configuration for image generation","properties":{"aspectRatio":{"description":"Aspect ratio for generated images","type":"string"},"imageOutputOptions":{"description":"Optional. The image output format for generated images.","properties":{"compressionQuality":{"description":"Optional. The compression quality of the output image.","type":"integer"},"mimeType":{"description":"Optional. The image format that the output should be saved as.","type":"string"}},"type":"object"},"imageSize":{"description":"Optional. Specifies the size of generated images. Supported values are 1K, 2K, 4K. If not specified, the model will use default value 1K.","type":"string"}},"type":"object"},"maxOutputTokens":{"description":"Maximum number of tokens that can be generated in the response. A token is approximately 4 characters. 100 tokens correspond to roughly 60-80 words.\n","example":2048,"maximum":8192,"minimum":16,"type":"integer"},"responseModalities":{"items":{"enum":["TEXT","IMAGE"],"type":"string"},"type":"array"},"seed":{"description":"When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used. Available for the following models:, gemini-2.5-flash, gemini-2.5-pro, gemini-2.5-flash-preview-04-1, gemini-2.5-pro-preview-05-0, gemini-2.0-flash-lite-00, gemini-2.0-flash-001\n","example":343940597,"type":"integer"},"stopSequences":{"items":{"type":"string"},"type":"array"},"temperature":{"default":1,"description":"The temperature is used for sampling during response generation, which occurs when topP and topK are applied. Temperature controls the degree of randomness in token selection. Lower temperatures are good for prompts that require a less open-ended or creative response, while higher temperatures can lead to more diverse or creative results. A temperature of 0 means that the highest probability tokens are always selected. In this case, responses for a given prompt are mostly deterministic, but a small amount of variation is still possible. If the model returns a response that's too generic, too short, or the model gives a fallback response, try increasing the temperature\n","format":"float","maximum":2,"minimum":0,"type":"number"},"thinkingConfig":{"description":"Optional. Configuration for thinking features. Thinking is a process where the model breaks down a complex task into smaller steps to generate a higher-quality response.","properties":{"includeThoughts":{"description":"Optional. If true, the model will include its thoughts in the response.","type":"boolean"},"thinkingBudget":{"description":"Optional. The token budget for the model's thinking process. The model will make a best effort to stay within this budget.","type":"integer"},"thinkingLevel":{"description":"Optional. The thinking level for the model.","enum":["THINKING_LEVEL_UNSPECIFIED","LOW","MEDIUM","HIGH","MINIMAL"],"type":"string"}},"type":"object"},"topK":{"default":40,"description":"Top-K changes how the model selects tokens for output. A top-K of 1 means the next selected token is the most probable among all tokens in the model's vocabulary. A top-K of 3 means that the next token is selected from among the 3 most probable tokens by using temperature.\n","example":40,"minimum":1,"type":"integer"},"topP":{"default":0.95,"description":"If specified, nucleus sampling is used.\nTop-P changes how the model selects tokens for output. Tokens are selected from the most (see top-K) to least probable until the sum of their probabilities equals the top-P value. For example, if tokens A, B, and C have a probability of 0.3, 0.2, and 0.1 and the top-P value is 0.5, then the model will select either A or B as the next token by using temperature and excludes C as a candidate.\nSpecify a lower value for less random responses and a higher value for more random responses.\n","format":"float","maximum":1,"minimum":0,"type":"number"}},"type":"object"},"GeminiInlineData":{"description":"Inline data in raw bytes. For gemini-2.0-flash-lite and gemini-2.0-flash, you can specify up to 3000 images by using inlineData.\n","properties":{"data":{"description":"The base64 encoding of the image, PDF, or video to include inline in the prompt. When including media inline, you must also specify the media type (mimeType) of the data. Size limit: 20MB\n","format":"byte","type":"string"},"mimeType":{"$ref":"#/components/schemas/GeminiMimeType"}},"type":"object"},"GeminiInteraction":{"additionalProperties":true,"description":"A Gemini Interactions API resource. Most fields pass through; the proxy reads `status` and `usage` for billing.","properties":{"id":{"type":"string"},"model":{"type":"string"},"object":{"type":"string"},"status":{"description":"One of `in_progress`, `requires_action`, `completed`, `failed`, `cancelled`, `incomplete`, `budget_exceeded`.","type":"string"},"steps":{"description":"Interaction history (user input, thoughts, model outputs with inline media).","x-go-type":"interface{}"},"usage":{"$ref":"#/components/schemas/GeminiInteractionUsage"}},"type":"object"},"GeminiInteractionModalityTokens":{"description":"Token count for one modality.","properties":{"modality":{"description":"One of `text`, `image`, `audio`, `video`, `document`.","type":"string"},"tokens":{"type":"integer"}},"type":"object"},"GeminiInteractionRequest":{"additionalProperties":true,"description":"Request body for the Gemini Interactions API (`/v1beta/interactions`). Mirrors the upstream schema with strict typing only on the fields the proxy reads (model, `input` for prompt extraction); all other fields (`response_format`, `generation_config`, `store`, `safety_settings`, ...) pass through unchanged via `additionalProperties`.","properties":{"input":{"description":"Either a prompt string or an array of typed content parts (text, image, audio, video, document).","x-go-type":"interface{}"},"model":{"description":"Gemini model identifier (e.g. `gemini-omni-flash-preview`).","type":"string"},"previous_interaction_id":{"description":"ID of a prior stored interaction, enabling stateful multi-turn video editing.","type":"string"}},"required":["model","input"],"type":"object"},"GeminiInteractionUsage":{"additionalProperties":true,"description":"Token usage for a Gemini interaction.","properties":{"input_tokens_by_modality":{"items":{"$ref":"#/components/schemas/GeminiInteractionModalityTokens"},"type":"array"},"output_tokens_by_modality":{"items":{"$ref":"#/components/schemas/GeminiInteractionModalityTokens"},"type":"array"},"total_cached_tokens":{"type":"integer"},"total_input_tokens":{"type":"integer"},"total_output_tokens":{"type":"integer"},"total_thought_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}},"type":"object"},"GeminiMimeType":{"description":"The media type of the file specified in the data or fileUri fields. Acceptable values include the following. For gemini-2.0-flash-lite and gemini-2.0-flash, the maximum length of an audio file is 8.4 hours and the maximum length of a video file (without audio) is one hour. For more information, see Gemini audio and video requirements. Text files must be UTF-8 encoded. The contents of the text file count toward the token limit. There is no limit on image resolution.","enum":["application/pdf","audio/mpeg","audio/mp3","audio/wav","image/png","image/jpeg","image/webp","text/plain","video/mov","video/mpeg","video/mp4","video/mpg","video/avi","video/wmv","video/mpegps","video/flv"],"type":"string"},"GeminiOffset":{"description":"Represents a duration offset for video timeline positions.\n","properties":{"nanos":{"description":"Signed fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values.\n","example":0,"maximum":999999999,"minimum":0,"type":"integer"},"seconds":{"description":"Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.\n","example":60,"maximum":315576000000,"minimum":-315576000000,"type":"integer"}},"type":"object"},"GeminiPart":{"properties":{"fileData":{"$ref":"#/components/schemas/GeminiFileData"},"inlineData":{"$ref":"#/components/schemas/GeminiInlineData"},"text":{"description":"A text prompt or code snippet.","example":"Write a story about a robot learning to paint","type":"string"},"thought":{"description":"Indicates this part is a thinking/reasoning step from the model.","type":"boolean"}},"type":"object"},"GeminiPromptFeedback":{"properties":{"blockReason":{"type":"string"},"blockReasonMessage":{"type":"string"},"safetyRatings":{"items":{"$ref":"#/components/schemas/GeminiSafetyRating"},"type":"array"}},"type":"object"},"GeminiSafetyCategory":{"enum":["HARM_CATEGORY_SEXUALLY_EXPLICIT","HARM_CATEGORY_HATE_SPEECH","HARM_CATEGORY_HARASSMENT","HARM_CATEGORY_DANGEROUS_CONTENT"],"type":"string"},"GeminiSafetyRating":{"properties":{"category":{"$ref":"#/components/schemas/GeminiSafetyCategory"},"probability":{"description":"The probability that the content violates the specified safety category","enum":["NEGLIGIBLE","LOW","MEDIUM","HIGH","UNKNOWN"],"type":"string"}},"type":"object"},"GeminiSafetySetting":{"description":"Per request settings for blocking unsafe content. Enforced on GenerateContentResponse.candidates.\n","properties":{"category":{"$ref":"#/components/schemas/GeminiSafetyCategory"},"threshold":{"$ref":"#/components/schemas/GeminiSafetyThreshold"}},"required":["category","threshold"],"type":"object"},"GeminiSafetyThreshold":{"enum":["OFF","BLOCK_NONE","BLOCK_LOW_AND_ABOVE","BLOCK_MEDIUM_AND_ABOVE","BLOCK_ONLY_HIGH"],"type":"string"},"GeminiSystemInstructionContent":{"description":"Available for gemini-2.0-flash and gemini-2.0-flash-lite. Instructions for the model to steer it toward better performance. For example, \"Answer as concisely as possible\" or \"Don't use technical terms in your response\". The text strings count toward the token limit. The role field of systemInstruction is ignored and doesn't affect the performance of the model. Note: Only text should be used in parts and content in each part should be in a separate paragraph.\n","properties":{"parts":{"description":"A list of ordered parts that make up a single message. Different parts may have different IANA MIME types. For limits on the inputs, such as the maximum number of tokens or the number of images, see the model specifications on the Google models page.\n","items":{"$ref":"#/components/schemas/GeminiTextPart"},"type":"array"},"role":{"description":"The identity of the entity that creates the message. The following values are supported: user: This indicates that the message is sent by a real person, typically a user-generated message. model: This indicates that the message is generated by the model. The model value is used to insert messages from the model into the conversation during multi-turn conversations. For non-multi-turn conversations, this field can be left blank or unset.\n","enum":["user","model"],"example":"user","type":"string"}},"required":["role","parts"],"type":"object"},"GeminiTextPart":{"properties":{"text":{"description":"A text prompt or code snippet.","example":"Answer as concisely as possible","type":"string"}},"type":"object"},"GeminiTool":{"description":"A piece of code that enables the system to interact with external systems to perform an action, or set of actions, outside of knowledge and scope of the model. See Function calling.\n","properties":{"functionDeclarations":{"items":{"$ref":"#/components/schemas/GeminiFunctionDeclaration"},"type":"array"}},"type":"object"},"GeminiUsageMetadata":{"properties":{"cachedContentTokenCount":{"description":"Output only. Number of tokens in the cached part in the input (the cached content).","type":"integer"},"candidatesTokenCount":{"description":"Number of tokens in the response(s).","type":"integer"},"candidatesTokensDetails":{"description":"Breakdown of candidate tokens by modality.","items":{"$ref":"#/components/schemas/ModalityTokenCount"},"type":"array"},"promptTokenCount":{"description":"Number of tokens in the request. When cachedContent is set, this is still the total effective prompt size meaning this includes the number of tokens in the cached content.","type":"integer"},"promptTokensDetails":{"description":"Breakdown of prompt tokens by modality.","items":{"$ref":"#/components/schemas/ModalityTokenCount"},"type":"array"},"thoughtsTokenCount":{"description":"Number of tokens present in thoughts output.","type":"integer"},"toolUsePromptTokenCount":{"description":"Number of tokens present in tool-use prompt(s).","type":"integer"},"totalTokenCount":{"description":"Total number of tokens (prompt + candidates).","type":"integer"},"trafficType":{"description":"Traffic type used for the request (e.g., PROVISIONED_THROUGHPUT).","type":"string"}},"type":"object"},"GeminiVideoMetadata":{"description":"For video input, the start and end offset of the video in Duration format. For example, to specify a 10 second clip starting at 1:00, set \"startOffset\": { \"seconds\": 60 } and \"endOffset\": { \"seconds\": 70 }. The metadata should only be specified while the video data is presented in inlineData or fileData.\n","properties":{"endOffset":{"$ref":"#/components/schemas/GeminiOffset"},"startOffset":{"$ref":"#/components/schemas/GeminiOffset"}},"type":"object"},"GitCommitSummary":{"properties":{"author":{"description":"The author of the commit","type":"string"},"branch_name":{"description":"The branch where the commit was made","type":"string"},"commit_hash":{"description":"The hash of the commit","type":"string"},"commit_name":{"description":"The name of the commit","type":"string"},"status_summary":{"additionalProperties":{"type":"string"},"description":"A map of operating system to status pairs","type":"object"},"timestamp":{"description":"The timestamp when the commit was made","format":"date-time","type":"string"}},"type":"object"},"GithubEnterprise":{"description":"A GitHub enterprise","properties":{"avatar_url":{"description":"URL to the enterprise avatar","type":"string"},"created_at":{"description":"When the enterprise was created","format":"date-time","type":"string"},"description":{"description":"The enterprise description","nullable":true,"type":"string"},"html_url":{"description":"The HTML URL of the enterprise","type":"string"},"id":{"description":"The enterprise ID","type":"integer"},"name":{"description":"The enterprise name","type":"string"},"node_id":{"description":"The enterprise node ID","type":"string"},"slug":{"description":"The enterprise slug","type":"string"},"updated_at":{"description":"When the enterprise was last updated","format":"date-time","type":"string"},"website_url":{"description":"The enterprise website URL","nullable":true,"type":"string"}},"required":["id","slug","name","node_id","avatar_url","html_url","created_at","updated_at"],"type":"object"},"GithubInstallation":{"description":"A GitHub App installation","properties":{"access_tokens_url":{"description":"The API URL for access tokens","type":"string"},"account":{"$ref":"#/components/schemas/GithubUser"},"app_id":{"description":"The GitHub App ID","type":"integer"},"created_at":{"description":"When the installation was created","format":"date-time","type":"string"},"events":{"description":"The events the installation subscribes to","items":{"type":"string"},"type":"array"},"html_url":{"description":"The HTML URL of the installation","type":"string"},"id":{"description":"The installation ID","type":"integer"},"permissions":{"description":"The installation permissions","type":"object"},"repositories_url":{"description":"The API URL for repositories","type":"string"},"repository_selection":{"description":"Repository selection for the installation","enum":["selected","all"],"type":"string"},"single_file_name":{"description":"The single file name if applicable","nullable":true,"type":"string"},"target_id":{"description":"The target ID","type":"integer"},"target_type":{"description":"The target type","type":"string"},"updated_at":{"description":"When the installation was last updated","format":"date-time","type":"string"}},"required":["id","account","repository_selection","access_tokens_url","repositories_url","html_url","app_id","target_id","target_type","permissions","events","created_at","updated_at"],"type":"object"},"GithubOrganization":{"description":"A GitHub organization","properties":{"avatar_url":{"description":"URL to the organization's avatar","type":"string"},"description":{"description":"The organization description","nullable":true,"type":"string"},"events_url":{"description":"The API URL of the organization's events","type":"string"},"hooks_url":{"description":"The API URL of the organization's hooks","type":"string"},"id":{"description":"The organization ID","type":"integer"},"issues_url":{"description":"The API URL of the organization's issues","type":"string"},"login":{"description":"The organization's login name","type":"string"},"members_url":{"description":"The API URL of the organization's members","type":"string"},"node_id":{"description":"The organization node ID","type":"string"},"public_members_url":{"description":"The API URL of the organization's public members","type":"string"},"repos_url":{"description":"The API URL of the organization's repositories","type":"string"},"url":{"description":"The API URL of the organization","type":"string"}},"required":["login","id","node_id","url","repos_url","events_url","hooks_url","issues_url","members_url","public_members_url","avatar_url"],"type":"object"},"GithubReleaseAsset":{"description":"A GitHub release asset","properties":{"browser_download_url":{"description":"The browser download URL","type":"string"},"content_type":{"description":"The content type of the asset","type":"string"},"created_at":{"description":"When the asset was created","format":"date-time","type":"string"},"download_count":{"description":"The number of downloads","type":"integer"},"id":{"description":"The asset ID","type":"integer"},"label":{"description":"The label of the asset","nullable":true,"type":"string"},"name":{"description":"The name of the asset","type":"string"},"node_id":{"description":"The asset node ID","type":"string"},"size":{"description":"The size of the asset in bytes","type":"integer"},"state":{"description":"The state of the asset","enum":["uploaded","open"],"type":"string"},"updated_at":{"description":"When the asset was last updated","format":"date-time","type":"string"},"uploader":{"$ref":"#/components/schemas/GithubUser"}},"required":["id","node_id","name","content_type","state","size","download_count","created_at","updated_at","browser_download_url","uploader"],"type":"object"},"GithubReleaseWebhook":{"description":"GitHub release webhook payload based on official webhook documentation","properties":{"action":{"description":"The action performed on the release","enum":["published","unpublished","created","edited","deleted","prereleased","released"],"type":"string"},"enterprise":{"$ref":"#/components/schemas/GithubEnterprise"},"installation":{"$ref":"#/components/schemas/GithubInstallation"},"organization":{"$ref":"#/components/schemas/GithubOrganization"},"release":{"description":"The release object","properties":{"assets":{"description":"Array of release assets","items":{"$ref":"#/components/schemas/GithubReleaseAsset"},"type":"array"},"assets_url":{"description":"The URL to the release assets","type":"string"},"author":{"$ref":"#/components/schemas/GithubUser"},"body":{"description":"The release notes/body","nullable":true,"type":"string"},"created_at":{"description":"When the release was created","format":"date-time","type":"string"},"draft":{"description":"Whether the release is a draft","type":"boolean"},"html_url":{"description":"The HTML URL of the release","type":"string"},"id":{"description":"The ID of the release","type":"integer"},"name":{"description":"The name of the release","nullable":true,"type":"string"},"node_id":{"description":"The node ID of the release","type":"string"},"prerelease":{"description":"Whether the release is a prerelease","type":"boolean"},"published_at":{"description":"When the release was published","format":"date-time","nullable":true,"type":"string"},"tag_name":{"description":"The tag name of the release","type":"string"},"tarball_url":{"description":"URL to the tarball","type":"string"},"target_commitish":{"description":"The branch or commit the release was created from","type":"string"},"upload_url":{"description":"The URL to upload release assets","type":"string"},"url":{"description":"The API URL of the release","type":"string"},"zipball_url":{"description":"URL to the zipball","type":"string"}},"required":["id","node_id","url","html_url","tag_name","target_commitish","draft","prerelease","created_at","author","tarball_url","zipball_url","assets"],"type":"object"},"repository":{"$ref":"#/components/schemas/GithubRepository"},"sender":{"$ref":"#/components/schemas/GithubUser"}},"required":["action","release","repository","sender"],"type":"object"},"GithubRepository":{"description":"A GitHub repository","properties":{"clone_url":{"description":"The clone URL of the repository","type":"string"},"created_at":{"description":"When the repository was created","format":"date-time","type":"string"},"default_branch":{"description":"The default branch of the repository","type":"string"},"description":{"description":"The repository description","nullable":true,"type":"string"},"fork":{"description":"Whether the repository is a fork","type":"boolean"},"full_name":{"description":"The full name of the repository (owner/repo)","type":"string"},"git_url":{"description":"The git URL of the repository","type":"string"},"html_url":{"description":"The HTML URL of the repository","type":"string"},"id":{"description":"The repository ID","type":"integer"},"name":{"description":"The name of the repository","type":"string"},"node_id":{"description":"The repository node ID","type":"string"},"owner":{"$ref":"#/components/schemas/GithubUser"},"private":{"description":"Whether the repository is private","type":"boolean"},"pushed_at":{"description":"When the repository was last pushed to","format":"date-time","type":"string"},"ssh_url":{"description":"The SSH URL of the repository","type":"string"},"updated_at":{"description":"When the repository was last updated","format":"date-time","type":"string"},"url":{"description":"The API URL of the repository","type":"string"}},"required":["id","node_id","name","full_name","private","owner","html_url","fork","url","clone_url","git_url","ssh_url","default_branch","created_at","updated_at","pushed_at"],"type":"object"},"GithubUser":{"description":"A GitHub user","properties":{"avatar_url":{"description":"URL to the user's avatar","type":"string"},"gravatar_id":{"description":"The user's gravatar ID","nullable":true,"type":"string"},"html_url":{"description":"The HTML URL of the user","type":"string"},"id":{"description":"The user's ID","type":"integer"},"login":{"description":"The user's login name","type":"string"},"node_id":{"description":"The user's node ID","type":"string"},"site_admin":{"description":"Whether the user is a site admin","type":"boolean"},"type":{"description":"The type of user","enum":["Bot","User","Organization"],"type":"string"},"url":{"description":"The API URL of the user","type":"string"}},"required":["login","id","node_id","avatar_url","url","html_url","type","site_admin"],"type":"object"},"HeyGenAssetInput":{"description":"Asset reference. Set type to the discriminator ('url', 'asset_id', or\n'base64') and provide the matching field: url, asset_id, or\nmedia_type + data.\n","properties":{"asset_id":{"description":"HeyGen asset ID from the asset upload endpoint","type":"string"},"data":{"description":"Base64-encoded file content","type":"string"},"media_type":{"description":"MIME type of base64-encoded content (e.g. 'image/png')","type":"string"},"type":{"description":"Input type discriminator: 'url', 'asset_id', or 'base64'","type":"string"},"url":{"description":"Publicly accessible HTTPS URL for the asset","type":"string"}},"required":["type"],"type":"object"},"HeyGenAvatarLook":{"description":"A HeyGen avatar look. The id field is the look-level identifier to pass\nas avatar_id when creating a video.\n","properties":{"avatar_type":{"description":"Avatar look type: 'studio_avatar', 'digital_twin', or 'photo_avatar'","type":"string"},"default_voice_id":{"description":"Default voice ID for this look","type":"string"},"error":{"$ref":"#/components/schemas/HeyGenAvatarLookError"},"gender":{"description":"Gender of the avatar","type":"string"},"group_id":{"description":"ID of the avatar group this look belongs to","type":"string"},"id":{"description":"Unique look identifier","type":"string"},"image_height":{"description":"Native height of the look in pixels","type":"integer"},"image_width":{"description":"Native width of the look in pixels","type":"integer"},"name":{"description":"Display name of the look","type":"string"},"preferred_orientation":{"description":"Preferred orientation of the look: 'portrait', 'landscape', or 'square'","type":"string"},"preview_image_url":{"description":"URL to the look preview image","type":"string"},"preview_video_url":{"description":"URL to the look preview video","type":"string"},"status":{"description":"Training status of the avatar look: 'processing', 'pending_consent', 'completed', or 'failed'","type":"string"},"supported_api_engines":{"description":"Engine values this look supports: 'avatar_v', 'avatar_iv', 'avatar_iii'","items":{"type":"string"},"type":"array"},"tags":{"description":"Tags associated with the look","items":{"type":"string"},"type":"array"}},"type":"object"},"HeyGenAvatarLookError":{"description":"Error details for a failed avatar look","properties":{"code":{"description":"Machine-readable error code","type":"string"},"message":{"description":"Human-readable error description","type":"string"}},"type":"object"},"HeyGenAvatarLookResponse":{"description":"Response envelope for HeyGen get-avatar-look","properties":{"data":{"$ref":"#/components/schemas/HeyGenAvatarLook"}},"type":"object"},"HeyGenBackgroundSetting":{"description":"Background configuration for the generated video","properties":{"asset_id":{"description":"HeyGen asset ID of the background image. Used when type is 'image'","type":"string"},"type":{"description":"Background type: 'color' (solid hex color) or 'image'","type":"string"},"url":{"description":"URL of the background image. Used when type is 'image'","type":"string"},"value":{"description":"Hex color code (e.g. '#ff0000'). Required when type is 'color'","type":"string"}},"required":["type"],"type":"object"},"HeyGenCaptionSetting":{"description":"Caption generation settings. A sidecar subtitle file is always returned\nvia subtitle_url; set style to additionally burn captions into the\nrendered video.\n","properties":{"file_format":{"description":"Output format for the sidecar caption file (e.g. 'srt')","type":"string"},"style":{"description":"Visual style for burned-in captions. Omit for sidecar-only captions","type":"string"}},"type":"object"},"HeyGenCreateAvatarData":{"description":"Payload of a successful HeyGen create-avatar response","properties":{"avatar_group":{"$ref":"#/components/schemas/HeyGenCreateAvatarGroup"},"avatar_item":{"$ref":"#/components/schemas/HeyGenCreateAvatarItem"}},"type":"object"},"HeyGenCreateAvatarGroup":{"description":"The avatar group created for the new avatar","properties":{"id":{"description":"Unique avatar group identifier","type":"string"}},"type":"object"},"HeyGenCreateAvatarItem":{"description":"The first look created for the new avatar","properties":{"id":{"description":"Unique look identifier. Pass this as avatar_id when creating videos once training completes","type":"string"},"status":{"description":"Initial training status (e.g. 'processing')","type":"string"}},"type":"object"},"HeyGenCreateAvatarRequest":{"description":"Request body for HeyGen v3 create-avatar. Types 'photo' (from an\nimage) and 'prompt' (generated from a text description) are supported\nthrough this proxy; 'digital_twin' requires a consent flow and is not\nsupported.\n","properties":{"file":{"$ref":"#/components/schemas/HeyGenAssetInput"},"name":{"description":"Display name for the new avatar","type":"string"},"prompt":{"description":"Text description of the avatar to generate (prompt type only, max 1000 characters)","type":"string"},"reference_images":{"description":"Optional reference images guiding prompt-based generation (up to 3)","items":{"$ref":"#/components/schemas/HeyGenAssetInput"},"type":"array"},"type":{"description":"Avatar creation variant: 'photo' or 'prompt'","type":"string"}},"required":["type"],"type":"object"},"HeyGenCreateAvatarResponse":{"description":"Response envelope for HeyGen create-avatar","properties":{"data":{"$ref":"#/components/schemas/HeyGenCreateAvatarData"}},"type":"object"},"HeyGenCreateVideoData":{"description":"Payload of a successful HeyGen create-video response","properties":{"output_format":{"description":"Resolved output format for the video","type":"string"},"status":{"description":"Initial video status (e.g. 'waiting')","type":"string"},"video_id":{"description":"Unique identifier for the created video","type":"string"}},"type":"object"},"HeyGenCreateVideoRequest":{"description":"Request body for HeyGen v3 create-video. This is a flattened union of\nthe three variants selected by type: 'avatar' (requires avatar_id),\n'image' (requires image), and 'cinematic_avatar' (requires prompt and\navatar_id). Script/voice fields apply to the 'avatar' and 'image'\nvariants; prompt/references/duration fields apply to the\n'cinematic_avatar' variant.\n","properties":{"aspect_ratio":{"description":"Output video aspect ratio: '16:9', '9:16', '4:5', '5:4', '1:1', or 'auto'","type":"string"},"audio_asset_id":{"description":"HeyGen asset ID of an uploaded audio file. Mutually exclusive with script","type":"string"},"audio_url":{"description":"Public URL of an audio file to lip-sync. Mutually exclusive with script","type":"string"},"auto_duration":{"description":"Let the model choose the video length (cinematic_avatar only)","type":"boolean"},"avatar_id":{"description":"Avatar look reference. For type 'avatar' this is a single look ID\nstring; for type 'cinematic_avatar' it is an array of 1 to 3 look\nID strings.\n"},"background":{"$ref":"#/components/schemas/HeyGenBackgroundSetting"},"callback_id":{"description":"Caller-defined identifier echoed back in the webhook payload","type":"string"},"callback_url":{"description":"Webhook URL to receive a POST notification when the video is ready","type":"string"},"caption":{"$ref":"#/components/schemas/HeyGenCaptionSetting"},"duration":{"description":"Video length in seconds, 4-15 (cinematic_avatar only)","type":"integer"},"engine":{"$ref":"#/components/schemas/HeyGenEngineConfig"},"enhance_prompt":{"description":"Enable server-side prompt enhancement (cinematic_avatar only)","type":"boolean"},"expressiveness":{"description":"Avatar expressiveness level for photo avatars: 'high', 'medium', or 'low'","type":"string"},"fit":{"description":"How the subject is fitted to the output canvas: 'cover' or 'contain'","type":"string"},"image":{"$ref":"#/components/schemas/HeyGenAssetInput"},"motion_prompt":{"description":"Natural-language prompt controlling avatar body motion and hand gestures","type":"string"},"output_format":{"description":"Output container: 'mp4' (default) or 'webm' (transparent background)","type":"string"},"prompt":{"description":"Natural-language prompt describing the video to generate (cinematic_avatar only)","type":"string"},"references":{"description":"Reference assets (images, videos, or audio) guiding the generation (cinematic_avatar only)","items":{"$ref":"#/components/schemas/HeyGenAssetInput"},"type":"array"},"remove_background":{"description":"Remove the avatar background. Video avatars must be trained with matting enabled","type":"boolean"},"resolution":{"description":"Output video resolution: '720p', '1080p', or '4k' (4k only on looks whose engine supports it)","type":"string"},"script":{"description":"Text script for the avatar to speak. Mutually exclusive with audio_url/audio_asset_id","type":"string"},"title":{"description":"Display title for the video in the HeyGen dashboard","type":"string"},"type":{"description":"Video creation variant: 'avatar', 'image', or 'cinematic_avatar'","type":"string"},"voice_id":{"description":"Voice ID for text-to-speech. Required with script unless avatar_id has a default voice","type":"string"},"voice_settings":{"$ref":"#/components/schemas/HeyGenVoiceSettings"}},"required":["type"],"type":"object"},"HeyGenCreateVideoResponse":{"description":"Response envelope for HeyGen create-video","properties":{"data":{"$ref":"#/components/schemas/HeyGenCreateVideoData"}},"type":"object"},"HeyGenCreateVideoTranslationRequest":{"description":"Request body for HeyGen v3 create-video-translation","properties":{"audio":{"$ref":"#/components/schemas/HeyGenAssetInput"},"brand_glossary_id":{"description":"Brand glossary ID for custom term translations","type":"string"},"brand_voice_id":{"description":"Brand glossary ID for custom term translations (legacy alias of brand_glossary_id)","type":"string"},"callback_id":{"description":"ID included in webhook payload","type":"string"},"callback_url":{"description":"Webhook URL for completion notifications","type":"string"},"disable_music_track":{"description":"Remove background music","type":"boolean"},"enable_caption":{"description":"Generate captions for translated video","type":"boolean"},"enable_dynamic_duration":{"description":"Allow dynamic duration adjustment","type":"boolean"},"enable_speech_enhancement":{"description":"Enhance speech quality","type":"boolean"},"enable_watermark":{"description":"Add watermark to output","type":"boolean"},"end_time":{"description":"End time in seconds for partial translation","format":"double","type":"number"},"folder_id":{"description":"Project/folder ID to organize translation into","type":"string"},"fps_mode":{"description":"Frame rate mode for the output video: 'vfr', 'cfr', or 'passthrough'","type":"string"},"input_language":{"description":"Source language code (auto-detected if omitted)","type":"string"},"keep_the_same_format":{"description":"Preserve the source video's encoding specs (resolution, bitrate)","type":"boolean"},"mode":{"description":"Translation quality mode: 'speed' (default, faster) or 'precision' (higher lip-sync quality)","type":"string"},"output_languages":{"description":"Target language names (e.g. 'Spanish (Spain)', 'English'). Use one\nfor single translation, multiple for batch.\n","items":{"type":"string"},"type":"array"},"speaker_num":{"description":"Number of speakers (improves speaker separation)","type":"integer"},"srt":{"$ref":"#/components/schemas/HeyGenAssetInput"},"srt_role":{"description":"Which video the subtitle applies to: 'input' (source) or 'output' (translated)","type":"string"},"start_time":{"description":"Start time in seconds for partial translation","format":"double","type":"number"},"stock_voice_config":{"$ref":"#/components/schemas/HeyGenStockVoiceConfig"},"title":{"description":"Title for the translation job","type":"string"},"translate_audio_only":{"description":"Only translate audio, keep original video","type":"boolean"},"video":{"$ref":"#/components/schemas/HeyGenAssetInput"}},"required":["video","output_languages"],"type":"object"},"HeyGenEngineConfig":{"description":"Engine configuration for video generation","properties":{"reference_look_id":{"description":"Optional instant_avatar look used as the animation reference (avatar_v only)","type":"string"},"type":{"description":"Engine type: 'avatar_iii', 'avatar_iv', or 'avatar_v'. Defaults to 'avatar_iv' when omitted","type":"string"}},"required":["type"],"type":"object"},"HeyGenSpeechData":{"description":"Payload of a successful HeyGen text-to-speech response","properties":{"audio_url":{"description":"URL of the generated audio file","type":"string"},"duration":{"description":"Duration of the audio in seconds","format":"double","type":"number"},"request_id":{"description":"Unique identifier for this generation request","type":"string"},"word_timestamps":{"description":"Word-level timing data","items":{"$ref":"#/components/schemas/HeyGenWordTimestamp"},"type":"array"}},"type":"object"},"HeyGenSpeechRequest":{"description":"Request body for HeyGen v3 text-to-speech generation","properties":{"input_type":{"description":"Type of the input: 'text' for plain text, 'ssml' for SSML markup. Defaults to 'text'","type":"string"},"language":{"description":"Base language code (e.g. 'en'). Auto-detected from text when omitted","type":"string"},"locale":{"description":"BCP-47 locale tag (e.g. 'en-US'). When set, language is inferred from locale","type":"string"},"speed":{"description":"Speed multiplier (0.5-2.0)","format":"double","type":"number"},"text":{"description":"Text to synthesize (1-5000 characters)","type":"string"},"voice_id":{"description":"Voice ID to use. The voice must support the starfish engine","type":"string"}},"required":["text","voice_id"],"type":"object"},"HeyGenSpeechResponse":{"description":"Response envelope for HeyGen text-to-speech","properties":{"data":{"$ref":"#/components/schemas/HeyGenSpeechData"}},"type":"object"},"HeyGenStockVoiceConfig":{"description":"Stock-voice options for a video translation. Use a preset HeyGen voice\ninstead of recreating the original speaker's voice.\n","properties":{"preferred_stock_voice_ids":{"description":"Optional stock voice IDs to draw from","items":{"type":"string"},"type":"array"},"use_stock_voice":{"description":"Set to true to use a preset stock voice instead of cloning the original speaker","type":"boolean"}},"type":"object"},"HeyGenVideoDetail":{"description":"HeyGen video resource returned by the get-video endpoint","properties":{"captioned_video_url":{"description":"Presigned URL to download the video file with captions burned in","type":"string"},"completed_at":{"description":"Unix timestamp when video generation finished","format":"int64","type":"integer"},"created_at":{"description":"Unix timestamp of creation","format":"int64","type":"integer"},"duration":{"description":"Video duration in seconds","format":"double","type":"number"},"failure_code":{"description":"Machine-readable failure reason. Only present when status is failed","type":"string"},"failure_message":{"description":"Human-readable failure description. Only present when status is failed","type":"string"},"folder_id":{"description":"ID of containing folder","type":"string"},"gif_url":{"description":"URL to animated GIF preview","type":"string"},"id":{"description":"Unique video identifier","type":"string"},"output_language":{"description":"BCP-47 output language code. Present only for translated videos","type":"string"},"status":{"description":"Current video status: 'pending', 'processing', 'completed', or 'failed'","type":"string"},"subtitle_url":{"description":"Presigned URL to download the SRT subtitle file","type":"string"},"thumbnail_url":{"description":"URL to video thumbnail image","type":"string"},"title":{"description":"Video title","type":"string"},"video_page_url":{"description":"URL to the video page in the HeyGen app","type":"string"},"video_url":{"description":"Presigned URL to download the video file","type":"string"}},"type":"object"},"HeyGenVideoDetailResponse":{"description":"Response envelope for HeyGen get-video","properties":{"data":{"$ref":"#/components/schemas/HeyGenVideoDetail"}},"type":"object"},"HeyGenVideoTranslationCreateData":{"description":"Payload of a successful HeyGen create-video-translation response","properties":{"video_translation_ids":{"description":"Video translation IDs, one per target language","items":{"type":"string"},"type":"array"}},"type":"object"},"HeyGenVideoTranslationCreateResponse":{"description":"Response envelope for HeyGen create-video-translation","properties":{"data":{"$ref":"#/components/schemas/HeyGenVideoTranslationCreateData"}},"type":"object"},"HeyGenVideoTranslationDetail":{"description":"HeyGen video translation resource returned by the get-video-translation endpoint","properties":{"audio_url":{"description":"Presigned download URL for the translated audio. Only present when completed","type":"string"},"callback_id":{"description":"Client-provided callback ID","type":"string"},"created_at":{"description":"Unix timestamp when the translation was created","format":"int64","type":"integer"},"duration":{"description":"Video duration in seconds","format":"double","type":"number"},"failure_message":{"description":"Error description. Only present when status is failed","type":"string"},"id":{"description":"Unique video translation identifier","type":"string"},"input_language":{"description":"Detected or specified source language code","type":"string"},"output_language":{"description":"Target language code","type":"string"},"srt_caption_url":{"description":"Presigned download URL for the SRT caption file","type":"string"},"status":{"description":"Current translation status: 'pending', 'running', 'completed', or 'failed'","type":"string"},"title":{"description":"Title of the translation job","type":"string"},"translate_audio_only":{"description":"Whether only the audio was translated, keeping the original video","type":"boolean"},"video_url":{"description":"Presigned download URL for the translated video. Only present when completed","type":"string"},"vtt_caption_url":{"description":"Presigned download URL for the VTT caption file","type":"string"}},"type":"object"},"HeyGenVideoTranslationDetailResponse":{"description":"Response envelope for HeyGen get-video-translation","properties":{"data":{"$ref":"#/components/schemas/HeyGenVideoTranslationDetail"}},"type":"object"},"HeyGenVoiceSettings":{"description":"Voice tuning parameters for text-to-speech. Applies only when script +\nvoice_id are provided.\n","properties":{"engine_settings":{"additionalProperties":true,"description":"Engine-specific voice tuning discriminated by engine_type\n('elevenlabs', 'fish', or 'starfish'); remaining fields vary by\nengine.\n","type":"object"},"locale":{"description":"Locale/accent hint for multi-lingual voices (e.g. 'en-US')","type":"string"},"pitch":{"description":"Pitch adjustment in semitones (-50 to +50)","format":"double","type":"number"},"speed":{"description":"Playback speed multiplier (0.5 to 1.5)","format":"double","type":"number"},"volume":{"description":"Voice audio volume (0.0 to 1.0)","format":"double","type":"number"}},"type":"object"},"HeyGenWordTimestamp":{"description":"Word-level timing data from TTS generation","properties":{"end":{"description":"End time in seconds","format":"double","type":"number"},"start":{"description":"Start time in seconds","format":"double","type":"number"},"word":{"description":"The word","type":"string"}},"type":"object"},"HitPawErrorResponse":{"description":"Error response from HitPaw API","properties":{"error_code":{"description":"Error code","type":"integer"},"message":{"description":"Error message","type":"string"}},"type":"object"},"HitPawJobResponse":{"description":"Response from HitPaw Enhancement APIs (photo and video)","properties":{"code":{"description":"Status code, 200 indicates success","example":200,"type":"integer"},"data":{"properties":{"consume_coins":{"description":"Number of coins consumed for this task","example":75,"type":"integer"},"job_id":{"description":"Unique identifier for the enhancement job","example":"f5007c0b-e902-4070-8c75-f337d896168f","type":"string"}},"type":"object"},"message":{"description":"Response message","example":"OK","type":"string"}},"type":"object"},"HitPawPhotoEnhancerRequest":{"description":"Request body for HitPaw Photo Enhancement API","properties":{"DPI":{"description":"Target DPI for the output image","example":300,"format":"int64","type":"integer"},"exif":{"description":"Whether to preserve EXIF data (default false)","example":true,"type":"boolean"},"extension":{"description":"File extension of the image (e.g., \".jpg\", \".png\")","example":".jpg","type":"string"},"img_url":{"description":"URL of the image to be enhanced. Must be publicly accessible.","example":"https://example.com/image.jpg","format":"uri","type":"string"},"model_name":{"description":"The model name to use for enhancement.\n\n**Available Models:**\n- face_2x, face_4x: Face Clear Model (2x/4x upscaling)\n- face_v2_2x, face_v2_4x: Face Natural Model (2x/4x upscaling)\n- general_2x, general_4x: General Enhance Model (2x/4x upscaling)\n- high_fidelity_2x, high_fidelity_4x: High Fidelity Model (2x/4x upscaling)\n- sharpen_denoise: Sharp Denoise Model\n- detail_denoise: Detail Denoise Model\n- generative_portrait: Generative Portrait Model\n- generative: Generative Enhance Model\n","enum":["face_2x","face_4x","face_v2_2x","face_v2_4x","general_2x","general_4x","high_fidelity_2x","high_fidelity_4x","sharpen_denoise","detail_denoise","generative_portrait","generative"],"example":"generative_portrait","type":"string"}},"required":["model_name","img_url","extension"],"type":"object"},"HitPawTaskStatusRequest":{"description":"Request body for HitPaw Task Status Query API","properties":{"job_id":{"description":"Task ID obtained from Enhancement API response","example":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","type":"string"}},"required":["job_id"],"type":"object"},"HitPawTaskStatusResponse":{"description":"Response from HitPaw Task Status Query API","properties":{"code":{"description":"Status code, 200 indicates success","example":200,"type":"integer"},"data":{"properties":{"job_id":{"description":"Task ID","example":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","type":"string"},"original_url":{"description":"Original Image URL (photo enhancement only)","example":"https://example.com/original.jpg","format":"uri","type":"string"},"res_url":{"description":"Result URL, only valid when status is COMPLETED","example":"https://example.com/result.jpg","format":"uri","type":"string"},"status":{"description":"Task status:\n- WAITING: The job is queued and waiting to be processed\n- CONVERTING: Processing task in progress\n- COMPLETED: Task completed successfully\n- ERROR: Task failed\n","enum":["WAITING","CONVERTING","COMPLETED","ERROR"],"type":"string"}},"type":"object"},"message":{"description":"Response message","example":"OK","type":"string"}},"type":"object"},"HitPawVideoEnhancerRequest":{"description":"Request body for HitPaw Video Enhancement API","properties":{"extension":{"default":".mp4","description":"File extension for the output video (default \".mp4\")","example":".mp4","type":"string"},"model_name":{"description":"Model name to use for enhancement.\n\n**Available Models:**\n- face_soft: Face Soft Model\n- portrait_restore_1x: Portrait Restore Model 1x\n- portrait_restore_2x: Portrait Restore Model 2x\n- general_restore_1x: General Restore Model 1x\n- general_restore_2x: General Restore Model 2x\n- general_restore_4x: General Restore Model 4x\n- ultrahd_restore: Ultra HD Model\n- generative: Generative Model (SD)\n","enum":["face_soft","portrait_restore_1x","portrait_restore_2x","general_restore_1x","general_restore_2x","general_restore_4x","ultrahd_restore","generative"],"example":"general_restore_2x","type":"string"},"original_resolution":{"description":"Original video resolution [width, height]","example":[1280,720],"items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"resolution":{"description":"Target resolution [width, height]","example":[1920,1080],"items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"video_url":{"description":"URL of the video to be enhanced","example":"https://example.com/video.mp4","format":"uri","type":"string"}},"required":["video_url","model_name","resolution"],"type":"object"},"IdeogramColorPalette":{"description":"A color palette specification that can either use a preset name or explicit color definitions with weights","oneOf":[{"properties":{"name":{"description":"Name of the preset color palette","type":"string"}},"required":["name"]},{"properties":{"members":{"description":"Array of color definitions with optional weights","items":{"properties":{"color":{"description":"Hexadecimal color code","pattern":"^#[0-9A-Fa-f]{6}$","type":"string"},"weight":{"description":"Optional weight for the color (0-1)","maximum":1,"minimum":0,"type":"number"}},"type":"object"},"type":"array"}},"required":["members"]}],"type":"object"},"IdeogramGenerateRequest":{"description":"Parameters for the Ideogram generation proxy request. Based on Ideogram's API.","properties":{"image_request":{"description":"The image generation request parameters.","properties":{"aspect_ratio":{"description":"Optional. The aspect ratio (e.g., 'ASPECT_16_9', 'ASPECT_1_1'). Cannot be used with resolution. Defaults to 'ASPECT_1_1' if unspecified.","type":"string"},"color_palette":{"additionalProperties":true,"description":"Optional. Color palette object. Only for V_2, V_2_TURBO.","type":"object"},"magic_prompt_option":{"description":"Optional. MagicPrompt usage ('AUTO', 'ON', 'OFF').","type":"string"},"model":{"description":"The model used (e.g., 'V_2', 'V_2A_TURBO')","type":"string"},"negative_prompt":{"description":"Optional. Description of what to exclude. Only for V_1, V_1_TURBO, V_2, V_2_TURBO.","type":"string"},"num_images":{"default":1,"description":"Optional. Number of images to generate (1-8). Defaults to 1.","maximum":8,"minimum":1,"type":"integer"},"prompt":{"description":"Required. The prompt to use to generate the image.","type":"string"},"resolution":{"description":"Optional. Resolution (e.g., 'RESOLUTION_1024_1024'). Only for model V_2. Cannot be used with aspect_ratio.","type":"string"},"seed":{"description":"Optional. A number between 0 and 2147483647.","format":"int64","maximum":2147483647,"minimum":0,"type":"integer"},"style_type":{"description":"Optional. Style type ('AUTO', 'GENERAL', 'REALISTIC', 'DESIGN', 'RENDER_3D', 'ANIME'). Only for models V_2 and above.","type":"string"}},"required":["prompt","model"],"type":"object"}},"required":["image_request"],"type":"object"},"IdeogramGenerateResponse":{"description":"Response from the Ideogram image generation API.","properties":{"created":{"description":"Timestamp when the generation was created.","format":"date-time","type":"string"},"data":{"description":"Array of generated image information.","items":{"properties":{"is_image_safe":{"description":"Indicates whether the image is considered safe.","type":"boolean"},"prompt":{"description":"The prompt used to generate this image.","type":"string"},"resolution":{"description":"The resolution of the generated image (e.g., '1024x1024').","type":"string"},"seed":{"description":"The seed value used for this generation.","type":"integer"},"style_type":{"description":"The style type used for generation (e.g., 'REALISTIC', 'ANIME').","type":"string"},"url":{"description":"URL to the generated image.","type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"IdeogramPImageRequest":{"description":"Parameters for the P-Image-Ideogram text-to-image generation proxy request.","properties":{"aspect_ratio":{"description":"Aspect ratio in format WxH. Supported values: 1x3, 3x1, 1x2, 2x1, 9x16, 16x9, 10x16, 16x10, 2x3, 3x2, 3x4, 4x3, 4x5, 5x4, 1x1. Defaults to 1x1.","example":"1x1","type":"string"},"enable_copyright_detection":{"description":"Opt into post-generation copyright detection (Hive likeness and logo checks).","type":"boolean"},"prompt":{"description":"The prompt for image generation, either natural language or an Ideogram 4.0 JSON structured prompt.","type":"string"},"prompt_upsampling":{"description":"Prompt upsampling mode. Supported values are AUTO, ON, and OFF. Defaults to AUTO.","example":"AUTO","type":"string"},"quality":{"description":"Generation quality level. Supported values are VERY_LOW, LOW, MEDIUM, and HIGH. Defaults to MEDIUM.","example":"MEDIUM","type":"string"},"resolution":{"description":"Output resolution. Supported values are 1K and 2K. Defaults to 1K.","example":"1K","type":"string"},"seed":{"description":"Seed value for reproducible generation","type":"integer"}},"required":["prompt"],"type":"object"},"IdeogramStyleType":{"default":"GENERAL","enum":["AUTO","GENERAL","REALISTIC","DESIGN","FICTION"],"type":"string"},"IdeogramV3EditRequest":{"properties":{"character_reference_images":{"description":"Generations with character reference are subject to the character reference pricing. A set of images to use as character references (maximum total size 10MB across all character references), currently only supports 1 character reference image. The images should be in JPEG, PNG or WebP format.","items":{"format":"binary","type":"string"},"type":"array"},"character_reference_images_mask":{"description":"Optional masks for character reference images. When provided, must match the number of character_reference_images. Each mask should be a grayscale image of the same dimensions as the corresponding character reference image. The images should be in JPEG, PNG or WebP format.","items":{"format":"binary","type":"string"},"type":"array"},"color_palette":{"$ref":"#/components/schemas/IdeogramColorPalette"},"image":{"description":"The image being edited (max size 10MB); only JPEG, WebP and PNG formats are supported at this time.","format":"binary","type":"string"},"magic_prompt":{"description":"Determine if MagicPrompt should be used in generating the request or not.","type":"string"},"mask":{"description":"A black and white image of the same size as the image being edited (max size 10MB). Black regions in the mask should match up with the regions of the image that you would like to edit; only JPEG, WebP and PNG formats are supported at this time.","format":"binary","type":"string"},"num_images":{"description":"The number of images to generate.","type":"integer"},"prompt":{"description":"The prompt used to describe the edited result.","type":"string"},"rendering_speed":{"$ref":"#/components/schemas/RenderingSpeed"},"seed":{"description":"Random seed. Set for reproducible generation.","type":"integer"},"style_codes":{"description":"A list of 8 character hexadecimal codes representing the style of the image. Cannot be used in conjunction with style_reference_images or style_type.","items":{"pattern":"^[0-9A-Fa-f]{8}$","type":"string"},"type":"array"},"style_reference_images":{"description":"A set of images to use as style references (maximum total size 10MB across all style references). The images should be in JPEG, PNG or WebP format.","items":{"format":"binary","type":"string"},"type":"array"},"style_type":{"$ref":"#/components/schemas/IdeogramStyleType"}},"required":["prompt","rendering_speed"],"type":"object"},"IdeogramV3IdeogramResponse":{"properties":{"created":{"format":"date-time","type":"string"},"data":{"items":{"properties":{"is_image_safe":{"type":"boolean"},"prompt":{"type":"string"},"resolution":{"type":"string"},"seed":{"type":"integer"},"style_type":{"type":"string"},"url":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"IdeogramV3ReframeRequest":{"properties":{"color_palette":{"type":"object"},"image":{"format":"binary","type":"string"},"num_images":{"maximum":8,"minimum":1,"type":"integer"},"rendering_speed":{"$ref":"#/components/schemas/RenderingSpeed"},"resolution":{"type":"string"},"seed":{"maximum":2147483647,"minimum":0,"type":"integer"},"style_codes":{"items":{"type":"string"},"type":"array"},"style_reference_images":{"items":{"format":"binary","type":"string"},"type":"array"}},"required":["resolution"],"type":"object"},"IdeogramV3RemixRequest":{"properties":{"aspect_ratio":{"type":"string"},"character_reference_images":{"description":"Generations with character reference are subject to the character reference pricing. A set of images to use as character references (maximum total size 10MB across all character references), currently only supports 1 character reference image. The images should be in JPEG, PNG or WebP format.","items":{"format":"binary","type":"string"},"type":"array"},"character_reference_images_mask":{"description":"Optional masks for character reference images. When provided, must match the number of character_reference_images. Each mask should be a grayscale image of the same dimensions as the corresponding character reference image. The images should be in JPEG, PNG or WebP format.","items":{"format":"binary","type":"string"},"type":"array"},"color_palette":{"type":"object"},"image":{"format":"binary","type":"string"},"image_weight":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"magic_prompt":{"enum":["AUTO","ON","OFF"],"type":"string"},"negative_prompt":{"type":"string"},"num_images":{"maximum":8,"minimum":1,"type":"integer"},"prompt":{"type":"string"},"rendering_speed":{"$ref":"#/components/schemas/RenderingSpeed"},"resolution":{"type":"string"},"seed":{"maximum":2147483647,"minimum":0,"type":"integer"},"style_codes":{"items":{"type":"string"},"type":"array"},"style_reference_images":{"items":{"format":"binary","type":"string"},"type":"array"},"style_type":{"$ref":"#/components/schemas/IdeogramStyleType"}},"required":["prompt"],"type":"object"},"IdeogramV3ReplaceBackgroundRequest":{"properties":{"color_palette":{"type":"object"},"image":{"format":"binary","type":"string"},"magic_prompt":{"enum":["AUTO","ON","OFF"],"type":"string"},"num_images":{"maximum":8,"minimum":1,"type":"integer"},"prompt":{"type":"string"},"rendering_speed":{"$ref":"#/components/schemas/RenderingSpeed"},"seed":{"maximum":2147483647,"minimum":0,"type":"integer"},"style_codes":{"items":{"type":"string"},"type":"array"},"style_reference_images":{"items":{"format":"binary","type":"string"},"type":"array"}},"required":["prompt"],"type":"object"},"IdeogramV3Request":{"properties":{"aspect_ratio":{"description":"Aspect ratio in format WxH","example":"1x3","type":"string"},"character_reference_images":{"description":"Generations with character reference are subject to the character reference pricing. A set of images to use as character references (maximum total size 10MB across all character references), currently only supports 1 character reference image. The images should be in JPEG, PNG or WebP format.","items":{"format":"binary","type":"string"},"type":"array"},"character_reference_images_mask":{"description":"Optional masks for character reference images. When provided, must match the number of character_reference_images. Each mask should be a grayscale image of the same dimensions as the corresponding character reference image. The images should be in JPEG, PNG or WebP format.","items":{"format":"binary","type":"string"},"type":"array"},"color_palette":{"properties":{"name":{"description":"Name of the color palette","example":"PASTEL","type":"string"}},"required":["name"],"type":"object"},"magic_prompt":{"description":"Whether to enable magic prompt enhancement","enum":["ON","OFF"],"type":"string"},"negative_prompt":{"description":"Text prompt specifying what to avoid in the generation","type":"string"},"num_images":{"description":"Number of images to generate","minimum":1,"type":"integer"},"prompt":{"description":"The text prompt for image generation","type":"string"},"rendering_speed":{"$ref":"#/components/schemas/RenderingSpeed"},"resolution":{"description":"Image resolution in format WxH","example":"1280x800","type":"string"},"seed":{"description":"Seed value for reproducible generation","type":"integer"},"style_codes":{"description":"Array of style codes in hexadecimal format","items":{"pattern":"^[0-9A-Fa-f]{8}$","type":"string"},"type":"array"},"style_reference_images":{"description":"Array of reference image URLs or identifiers","items":{"format":"binary","type":"string"},"type":"array"},"style_type":{"$ref":"#/components/schemas/IdeogramStyleType"}},"required":["prompt","rendering_speed"],"type":"object"},"IdeogramV4Request":{"description":"Parameters for the Ideogram 4.0 (V4) text-to-image generation proxy request. Supply exactly one of text_prompt or json_prompt.","example":{"rendering_speed":"DEFAULT","text_prompt":"A poster for a jazz festival, bold typography, warm colours"},"minProperties":1,"properties":{"enable_copyright_detection":{"description":"Opt into post-generation copyright detection (Hive likeness and logo checks).","type":"boolean"},"json_prompt":{"additionalProperties":true,"description":"Structured V4 prompt. Disables Magic Prompt; consumed directly. Supply exactly one of text_prompt or json_prompt.","type":"object"},"rendering_speed":{"$ref":"#/components/schemas/RenderingSpeed"},"resolution":{"description":"Output resolution in WIDTHxHEIGHT. Omit to let the model pick an aspect ratio. Supported 2K values: 2048x2048, 1440x2880, 2880x1440, 1664x2496, 2496x1664, 1792x2240, 2240x1792, 1440x2560, 2560x1440, 1600x2560, 2560x1600, 1728x2304, 2304x1728, 1296x3168, 3168x1296, 1152x2944, 2944x1152, 1248x3328, 3328x1248, 1280x3072, 3072x1280.","example":"2048x2048","type":"string"},"text_prompt":{"description":"Natural-language prompt. Enables Magic Prompt automatically. Supply exactly one of text_prompt or json_prompt.","type":"string"}},"type":"object"},"ImageGenerationCall":{"description":"An image generation tool call. `result` carries the generated image as base64 bytes on a completed call and is null while the call is still running or if it produced nothing.\n","properties":{"id":{"description":"The unique ID of the image generation call.","type":"string"},"result":{"description":"The generated image, base64-encoded.","nullable":true,"type":"string"},"status":{"description":"The status of the item. One of `in_progress`, `completed`,\n`generating` or `failed`.\n","type":"string"},"type":{"description":"The type of the item. Always `image_generation_call`.","enum":["image_generation_call"],"type":"string","x-stainless-const":true}},"required":["type"],"title":"Image generation call","type":"object"},"ImageGenerationServerTool_OpenRouter":{"description":"OpenRouter built-in server tool: generates images from text prompts using an image generation model","properties":{"parameters":{"$ref":"#/components/schemas/OpenRouterImageGenerationServerToolConfig"},"type":{"$ref":"#/components/schemas/OpenRouterImageGenerationServerToolOpenRouterType"}},"required":["type"],"title":"ImageGenerationServerTool_OpenRouter","type":"object"},"ImagenGenerateImageRequest":{"properties":{"instances":{"items":{"$ref":"#/components/schemas/ImagenImageGenerationInstance"},"type":"array"},"parameters":{"$ref":"#/components/schemas/ImagenImageGenerationParameters"}},"required":["instances","parameters"],"type":"object"},"ImagenGenerateImageResponse":{"properties":{"predictions":{"items":{"$ref":"#/components/schemas/ImagenImagePrediction"},"type":"array"}},"type":"object"},"ImagenImageGenerationInstance":{"properties":{"prompt":{"description":"Text prompt for image generation","type":"string"}},"required":["prompt"],"type":"object"},"ImagenImageGenerationParameters":{"properties":{"addWatermark":{"type":"boolean"},"aspectRatio":{"enum":["1:1","9:16","16:9","3:4","4:3"],"type":"string"},"enhancePrompt":{"type":"boolean"},"includeRaiReason":{"type":"boolean"},"includeSafetyAttributes":{"type":"boolean"},"outputOptions":{"$ref":"#/components/schemas/ImagenOutputOptions"},"personGeneration":{"enum":["dont_allow","allow_adult","allow_all"],"type":"string"},"safetySetting":{"enum":["block_most","block_some","block_few","block_fewest"],"type":"string"},"sampleCount":{"maximum":4,"minimum":1,"type":"integer"},"seed":{"format":"uint32","type":"integer"},"storageUri":{"format":"uri","type":"string"}},"type":"object"},"ImagenImagePrediction":{"properties":{"bytesBase64Encoded":{"description":"Base64-encoded image content","format":"byte","type":"string"},"mimeType":{"description":"MIME type of the generated image","type":"string"},"prompt":{"description":"Enhanced or rewritten prompt used to generate this image","type":"string"}},"type":"object"},"ImagenOutputOptions":{"properties":{"compressionQuality":{"maximum":100,"minimum":0,"type":"integer"},"mimeType":{"enum":["image/png","image/jpeg"],"type":"string"}},"type":"object"},"Includable":{"description":"Specify additional output data to include in the model response. Currently\nsupported values are:\n- `file_search_call.results`: Include the search results of\n the file search tool call.\n- `message.input_image.image_url`: Include image urls from the input message.\n- `computer_call_output.output.image_url`: Include image urls from the computer call output.\n","enum":["file_search_call.results","message.input_image.image_url","computer_call_output.output.image_url"],"type":"string"},"InputContent":{"oneOf":[{"$ref":"#/components/schemas/InputTextContent"},{"$ref":"#/components/schemas/InputImageContent"},{"$ref":"#/components/schemas/InputFileContent"}]},"InputFileContent":{"description":"A file input to the model.","properties":{"file_data":{"description":"The content of the file to be sent to the model.\n","type":"string"},"file_id":{"description":"The ID of the file to be sent to the model.","type":"string"},"filename":{"description":"The name of the file to be sent to the model.","type":"string"},"type":{"default":"input_file","description":"The type of the input item. Always `input_file`.","enum":["input_file"],"type":"string","x-stainless-const":true}},"required":["type"],"title":"Input file","type":"object"},"InputImageContent":{"description":"An image input to the model. Learn about [image inputs](/docs/guides/vision).","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`. Defaults to `auto`.","enum":["low","high","auto"],"type":"string"},"file_id":{"description":"The ID of the file to be sent to the model.","type":"string"},"image_url":{"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image in a data URL.","type":"string"},"type":{"default":"input_image","description":"The type of the input item. Always `input_image`.","enum":["input_image"],"type":"string","x-stainless-const":true}},"required":["type","detail"],"title":"Input image","type":"object"},"InputItem":{"oneOf":[{"$ref":"#/components/schemas/EasyInputMessage"},{"$ref":"#/components/schemas/Item"}]},"InputMessage":{"properties":{"content":{"$ref":"#/components/schemas/InputMessageContentList"},"role":{"enum":["user","system","developer"],"type":"string"},"status":{"enum":["in_progress","completed","incomplete"],"type":"string"},"type":{"enum":["message"],"type":"string"}},"type":"object"},"InputMessageContentList":{"description":"A list of one or many input items to the model, containing different content\ntypes.\n","items":{"$ref":"#/components/schemas/InputContent"},"title":"Input item content list","type":"array"},"InputTextContent":{"description":"A text input to the model.","properties":{"text":{"description":"The text input to the model.","type":"string"},"type":{"default":"input_text","description":"The type of the input item. Always `input_text`.","enum":["input_text"],"type":"string","x-stainless-const":true}},"required":["type","text"],"title":"Input text","type":"object"},"Item":{"description":"Content item used to generate a response.\n","oneOf":[{"$ref":"#/components/schemas/InputMessage"},{"$ref":"#/components/schemas/OutputMessage"},{"$ref":"#/components/schemas/FileSearchToolCall"},{"$ref":"#/components/schemas/ComputerToolCall"},{"$ref":"#/components/schemas/WebSearchToolCall"},{"$ref":"#/components/schemas/FunctionToolCall"},{"$ref":"#/components/schemas/ReasoningItem"}],"type":"object"},"KlingAudioUploadType":{"description":"Method of Transmitting Audio Files for Lip-Sync. Required when mode is audio2video.","enum":["file","url"],"type":"string"},"KlingAvatarMode":{"default":"std","description":"Video generation mode. std: Standard Mode (cost-effective), pro: Professional Mode (longer duration, higher quality).","enum":["std","pro"],"type":"string"},"KlingAvatarRequest":{"properties":{"audio_id":{"description":"Audio ID Generated via TTS API. Only supports 2-300 second audio generated within the last 30 days. Either audio_id or sound_file must be provided (mutually exclusive).","type":"string"},"callback_url":{"description":"The callback notification address for the result of this task.","format":"uri","type":"string"},"external_task_id":{"description":"Customized Task ID. Must be unique within a single user account.","type":"string"},"image":{"description":"Avatar Reference Image. Supports Base64 encoding or image URL. Supported formats: .jpg/.jpeg/.png. Max 10MB, min 300px width/height, aspect ratio between 1:2.5 and 2.5:1.","type":"string"},"mode":{"$ref":"#/components/schemas/KlingAvatarMode"},"prompt":{"description":"Positive text prompt. Can define avatar actions, emotions, and camera movements.","maxLength":2500,"type":"string"},"sound_file":{"description":"Sound File. Supports Base64-encoded audio or accessible audio URL. Accepted formats: .mp3/.wav/.m4a/.aac (max 5MB), 2-300 seconds. Either audio_id or sound_file must be provided (mutually exclusive).","type":"string"},"watermark_info":{"properties":{"enabled":{"description":"Whether to generate watermarked results simultaneously.","type":"boolean"}},"type":"object"}},"required":["image"],"type":"object"},"KlingAvatarResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time","type":"integer"},"final_unit_deduction":{"description":"The deduction units of task","type":"string"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"type":"string"}},"type":"object"},"task_result":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/KlingVideoResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"task_status_msg":{"description":"Task status information","type":"string"},"updated_at":{"description":"Task update time","type":"integer"},"watermark_info":{"properties":{"enabled":{"type":"boolean"}},"type":"object"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingCameraConfig":{"properties":{"horizontal":{"description":"Controls camera's movement along horizontal axis (x-axis). Negative indicates left, positive indicates right.","maximum":10,"minimum":-10,"type":"number"},"pan":{"description":"Controls camera's rotation in vertical plane (x-axis). Negative indicates downward rotation, positive indicates upward rotation.","maximum":10,"minimum":-10,"type":"number"},"roll":{"description":"Controls camera's rolling amount (z-axis). Negative indicates counterclockwise, positive indicates clockwise.","maximum":10,"minimum":-10,"type":"number"},"tilt":{"description":"Controls camera's rotation in horizontal plane (y-axis). Negative indicates left rotation, positive indicates right rotation.","maximum":10,"minimum":-10,"type":"number"},"vertical":{"description":"Controls camera's movement along vertical axis (y-axis). Negative indicates downward, positive indicates upward.","maximum":10,"minimum":-10,"type":"number"},"zoom":{"description":"Controls change in camera's focal length. Negative indicates narrower field of view, positive indicates wider field of view.","maximum":10,"minimum":-10,"type":"number"}},"type":"object"},"KlingCameraControl":{"properties":{"config":{"$ref":"#/components/schemas/KlingCameraConfig"},"type":{"$ref":"#/components/schemas/KlingCameraControlType"}},"type":"object"},"KlingCameraControlType":{"description":"Predefined camera movements type. simple: Customizable camera movement. down_back: Camera descends and moves backward. forward_up: Camera moves forward and tilts up. right_turn_forward: Rotate right and move forward. left_turn_forward: Rotate left and move forward.","enum":["simple","down_back","forward_up","right_turn_forward","left_turn_forward"],"type":"string"},"KlingCharacterEffectModelName":{"default":"kling-v1","description":"Model Name. Can be kling-v1, kling-v1-5, or kling-v1-6.","enum":["kling-v1","kling-v1-5","kling-v1-6"],"type":"string"},"KlingDualCharacterEffectInput":{"properties":{"duration":{"$ref":"#/components/schemas/KlingVideoGenDuration"},"images":{"$ref":"#/components/schemas/KlingDualCharacterImages"},"mode":{"$ref":"#/components/schemas/KlingVideoGenMode"},"model_name":{"$ref":"#/components/schemas/KlingCharacterEffectModelName"}},"required":["images","duration"],"type":"object"},"KlingDualCharacterEffectsScene":{"description":"Scene Name. Dual-character Effects (hug, kiss, heart_gesture).","enum":["hug","kiss","heart_gesture"],"type":"string"},"KlingDualCharacterImages":{"items":{"description":"Reference Image Group. Must contain exactly 2 images. First image will be positioned on left side, second on right side of the composite. Each image follows the same requirements as single image effects.","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"KlingErrorResponse":{"properties":{"code":{"description":"- 1000: Authentication failed\n- 1001: Authorization is empty\n- 1002: Authorization is invalid\n- 1003: Authorization is not yet valid\n- 1004: Authorization has expired\n- 1100: Account exception\n- 1101: Account in arrears (postpaid scenario)\n- 1102: Resource pack depleted or expired (prepaid scenario)\n- 1103: Unauthorized access to requested resource\n- 1200: Invalid request parameters\n- 1201: Invalid parameters\n- 1202: Invalid request method\n- 1203: Requested resource does not exist\n- 1300: Trigger platform strategy\n- 1301: Trigger content security policy\n- 1302: API request too frequent\n- 1303: Concurrency/QPS exceeds limit\n- 1304: Trigger IP whitelist policy\n- 5000: Internal server error\n- 5001: Service temporarily unavailable\n- 5002: Server internal timeout\n","type":"integer"},"message":{"description":"Human-readable error message","type":"string"},"request_id":{"description":"Request ID for tracking and troubleshooting","type":"string"}},"required":["code","message","request_id"],"type":"object"},"KlingImage2VideoRequest":{"properties":{"callback_url":{"description":"The callback notification address. Server will notify when the task status changes.","format":"uri","type":"string"},"camera_control":{"$ref":"#/components/schemas/KlingCameraControl"},"cfg_scale":{"$ref":"#/components/schemas/KlingVideoGenCfgScale"},"duration":{"$ref":"#/components/schemas/KlingVideoGenDuration"},"dynamic_masks":{"description":"Dynamic Brush Configuration List (up to 6 groups). For 5-second videos, trajectory length must not exceed 77 coordinates.","items":{"properties":{"mask":{"description":"Dynamic Brush Application Area (Mask image created by users using the motion brush). The aspect ratio must match the input image.","format":"uri","type":"string"},"trajectories":{"items":{"properties":{"x":{"description":"The horizontal coordinate of trajectory point. Based on bottom-left corner of image as origin (0,0).","type":"integer"},"y":{"description":"The vertical coordinate of trajectory point. Based on bottom-left corner of image as origin (0,0).","type":"integer"}},"type":"object"},"type":"array"}},"type":"object"},"type":"array"},"element_list":{"description":"Reference Element List based on element ID configuration. Supports up to 3 reference elements. The element_list and voice_list parameters are mutually exclusive.","items":{"properties":{"element_id":{"description":"Element ID","format":"int64","type":"integer"}},"type":"object"},"type":"array"},"external_task_id":{"description":"Customized Task ID. Must be unique within a single user account.","type":"string"},"image":{"description":"Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix.","type":"string"},"image_tail":{"description":"Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix. Cannot be used simultaneously with dynamic_masks/static_mask or camera_control.","type":"string"},"mode":{"$ref":"#/components/schemas/KlingVideoGenMode"},"model_name":{"$ref":"#/components/schemas/KlingVideoGenModelName"},"multi_prompt":{"description":"Information about each storyboard, such as prompts and duration. Supports up to 6 storyboards, with a minimum of 1. Required when multi_shot is true and shot_type is customize.","items":{"properties":{"duration":{"description":"Duration of this storyboard in seconds. Must not exceed total task duration and must not be less than 1. Sum of all storyboard durations equals total task duration.","type":"string"},"index":{"description":"Shot sequence number","type":"integer"},"prompt":{"description":"Prompt word for this storyboard. Maximum length 512 characters.","maxLength":512,"type":"string"}},"type":"object"},"type":"array"},"multi_shot":{"default":false,"description":"Whether to generate multi-shot video. When true, the prompt parameter is invalid. When false, the shot_type and multi_prompt parameters are invalid.","type":"boolean"},"negative_prompt":{"description":"Negative text prompt. It is recommended to supplement negative prompt information through negative sentences directly within positive prompts.","maxLength":2500,"type":"string"},"prompt":{"description":"Positive text prompt. Use \u003c\u003c\u003cvoice_1\u003e\u003e\u003e to specify a voice matching the voice_list parameter order. A task can reference up to 2 tones. When specifying a tone, the sound parameter value must be on.","maxLength":2500,"type":"string"},"shot_type":{"description":"Storyboard method. Required when the multi_shot parameter is set to true.","enum":["customize","intelligence"],"type":"string"},"sound":{"default":"off","description":"Whether to generate sound simultaneously when generating videos. Only V2.6 and subsequent versions of the model support this parameter.","enum":["on","off"],"type":"string"},"static_mask":{"description":"Static Brush Application Area (Mask image created by users using the motion brush). The aspect ratio must match the input image.","type":"string"},"voice_list":{"description":"List of voices referenced when generating videos. Supports up to 2 voices. The element_list and voice_list parameters are mutually exclusive.","items":{"properties":{"voice_id":{"description":"Voice ID returned through the voice customization API or a system preset voice ID.","type":"string"}},"type":"object"},"type":"array"},"watermark_info":{"description":"Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time.","properties":{"enabled":{"description":"true means generate watermark, false means do not generate.","type":"boolean"}},"type":"object"}},"type":"object"},"KlingImageGenAspectRatio":{"default":"16:9","description":"Aspect ratio of the generated images","enum":["16:9","9:16","1:1","4:3","3:4","3:2","2:3","21:9"],"type":"string"},"KlingImageGenImageReferenceType":{"description":"Image reference type","enum":["subject","face"],"type":"string"},"KlingImageGenModelName":{"default":"kling-v1","description":"Model Name","enum":["kling-v1","kling-v1-5","kling-v2","kling-v3"],"type":"string"},"KlingImageGenerationsRequest":{"properties":{"aspect_ratio":{"$ref":"#/components/schemas/KlingImageGenAspectRatio"},"callback_url":{"description":"The callback notification address","format":"uri","type":"string"},"element_list":{"description":"Reference Element List based on element ID configuration. The sum of reference elements and reference images shall not exceed 10.","items":{"properties":{"element_id":{"description":"Element ID","format":"int64","type":"integer"}},"type":"object"},"type":"array"},"external_task_id":{"description":"Customized Task ID. Must be unique within a single user account.","type":"string"},"human_fidelity":{"default":0.45,"description":"Subject reference similarity","maximum":1,"minimum":0,"type":"number"},"image":{"description":"Reference Image - Base64 encoded string or image URL. Supported formats include .jpg/.jpeg/.png. File size cannot exceed 10MB. Width and height dimensions shall not be less than 300px, aspect ratio between 1:2.5 ~ 2.5:1. Required when image_reference is not empty.","type":"string"},"image_fidelity":{"default":0.5,"description":"Reference intensity for user-uploaded images","maximum":1,"minimum":0,"type":"number"},"image_reference":{"$ref":"#/components/schemas/KlingImageGenImageReferenceType"},"model_name":{"$ref":"#/components/schemas/KlingImageGenModelName"},"n":{"default":1,"description":"Number of generated images. Value range [1,9].","maximum":9,"minimum":1,"type":"integer"},"negative_prompt":{"description":"Negative text prompt. Cannot exceed 2500 characters. It is recommended to supplement negative prompt information through negative sentences directly within positive prompts. Not supported in Image-to-Image scenario (when image field is not empty).","maxLength":2500,"type":"string"},"prompt":{"description":"Positive text prompt. Must not exceed 2,500 characters.","maxLength":2500,"type":"string"},"resolution":{"default":"1k","description":"Image generation resolution. 1k is 1K standard, 2k is 2K high-res.","enum":["1k","2k"],"type":"string"}},"required":["prompt"],"type":"object"},"KlingImageGenerationsResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time, Unix timestamp in milliseconds","type":"integer"},"final_unit_deduction":{"description":"The deduction units of task","type":"string"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"description":"Customer-defined task ID","type":"string"}},"type":"object"},"task_result":{"properties":{"images":{"items":{"$ref":"#/components/schemas/KlingImageResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"task_status_msg":{"description":"Task status information, displaying the failure reason when the task fails","type":"string"},"updated_at":{"description":"Task update time, Unix timestamp in milliseconds","type":"integer"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingImageResult":{"properties":{"index":{"description":"Image Number (0-9)","type":"integer"},"url":{"description":"URL for generated image","format":"uri","type":"string"}},"type":"object"},"KlingLipSyncInputObject":{"properties":{"audio_file":{"description":"Local Path of Audio File. Supported formats: .mp3/.wav/.m4a/.aac, maximum file size of 5MB. Base64 code.","type":"string"},"audio_type":{"$ref":"#/components/schemas/KlingAudioUploadType"},"audio_url":{"description":"Audio File Download URL. Supported formats: .mp3/.wav/.m4a/.aac, maximum file size of 5MB.","type":"string"},"mode":{"$ref":"#/components/schemas/KlingLipSyncMode"},"text":{"description":"Text Content for Lip-Sync Video Generation. Required when mode is text2video. Maximum length is 120 characters.","type":"string"},"video_id":{"description":"The ID of the video generated by Kling AI. Only supports 5-second and 10-second videos generated within the last 30 days.","type":"string"},"video_url":{"description":"Get link for uploaded video. Video files support .mp4/.mov, file size does not exceed 100MB, video length between 2-10s.","type":"string"},"voice_id":{"description":"Voice ID. Required when mode is text2video. The system offers a variety of voice options to choose from.","type":"string"},"voice_language":{"$ref":"#/components/schemas/KlingLipSyncVoiceLanguage"},"voice_speed":{"default":1,"description":"Speech Rate. Valid range: 0.8~2.0, accurate to one decimal place.","maximum":2,"minimum":0.8,"type":"number"}},"required":["mode"],"type":"object"},"KlingLipSyncMode":{"description":"Video Generation Mode. text2video: Text-to-video generation mode; audio2video: Audio-to-video generation mode","enum":["text2video","audio2video"],"type":"string"},"KlingLipSyncRequest":{"properties":{"callback_url":{"description":"The callback notification address. Server will notify when the task status changes.","format":"uri","type":"string"},"input":{"$ref":"#/components/schemas/KlingLipSyncInputObject"}},"required":["input"],"type":"object"},"KlingLipSyncResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time","type":"integer"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"type":"string"}},"type":"object"},"task_result":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/KlingVideoResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"updated_at":{"description":"Task update time","type":"integer"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingLipSyncVoiceLanguage":{"default":"en","description":"The voice language corresponds to the Voice ID.","enum":["zh","en"],"type":"string"},"KlingMotionControlRequest":{"properties":{"callback_url":{"description":"The callback notification address for the result of this task. If configured, the server will actively notify when the task status changes.","format":"uri","type":"string"},"character_orientation":{"description":"Generate the orientation of the characters in the video. image - same orientation as the person in the picture (reference video duration should not exceed 10 seconds). video - consistent with the orientation of the characters in the video (reference video duration should not exceed 30 seconds).","enum":["image","video"],"type":"string"},"element_list":{"description":"Reference Element List based on element ID configuration. Currently only one element can be introduced.","items":{"properties":{"element_id":{"description":"Element ID","format":"int64","type":"integer"}},"type":"object"},"type":"array"},"external_task_id":{"description":"Customized Task ID. Users can provide a customized task ID, which will not overwrite the system-generated task ID but can be used for task queries. Must be unique within a single user account.","type":"string"},"image_url":{"description":"Reference Image. The characters, backgrounds, and other elements in the generated video are based on the reference image. Supports inputting image Base64 encoding or image URL (ensure accessibility). Supported image formats include .jpg / .jpeg / .png. The image file size cannot exceed 10MB, and the width and height dimensions of the image range from 300px to 65536px, and the aspect ratio of the image should be between 1:2.5 ~ 2.5:1.","type":"string"},"keep_original_sound":{"default":"yes","description":"Whether to keep the original sound of the video. Enumeration values - yes (Keep the original sound), no (do not retain the original video sound).","enum":["yes","no"],"type":"string"},"mode":{"description":"Video generation mode. std - Standard Mode (cost-effective). pro - Professional Mode (longer duration but higher quality video output).","enum":["std","pro"],"type":"string"},"model_name":{"default":"kling-v2-6","description":"Model name for motion control. Enum values - kling-v2-6, kling-v3.","enum":["kling-v2-6","kling-v3"],"type":"string"},"prompt":{"description":"Text prompt words, which can include positive and negative descriptions. Cannot exceed 2500 characters.","maxLength":2500,"type":"string"},"video_url":{"description":"The URL of the reference video. The character actions in the generated video are consistent with the reference video. The video file supports .mp4/.mov, with a file size not exceeding 100MB, and only supports side lengths between 340px and 3850px. The lower limit of video duration should not be less than 3 seconds, and the upper limit depends on character_orientation.","type":"string"},"watermark_info":{"description":"Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time.","properties":{"enabled":{"description":"true means generate watermark, false means do not generate.","type":"boolean"}},"type":"object"}},"required":["image_url","video_url","character_orientation","mode"],"type":"object"},"KlingMotionControlResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time, Unix timestamp, unit ms","type":"integer"},"final_unit_deduction":{"description":"The deduction units of task","type":"string"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"description":"Customer-defined task ID","type":"string"}},"type":"object"},"task_result":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/KlingMotionControlVideoResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"task_status_msg":{"description":"Task status information, displaying the failure reason when the task fails","type":"string"},"updated_at":{"description":"Task update time, Unix timestamp, unit ms","type":"integer"},"watermark_info":{"properties":{"enabled":{"type":"boolean"}},"type":"object"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingMotionControlVideoResult":{"properties":{"duration":{"description":"Total video duration, unit - s (seconds)","type":"string"},"id":{"description":"Generated video ID; globally unique","type":"string"},"url":{"description":"URL for generating videos","type":"string"},"watermark_url":{"description":"URL for generating videos with watermark, hotlink protection format","type":"string"}},"type":"object"},"KlingOmniImageRequest":{"properties":{"aspect_ratio":{"default":"auto","description":"Aspect ratio of the generated images (width:height). auto is to intelligently generate images based on incoming content.","enum":["16:9","9:16","1:1","4:3","3:4","3:2","2:3","21:9","auto"],"type":"string"},"callback_url":{"description":"The callback notification address for the result of this task. If configured, the server will actively notify when the task status changes.","format":"uri","type":"string"},"element_list":{"description":"Reference Element List based on element ID configuration. The sum of reference elements and reference images shall not exceed 10.","items":{"properties":{"element_id":{"description":"Element ID","format":"int64","type":"integer"}},"type":"object"},"type":"array"},"external_task_id":{"description":"Customized Task ID. Must be unique within a single user account.","type":"string"},"image_list":{"description":"Reference Image List. Supports inputting image Base64 encoding or image URL (ensure accessibility). Supported formats include .jpg/.jpeg/.png. File size cannot exceed 10MB. Width and height dimensions shall not be less than 300px, aspect ratio between 1:2.5 ~ 2.5:1. The sum of reference elements and reference images shall not exceed 10.","items":{"properties":{"image":{"description":"Image Base64 encoding or image URL (ensure accessibility)","type":"string"}},"type":"object"},"type":"array"},"model_name":{"default":"kling-image-o1","description":"Model Name","enum":["kling-image-o1","kling-v3-omni"],"type":"string"},"n":{"default":1,"description":"Number of generated images. Value range [1,9].","maximum":9,"minimum":1,"type":"integer"},"prompt":{"description":"Text prompt words, which can include positive and negative descriptions. Must not exceed 2,500 characters. The Omni model can achieve various capabilities through Prompt with elements and images. Specify an image in the format of \u003c\u003c\u003c\u003e\u003e\u003e, such as \u003c\u003c\u003cimage_1\u003e\u003e\u003e.","maxLength":2500,"type":"string"},"resolution":{"default":"1k","description":"Image generation resolution. 1k is 1K standard, 2k is 2K high-res, 4k is 4K high-res.","enum":["1k","2k","4k"],"type":"string"},"result_type":{"default":"single","description":"Control whether to generate a single image or a series of images.","enum":["single","series"],"type":"string"},"series_amount":{"default":4,"description":"Number of images in a series. Value range [2,9].","maximum":9,"minimum":2,"type":"integer"}},"required":["prompt"],"type":"object"},"KlingOmniImageResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time, Unix timestamp in milliseconds","type":"integer"},"final_unit_deduction":{"description":"The deduction units of task","type":"string"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"description":"Customer-defined task ID","type":"string"}},"type":"object"},"task_result":{"properties":{"images":{"items":{"$ref":"#/components/schemas/KlingImageResult"},"type":"array"},"result_type":{"description":"Whether the result is a single image or a series of images","enum":["single","series"],"type":"string"},"series_images":{"description":"Series images result list","items":{"properties":{"index":{"description":"Series-image sequence number","type":"integer"},"url":{"description":"URL for generated image","format":"uri","type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"task_status_msg":{"description":"Task status information, displaying the failure reason when the task fails (such as triggering the content risk control of the platform, etc.)","type":"string"},"updated_at":{"description":"Task update time, Unix timestamp in milliseconds","type":"integer"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingOmniVideoRequest":{"properties":{"aspect_ratio":{"description":"The aspect ratio of the generated video frame (width:height). Required when first-frame reference or video editing features are not used.","enum":["16:9","9:16","1:1"],"type":"string"},"callback_url":{"description":"The callback notification address for the result of this task. If configured, the server will actively notify when the task status changes.","format":"uri","type":"string"},"duration":{"default":"5","description":"Video Length in seconds. When using video editing function (refer_type: base), output duration is the same as input video and this parameter is invalid.","enum":["3","4","5","6","7","8","9","10","11","12","13","14","15"],"type":"string"},"element_list":{"description":"Reference Element List based on element ID configuration.","items":{"properties":{"element_id":{"description":"Element ID","format":"int64","type":"integer"}},"type":"object"},"type":"array"},"external_task_id":{"description":"Customized Task ID. Must be unique within a single user account.","type":"string"},"image_list":{"description":"Reference Image List. Can include reference images of the element, scene, style, etc., or be used as the first or last frame to generate videos.","items":{"properties":{"image_url":{"description":"Image Base64 encoding or image URL (ensure accessibility). Supported formats include .jpg/.jpeg/.png. File size cannot exceed 10MB. Width and height dimensions shall not be less than 300px, aspect ratio between 1:2.5 ~ 2.5:1.","type":"string"},"type":{"description":"Whether the image is in the first or last frame. first_frame is the first frame, end_frame is the last frame. Currently does not support only the end frame.","enum":["first_frame","end_frame"],"type":"string"}},"type":"object"},"type":"array"},"mode":{"default":"pro","description":"Video generation mode. std: Standard Mode, generating 720P videos, cost-effective. pro: Professional Mode, generating 1080P videos, higher quality video output.","enum":["pro","std"],"type":"string"},"model_name":{"default":"kling-video-o1","description":"Model Name","enum":["kling-video-o1","kling-v3-omni"],"type":"string"},"multi_prompt":{"description":"Information about each storyboard, such as prompts and duration. Supports up to 6 storyboards, with a minimum of 1. Required when multi_shot is true and shot_type is customize.","items":{"properties":{"duration":{"description":"Duration of this storyboard in seconds. Must not exceed total task duration and must not be less than 1. Sum of all storyboard durations equals total task duration.","type":"string"},"index":{"description":"Shot sequence number","type":"integer"},"prompt":{"description":"Prompt word for this storyboard. Maximum length 512 characters.","maxLength":512,"type":"string"}},"type":"object"},"type":"array"},"multi_shot":{"default":false,"description":"Whether to generate multi-shot video. When true, the prompt parameter is invalid. When false, the shot_type and multi_prompt parameters are invalid.","type":"boolean"},"prompt":{"description":"Text prompt words, which can include positive and negative descriptions. Must not exceed 2,500 characters. Can specify elements, images, or videos in the format \u003c\u003c\u003c\u003e\u003e\u003e such as \u003c\u003celement_1\u003e\u003e, \u003c\u003c\u003cimage_1\u003e\u003e\u003e, \u003c\u003c\u003cvideo_1\u003e\u003e\u003e.","maxLength":2500,"type":"string"},"shot_type":{"description":"Storyboard method. Required when the multi_shot parameter is set to true.","enum":["customize","intelligence"],"type":"string"},"sound":{"default":"off","description":"Whether sound is generated simultaneously when generating videos.","enum":["on","off"],"type":"string"},"video_list":{"description":"Reference Video list. Can be used as a reference video for feature or as a video to be edited, with the default being the video to be edited.","items":{"properties":{"keep_original_sound":{"description":"Whether to keep the video original sound. yes indicates retention, no indicates non retention.","enum":["yes","no"],"type":"string"},"refer_type":{"description":"Reference video type. feature is the feature reference video, base is the video to be edited.","enum":["feature","base"],"type":"string"},"video_url":{"description":"URL of uploaded video. Only .mp4/.mov formats are supported. Duration between 3-10 seconds. Resolution must be between 720px and 2160px. Frame rates of 24-60 fps supported. Only 1 video can be uploaded, with size not exceeding 200MB.","type":"string"}},"type":"object"},"type":"array"},"watermark_info":{"description":"Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time.","properties":{"enabled":{"description":"true means generate watermark, false means do not generate.","type":"boolean"}},"type":"object"}},"type":"object"},"KlingPresetsElement":{"properties":{"element_description":{"type":"string"},"element_id":{"format":"int64","type":"integer"},"element_image_list":{"properties":{"frontal_image":{"type":"string"},"refer_images":{"items":{"properties":{"image_url":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"element_name":{"type":"string"},"element_video_list":{"properties":{"refer_videos":{"items":{"properties":{"video_url":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"element_voice_info":{"properties":{"owned_by":{"type":"string"},"trial_url":{"type":"string"},"voice_id":{"type":"string"},"voice_name":{"type":"string"}},"type":"object"},"owned_by":{"type":"string"},"reference_type":{"type":"string"},"tag_list":{"items":{"properties":{"description":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"KlingPresetsElementTask":{"properties":{"created_at":{"description":"Task creation time, Unix timestamp in ms","type":"integer"},"final_unit_deduction":{"type":"string"},"task_id":{"type":"string"},"task_info":{"properties":{"external_task_id":{"type":"string"}},"type":"object"},"task_result":{"properties":{"elements":{"items":{"$ref":"#/components/schemas/KlingPresetsElement"},"type":"array"}},"type":"object"},"task_status":{"enum":["submitted","processing","succeed","failed"],"type":"string"},"task_status_msg":{"type":"string"},"updated_at":{"description":"Task update time, Unix timestamp in ms","type":"integer"}},"type":"object"},"KlingPresetsElementsResponse":{"properties":{"code":{"type":"integer"},"data":{"items":{"$ref":"#/components/schemas/KlingPresetsElementTask"},"type":"array"},"message":{"type":"string"},"request_id":{"type":"string"}},"type":"object"},"KlingQueryTaskResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time, Unix timestamp in milliseconds","type":"integer"},"final_unit_deduction":{"description":"The deduction units of task","type":"string"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"type":"string"}},"type":"object"},"task_result":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/KlingVideoResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"task_status_msg":{"description":"Task status information, displaying the failure reason when the task fails","type":"string"},"updated_at":{"description":"Task update time, Unix timestamp in milliseconds","type":"integer"},"watermark_info":{"properties":{"enabled":{"type":"boolean"}},"type":"object"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingResourcePackageResponse":{"properties":{"code":{"description":"Error code; 0 indicates success","type":"integer"},"data":{"properties":{"code":{"description":"Error code; 0 indicates success","type":"integer"},"msg":{"description":"Error information","type":"string"},"resource_pack_subscribe_infos":{"description":"Resource package list","items":{"properties":{"effective_time":{"description":"Effective time, Unix timestamp in ms","format":"int64","type":"integer"},"invalid_time":{"description":"Expiration time, Unix timestamp in ms","format":"int64","type":"integer"},"purchase_time":{"description":"Purchase time, Unix timestamp in ms","format":"int64","type":"integer"},"remaining_quantity":{"description":"Remaining quantity (updated with a 12-hour delay)","format":"float","type":"number"},"resource_pack_id":{"description":"Resource package ID","type":"string"},"resource_pack_name":{"description":"Resource package name","type":"string"},"resource_pack_type":{"description":"Resource package type (decreasing_total=decreasing total, constant_period=constant periodicity)","enum":["decreasing_total","constant_period"],"type":"string"},"status":{"description":"Resource Package Status","enum":["toBeOnline","online","expired","runOut"],"type":"string"},"total_quantity":{"description":"Total quantity","format":"float","type":"number"}},"type":"object"},"type":"array"}},"type":"object"},"message":{"description":"Error information","type":"string"},"request_id":{"description":"Request ID, generated by the system, used to track requests and troubleshoot problems","type":"string"}},"type":"object"},"KlingSingleImageEffectDuration":{"description":"Video Length in seconds. Only 5-second videos are supported.","enum":["5"],"type":"string"},"KlingSingleImageEffectInput":{"properties":{"duration":{"$ref":"#/components/schemas/KlingSingleImageEffectDuration"},"image":{"description":"Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1.","type":"string"},"model_name":{"$ref":"#/components/schemas/KlingSingleImageEffectModelName"}},"required":["model_name","image","duration"],"type":"object"},"KlingSingleImageEffectModelName":{"description":"Model Name. Only kling-v1-6 is supported for single image effects.","enum":["kling-v1-6"],"type":"string"},"KlingSingleImageEffectsScene":{"description":"Scene Name. Single Image Effects (bloombloom, dizzydizzy, fuzzyfuzzy, squish, expansion).","enum":["bloombloom","dizzydizzy","fuzzyfuzzy","squish","expansion"],"type":"string"},"KlingTaskStatus":{"description":"Task Status","enum":["submitted","processing","succeed","failed"],"type":"string"},"KlingText2VideoRequest":{"properties":{"aspect_ratio":{"$ref":"#/components/schemas/KlingVideoGenAspectRatio"},"callback_url":{"description":"The callback notification address","format":"uri","type":"string"},"camera_control":{"$ref":"#/components/schemas/KlingCameraControl"},"cfg_scale":{"$ref":"#/components/schemas/KlingVideoGenCfgScale"},"duration":{"$ref":"#/components/schemas/KlingVideoGenDuration"},"external_task_id":{"description":"Customized Task ID","type":"string"},"mode":{"$ref":"#/components/schemas/KlingVideoGenMode"},"model_name":{"$ref":"#/components/schemas/KlingTextToVideoModelName"},"multi_prompt":{"description":"Information about each storyboard, such as prompts and duration. Supports up to 6 storyboards, with a minimum of 1. Required when multi_shot is true and shot_type is customize.","items":{"properties":{"duration":{"description":"Duration of this storyboard in seconds. Must not exceed total task duration and must not be less than 1. Sum of all storyboard durations equals total task duration.","type":"string"},"index":{"description":"Shot sequence number","type":"integer"},"prompt":{"description":"Prompt word for this storyboard. Maximum length 512 characters.","maxLength":512,"type":"string"}},"type":"object"},"type":"array"},"multi_shot":{"default":false,"description":"Whether to generate multi-shot video. When true, the prompt parameter is invalid. When false, the shot_type and multi_prompt parameters are invalid.","type":"boolean"},"negative_prompt":{"description":"Negative text prompt. It is recommended to supplement negative prompt information through negative sentences directly within positive prompts.","maxLength":2500,"type":"string"},"prompt":{"description":"Positive text prompt. Use \u003c\u003c\u003cvoice_1\u003e\u003e\u003e to specify a voice matching the voice_list parameter order. A task can reference up to 2 tones. When specifying a tone, the sound parameter value must be on.","maxLength":2500,"type":"string"},"shot_type":{"description":"Storyboard method. Required when the multi_shot parameter is set to true.","enum":["customize","intelligence"],"type":"string"},"sound":{"default":"off","description":"Whether to generate sound simultaneously when generating videos. Only V2.6 and subsequent versions of the model support this parameter.","enum":["on","off"],"type":"string"},"watermark_info":{"description":"Whether to generate watermarked results simultaneously. Custom watermark is not supported at this time.","properties":{"enabled":{"description":"true means generate watermark, false means do not generate.","type":"boolean"}},"type":"object"}},"type":"object"},"KlingTextToVideoModelName":{"default":"kling-v1","description":"Model Name","enum":["kling-v1","kling-v1-6","kling-v2-master","kling-v2-1-master","kling-v2-5-turbo","kling-v2-6","kling-v3"],"type":"string"},"KlingV2CreateTaskResponse":{"description":"Response returned when a Kling 3.0 Turbo task is created.","properties":{"code":{"description":"Error code. 0 indicates success.","type":"integer"},"data":{"properties":{"create_time":{"description":"Task creation time. Unix timestamp in milliseconds.","format":"int64","type":"integer"},"external_id":{"description":"The custom task ID for this task, if any.","type":"string"},"id":{"description":"The created task ID.","type":"string"},"status":{"description":"Task status. One of \"submitted\", \"processing\", \"succeeded\" or \"failed\".","type":"string"},"update_time":{"description":"Task update time. Unix timestamp in milliseconds.","format":"int64","type":"integer"}},"type":"object"},"message":{"description":"Error message.","type":"string"},"request_id":{"description":"Request ID generated by the system.","type":"string"}},"type":"object"},"KlingV2Image2VideoRequest":{"properties":{"contents":{"description":"Collection of references such as prompts and images. Fields related to the same material belong in the same object.","items":{"properties":{"text":{"description":"Text prompt. Provided when type is \"prompt\". May include positive and negative descriptions; cannot exceed 2500 characters.","type":"string"},"type":{"description":"Reference type. One of \"prompt\" or \"first_frame\".","type":"string"},"url":{"description":"First-frame material. Provided when type is \"first_frame\". May be a URL or Base64 content. Supports .jpg, .jpeg and .png up to 50MB; width and height must be at least 300px with an aspect ratio between 1:2.5 and 2.5:1.","type":"string"}},"type":"object"},"type":"array"},"options":{"$ref":"#/components/schemas/KlingV2Options"},"settings":{"description":"Output configuration such as resolution and duration.","properties":{"duration":{"description":"Video length in seconds. Supported values 3 through 15. Default 5.","type":"integer"},"resolution":{"description":"Clarity of the generated video. One of \"720p\" or \"1080p\". Default \"720p\".","type":"string"}},"type":"object"}},"required":["contents"],"type":"object"},"KlingV2Options":{"description":"General configuration such as callback address and watermark options.","properties":{"callback_url":{"description":"Callback notification URL for task results. The server notifies when the task status changes.","type":"string"},"external_task_id":{"description":"Customized Task ID. Does not overwrite the system-generated task ID but can be used for queries. Must be unique within a single user account.","type":"string"},"watermark_info":{"description":"Whether to generate watermarked results simultaneously. Custom watermarks are not supported.","properties":{"enabled":{"description":"true means generate watermarked result, false means do not generate. Default false.","type":"boolean"}},"type":"object"}},"type":"object"},"KlingV2Output":{"description":"A generated output. The fields present depend on `type` (video, image, audio, voice or element).","properties":{"duration":{"description":"Duration of the generated video in seconds.","type":"string"},"group_id":{"description":"Grouping marker, present only for grouped images.","type":"string"},"id":{"description":"Output ID generated by the system.","type":"string"},"mp3_duration":{"description":"Duration of the generated MP3 audio in seconds.","type":"string"},"mp3_url":{"description":"MP3 URL of the generated audio (hotlink-protected).","type":"string"},"name":{"description":"Name of the generated material.","type":"string"},"owned_by":{"description":"Source of the material. \"kling\" denotes the official library; numbers are creator IDs.","type":"string"},"status":{"description":"Status of the material. One of \"succeeded\" or \"deleted\".","type":"string"},"type":{"description":"Output content type. One of \"video\", \"image\", \"audio\", \"voice\" or \"element\".","type":"string"},"url":{"description":"URL of the generated result (hotlink-protected). Cleared after 30 days.","type":"string"},"watermark_url":{"description":"URL of the watermarked result (hotlink-protected).","type":"string"},"wav_duration":{"description":"Duration of the generated WAV audio in seconds.","type":"string"},"wav_url":{"description":"WAV URL of the generated audio (hotlink-protected).","type":"string"}},"type":"object"},"KlingV2QueryTaskResponse":{"description":"Response returned when querying Kling 3.0 Turbo tasks by ID.","properties":{"code":{"description":"Error code. 0 indicates success.","type":"integer"},"data":{"description":"Tasks matching the query.","items":{"$ref":"#/components/schemas/KlingV2Task"},"type":"array"},"message":{"description":"Error message.","type":"string"},"request_id":{"description":"Request ID generated by the system.","type":"string"}},"type":"object"},"KlingV2Task":{"description":"A single Kling 3.0 Turbo task record.","properties":{"billing":{"description":"Billing details for the task.","items":{"properties":{"amount":{"description":"Consumption amount, accurate to two decimal places.","type":"string"},"charge_type":{"description":"Consumption account type. \"cash\" for balance, \"unit\" for a resource package.","type":"string"},"package_type":{"description":"Consumable resource bundle type (only present when charge_type is \"unit\"). One of \"video\", \"image\" or \"audio\".","type":"string"}},"type":"object"},"type":"array"},"create_time":{"description":"Task creation time. Unix timestamp in milliseconds.","format":"int64","type":"integer"},"external_id":{"description":"The custom task ID for this task, if any.","type":"string"},"id":{"description":"The task ID.","type":"string"},"message":{"description":"Task status information, displaying the failure reason when the task fails.","type":"string"},"outputs":{"description":"Generated outputs for the task.","items":{"$ref":"#/components/schemas/KlingV2Output"},"type":"array"},"status":{"description":"Task status. One of \"submitted\", \"processing\", \"succeeded\" or \"failed\".","type":"string"},"update_time":{"description":"Task update time. Unix timestamp in milliseconds.","format":"int64","type":"integer"}},"type":"object"},"KlingV2Text2VideoRequest":{"properties":{"options":{"$ref":"#/components/schemas/KlingV2Options"},"prompt":{"description":"Prompt that may include both positive and negative descriptions. Recommended length under 2500 characters. Multi-shot videos use the format \"shot n, m, words; shot n, m, words;\".","maxLength":3072,"type":"string"},"settings":{"description":"Output configuration such as resolution, aspect ratio and duration.","properties":{"aspect_ratio":{"description":"Aspect ratio (width:height) of the generated frames. One of \"16:9\", \"9:16\" or \"1:1\". Default \"16:9\".","type":"string"},"duration":{"description":"Video length in seconds. Supported values 3 through 15. Default 5.","type":"integer"},"resolution":{"description":"Clarity of the generated video. One of \"720p\" or \"1080p\". Default \"720p\".","type":"string"}},"type":"object"}},"required":["prompt"],"type":"object"},"KlingVideoEffectsInput":{"oneOf":[{"$ref":"#/components/schemas/KlingSingleImageEffectInput"},{"$ref":"#/components/schemas/KlingDualCharacterEffectInput"}]},"KlingVideoEffectsRequest":{"properties":{"callback_url":{"description":"The callback notification address for the result of this task.","format":"uri","type":"string"},"effect_scene":{"oneOf":[{"$ref":"#/components/schemas/KlingDualCharacterEffectsScene"},{"$ref":"#/components/schemas/KlingSingleImageEffectsScene"}]},"external_task_id":{"description":"Customized Task ID. Must be unique within a single user account.","type":"string"},"input":{"$ref":"#/components/schemas/KlingVideoEffectsInput"}},"required":["effect_scene","input"],"type":"object"},"KlingVideoEffectsResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time","type":"integer"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"type":"string"}},"type":"object"},"task_result":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/KlingVideoResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"updated_at":{"description":"Task update time","type":"integer"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingVideoExtendRequest":{"properties":{"callback_url":{"description":"The callback notification address. Server will notify when the task status changes.","format":"uri","type":"string"},"cfg_scale":{"$ref":"#/components/schemas/KlingVideoGenCfgScale"},"negative_prompt":{"description":"Negative text prompt for elements to avoid in the extended video","maxLength":2500,"type":"string"},"prompt":{"description":"Positive text prompt for guiding the video extension","maxLength":2500,"type":"string"},"video_id":{"description":"The ID of the video to be extended. Supports videos generated by text-to-video, image-to-video, and previous video extension operations. Cannot exceed 3 minutes total duration after extension.","type":"string"}},"type":"object"},"KlingVideoExtendResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time","type":"integer"},"task_id":{"description":"Task ID","type":"string"},"task_info":{"properties":{"external_task_id":{"type":"string"}},"type":"object"},"task_result":{"properties":{"videos":{"items":{"$ref":"#/components/schemas/KlingVideoResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"updated_at":{"description":"Task update time","type":"integer"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KlingVideoGenAspectRatio":{"default":"16:9","description":"Video aspect ratio","enum":["16:9","9:16","1:1"],"type":"string"},"KlingVideoGenCfgScale":{"default":0.5,"description":"Flexibility in video generation. The higher the value, the lower the model's degree of flexibility, and the stronger the relevance to the user's prompt.","format":"float","maximum":1,"minimum":0,"type":"number"},"KlingVideoGenDuration":{"default":"5","description":"Video length in seconds","enum":["3","4","5","6","7","8","9","10","11","12","13","14","15"],"type":"string"},"KlingVideoGenMode":{"default":"std","description":"Video generation mode. std: Standard Mode, which is cost-effective. pro: Professional Mode, generates videos with longer duration but higher quality output.","enum":["std","pro"],"type":"string"},"KlingVideoGenModelName":{"default":"kling-v1","description":"Model Name","enum":["kling-v1","kling-v1-5","kling-v1-6","kling-v2-master","kling-v2-1","kling-v2-1-master","kling-v2-5-turbo","kling-v2-6","kling-v3"],"type":"string"},"KlingVideoResult":{"properties":{"duration":{"description":"Total video duration in seconds","type":"string"},"id":{"description":"Generated video ID","type":"string"},"url":{"description":"URL for generated video","format":"uri","type":"string"},"watermark_url":{"description":"URL for generated video with watermark, hotlink protection format","format":"uri","type":"string"}},"type":"object"},"KlingVirtualTryOnModelName":{"default":"kolors-virtual-try-on-v1","description":"Model Name","enum":["kolors-virtual-try-on-v1","kolors-virtual-try-on-v1-5"],"type":"string"},"KlingVirtualTryOnRequest":{"properties":{"callback_url":{"description":"The callback notification address","format":"uri","type":"string"},"cloth_image":{"description":"Reference clothing image - Base64 encoded string or image URL","type":"string"},"human_image":{"description":"Reference human image - Base64 encoded string or image URL","type":"string"},"model_name":{"$ref":"#/components/schemas/KlingVirtualTryOnModelName"}},"required":["human_image"],"type":"object"},"KlingVirtualTryOnResponse":{"properties":{"code":{"description":"Error code","type":"integer"},"data":{"properties":{"created_at":{"description":"Task creation time","type":"integer"},"task_id":{"description":"Task ID","type":"string"},"task_result":{"properties":{"images":{"items":{"$ref":"#/components/schemas/KlingImageResult"},"type":"array"}},"type":"object"},"task_status":{"$ref":"#/components/schemas/KlingTaskStatus"},"task_status_msg":{"description":"Task status information","type":"string"},"updated_at":{"description":"Task update time","type":"integer"}},"type":"object"},"message":{"description":"Error message","type":"string"},"request_id":{"description":"Request ID","type":"string"}},"type":"object"},"KreaAsset":{"properties":{"description":{"type":"string"},"height":{"nullable":true,"type":"number"},"id":{"format":"uuid","type":"string"},"image_url":{"format":"uri","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"mime_type":{"nullable":true,"type":"string"},"size_bytes":{"nullable":true,"type":"number"},"uploaded_at":{"format":"date-time","type":"string"},"width":{"nullable":true,"type":"number"}},"required":["id","image_url","uploaded_at"],"type":"object"},"KreaAssetUploadRequest":{"properties":{"description":{"description":"Optional description for the asset","type":"string"},"file":{"description":"The file to upload (JPEG, PNG, WebP, HEIC, MP4, MOV, WebM, GLB, WAV, MP3). Maximum size: 75MB.","format":"binary","type":"string"}},"required":["file"],"type":"object"},"KreaGenerateImageRequest":{"properties":{"aspect_ratio":{"description":"Aspect ratio. One of: 1:1, 4:3, 3:2, 16:9, 2.35:1, 4:5, 2:3, 9:16.","enum":["1:1","4:3","3:2","16:9","2.35:1","4:5","2:3","9:16"],"type":"string"},"creativity":{"default":"medium","description":"Prompt interpretation strength: raw=0, low=10, medium=50, high=100.","enum":["raw","low","medium","high"],"type":"string"},"image_style_references":{"description":"Style references to use for the generation","items":{"$ref":"#/components/schemas/KreaImageStyleReference"},"maxItems":10,"type":"array"},"moodboards":{"description":"Moodboards to use for generation. Currently limited to one moodboard.","items":{"$ref":"#/components/schemas/KreaMoodboard"},"maxItems":1,"type":"array"},"prompt":{"type":"string"},"resolution":{"description":"Resolution scale. One of: 1K.","enum":["1K"],"type":"string"},"seed":{"nullable":true,"type":"number"},"styles":{"description":"Styles (typically LoRAs) to use for the generation","items":{"$ref":"#/components/schemas/KreaStyle"},"type":"array"}},"required":["prompt","aspect_ratio","resolution"],"type":"object"},"KreaImageStyleReference":{"properties":{"strength":{"format":"double","maximum":2,"minimum":-2,"type":"number"},"url":{"format":"uri","type":"string"}},"required":["strength"],"type":"object"},"KreaJob":{"properties":{"completed_at":{"format":"date-time","nullable":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"job_id":{"format":"uuid","type":"string"},"result":{"allOf":[{"$ref":"#/components/schemas/KreaJobResult"}],"nullable":true},"status":{"description":"Available options: backlogged, queued, scheduled, processing, sampling, intermediate-complete, completed, failed, cancelled","enum":["backlogged","queued","scheduled","processing","sampling","intermediate-complete","completed","failed","cancelled"],"type":"string"}},"required":["job_id","status","created_at","completed_at","result"],"type":"object"},"KreaJobResult":{"properties":{"style_id":{"type":"string"},"urls":{"items":{"format":"uri","type":"string"},"type":"array"}},"type":"object"},"KreaMoodboard":{"properties":{"id":{"format":"uuid","type":"string"},"strength":{"default":0.35,"format":"double","maximum":1.5,"minimum":-0.5,"type":"number"}},"required":["id"],"type":"object"},"KreaStyle":{"properties":{"id":{"type":"string"},"strength":{"format":"double","maximum":2,"minimum":-2,"type":"number"}},"required":["id","strength"],"type":"object"},"LTXAsyncSubmitResponse":{"properties":{"created_at":{"description":"Job creation timestamp (ISO 8601)","type":"string"},"id":{"description":"Unique job identifier used to poll for status","type":"string"}},"type":"object"},"LTXAudio2VideoRequest":{"properties":{"audio_uri":{"description":"Audio driving the generated video, between 2 and 20 seconds (HTTPS URL or base64 data URI)","type":"string"},"image_uri":{"description":"Image to be used as the first frame of the video (HTTPS URL or base64 data URI)","type":"string"},"model":{"description":"Model to use for generation","enum":["ltx-2-5-fast","ltx-2-5-pro"],"type":"string"},"prompt":{"description":"Text description of the desired video content","maxLength":10000,"type":"string"},"resolution":{"description":"Output video resolution","enum":["1920x1080","1080x1920"],"type":"string"}},"required":["audio_uri","model","resolution"],"type":"object"},"LTXImage2VideoRequest":{"properties":{"duration":{"description":"Video duration in seconds (maximum depends on resolution and frame rate)","enum":[2,3,4,5,6,8,10,12,14,16,18,20],"type":"integer"},"fps":{"default":25,"description":"Frame rate in frames per second","enum":[24,25,48,50],"type":"integer"},"generate_audio":{"default":true,"description":"Generate audio for the video","type":"boolean"},"image_uri":{"description":"Image to be used as the first frame of the video (HTTPS URL or base64 data URI)","type":"string"},"last_frame_uri":{"description":"Image to be used as the last frame of the video (HTTPS URL or base64 data URI)","type":"string"},"model":{"description":"Model to use for generation","enum":["ltx-2-5-fast","ltx-2-5-pro"],"type":"string"},"prompt":{"description":"Text description of how the image should be animated","maxLength":10000,"type":"string"},"resolution":{"description":"Output video resolution. The enum is the union over all models; the supported set is per model. Supported pairs: ltx-2-5-fast: 1280x720, 720x1280, 1920x1080, 1080x1920, 2560x1440, 1440x2560, 3840x2160, 2160x3840; ltx-2-5-pro: 1280x720, 720x1280, 1920x1080, 1080x1920. Other (model, resolution) pairs are not supported; the v2 routes reject them with 400. The same matrix is published machine-readably in this property's x-comfy-model-resolutions extension.","enum":["1280x720","720x1280","1920x1080","1080x1920","2560x1440","1440x2560","3840x2160","2160x3840"],"type":"string","x-comfy-model-resolutions":{"ltx-2-5-fast":["1280x720","720x1280","1920x1080","1080x1920","2560x1440","1440x2560","3840x2160","2160x3840"],"ltx-2-5-pro":["1280x720","720x1280","1920x1080","1080x1920"]}}},"required":["image_uri","prompt","model","duration","resolution"],"type":"object"},"LTXJobStatusResponse":{"properties":{"completed_at":{"description":"Job completion timestamp (ISO 8601)","type":"string"},"created_at":{"description":"Job creation timestamp (ISO 8601)","type":"string"},"error":{"description":"Present when status is failed","properties":{"message":{"type":"string"},"type":{"type":"string"}},"type":"object"},"id":{"description":"Unique job identifier","type":"string"},"result":{"description":"Present when status is completed; output URLs expire 24 hours after completion","properties":{"video_url":{"description":"URL of the generated video","type":"string"}},"type":"object"},"status":{"description":"Job status (pending, processing, completed, failed)","type":"string"}},"type":"object"},"LTXText2VideoRequest":{"properties":{"duration":{"description":"Video duration in seconds (maximum depends on resolution and frame rate)","enum":[2,3,4,5,6,8,10,12,14,16,18,20],"type":"integer"},"fps":{"default":25,"description":"Frame rate in frames per second","enum":[24,25,48,50],"type":"integer"},"generate_audio":{"default":true,"description":"Generate audio for the video","type":"boolean"},"model":{"description":"Model to use for generation","enum":["ltx-2-5-fast","ltx-2-5-pro"],"type":"string"},"prompt":{"description":"Text prompt describing the desired video content","maxLength":10000,"type":"string"},"resolution":{"description":"Output video resolution. The enum is the union over all models; the supported set is per model. Supported pairs: ltx-2-5-fast: 1280x720, 720x1280, 1920x1080, 1080x1920, 2560x1440, 1440x2560, 3840x2160, 2160x3840; ltx-2-5-pro: 1280x720, 720x1280, 1920x1080, 1080x1920. Other (model, resolution) pairs are not supported; the v2 routes reject them with 400. The same matrix is published machine-readably in this property's x-comfy-model-resolutions extension.","enum":["1280x720","720x1280","1920x1080","1080x1920","2560x1440","1440x2560","3840x2160","2160x3840"],"type":"string","x-comfy-model-resolutions":{"ltx-2-5-fast":["1280x720","720x1280","1920x1080","1080x1920","2560x1440","1440x2560","3840x2160","2160x3840"],"ltx-2-5-pro":["1280x720","720x1280","1920x1080","1080x1920"]}}},"required":["prompt","model","duration","resolution"],"type":"object"},"LumaAgentsAspectRatio":{"description":"Output aspect ratio. The ray-3.2 video models support the subset 9:16, 3:4, 1:1, 4:3, 16:9, 21:9.","enum":["3:1","2:1","21:9","16:9","3:2","4:3","1:1","3:4","2:3","9:16","1:2","1:3"],"type":"string"},"LumaAgentsError":{"description":"The error object","properties":{"detail":{"description":"The error message","type":"string"}},"type":"object"},"LumaAgentsFailureCode":{"description":"Machine-readable failure code for programmatic handling","enum":["content_moderated","generation_failed","budget_exhausted","output_not_found"],"type":"string"},"LumaAgentsGeneration":{"description":"Generation status and output","properties":{"created_at":{"description":"Creation timestamp","type":"string"},"failure_code":{"allOf":[{"$ref":"#/components/schemas/LumaAgentsFailureCode"}],"description":"Machine-readable failure code, populated only on a FAILED generation. `null` on a successful one.","nullable":true},"failure_reason":{"description":"Human-readable failure description, populated only on a FAILED generation. `null` on a successful one.","nullable":true,"type":"string"},"id":{"description":"Generation identifier","type":"string"},"model":{"description":"Model used","type":"string"},"output":{"items":{"$ref":"#/components/schemas/LumaAgentsGenerationOutput"},"type":"array"},"state":{"$ref":"#/components/schemas/LumaAgentsState"},"type":{"$ref":"#/components/schemas/LumaAgentsGenerationType"}},"type":"object"},"LumaAgentsGenerationOutput":{"description":"A generated output entry","properties":{"type":{"description":"Media type (e.g. image)","type":"string"},"url":{"description":"Presigned URL (1hr expiry)","type":"string"}},"type":"object"},"LumaAgentsGenerationRequest":{"description":"The Luma Agents generation request object","properties":{"aspect_ratio":{"$ref":"#/components/schemas/LumaAgentsAspectRatio"},"image_ref":{"description":"Reference images for style/content guidance. Up to 9 for type 'image', up to 8 for type 'image_edit'.","items":{"$ref":"#/components/schemas/LumaAgentsImageRef"},"type":"array"},"model":{"description":"Model to use. uni-1 / uni-1-max for image generation, ray-3.2 for video generation, editing, and reframing.","type":"string"},"output_format":{"$ref":"#/components/schemas/LumaAgentsOutputFormat"},"prompt":{"description":"Text prompt","type":"string"},"source":{"$ref":"#/components/schemas/LumaAgentsImageRef"},"style":{"$ref":"#/components/schemas/LumaAgentsStyle"},"type":{"$ref":"#/components/schemas/LumaAgentsGenerationType"},"video":{"$ref":"#/components/schemas/LumaAgentsVideoOptions"},"web_search":{"description":"Enable web search grounding","type":"boolean"}},"required":["prompt"],"type":"object"},"LumaAgentsGenerationType":{"description":"The kind of generation to perform. image/image_edit are produced by the uni-1 / uni-1-max models; video/video_edit/video_reframe are produced by the ray-3.2 model.","enum":["image","image_edit","video","video_edit","video_reframe"],"type":"string"},"LumaAgentsImageRef":{"description":"Reference to an image or video. Used for style/content guidance, guided generation, video-edit/video-reframe sources, and guide keyframes. Provide exactly one of generation_id, url, or data.","properties":{"data":{"description":"Base64-encoded image or video data","type":"string"},"generation_id":{"description":"UUID of a prior completed generation to reuse as the source. Used by ray-3.2 video_edit / video_reframe.","type":"string"},"media_type":{"description":"MIME type. Required with data (and with url for video sources, e.g. video/mp4 on video_edit / video_reframe).","type":"string"},"url":{"description":"Publicly accessible image or video URL","type":"string"}},"type":"object"},"LumaAgentsOutputFormat":{"description":"Output image format","enum":["png","jpeg"],"type":"string"},"LumaAgentsState":{"description":"Current state of the generation","enum":["queued","processing","completed","failed"],"type":"string"},"LumaAgentsStyle":{"description":"Style preset","enum":["auto","manga"],"type":"string"},"LumaAgentsVideoDuration":{"description":"Clip duration for ray-3.2 video / video_edit. Defaults to 5s. HDR generation (type video) is restricted to 5s.","enum":["5s","10s"],"type":"string"},"LumaAgentsVideoOptions":{"description":"Video output settings for ray-3.2. Only the fields that affect validation and billing are modelled here; additional fields (edit controls, end_frame, loop, source_position) are forwarded to Luma untouched.","properties":{"duration":{"$ref":"#/components/schemas/LumaAgentsVideoDuration"},"exr_export":{"description":"Export an EXR file alongside the MP4. Requires hdr true. Rejected for video_reframe.","type":"boolean"},"hdr":{"description":"Render in HDR. Requires 720p/1080p. Rejected for video_reframe.","type":"boolean"},"keyframes":{"description":"Guide-frame images. A single keyframe makes a type \"video\" request a single-keyframe extend, which always bills as one 5s block.","items":{"$ref":"#/components/schemas/LumaAgentsImageRef"},"type":"array"},"loop":{"description":"Loop the generated clip. Create-only (type video).","type":"boolean"},"resolution":{"$ref":"#/components/schemas/LumaAgentsVideoResolution"},"start_frame":{"$ref":"#/components/schemas/LumaAgentsImageRef"}},"type":"object"},"LumaAgentsVideoResolution":{"description":"Output resolution for ray-3.2 video. Defaults to 720p. 360p is the draft tier. HDR requires 720p or 1080p.","enum":["360p","540p","720p","1080p"],"type":"string"},"LumaAspectRatio":{"default":"16:9","description":"The aspect ratio of the generation","enum":["1:1","16:9","9:16","4:3","3:4","21:9","9:21"],"example":"16:9","type":"string"},"LumaAssets":{"description":"The assets of the generation","properties":{"image":{"description":"The URL of the image","format":"uri","type":"string"},"progress_video":{"description":"The URL of the progress video","format":"uri","nullable":true,"type":"string"},"video":{"description":"The URL of the video","format":"uri","type":"string"}},"type":"object"},"LumaAudioGenerationRequest":{"description":"The audio generation request object","properties":{"callback_url":{"description":"The callback URL for the audio","format":"uri","type":"string"},"generation_type":{"default":"add_audio","enum":["add_audio"],"type":"string"},"negative_prompt":{"description":"The negative prompt of the audio","type":"string"},"prompt":{"description":"The prompt of the audio","type":"string"}},"type":"object"},"LumaError":{"description":"The error object","example":{"detail":"Invalid API key is provided"},"properties":{"detail":{"description":"The error message","type":"string"}},"type":"object"},"LumaGeneration":{"description":"The generation response object","example":{"assets":{"video":"https://example.com/video.mp4"},"created_at":"2023-06-01T12:00:00Z","failure_reason":null,"generation_type":"video","id":"123e4567-e89b-12d3-a456-426614174000","model":"ray-2","request":{"aspect_ratio":"16:9","duration":"5s","generation_type":"video","keyframes":{"frame0":{"type":"image","url":"https://example.com/image.jpg"},"frame1":{"id":"123e4567-e89b-12d3-a456-426614174002","type":"generation"}},"loop":true,"model":"ray-2","prompt":"A serene lake surrounded by mountains at sunset","resolution":"720p"},"state":"completed"},"properties":{"assets":{"$ref":"#/components/schemas/LumaAssets"},"created_at":{"description":"The date and time when the generation was created","format":"date-time","type":"string"},"failure_reason":{"description":"The reason for the state of the generation","nullable":true,"type":"string"},"generation_type":{"$ref":"#/components/schemas/LumaGenerationType"},"id":{"description":"The ID of the generation","format":"uuid","type":"string"},"model":{"description":"The model used for the generation","type":"string"},"request":{"anyOf":[{"$ref":"#/components/schemas/LumaGenerationRequestEcho"},{"$ref":"#/components/schemas/LumaImageGenerationRequestEcho"},{"$ref":"#/components/schemas/LumaUpscaleVideoGenerationRequest"},{"$ref":"#/components/schemas/LumaAudioGenerationRequest"}],"description":"The request of the generation"},"state":{"$ref":"#/components/schemas/LumaState"}},"type":"object"},"LumaGenerationReference":{"description":"The generation reference object","example":{"id":"123e4567-e89b-12d3-a456-426614174003","type":"generation"},"properties":{"id":{"description":"The ID of the generation","format":"uuid","type":"string"},"type":{"default":"generation","enum":["generation"],"type":"string"}},"required":["type","id"],"type":"object"},"LumaGenerationRequest":{"description":"The generation request object","properties":{"aspect_ratio":{"$ref":"#/components/schemas/LumaAspectRatio"},"callback_url":{"description":"The callback URL of the generation, a POST request with Generation object will be sent to the callback URL when the generation is dreaming, completed, or failed","format":"uri","type":"string"},"duration":{"$ref":"#/components/schemas/LumaVideoModelOutputDuration"},"generation_type":{"default":"video","enum":["video"],"type":"string"},"keyframes":{"$ref":"#/components/schemas/LumaKeyframes"},"loop":{"description":"Whether to loop the video","type":"boolean"},"model":{"$ref":"#/components/schemas/LumaVideoModel"},"prompt":{"description":"The prompt of the generation","type":"string"},"resolution":{"$ref":"#/components/schemas/LumaVideoModelOutputResolution"}},"required":["duration","resolution","prompt","aspect_ratio","model"],"type":"object"},"LumaGenerationRequestEcho":{"description":"The video generation request, echoed back inside the terminal document. Luma serialises every field of its request model, writing an explicit `null` into each one the caller did not set, so read a field's presence from its VALUE rather than from the key.","properties":{"aspect_ratio":{"allOf":[{"$ref":"#/components/schemas/LumaAspectRatio"}],"nullable":true},"callback_url":{"description":"The callback URL of the generation","format":"uri","nullable":true,"type":"string"},"duration":{"allOf":[{"$ref":"#/components/schemas/LumaVideoModelOutputDuration"}],"nullable":true},"generation_type":{"description":"Always `video` when set, echoing the operation. Null when the caller did not send one, for the reason this whole echo object exists.","nullable":true,"type":"string"},"keyframes":{"description":"The keyframes of the generation","nullable":true,"properties":{"frame0":{"allOf":[{"$ref":"#/components/schemas/LumaKeyframe"}],"nullable":true},"frame1":{"allOf":[{"$ref":"#/components/schemas/LumaKeyframe"}],"nullable":true}},"type":"object"},"loop":{"description":"Whether to loop the video","nullable":true,"type":"boolean"},"model":{"allOf":[{"$ref":"#/components/schemas/LumaVideoModel"}],"nullable":true},"prompt":{"description":"The prompt of the generation","nullable":true,"type":"string"},"resolution":{"allOf":[{"$ref":"#/components/schemas/LumaVideoModelOutputResolution"}],"nullable":true}},"type":"object"},"LumaGenerationType":{"enum":["video","image"],"type":"string"},"LumaImageGenerationRequest":{"description":"The image generation request object","properties":{"aspect_ratio":{"$ref":"#/components/schemas/LumaAspectRatio"},"callback_url":{"description":"The callback URL for the generation","format":"uri","type":"string"},"character_ref":{"properties":{"identity0":{"$ref":"#/components/schemas/LumaImageIdentity"}},"type":"object"},"generation_type":{"default":"image","enum":["image"],"type":"string"},"image_ref":{"items":{"$ref":"#/components/schemas/LumaImageRef"},"type":"array"},"model":{"$ref":"#/components/schemas/LumaImageModel"},"modify_image_ref":{"$ref":"#/components/schemas/LumaModifyImageRef"},"prompt":{"description":"The prompt of the generation","type":"string"},"style_ref":{"items":{"$ref":"#/components/schemas/LumaImageRef"},"type":"array"}},"type":"object"},"LumaImageGenerationRequestEcho":{"description":"The image generation request, echoed back inside the terminal document. Luma serialises every field of its request model, writing an explicit `null` into each one the caller did not set, so read a field's presence from its VALUE rather than from the key.","properties":{"aspect_ratio":{"allOf":[{"$ref":"#/components/schemas/LumaAspectRatio"}],"nullable":true},"callback_url":{"description":"The callback URL for the generation","format":"uri","nullable":true,"type":"string"},"character_ref":{"nullable":true,"properties":{"identity0":{"allOf":[{"$ref":"#/components/schemas/LumaImageIdentityEcho"}],"description":"The image identity, echoed back — null when the caller sent none","nullable":true}},"type":"object"},"generation_type":{"description":"Always `image` when set, echoing the operation. Null when the caller did not send one, for the reason this whole echo object exists.","nullable":true,"type":"string"},"image_ref":{"items":{"$ref":"#/components/schemas/LumaImageRefEcho"},"nullable":true,"type":"array"},"model":{"allOf":[{"$ref":"#/components/schemas/LumaImageModel"}],"nullable":true},"modify_image_ref":{"allOf":[{"$ref":"#/components/schemas/LumaModifyImageRefEcho"}],"nullable":true},"prompt":{"description":"The prompt of the generation","nullable":true,"type":"string"},"style_ref":{"items":{"$ref":"#/components/schemas/LumaImageRefEcho"},"nullable":true,"type":"array"}},"type":"object"},"LumaImageIdentity":{"description":"The image identity object","properties":{"images":{"description":"The URLs of the image identity","items":{"format":"uri","type":"string"},"type":"array"}},"type":"object"},"LumaImageIdentityEcho":{"description":"An image identity as it comes BACK inside the terminal document. Same shape as `LumaImageIdentity`, with its members nullable for the reason `LumaImageRefEcho` gives.","properties":{"images":{"description":"The URLs of the image identity","items":{"format":"uri","type":"string"},"nullable":true,"type":"array"}},"type":"object"},"LumaImageModel":{"default":"photon-1","description":"The image model used for the generation","enum":["photon-1","photon-flash-1"],"type":"string"},"LumaImageRef":{"description":"The image reference object","properties":{"url":{"description":"The URL of the image reference","format":"uri","type":"string"},"weight":{"description":"The weight of the image reference","type":"number"}},"type":"object"},"LumaImageRefEcho":{"description":"An image reference as it comes BACK inside the terminal document. Same shape as `LumaImageRef`, with each member nullable because Luma echoes an unset one as an explicit `null` rather than omitting it.","properties":{"url":{"description":"The URL of the image reference","format":"uri","nullable":true,"type":"string"},"weight":{"description":"The weight of the image reference","nullable":true,"type":"number"}},"type":"object"},"LumaImageReference":{"description":"The image object","example":{"type":"image","url":"https://example.com/image.jpg"},"properties":{"type":{"default":"image","enum":["image"],"type":"string"},"url":{"description":"The URL of the image","format":"uri","type":"string"}},"required":["type","url"],"type":"object"},"LumaKeyframe":{"description":"A keyframe can be either a Generation reference, an Image, or a Video","discriminator":{"mapping":{"generation":"#/components/schemas/LumaGenerationReference","image":"#/components/schemas/LumaImageReference"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/LumaGenerationReference"},{"$ref":"#/components/schemas/LumaImageReference"}]},"LumaKeyframes":{"description":"The keyframes of the generation","example":{"frame0":{"type":"image","url":"https://example.com/image.jpg"},"frame1":{"id":"123e4567-e89b-12d3-a456-426614174001","type":"generation"}},"properties":{"frame0":{"$ref":"#/components/schemas/LumaKeyframe"},"frame1":{"$ref":"#/components/schemas/LumaKeyframe"}},"type":"object"},"LumaModifyImageRef":{"description":"The modify image reference object","properties":{"url":{"description":"The URL of the image reference","format":"uri","type":"string"},"weight":{"description":"The weight of the modify image reference","type":"number"}},"type":"object"},"LumaModifyImageRefEcho":{"description":"A modify-image reference as it comes BACK inside the terminal document. Same shape as `LumaModifyImageRef`, with its members nullable for the reason `LumaImageRefEcho` gives.","properties":{"url":{"description":"The URL of the image reference","format":"uri","nullable":true,"type":"string"},"weight":{"description":"The weight of the modify image reference","nullable":true,"type":"number"}},"type":"object"},"LumaState":{"description":"The state of the generation","enum":["queued","dreaming","completed","failed"],"example":"completed","type":"string"},"LumaUpscaleVideoGenerationRequest":{"description":"The upscale generation request object","properties":{"callback_url":{"description":"The callback URL for the upscale","format":"uri","type":"string"},"generation_type":{"default":"upscale_video","enum":["upscale_video"],"type":"string"},"resolution":{"$ref":"#/components/schemas/LumaVideoModelOutputResolution"}},"type":"object"},"LumaVideoModel":{"default":"ray-2","description":"The video model used for the generation","enum":["ray-2","ray-flash-2","ray-1-6"],"example":"ray-2","type":"string"},"LumaVideoModelOutputDuration":{"anyOf":[{"enum":["5s","9s"],"type":"string"},{"type":"string"}]},"LumaVideoModelOutputResolution":{"anyOf":[{"enum":["540p","720p","1080p","4k"],"type":"string"},{"type":"string"}]},"MachineStats":{"properties":{"cpu_capacity":{"description":"Total CPU on the machine.","type":"string"},"disk_capacity":{"description":"Total disk capacity on the machine.","type":"string"},"gpu_type":{"description":"The GPU type. eg. NVIDIA Tesla K80","type":"string"},"initial_cpu":{"description":"Initial CPU available before the job starts.","type":"string"},"initial_disk":{"description":"Initial disk available before the job starts.","type":"string"},"initial_ram":{"description":"Initial RAM available before the job starts.","type":"string"},"machine_name":{"description":"Name of the machine.","type":"string"},"memory_capacity":{"description":"Total memory on the machine.","type":"string"},"os_version":{"description":"The operating system version. eg. Ubuntu Linux 20.04","type":"string"},"pip_freeze":{"description":"The pip freeze output","type":"string"},"vram_time_series":{"description":"Time series of VRAM usage.","type":"object"}},"type":"object"},"MeshyAiModel":{"default":"latest","description":"ID of the model to use.","enum":["meshy-5","meshy-6","meshy-7","latest"],"type":"string"},"MeshyAnimationCreateResponse":{"properties":{"result":{"description":"The task id of the newly created animation task.","type":"string"}},"required":["result"],"type":"object"},"MeshyAnimationPostProcess":{"description":"Parameters for post-processing animation files.","properties":{"fps":{"default":30,"description":"The target frame rate. Default is 30. Applicable only when operation_type is change_fps.","enum":[24,25,30,60],"type":"integer"},"operation_type":{"description":"The type of operation to perform.","enum":["change_fps","fbx2usdz","extract_armature"],"type":"string"}},"required":["operation_type"],"type":"object"},"MeshyAnimationRequest":{"properties":{"action_id":{"description":"The identifier of the animation action to apply.","type":"integer"},"post_process":{"$ref":"#/components/schemas/MeshyAnimationPostProcess"},"rig_task_id":{"description":"The id of a successfully completed rigging task (from POST /openapi/v1/rigging). The character from this task will be animated.","type":"string"}},"required":["rig_task_id","action_id"],"type":"object"},"MeshyAnimationResult":{"description":"Contains the output animation URLs if the task SUCCEEDED.","properties":{"animation_fbx_url":{"description":"Downloadable URL for the animation in FBX format.","type":"string"},"animation_glb_url":{"description":"Downloadable URL for the animation in GLB format.","type":"string"},"processed_animation_fps_fbx_url":{"description":"Downloadable URL for the animation with changed FPS in FBX format.","type":"string"},"processed_armature_fbx_url":{"description":"Downloadable URL for the processed armature in FBX format.","type":"string"},"processed_usdz_url":{"description":"Downloadable URL for the processed animation in USDZ format.","type":"string"}},"type":"object"},"MeshyAnimationTask":{"properties":{"created_at":{"description":"Timestamp of when the task was created, in milliseconds.","type":"integer"},"expires_at":{"description":"Timestamp of when the task result expires, in milliseconds.","type":"integer"},"finished_at":{"description":"Timestamp of when the task was finished, in milliseconds. 0 if not finished.","type":"integer"},"id":{"description":"Unique identifier for the task.","type":"string"},"preceding_tasks":{"description":"The count of preceding tasks. Only meaningful when status is PENDING.","type":"integer"},"progress":{"description":"Progress of the task (0-100).","maximum":100,"minimum":0,"type":"integer"},"result":{"$ref":"#/components/schemas/MeshyAnimationResult"},"started_at":{"description":"Timestamp of when the task was started, in milliseconds. 0 if not started.","type":"integer"},"status":{"$ref":"#/components/schemas/MeshyTaskStatus"},"task_error":{"$ref":"#/components/schemas/MeshyTaskError"},"type":{"description":"Type of the Animation task.","enum":["animate"],"type":"string"}},"required":["id","status"],"type":"object"},"MeshyArtStyle":{"default":"realistic","description":"Describe your desired art style of the object.","enum":["realistic","sculpture"],"type":"string"},"MeshyImageTo3DCreateResponse":{"properties":{"result":{"description":"The task id of the newly created Image to 3D task.","type":"string"}},"required":["result"],"type":"object"},"MeshyImageTo3DModelUrls":{"description":"Downloadable URLs to the 3D model files generated by Meshy.","properties":{"fbx":{"description":"Downloadable URL to the FBX file.","type":"string"},"glb":{"description":"Downloadable URL to the GLB file.","type":"string"},"mtl":{"description":"Downloadable URL to the MTL file.","type":"string"},"obj":{"description":"Downloadable URL to the OBJ file.","type":"string"},"pre_remeshed_glb":{"description":"Downloadable URL to the original GLB output before remeshing. Available only when should_remesh and save_pre_remeshed_model are both true.","type":"string"},"usdz":{"description":"Downloadable URL to the USDZ file.","type":"string"}},"type":"object"},"MeshyImageTo3DRequest":{"properties":{"ai_model":{"$ref":"#/components/schemas/MeshyAiModel"},"enable_pbr":{"default":false,"description":"Generate PBR Maps (metallic, roughness, normal) in addition to the base color.","type":"boolean"},"image_url":{"description":"Provide an image for Meshy to use in model creation. Supports .jpg, .jpeg, .png formats or base64-encoded data URI.","type":"string"},"is_a_t_pose":{"default":false,"description":"Deprecated. Use pose_mode instead. Whether to generate the model in an A/T pose.","type":"boolean"},"model_type":{"default":"standard","description":"Specify the type of 3D mesh generation.\n- standard: Regular high-detail 3D mesh generation.\n- lowpoly: Generates low-poly mesh optimized for cleaner polygons.\nWhen lowpoly is selected, ai_model, topology, target_polycount, should_remesh, save_pre_remeshed_model are ignored.\n","enum":["standard","lowpoly"],"type":"string"},"moderation":{"default":false,"description":"When true, input content will be screened for potentially harmful content.","type":"boolean"},"pose_mode":{"$ref":"#/components/schemas/MeshyPoseMode"},"save_pre_remeshed_model":{"default":false,"description":"When true, stores an extra GLB file before the remesh phase completes. Only takes effect when should_remesh is true.","type":"boolean"},"should_remesh":{"default":true,"description":"Controls whether to enable the remesh phase. When false, returns highest-precision triangular mesh.","type":"boolean"},"should_texture":{"default":true,"description":"Determines if textures are generated. When false, provides a mesh without textures.","type":"boolean"},"symmetry_mode":{"$ref":"#/components/schemas/MeshySymmetryMode"},"target_polycount":{"default":30000,"description":"Specify the target number of polygons in the generated model. Valid range is 100 to 300,000.","maximum":300000,"minimum":100,"type":"integer"},"texture_image_url":{"description":"Provide a 2d image to guide the texturing process. Supports .jpg, .jpeg, .png formats or base64-encoded data URI.","type":"string"},"texture_prompt":{"description":"Provide a text prompt to guide the texturing process. Maximum 600 characters.","maxLength":600,"type":"string"},"texture_resolution":{"default":"2k","description":"Texture resolution of the generated textures. One of 2k, 4k or 8k. 4k and 8k require ai_model meshy-6, meshy-7 or latest. Only applies when should_texture is true.","type":"string"},"topology":{"$ref":"#/components/schemas/MeshyTopology"},"ultra_mode":{"default":false,"description":"Enables Ultra generation for higher-fidelity geometry with finer surface detail. Only supported when ai_model is meshy-7 or latest and model_type is standard.","type":"boolean"}},"required":["image_url"],"type":"object"},"MeshyImageTo3DTask":{"properties":{"created_at":{"description":"Timestamp of when the task was created, in milliseconds.","type":"integer"},"expires_at":{"description":"Timestamp of when the task result expires, in milliseconds.","type":"integer"},"finished_at":{"description":"Timestamp of when the task was finished, in milliseconds. 0 if not finished.","type":"integer"},"id":{"description":"Unique identifier for the task.","type":"string"},"model_urls":{"$ref":"#/components/schemas/MeshyImageTo3DModelUrls"},"preceding_tasks":{"description":"The count of preceding tasks. Only meaningful when status is PENDING.","type":"integer"},"progress":{"description":"Progress of the task. 0 if not started, 100 when succeeded.","maximum":100,"minimum":0,"type":"integer"},"started_at":{"description":"Timestamp of when the task was started, in milliseconds. 0 if not started.","type":"integer"},"status":{"$ref":"#/components/schemas/MeshyTaskStatus"},"task_error":{"$ref":"#/components/schemas/MeshyTaskError"},"texture_image_url":{"description":"Downloadable URL to the texture image that was used to guide the texturing process.","type":"string"},"texture_prompt":{"description":"The text prompt that was used to guide the texturing process.","type":"string"},"texture_urls":{"description":"An array of texture URL objects that are generated from the task.","items":{"$ref":"#/components/schemas/MeshyTextureUrls"},"type":"array"},"thumbnail_url":{"description":"Downloadable URL to the thumbnail image of the model file.","type":"string"},"type":{"description":"Type of the Image to 3D task.","enum":["image-to-3d"],"type":"string"}},"required":["id","status"],"type":"object"},"MeshyModelUrls":{"description":"Downloadable URLs to the textured 3D model files generated by Meshy.","properties":{"fbx":{"description":"Downloadable URL to the FBX file.","type":"string"},"glb":{"description":"Downloadable URL to the GLB file.","type":"string"},"mtl":{"description":"Downloadable URL to the MTL file.","type":"string"},"obj":{"description":"Downloadable URL to the OBJ file.","type":"string"},"usdz":{"description":"Downloadable URL to the USDZ file.","type":"string"}},"type":"object"},"MeshyMultiImageTo3DCreateResponse":{"properties":{"result":{"description":"The task id of the newly created Multi-Image to 3D task.","type":"string"}},"required":["result"],"type":"object"},"MeshyMultiImageTo3DRequest":{"properties":{"ai_model":{"$ref":"#/components/schemas/MeshyAiModel"},"enable_pbr":{"default":false,"description":"Generate PBR Maps (metallic, roughness, normal) in addition to the base color.","type":"boolean"},"image_urls":{"description":"Provide 1 to 4 images for Meshy to use in model creation. All images should depict the same object from different angles.","items":{"type":"string"},"maxItems":4,"minItems":1,"type":"array"},"is_a_t_pose":{"default":false,"description":"Deprecated. Use pose_mode instead. Whether to generate the model in an A/T pose.","type":"boolean"},"moderation":{"default":false,"description":"When true, input content will be screened for potentially harmful content.","type":"boolean"},"pose_mode":{"$ref":"#/components/schemas/MeshyPoseMode"},"save_pre_remeshed_model":{"default":false,"description":"When true, stores an extra GLB file before the remesh phase completes. Only takes effect when should_remesh is true.","type":"boolean"},"should_remesh":{"default":true,"description":"Controls whether to enable the remesh phase. When false, returns highest-precision triangular mesh.","type":"boolean"},"should_texture":{"default":true,"description":"Determines if textures are generated. When false, provides a mesh without textures.","type":"boolean"},"symmetry_mode":{"$ref":"#/components/schemas/MeshySymmetryMode"},"target_polycount":{"default":30000,"description":"Specify the target number of polygons in the generated model. Valid range is 100 to 300,000.","maximum":300000,"minimum":100,"type":"integer"},"texture_image_url":{"description":"Provide a 2d image to guide the texturing process. Supports .jpg, .jpeg, .png formats or base64-encoded data URI.","type":"string"},"texture_prompt":{"description":"Provide a text prompt to guide the texturing process. Maximum 600 characters.","maxLength":600,"type":"string"},"texture_resolution":{"default":"2k","description":"Texture resolution of the generated textures. One of 2k, 4k or 8k. 4k and 8k require ai_model meshy-6, meshy-7 or latest. Only applies when should_texture is true.","type":"string"},"topology":{"$ref":"#/components/schemas/MeshyTopology"}},"required":["image_urls"],"type":"object"},"MeshyMultiImageTo3DTask":{"properties":{"created_at":{"description":"Timestamp of when the task was created, in milliseconds.","type":"integer"},"expires_at":{"description":"Timestamp of when the task result expires, in milliseconds.","type":"integer"},"finished_at":{"description":"Timestamp of when the task was finished, in milliseconds. 0 if not finished.","type":"integer"},"id":{"description":"Unique identifier for the task.","type":"string"},"model_urls":{"$ref":"#/components/schemas/MeshyImageTo3DModelUrls"},"preceding_tasks":{"description":"The count of preceding tasks. Only meaningful when status is PENDING.","type":"integer"},"progress":{"description":"Progress of the task. 0 if not started, 100 when succeeded.","maximum":100,"minimum":0,"type":"integer"},"started_at":{"description":"Timestamp of when the task was started, in milliseconds. 0 if not started.","type":"integer"},"status":{"$ref":"#/components/schemas/MeshyTaskStatus"},"task_error":{"$ref":"#/components/schemas/MeshyTaskError"},"texture_prompt":{"description":"The text prompt that was used to guide the texturing process.","type":"string"},"texture_urls":{"description":"An array of texture URL objects that are generated from the task.","items":{"$ref":"#/components/schemas/MeshyTextureUrls"},"type":"array"},"thumbnail_url":{"description":"Downloadable URL to the thumbnail image of the model file.","type":"string"},"type":{"description":"Type of the Multi-Image to 3D task.","enum":["multi-image-to-3d"],"type":"string"}},"required":["id","status"],"type":"object"},"MeshyPoseMode":{"description":"Specify the pose mode for the generated model.","enum":["a-pose","t-pose",""],"type":"string"},"MeshyRemeshCreateResponse":{"properties":{"result":{"description":"The id of the newly created remesh task.","type":"string"}},"required":["result"],"type":"object"},"MeshyRemeshModelUrls":{"description":"Downloadable URLs to the remeshed 3D model files.","properties":{"blend":{"description":"Downloadable URL to the Blender file.","type":"string"},"fbx":{"description":"Downloadable URL to the FBX file.","type":"string"},"glb":{"description":"Downloadable URL to the GLB file.","type":"string"},"obj":{"description":"Downloadable URL to the OBJ file.","type":"string"},"stl":{"description":"Downloadable URL to the STL file.","type":"string"},"usdz":{"description":"Downloadable URL to the USDZ file.","type":"string"}},"type":"object"},"MeshyRemeshRequest":{"properties":{"convert_format_only":{"default":false,"description":"If true, only changes the format of the input model file, ignoring other inputs like topology, resize_height, and target_polycount.","type":"boolean"},"input_task_id":{"description":"The ID of the completed Image to 3D or Text to 3D task you wish to remesh. Required if model_url is not provided.","type":"string"},"model_url":{"description":"A publicly accessible URL or data URI to a 3D model. Supported formats glb, gltf, obj, fbx, stl. Required if input_task_id is not provided.","type":"string"},"origin_at":{"description":"Position of the origin.","enum":["bottom","center",""],"type":"string"},"resize_height":{"default":0,"description":"Resize the model to a certain height measured in meters. 0 means no resizing.","type":"number"},"target_formats":{"default":["glb"],"description":"A list of target formats for the remeshed model.","items":{"enum":["glb","fbx","obj","usdz","blend","stl"],"type":"string"},"type":"array"},"target_polycount":{"default":30000,"description":"Specify the target number of polygons in the generated model. Valid range is 100 to 300,000.","maximum":300000,"minimum":100,"type":"integer"},"topology":{"$ref":"#/components/schemas/MeshyTopology"}},"type":"object"},"MeshyRemeshTask":{"properties":{"created_at":{"description":"Timestamp of when the task was created, in milliseconds.","type":"integer"},"finished_at":{"description":"Timestamp of when the task was finished, in milliseconds. 0 if not finished.","type":"integer"},"id":{"description":"Unique identifier for the task.","type":"string"},"model_urls":{"$ref":"#/components/schemas/MeshyRemeshModelUrls"},"preceding_tasks":{"description":"The count of preceding tasks. Only meaningful when status is PENDING.","type":"integer"},"progress":{"description":"Progress of the task. 0 if not started, 100 when succeeded.","maximum":100,"minimum":0,"type":"integer"},"started_at":{"description":"Timestamp of when the task was started, in milliseconds. 0 if not started.","type":"integer"},"status":{"$ref":"#/components/schemas/MeshyRemeshTaskStatus"},"task_error":{"$ref":"#/components/schemas/MeshyTaskError"},"type":{"description":"Type of the Remesh task.","enum":["remesh"],"type":"string"}},"required":["id","status"],"type":"object"},"MeshyRemeshTaskStatus":{"description":"Status of the remesh task.","enum":["PENDING","PROCESSING","SUCCEEDED","FAILED"],"type":"string"},"MeshyRetextureCreateResponse":{"properties":{"result":{"description":"The task id of the newly created Retexture task.","type":"string"}},"required":["result"],"type":"object"},"MeshyRetextureModelUrls":{"description":"Downloadable URLs to the textured 3D model files.","properties":{"fbx":{"description":"Downloadable URL to the FBX file.","type":"string"},"glb":{"description":"Downloadable URL to the GLB file.","type":"string"},"usdz":{"description":"Downloadable URL to the USDZ file.","type":"string"}},"type":"object"},"MeshyRetextureRequest":{"properties":{"ai_model":{"$ref":"#/components/schemas/MeshyAiModel"},"enable_original_uv":{"default":true,"description":"Use the original UV of the model instead of generating new UVs.","type":"boolean"},"enable_pbr":{"default":false,"description":"Generate PBR Maps (metallic, roughness, normal) in addition to the base color.","type":"boolean"},"image_style_url":{"description":"A 2d image to guide the texturing process. Supports jpg, jpeg, png formats or base64-encoded data URI. Required if text_style_prompt is not provided.","type":"string"},"input_task_id":{"description":"The ID of the completed Image to 3D or Text to 3D task you wish to retexture. Required if model_url is not provided.","type":"string"},"model_url":{"description":"A publicly accessible URL or Data URI to a 3D model. Supported formats glb, gltf, obj, fbx, stl. Required if input_task_id is not provided.","type":"string"},"text_style_prompt":{"description":"Describe your desired texture style of the object using text. Maximum 600 characters. Required if image_style_url is not provided.","maxLength":600,"type":"string"},"texture_resolution":{"default":"2k","description":"Texture resolution of the generated textures. One of 2k, 4k or 8k. 4k and 8k require ai_model meshy-6, meshy-7 or latest.","type":"string"}},"type":"object"},"MeshyRetextureTask":{"properties":{"created_at":{"description":"Timestamp of when the task was created, in milliseconds.","type":"integer"},"expires_at":{"description":"Timestamp of when the task result expires, in milliseconds.","type":"integer"},"finished_at":{"description":"Timestamp of when the task was finished, in milliseconds. 0 if not finished.","type":"integer"},"id":{"description":"Unique identifier for the task.","type":"string"},"image_style_url":{"description":"The image input that was used to create the texturing task.","type":"string"},"model_urls":{"$ref":"#/components/schemas/MeshyRetextureModelUrls"},"preceding_tasks":{"description":"The count of preceding tasks. Only meaningful when status is PENDING.","type":"integer"},"progress":{"description":"Progress of the task. 0 if not started, 100 when succeeded.","maximum":100,"minimum":0,"type":"integer"},"started_at":{"description":"Timestamp of when the task was started, in milliseconds. 0 if not started.","type":"integer"},"status":{"$ref":"#/components/schemas/MeshyTaskStatus"},"task_error":{"$ref":"#/components/schemas/MeshyTaskError"},"text_style_prompt":{"description":"The text prompt that was used to create the texturing task.","type":"string"},"texture_urls":{"description":"An array of texture URL objects that are generated from the task.","items":{"$ref":"#/components/schemas/MeshyTextureUrls"},"type":"array"},"thumbnail_url":{"description":"Downloadable URL to the thumbnail image of the model file.","type":"string"},"type":{"description":"Type of the Retexture task.","enum":["retexture"],"type":"string"}},"required":["id","status"],"type":"object"},"MeshyRiggingBasicAnimations":{"description":"Contains URLs for default animations.","properties":{"running_armature_glb_url":{"description":"Downloadable URL for running animation armature in GLB format.","type":"string"},"running_fbx_url":{"description":"Downloadable URL for running animation in FBX format (with skin).","type":"string"},"running_glb_url":{"description":"Downloadable URL for running animation in GLB format (with skin).","type":"string"},"walking_armature_glb_url":{"description":"Downloadable URL for walking animation armature in GLB format.","type":"string"},"walking_fbx_url":{"description":"Downloadable URL for walking animation in FBX format (with skin).","type":"string"},"walking_glb_url":{"description":"Downloadable URL for walking animation in GLB format (with skin).","type":"string"}},"type":"object"},"MeshyRiggingCreateResponse":{"properties":{"result":{"description":"The task id of the newly created rigging task.","type":"string"}},"required":["result"],"type":"object"},"MeshyRiggingRequest":{"properties":{"height_meters":{"default":1.7,"description":"The approximate height of the character model in meters. Must be a positive number.","type":"number"},"input_task_id":{"description":"The input task that needs to be rigged. Required if model_url is not provided.","type":"string"},"model_url":{"description":"A publicly accessible URL or Data URI to a textured humanoid GLB file. Required if input_task_id is not provided.","type":"string"},"texture_image_url":{"description":"The model's UV-unwrapped base color texture image. Publicly accessible URL or Data URI. Supports .png format.","type":"string"}},"type":"object"},"MeshyRiggingResult":{"description":"Contains the output asset URLs if the task SUCCEEDED.","properties":{"basic_animations":{"$ref":"#/components/schemas/MeshyRiggingBasicAnimations"},"rigged_character_fbx_url":{"description":"Downloadable URL for the rigged character in FBX format.","type":"string"},"rigged_character_glb_url":{"description":"Downloadable URL for the rigged character in GLB format.","type":"string"}},"type":"object"},"MeshyRiggingTask":{"properties":{"created_at":{"description":"Timestamp of when the task was created, in milliseconds.","type":"integer"},"expires_at":{"description":"Timestamp of when the task result expires, in milliseconds.","type":"integer"},"finished_at":{"description":"Timestamp of when the task was finished, in milliseconds. 0 if not finished.","type":"integer"},"id":{"description":"Unique identifier for the task.","type":"string"},"preceding_tasks":{"description":"The count of preceding tasks. Only meaningful when status is PENDING.","type":"integer"},"progress":{"description":"Progress of the task (0-100). 0 if not started, 100 if succeeded.","maximum":100,"minimum":0,"type":"integer"},"result":{"$ref":"#/components/schemas/MeshyRiggingResult"},"started_at":{"description":"Timestamp of when the task was started, in milliseconds. 0 if not started.","type":"integer"},"status":{"$ref":"#/components/schemas/MeshyTaskStatus"},"task_error":{"$ref":"#/components/schemas/MeshyTaskError"},"type":{"description":"Type of the Rigging task.","enum":["rig"],"type":"string"}},"required":["id","status"],"type":"object"},"MeshySymmetryMode":{"default":"auto","description":"Controls symmetry behavior during model generation.","enum":["off","auto","on"],"type":"string"},"MeshyTaskError":{"description":"Error object that contains the error message if the task failed.","properties":{"message":{"description":"Detailed error message.","type":"string"}},"type":"object"},"MeshyTaskStatus":{"description":"Status of the task.","enum":["PENDING","IN_PROGRESS","SUCCEEDED","FAILED","CANCELED"],"type":"string"},"MeshyTextTo3DCreateResponse":{"properties":{"result":{"description":"The task id of the newly created Text to 3D task.","type":"string"}},"required":["result"],"type":"object"},"MeshyTextTo3DPreviewRequest":{"properties":{"ai_model":{"$ref":"#/components/schemas/MeshyAiModel"},"art_style":{"$ref":"#/components/schemas/MeshyArtStyle"},"is_a_t_pose":{"default":false,"description":"Deprecated. Use pose_mode instead. Whether to generate the model in an A/T pose.","type":"boolean"},"mode":{"description":"This field should be set to \"preview\" when creating a preview task.","enum":["preview"],"type":"string"},"moderation":{"default":false,"description":"When true, input content will be screened for potentially harmful content.","type":"boolean"},"pose_mode":{"$ref":"#/components/schemas/MeshyPoseMode"},"prompt":{"description":"Describe what kind of object the 3D model is. Maximum 600 characters.","maxLength":600,"type":"string"},"should_remesh":{"default":true,"description":"Controls whether to enable the remesh phase. When false, returns highest-precision triangular mesh.","type":"boolean"},"symmetry_mode":{"$ref":"#/components/schemas/MeshySymmetryMode"},"target_polycount":{"default":30000,"description":"Specify the target number of polygons in the generated model. Valid range is 100 to 300,000.","maximum":300000,"minimum":100,"type":"integer"},"topology":{"$ref":"#/components/schemas/MeshyTopology"},"ultra_mode":{"default":false,"description":"Enables Ultra generation for higher-fidelity geometry with finer surface detail. Only supported when ai_model is meshy-7 or latest.","type":"boolean"}},"required":["mode","prompt"],"type":"object"},"MeshyTextTo3DRefineRequest":{"properties":{"ai_model":{"$ref":"#/components/schemas/MeshyAiModel"},"enable_pbr":{"default":false,"description":"Generate PBR Maps (metallic, roughness, normal) in addition to the base color. Note that enable_pbr should be set to false when using Sculpture style.","type":"boolean"},"mode":{"description":"This field should be set to \"refine\" when creating a refine task.","enum":["refine"],"type":"string"},"moderation":{"default":false,"description":"When true, input content will be screened for potentially harmful content.","type":"boolean"},"preview_task_id":{"description":"The corresponding preview task id. The status of the given preview task must be SUCCEEDED.","type":"string"},"texture_image_url":{"description":"Provide a 2d image to guide the texturing process. Supports .jpg, .jpeg, .png formats or base64-encoded data URI.","type":"string"},"texture_prompt":{"description":"Provide an additional text prompt to guide the texturing process. Maximum 600 characters.","maxLength":600,"type":"string"},"texture_resolution":{"default":"2k","description":"Texture resolution of the generated textures. One of 2k, 4k or 8k. 4k and 8k require ai_model meshy-6, meshy-7 or latest.","type":"string"}},"required":["mode","preview_task_id"],"type":"object"},"MeshyTextTo3DRequest":{"discriminator":{"mapping":{"preview":"#/components/schemas/MeshyTextTo3DPreviewRequest","refine":"#/components/schemas/MeshyTextTo3DRefineRequest"},"propertyName":"mode"},"oneOf":[{"$ref":"#/components/schemas/MeshyTextTo3DPreviewRequest"},{"$ref":"#/components/schemas/MeshyTextTo3DRefineRequest"}]},"MeshyTextTo3DTask":{"properties":{"art_style":{"description":"The unmodified art_style that was used to create the preview task.","type":"string"},"created_at":{"description":"Timestamp of when the task was created, in milliseconds.","format":"int64","type":"integer"},"finished_at":{"description":"Timestamp of when the task was finished, in milliseconds. 0 if not finished.","format":"int64","type":"integer"},"id":{"description":"Unique identifier for the task.","type":"string"},"model_urls":{"$ref":"#/components/schemas/MeshyModelUrls"},"negative_prompt":{"description":"Deprecated field maintained for backward compatibility.","type":"string"},"preceding_tasks":{"description":"The count of preceding tasks. Only meaningful when status is PENDING.","type":"integer"},"progress":{"description":"Progress of the task. 0 if not started, 100 when succeeded.","maximum":100,"minimum":0,"type":"integer"},"prompt":{"description":"The unmodified prompt that was used to create the task.","type":"string"},"started_at":{"description":"Timestamp of when the task was started, in milliseconds. 0 if not started.","format":"int64","type":"integer"},"status":{"$ref":"#/components/schemas/MeshyTaskStatus"},"task_error":{"allOf":[{"$ref":"#/components/schemas/MeshyTaskError"}],"nullable":true},"texture_image_url":{"description":"Downloadable URL to the texture image that was used to guide the texturing process.","type":"string"},"texture_prompt":{"description":"Additional text prompt provided to guide the texturing process during the refine stage.","type":"string"},"texture_richness":{"description":"Deprecated field maintained for backward compatibility.","type":"string"},"texture_urls":{"description":"An array of texture URL objects that are generated from the task.","items":{"$ref":"#/components/schemas/MeshyTextureUrls"},"type":"array"},"thumbnail_url":{"description":"Downloadable URL to the thumbnail image of the model file.","type":"string"},"type":{"description":"Type of the Text to 3D task.","enum":["text-to-3d-preview","text-to-3d-refine"],"type":"string"},"video_url":{"description":"Deprecated field returning the downloadable URL to the preview video.","type":"string"}},"required":["id","status"],"type":"object"},"MeshyTextureUrls":{"description":"Texture URL object containing PBR maps.","properties":{"base_color":{"description":"Downloadable URL to the base color map image.","type":"string"},"metallic":{"description":"Downloadable URL to the metallic map image.","type":"string"},"normal":{"description":"Downloadable URL to the normal map image.","type":"string"},"roughness":{"description":"Downloadable URL to the roughness map image.","type":"string"}},"type":"object"},"MeshyTopology":{"default":"triangle","description":"Specify the topology of the generated model.","enum":["quad","triangle"],"type":"string"},"MetaCreateImageEditRequest":{"properties":{"images":{"description":"Images to edit. Each item must contain exactly one of image_url or file_id","items":{"properties":{"file_id":{"description":"The ID of a pre-uploaded input image file","type":"string"},"image_url":{"description":"The URL or base64 data URL of an input image","type":"string"}},"type":"object"},"minItems":1,"type":"array"},"model":{"description":"Model ID for image editing. Available value is muse-image-1.0","type":"string"},"moderation":{"description":"Moderation level for the safety pipeline, auto, low or none. none requires per-application access","type":"string"},"n":{"default":1,"description":"Number of edited images to generate. Range 1-10, default is 1","maximum":10,"minimum":1,"type":"integer"},"output_format":{"description":"Requested file type for the edited images, png, jpeg or webp. Default is webp","type":"string"},"prompt":{"description":"Text description of the edits to apply","type":"string"},"reasoning_strength":{"description":"How much reasoning the image generator applies before producing the edited image, low or high. Default is high","type":"string"},"response_format":{"description":"Format for the edited images, url or b64_json. Default is b64_json","type":"string"},"size":{"description":"Requested image shape as width x height (e.g. 1024x1024). The value sets the aspect ratio only; the image is produced at the generator's own fixed output resolution","type":"string"},"tool_enablement":{"$ref":"#/components/schemas/MetaImageToolEnablement"},"user":{"description":"A stable end-user identifier that helps detect and mitigate abuse","type":"string"}},"required":["model","prompt","images"],"type":"object"},"MetaCreateImageRequest":{"properties":{"model":{"description":"Model ID for image generation. Available value is muse-image-1.0","type":"string"},"moderation":{"description":"Moderation level for the safety pipeline, auto, low or none. none requires per-application access","type":"string"},"n":{"default":1,"description":"Number of images to generate. Range 1-10, default is 1","maximum":10,"minimum":1,"type":"integer"},"output_format":{"description":"Requested file type for the generated images, png, jpeg or webp. Default is webp","type":"string"},"prompt":{"description":"Text description of the images to generate","type":"string"},"reasoning_strength":{"description":"How much reasoning the image generator applies before producing the image, low or high. Default is high","type":"string"},"response_format":{"description":"Format for returned images, url or b64_json. Default is b64_json","type":"string"},"size":{"description":"Requested image shape as width x height (e.g. 1024x1024). The value sets the aspect ratio only; the image is produced at the generator's own fixed output resolution","type":"string"},"tool_enablement":{"$ref":"#/components/schemas/MetaImageToolEnablement"},"user":{"description":"A stable end-user identifier that helps detect and mitigate abuse","type":"string"}},"required":["model","prompt"],"type":"object"},"MetaImageToolEnablement":{"description":"Per-tool controls for the image generator's planner. Omit to keep the default (all tools available)","properties":{"enable_image_search":{"description":"Whether the image generator may search the web for visual references. false disables it","type":"boolean"},"enable_shell":{"description":"Whether the image generator may run code to build layouts and charts. false disables it","type":"boolean"},"enable_web_search":{"description":"Whether the image generator may search the web for facts. false disables it","type":"boolean"}},"type":"object"},"MetaImagesResponse":{"properties":{"background":{"description":"Background setting for the generated images. Always opaque","type":"string"},"created":{"description":"Unix timestamp (seconds) for when the images were created","type":"integer"},"data":{"description":"Array of generated images, one entry per image","items":{"properties":{"b64_json":{"description":"Base64-encoded image data. Returned when response_format is b64_json","type":"string"},"revised_prompt":{"description":"Revised prompt used for the image","type":"string"},"url":{"description":"Temporary signed URL of the generated image. Returned when response_format is url","type":"string"}},"type":"object"},"type":"array"},"output_format":{"description":"File type of the generated images","type":"string"},"usage":{"description":"Token usage for the request, reported for reference only","properties":{"input_tokens":{"description":"Number of input tokens","type":"integer"},"input_tokens_details":{"description":"Breakdown of input tokens by modality","properties":{"image_tokens":{"description":"Number of image tokens in the input","type":"integer"},"text_tokens":{"description":"Number of text tokens in the input","type":"integer"}},"type":"object"},"output_tokens":{"description":"Number of output tokens","type":"integer"},"total_tokens":{"description":"Total number of tokens","type":"integer"}},"type":"object"}},"required":["created","data"],"type":"object"},"MigrationAPIKey":{"description":"One of a customer's API keys, for cloud's migrate-on-miss to seed into\nworkspace_api_keys by hash. M2M/admin-only; carries the hash, never plaintext.\n","properties":{"description":{"type":"string"},"key_hash":{"type":"string"},"key_prefix":{"type":"string"},"name":{"type":"string"}},"required":["key_hash"],"type":"object"},"MinimaxBaseResponse":{"description":"Common response structure used by Minimax APIs","properties":{"status_code":{"description":"Status code. 0 indicates success, other values indicate errors.","type":"integer"},"status_msg":{"description":"Specific error details or success message.","type":"string"}},"required":["status_code","status_msg"],"type":"object"},"MinimaxFileRetrieveResponse":{"description":"Response from retrieving a Minimax file download URL.","properties":{"base_resp":{"$ref":"#/components/schemas/MinimaxBaseResponse"},"file":{"properties":{"bytes":{"description":"File size in bytes","type":"integer"},"created_at":{"description":"Unix timestamp when the file was created, in seconds","type":"integer"},"download_url":{"description":"The URL to download the video","type":"string"},"file_id":{"description":"Unique identifier for the file","type":"integer"},"filename":{"description":"The name of the file","type":"string"},"purpose":{"description":"The purpose of using the file","type":"string"}},"type":"object"}},"required":["file","base_resp"],"type":"object"},"MinimaxTaskResultResponse":{"description":"Response from querying a Minimax video generation task status.","properties":{"base_resp":{"$ref":"#/components/schemas/MinimaxBaseResponse"},"file_id":{"description":"After the task status changes to Success, this field returns the file ID corresponding to the generated video.","type":"string"},"status":{"description":"Task status: 'Queueing' (in queue), 'Preparing' (task is preparing), 'Processing' (generating), 'Success' (task completed successfully), or 'Fail' (task failed).","enum":["Queueing","Preparing","Processing","Success","Fail"],"type":"string"},"task_id":{"description":"The task ID being queried.","type":"string"}},"required":["task_id","status","base_resp"],"type":"object"},"MinimaxV2ContentItem":{"description":"A single content item in a Minimax V2 video generation request.","properties":{"audio_url":{"description":"Audio source. Required for audio_url items.","properties":{"url":{"description":"A publicly reachable URL, an mm_file://{file_id} reference, or a data URI.","type":"string"}},"type":"object"},"image_url":{"description":"Image source. Required for image_url items.","properties":{"url":{"description":"A publicly reachable URL, an mm_file://{file_id} reference, or a data URI.","type":"string"}},"type":"object"},"role":{"description":"Role of a media item. Options: first_frame, last_frame, reference_image, reference_video, reference_audio, base_video. Keyframe roles and reference_* roles are mutually exclusive within a request; base_video marks the source video of a video regeneration request.","type":"string"},"text":{"description":"The prompt text. Exactly one non-empty text item is required per request.","type":"string"},"type":{"description":"Content item type. Options: text, image_url, video_url, audio_url.","type":"string"},"video_url":{"description":"Video source. Required for video_url items.","properties":{"url":{"description":"A publicly reachable URL, an mm_file://{file_id} reference, or a data URI.","type":"string"}},"type":"object"}},"required":["type"],"type":"object"},"MinimaxV2H3ContextIRRequest":{"description":"Parameters for the Minimax V2 (Hailuo 03) H3-Context-IR proxy request.","properties":{"callback_url":{"description":"Optional. URL to receive task state changes after challenge verification.","type":"string"},"content":{"description":"Multimodal context describing the intended video. Must contain one non-empty text item; optionally add first_frame/last_frame images or reference_* media.","items":{"$ref":"#/components/schemas/MinimaxV2ContentItem"},"type":"array"},"duration":{"description":"Target video duration in seconds, 4 to 15.","type":"integer"},"model":{"description":"Required. ID of model. Options: MiniMax-H3","type":"string"},"ratio":{"description":"Aspect ratio of the target video. Options: adaptive (default), 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. Required and must not be adaptive for text-to-video; ignored (treated as adaptive) for first-frame or last-frame generation.","type":"string"}},"required":["model","content","duration"],"type":"object"},"MinimaxV2TaskResult":{"description":"A Minimax V2 video generation task.","properties":{"content":{"description":"Generated output; present when status is succeeded.","properties":{"prompt":{"description":"The enhanced video prompt produced by a succeeded h3_context_ir task.","type":"string"},"url":{"description":"Time-limited URL of the generated MP4. Query again for a refreshed URL.","type":"string"}},"type":"object"},"duration":{"description":"The duration of the generated video in seconds.","type":"number"},"error":{"additionalProperties":true,"description":"Error details when status is failed; carries code and message.","type":"object"},"id":{"description":"The task ID.","type":"string"},"model":{"description":"The model used for the task.","type":"string"},"ratio":{"description":"The actual aspect ratio of the generated video.","type":"string"},"resolution":{"description":"The resolution of the generated video.","type":"string"},"status":{"description":"Task status. Options: queued, running, succeeded, failed, cancelled, expired.","type":"string"},"task_type":{"description":"The type of the task.","type":"string"},"usage":{"description":"Usage recorded for the task.","properties":{"completion_tokens":{"type":"integer"},"input_image_count":{"type":"integer"},"input_seconds":{"type":"number"},"output_seconds":{"type":"number"},"prompt_tokens":{"type":"integer"},"total_seconds":{"type":"number"},"total_tokens":{"type":"integer"}},"type":"object"}},"type":"object"},"MinimaxV2TaskResultResponse":{"description":"Response from querying a Minimax V2 video generation task status.","properties":{"task":{"$ref":"#/components/schemas/MinimaxV2TaskResult"}},"type":"object"},"MinimaxV2VideoGenerationRequest":{"description":"Parameters for the Minimax V2 (Hailuo 03) video generation proxy request.","properties":{"aigc_watermark":{"description":"Whether to add an AIGC watermark to the output. Defaults to false.","type":"boolean"},"callback_url":{"description":"Optional. URL to receive task state changes after challenge verification.","type":"string"},"content":{"description":"Content items driving the generation. Must contain one non-empty text item; optionally add first_frame/last_frame images or reference_* media.","items":{"$ref":"#/components/schemas/MinimaxV2ContentItem"},"type":"array"},"duration":{"description":"Video length in seconds, 5 to 15.","type":"integer"},"model":{"description":"Required. ID of model. Options: MiniMax-H3","type":"string"},"ratio":{"description":"Aspect ratio. Options: adaptive (default), 21:9, 16:9, 4:3, 1:1, 3:4, 9:16. Ignored (treated as adaptive) for first-frame or last-frame generation.","type":"string"},"resolution":{"description":"Video resolution. Options: 2K, 768P.","type":"string"},"seed":{"description":"Random seed in [-1, 2^32 - 1]; omitted or -1 is random.","format":"int64","type":"integer"}},"required":["model","content","resolution","duration"],"type":"object"},"MinimaxV2VideoGenerationResponse":{"description":"Response from the Minimax V2 video generation API.","properties":{"task_id":{"description":"The task ID for the asynchronous video generation task.","type":"string"}},"required":["task_id"],"type":"object"},"MinimaxV2VideoRegenerationRequest":{"description":"Parameters for the Minimax V2 (Hailuo 03) video regeneration proxy request. Provide exactly one of source_task_id or content (with a base_video item).","properties":{"aigc_watermark":{"description":"Whether to add an AIGC watermark to the output. Defaults to false.","type":"boolean"},"callback_url":{"description":"Optional. URL to receive task state changes after challenge verification.","type":"string"},"content":{"description":"The exact inputs used to generate the 768P source video plus exactly one video_url item with role base_video. The text must be the final prompt actually sent to the model.","items":{"$ref":"#/components/schemas/MinimaxV2ContentItem"},"type":"array"},"model":{"description":"Required. ID of model. Options: MiniMax-H3","type":"string"},"resolution":{"description":"Target resolution for the regenerated video. Options: 2K.","type":"string"},"source_task_id":{"description":"Task ID of an existing succeeded video generation task whose output is regenerated. Requires whitelist access; the task must be owned by the account, succeeded, and created within 7 days.","type":"string"}},"required":["model","resolution"],"type":"object"},"MinimaxVideoGenerationRequest":{"description":"Parameters for the Minimax video generation proxy request.","properties":{"callback_url":{"description":"Optional. URL to receive real-time status updates about the video generation task.","type":"string"},"duration":{"default":6,"description":"Video length in seconds. Only available for MiniMax-Hailuo-02","enum":[6,10],"type":"integer"},"first_frame_image":{"description":"URL or base64 encoding of the first frame image. Required when model is I2V-01, I2V-01-Director, or I2V-01-live.","type":"string"},"model":{"description":"Required. ID of model. Options: MiniMax-Hailuo-02, T2V-01-Director, I2V-01-Director, S2V-01, I2V-01, I2V-01-live, T2V-01","enum":["MiniMax-Hailuo-02","T2V-01-Director","I2V-01-Director","S2V-01","I2V-01","I2V-01-live","T2V-01"],"type":"string"},"prompt":{"description":"Description of the video. Should be less than 2000 characters. Supports camera movement instructions in [brackets].","maxLength":2000,"type":"string"},"prompt_optimizer":{"default":true,"description":"If true (default), the model will automatically optimize the prompt. Set to false for more precise control.","type":"boolean"},"resolution":{"default":"768P","description":"Video resolution. Only available for MiniMax-Hailuo-02.","enum":["768P","1080P"],"type":"string"},"subject_reference":{"description":"Only available when model is S2V-01. The model will generate a video based on the subject uploaded through this parameter.","items":{"properties":{"image":{"description":"URL or base64 encoding of the subject reference image.","type":"string"},"mask":{"description":"URL or base64 encoding of the mask for the subject reference image.","type":"string"}},"type":"object"},"type":"array"}},"required":["model"],"type":"object"},"MinimaxVideoGenerationResponse":{"description":"Response from the Minimax video generation API.","properties":{"base_resp":{"$ref":"#/components/schemas/MinimaxBaseResponse"},"task_id":{"description":"The task ID for the asynchronous video generation task.","type":"string"}},"required":["task_id","base_resp"],"type":"object"},"Modality":{"description":"Type of input or output content modality.","enum":["MODALITY_UNSPECIFIED","TEXT","IMAGE","VIDEO","AUDIO","DOCUMENT"],"type":"string"},"ModalityTokenCount":{"properties":{"modality":{"$ref":"#/components/schemas/Modality"},"tokenCount":{"description":"Number of tokens for the given modality.","type":"integer"}},"type":"object"},"ModelClassification":{"properties":{"cost_cents":{"description":"Representative per-call rate-card cost in USD cents; null if unknown.","format":"double","nullable":true,"type":"number"},"effective_tier":{"description":"Tier the gate assigns; empty string means not capped.","type":"string"},"model":{"type":"string"},"override":{"description":"Raw override tier ('expensive' | 'exempt'); null when unset.","nullable":true,"type":"string"},"reason":{"description":"One of model_override, cost_ladder, exempt, model_default.","type":"string"}},"required":["model","effective_tier","reason"],"type":"object"},"ModelResponseProperties":{"description":"Common properties for model responses","properties":{"instructions":{"description":"Instructions for the model on how to generate the response","nullable":true,"type":"string"},"max_output_tokens":{"description":"Maximum number of tokens to generate","type":"integer"},"model":{"description":"The model used to generate the response","type":"string"},"temperature":{"default":1,"description":"Controls randomness in the response","maximum":2,"minimum":0,"type":"number"},"top_p":{"default":1,"description":"Controls diversity of the response via nucleus sampling","maximum":1,"minimum":0,"type":"number"},"truncation":{"default":"disabled","description":"How to handle truncation of the response","enum":["disabled","auto"],"type":"string"}},"type":"object"},"MoonvalleyImageToVideoRequest":{"allOf":[{"$ref":"#/components/schemas/MoonvalleyTextToVideoRequest"},{"properties":{"keyframes":{"additionalProperties":{"properties":{"image_url":{"type":"string"}},"type":"object"},"type":"object"}},"type":"object"}]},"MoonvalleyPromptResponse":{"properties":{"error":{"type":"object"},"frame_conditioning":{"type":"object"},"id":{"type":"string"},"inference_params":{"type":"object"},"meta":{"type":"object"},"model_params":{"type":"object"},"output_url":{"type":"string"},"prompt_text":{"type":"string"},"status":{"type":"string"}},"type":"object"},"MoonvalleyResizeVideoRequest":{"allOf":[{"$ref":"#/components/schemas/MoonvalleyVideoToVideoRequest"},{"properties":{"frame_position":{"items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"frame_resolution":{"items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"},"scale":{"items":{"type":"integer"},"maxItems":2,"minItems":2,"type":"array"}},"type":"object"}]},"MoonvalleyTextToImageRequest":{"properties":{"image_url":{"type":"string"},"inference_params":{"$ref":"#/components/schemas/MoonvalleyTextToVideoInferenceParams"},"prompt_text":{"type":"string"},"webhook_url":{"type":"string"}},"type":"object"},"MoonvalleyTextToVideoInferenceParams":{"properties":{"guidance_scale":{"default":10,"description":"Guidance scale for generation control","format":"float","type":"number"},"height":{"default":1080,"description":"Height of the generated video in pixels","type":"integer"},"negative_prompt":{"description":"Negative prompt text","type":"string"},"seed":{"default":9,"description":"Random seed for generation (default: random)","type":"integer"},"steps":{"default":80,"description":"Number of denoising steps","type":"integer"},"use_negative_prompts":{"default":true,"description":"Whether to use negative prompts","type":"boolean"},"width":{"default":1920,"description":"Width of the generated video in pixels","type":"integer"}},"type":"object"},"MoonvalleyTextToVideoRequest":{"properties":{"image_url":{"type":"string"},"inference_params":{"$ref":"#/components/schemas/MoonvalleyTextToVideoInferenceParams"},"prompt_text":{"type":"string"},"webhook_url":{"type":"string"}},"type":"object"},"MoonvalleyUploadFileRequest":{"properties":{"file":{"format":"binary","type":"string"}},"type":"object"},"MoonvalleyUploadFileResponse":{"properties":{"access_url":{"type":"string"}},"type":"object"},"MoonvalleyVideoToVideoInferenceParams":{"properties":{"control_params":{"properties":{"motion_intensity":{"default":6,"description":"Intensity of motion control","format":"int32","type":"integer"}},"type":"object"},"guidance_scale":{"default":10,"description":"Guidance scale for generation control","format":"float","type":"number"},"negative_prompt":{"description":"Negative prompt text","type":"string"},"seed":{"default":9,"description":"Random seed for generation (default: random)","type":"integer"},"steps":{"default":80,"description":"Number of denoising steps","type":"integer"},"use_negative_prompts":{"default":true,"description":"Whether to use negative prompts","type":"boolean"}},"type":"object"},"MoonvalleyVideoToVideoRequest":{"properties":{"control_type":{"description":"Supported types for video control","enum":["motion_control","pose_control"],"type":"string"},"image_url":{"description":"Url to control image","type":"string"},"inference_params":{"$ref":"#/components/schemas/MoonvalleyVideoToVideoInferenceParams"},"prompt_text":{"description":"Describes the video to generate","type":"string"},"video_url":{"description":"Url to control video","type":"string"},"webhook_url":{"description":"Optional webhook URL for notifications","type":"string"}},"required":["prompt_text","video_url","control_type"],"type":"object"},"Node":{"properties":{"author":{"type":"string"},"banner_url":{"description":"URL to the node's banner.","type":"string"},"category":{"deprecated":true,"description":"DEPRECATED: The category of the node. Use 'tags' field instead. This field will be removed in a future version.","type":"string"},"created_at":{"description":"The date and time when the node was created","format":"date-time","type":"string"},"description":{"type":"string"},"downloads":{"description":"The number of downloads of the node.","type":"integer"},"github_stars":{"description":"Number of stars on the GitHub repository.","type":"integer"},"icon":{"description":"URL to the node's icon.","type":"string"},"id":{"description":"The unique identifier of the node.","type":"string"},"latest_version":{"$ref":"#/components/schemas/NodeVersion"},"license":{"description":"The path to the LICENSE file in the node's repository.","type":"string"},"name":{"description":"The display name of the node.","type":"string"},"preempted_comfy_node_names":{"description":"A list of Comfy node names that are preempted by this node.","items":{"type":"string"},"type":"array"},"publisher":{"$ref":"#/components/schemas/Publisher"},"rating":{"description":"The average rating of the node.","type":"number"},"repository":{"description":"URL to the node's repository.","type":"string"},"search_ranking":{"description":"A numerical value representing the node's search ranking, used for sorting search results.","type":"integer"},"status":{"$ref":"#/components/schemas/NodeStatus"},"status_detail":{"description":"The status detail of the node.","type":"string"},"supported_accelerators":{"description":"List of accelerators (e.g. CUDA, DirectML, ROCm) that this node supports","items":{"type":"string"},"type":"array"},"supported_comfyui_frontend_version":{"description":"Supported versions of ComfyUI frontend","type":"string"},"supported_comfyui_version":{"description":"Supported versions of ComfyUI","type":"string"},"supported_os":{"description":"List of operating systems that this node supports","items":{"type":"string"},"type":"array"},"tags":{"items":{"type":"string"},"type":"array"},"tags_admin":{"description":"Admin-only tags for security warnings and admin metadata","items":{"type":"string"},"type":"array"},"translations":{"additionalProperties":{"additionalProperties":true,"type":"object"},"description":"Translations of node metadata in different languages.","type":"object"}},"type":"object"},"NodeStatus":{"enum":["NodeStatusActive","NodeStatusDeleted","NodeStatusBanned"],"type":"string"},"NodeVersion":{"properties":{"changelog":{"description":"Summary of changes made in this version","type":"string"},"comfy_node_extract_status":{"description":"The status of comfy node extraction process.","type":"string"},"createdAt":{"description":"The date and time the version was created.","format":"date-time","type":"string"},"dependencies":{"description":"A list of pip dependencies required by the node.","items":{"type":"string"},"type":"array"},"deprecated":{"description":"Indicates if this version is deprecated.","type":"boolean"},"downloadUrl":{"description":"[Output Only] URL to download this version of the node","type":"string"},"id":{"type":"string"},"node_id":{"description":"The unique identifier of the node.","type":"string"},"status":{"$ref":"#/components/schemas/NodeVersionStatus"},"status_reason":{"type":"string"},"supported_accelerators":{"description":"List of accelerators (e.g. CUDA, DirectML, ROCm) that this node supports","items":{"type":"string"},"type":"array"},"supported_comfyui_frontend_version":{"description":"Supported versions of ComfyUI frontend","type":"string"},"supported_comfyui_version":{"description":"Supported versions of ComfyUI","type":"string"},"supported_os":{"description":"List of operating systems that this node supports","items":{"type":"string"},"type":"array"},"tags":{"items":{"type":"string"},"type":"array"},"tags_admin":{"description":"Admin-only tags for security warnings and admin metadata","items":{"type":"string"},"type":"array"},"version":{"description":"The version identifier, following semantic versioning. Must be unique for the node.","type":"string"}},"type":"object"},"NodeVersionIdentifier":{"properties":{"node_id":{"description":"The unique identifier of the node","type":"string"},"version":{"description":"The version of the node","type":"string"}},"required":["node_id","version"],"type":"object"},"NodeVersionStatus":{"enum":["NodeVersionStatusActive","NodeVersionStatusDeleted","NodeVersionStatusBanned","NodeVersionStatusPending","NodeVersionStatusFlagged"],"type":"string"},"NodeVersionUpdateRequest":{"properties":{"changelog":{"description":"The changelog describing the version changes.","type":"string"},"deprecated":{"description":"Whether the version is deprecated.","type":"boolean"}},"type":"object"},"OpenAICreateResponse":{"allOf":[{"$ref":"#/components/schemas/CreateModelResponseProperties"},{"$ref":"#/components/schemas/ResponseProperties"},{"properties":{"include":{"description":"Specify additional output data to include in the model response. Currently\nsupported values are:\n- `file_search_call.results`: Include the search results of\n the file search tool call.\n- `message.input_image.image_url`: Include image urls from the input message.\n- `computer_call_output.output.image_url`: Include image urls from the computer call output.\n","items":{"$ref":"#/components/schemas/Includable"},"nullable":true,"type":"array"},"input":{"description":"Text, image, or file inputs to the model, used to generate a response.\n\nLearn more:\n- [Text inputs and outputs](/docs/guides/text)\n- [Image inputs](/docs/guides/images)\n- [File inputs](/docs/guides/pdf-files)\n- [Conversation state](/docs/guides/conversation-state)\n- [Function calling](/docs/guides/function-calling)\n","oneOf":[{"description":"A text input to the model, equivalent to a text input with the\n`user` role.\n","title":"Text input","type":"string"},{"description":"A list of one or many input items to the model, containing\ndifferent content types.\n","items":{"$ref":"#/components/schemas/InputItem"},"title":"Input item list","type":"array"}]},"parallel_tool_calls":{"default":true,"description":"Whether to allow the model to run tool calls in parallel.\n","nullable":true,"type":"boolean"},"store":{"default":true,"description":"Whether to store the generated model response for later retrieval via\nAPI.\n","nullable":true,"type":"boolean"},"stream":{"default":false,"description":"If set to true, the model response data will be streamed to the client\nas it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\nSee the [Streaming section below](/docs/api-reference/responses-streaming)\nfor more information.\n","nullable":true,"type":"boolean"},"usage":{"$ref":"#/components/schemas/ResponseUsage"}},"required":["model","input"],"type":"object"}]},"OpenAIImageEditRequest":{"properties":{"background":{"description":"Background transparency","example":"opaque","type":"string"},"model":{"description":"The model to use for image editing (e.g., gpt-image-1, gpt-image-1.5, gpt-image-2)","example":"gpt-image-2","type":"string"},"moderation":{"description":"Content moderation setting","enum":["low","auto"],"example":"auto","type":"string"},"n":{"description":"The number of images to generate","example":1,"type":"integer"},"output_compression":{"description":"Compression level for JPEG or WebP (0-100)","example":100,"type":"integer"},"output_format":{"description":"Format of the output image","enum":["png","webp","jpeg"],"example":"png","type":"string"},"prompt":{"description":"A text description of the desired edit","example":"Give the rocketship rainbow coloring","type":"string"},"quality":{"description":"The quality of the edited image","example":"low","type":"string"},"size":{"description":"Size of the output image","example":"1024x1024","type":"string"},"user":{"description":"A unique identifier for end-user monitoring","example":"user-1234","type":"string"}},"required":["model","prompt"],"type":"object"},"OpenAIImageGenerationRequest":{"properties":{"background":{"description":"Background transparency","enum":["transparent","opaque"],"example":"opaque","type":"string"},"model":{"description":"The model to use for image generation (e.g., gpt-image-1, gpt-image-1.5, gpt-image-2)","example":"gpt-image-2","type":"string"},"moderation":{"description":"Content moderation setting","enum":["low","auto"],"example":"auto","type":"string"},"n":{"description":"The number of images to generate (1-10).","example":1,"type":"integer"},"output_compression":{"description":"Compression level for JPEG or WebP (0-100)","example":100,"type":"integer"},"output_format":{"description":"Format of the output image","enum":["png","webp","jpeg"],"example":"png","type":"string"},"prompt":{"description":"A text description of the desired image","example":"Draw a rocket in front of a blackhole in deep space","type":"string"},"quality":{"description":"The quality of the generated image","enum":["low","medium","high","standard","hd"],"example":"high","type":"string"},"response_format":{"description":"Response format of image data","enum":["url","b64_json"],"example":"b64_json","type":"string"},"size":{"description":"Size of the image (e.g., 1024x1024, 1536x1024, auto)","example":"1024x1536","type":"string"},"style":{"deprecated":true,"description":"Style of the image. Unused by the gpt-image models this operation admits; it was a dall-e-3-only parameter and those ids were retired when OpenAI shut them down on 2026-05-12.","enum":["vivid","natural"],"example":"vivid","type":"string","x-deprecated-reason":"dall-e-3-only; those model ids were retired on 2026-05-12 and no model this operation still admits reads it."},"user":{"description":"A unique identifier for end-user monitoring","example":"user-1234","type":"string"}},"required":["prompt"],"type":"object"},"OpenAIImageGenerationResponse":{"properties":{"data":{"items":{"properties":{"b64_json":{"description":"Base64 encoded image data","type":"string"},"revised_prompt":{"description":"Revised prompt","type":"string"},"url":{"description":"URL of the image","type":"string"}},"type":"object"},"type":"array"},"usage":{"properties":{"input_tokens":{"type":"integer"},"input_tokens_details":{"properties":{"image_tokens":{"type":"integer"},"text_tokens":{"type":"integer"}},"type":"object"},"output_tokens":{"type":"integer"},"output_tokens_details":{"properties":{"image_tokens":{"type":"integer"},"text_tokens":{"type":"integer"}},"type":"object"},"total_tokens":{"type":"integer"}},"type":"object"}},"type":"object"},"OpenAIModels":{"enum":["gpt-4","gpt-4-0314","gpt-4-0613","gpt-4-32k","gpt-4-32k-0314","gpt-4-32k-0613","gpt-4-0125-preview","gpt-4-turbo","gpt-4-turbo-2024-04-09","gpt-4-turbo-preview","gpt-4-1106-preview","gpt-4-vision-preview","gpt-3.5-turbo","gpt-3.5-turbo-16k","gpt-3.5-turbo-0301","gpt-3.5-turbo-0613","gpt-3.5-turbo-1106","gpt-3.5-turbo-0125","gpt-3.5-turbo-16k-0613","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","gpt-4.1-2025-04-14","gpt-4.1-mini-2025-04-14","gpt-4.1-nano-2025-04-14","o1","o1-mini","o1-preview","o1-pro","o1-2024-12-17","o1-preview-2024-09-12","o1-mini-2024-09-12","o1-pro-2025-03-19","o3","o3-mini","o3-2025-04-16","o3-mini-2025-01-31","o4-mini","o4-mini-2025-04-16","gpt-4o","gpt-4o-mini","gpt-4o-2024-11-20","gpt-4o-2024-08-06","gpt-4o-2024-05-13","gpt-4o-mini-2024-07-18","gpt-4o-audio-preview","gpt-4o-audio-preview-2024-10-01","gpt-4o-audio-preview-2024-12-17","gpt-4o-mini-audio-preview","gpt-4o-mini-audio-preview-2024-12-17","gpt-4o-search-preview","gpt-4o-mini-search-preview","gpt-4o-search-preview-2025-03-11","gpt-4o-mini-search-preview-2025-03-11","computer-use-preview","computer-use-preview-2025-03-11","gpt-5","gpt-5-mini","gpt-5-nano","gpt-5.5","gpt-5.5-pro","gpt-5.6","gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","chatgpt-4o-latest"],"type":"string"},"OpenAIResponse":{"allOf":[{"$ref":"#/components/schemas/ModelResponseProperties"},{"$ref":"#/components/schemas/ResponseProperties"},{"properties":{"background":{"description":"Whether the model response runs in the background.","type":"boolean"},"billing":{"description":"Billing information for the response.","properties":{"payer":{"description":"The party responsible for paying for the response.","type":"string"}},"type":"object"},"completed_at":{"description":"Unix timestamp (in seconds) of when this Response was completed. Only present when the status is `completed`.","nullable":true,"type":"number"},"created_at":{"description":"Unix timestamp (in seconds) of when this Response was created.","type":"number"},"error":{"allOf":[{"$ref":"#/components/schemas/ResponseError"}],"nullable":true},"frequency_penalty":{"description":"Penalizes new tokens based on their existing frequency in the text so far.","type":"number"},"id":{"description":"Unique identifier for this Response.","type":"string"},"incomplete_details":{"description":"Details about why the response is incomplete.\n","nullable":true,"properties":{"reason":{"description":"The reason why the response is incomplete.","enum":["max_output_tokens","content_filter"],"type":"string"}},"type":"object"},"max_tool_calls":{"description":"The maximum number of total calls to built-in tools that can be processed in a response.","nullable":true,"type":"integer"},"metadata":{"additionalProperties":{"type":"string"},"description":"Set of key-value pairs that can be attached to the response.","nullable":true,"type":"object"},"moderation":{"additionalProperties":true,"description":"Moderation results for the response input and output, if moderated completions were requested.","nullable":true,"type":"object"},"object":{"description":"The object type of this resource - always set to `response`.","enum":["response"],"type":"string","x-stainless-const":true},"output":{"description":"An array of content items generated by the model.\n\n- The length and order of items in the `output` array is dependent\n on the model's response.\n- Rather than accessing the first item in the `output` array and\n assuming it's an `assistant` message with the content generated by\n the model, you might consider using the `output_text` property where\n supported in SDKs.\n","items":{"$ref":"#/components/schemas/OutputItem"},"type":"array"},"output_text":{"description":"SDK-only convenience property that contains the aggregated text output\nfrom all `output_text` items in the `output` array, if any are present.\nSupported in the Python and JavaScript SDKs.\n","nullable":true,"type":"string","x-oaiSupportedSDKs":["python","javascript"]},"parallel_tool_calls":{"default":true,"description":"Whether to allow the model to run tool calls in parallel.\n","type":"boolean"},"presence_penalty":{"description":"Penalizes new tokens based on whether they appear in the text so far.","type":"number"},"prompt_cache_key":{"description":"Used by OpenAI to cache responses for similar requests to optimize cache hit rates. Replaces the `user` field.","nullable":true,"type":"string"},"prompt_cache_retention":{"description":"The retention policy for the prompt cache, e.g. `in_memory` or `24h`.","nullable":true,"type":"string"},"safety_identifier":{"description":"A stable identifier used to help detect users of your application that may be violating OpenAI's usage policies.","nullable":true,"type":"string"},"service_tier":{"description":"The processing tier used to serve the request, e.g. `auto`, `default`, `flex`, `scale`, or `priority`.","nullable":true,"type":"string"},"status":{"description":"The status of the response generation. One of `completed`, `failed`, `in_progress`, `cancelled`, `queued`, or `incomplete`.","enum":["completed","failed","in_progress","cancelled","queued","incomplete"],"type":"string"},"store":{"description":"Whether the response is stored for later retrieval via the API.","type":"boolean"},"tool_usage":{"description":"Token and request usage broken down by built-in tool.","properties":{"image_gen":{"description":"Image generation tool token usage.","properties":{"input_tokens":{"type":"integer"},"input_tokens_details":{"properties":{"image_tokens":{"type":"integer"},"text_tokens":{"type":"integer"}},"type":"object"},"output_tokens":{"type":"integer"},"output_tokens_details":{"properties":{"image_tokens":{"type":"integer"},"text_tokens":{"type":"integer"}},"type":"object"},"total_tokens":{"type":"integer"}},"type":"object"},"web_search":{"description":"Web search tool usage.","properties":{"num_requests":{"type":"integer"}},"type":"object"}},"type":"object"},"top_logprobs":{"description":"The maximum number of most likely tokens to return at each token position, each with an associated log probability.","nullable":true,"type":"integer"},"usage":{"$ref":"#/components/schemas/ResponseUsage"},"user":{"description":"Deprecated identifier for the end-user. Replaced by `safety_identifier` and `prompt_cache_key`.","nullable":true,"type":"string"}},"type":"object"}],"description":"A response from the model","type":"object"},"OpenAIResponseStreamEvent":{"anyOf":[{"$ref":"#/components/schemas/ResponseCreatedEvent"},{"$ref":"#/components/schemas/ResponseInProgressEvent"},{"$ref":"#/components/schemas/ResponseCompletedEvent"},{"$ref":"#/components/schemas/ResponseFailedEvent"},{"$ref":"#/components/schemas/ResponseIncompleteEvent"},{"$ref":"#/components/schemas/ResponseOutputItemAddedEvent"},{"$ref":"#/components/schemas/ResponseOutputItemDoneEvent"},{"$ref":"#/components/schemas/ResponseContentPartAddedEvent"},{"$ref":"#/components/schemas/ResponseContentPartDoneEvent"},{"$ref":"#/components/schemas/ResponseErrorEvent"}],"description":"Events that can be emitted during response streaming","type":"object"},"OpenAIVideoCreateRequest":{"properties":{"input_reference":{"description":"Optional image or video reference that guides generation","format":"binary","type":"string"},"model":{"default":"sora-2","description":"The video generation model to use","enum":["sora-2","sora-2-pro"],"type":"string"},"prompt":{"description":"Text prompt that describes the video to generate","example":"A calico cat playing a piano on stage","type":"string"},"seconds":{"default":"4","description":"Clip duration in seconds","enum":["4","8","12"],"type":"string"},"size":{"default":"720x1280","description":"Output resolution formatted as width x height","enum":["720x1280","1280x720","1024x1792","1792x1024"],"type":"string"}},"required":["prompt"],"type":"object"},"OpenAIVideoJob":{"properties":{"completed_at":{"description":"Unix timestamp (seconds) for when the job completed, if finished","example":1712698600,"type":"integer"},"created_at":{"description":"Unix timestamp (seconds) for when the job was created","example":1712697600,"type":"integer"},"error":{"description":"Error payload that explains why generation failed, if applicable","properties":{"code":{"description":"Error code","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"expires_at":{"description":"Unix timestamp (seconds) for when the downloadable assets expire, if set","example":1712784000,"type":"integer"},"id":{"description":"Unique identifier for the video job","example":"video_123","type":"string"},"model":{"description":"The video generation model that produced the job","example":"sora-2","type":"string"},"object":{"description":"The object type, which is always video","enum":["video"],"example":"video","type":"string"},"progress":{"description":"Approximate completion percentage for the generation task","example":0,"type":"integer"},"quality":{"description":"Quality of the generated video","example":"standard","type":"string"},"remixed_from_video_id":{"description":"Identifier of the source video if this video is a remix","example":"video_456","type":"string"},"seconds":{"description":"Duration of the generated clip in seconds","example":"8","type":"string"},"size":{"description":"The resolution of the generated video","example":"1024x1808","type":"string"},"status":{"description":"Current lifecycle status of the video job","enum":["queued","in_progress","completed","failed"],"example":"queued","type":"string"}},"type":"object"},"OpenRouterAnthropicCacheControlDirective":{"description":"Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.","properties":{"ttl":{"$ref":"#/components/schemas/OpenRouterAnthropicCacheControlTtl"},"type":{"$ref":"#/components/schemas/OpenRouterAnthropicCacheControlDirectiveType"}},"required":["type"],"title":"AnthropicCacheControlDirective","type":"object"},"OpenRouterAnthropicCacheControlDirectiveType":{"enum":["ephemeral"],"title":"AnthropicCacheControlDirectiveType","type":"string"},"OpenRouterAnthropicCacheControlTtl":{"enum":["5m","1h"],"title":"AnthropicCacheControlTtl","type":"string"},"OpenRouterBigNumberUnion":{"description":"Price per million prompt tokens","title":"BigNumberUnion","type":"string"},"OpenRouterChatAssistantImages":{"description":"Generated images from image generation models","items":{"$ref":"#/components/schemas/OpenRouterChatAssistantImagesItems"},"title":"ChatAssistantImages","type":"array"},"OpenRouterChatAssistantImagesItems":{"properties":{"image_url":{"$ref":"#/components/schemas/OpenRouterChatAssistantImagesItemsImageUrl"}},"required":["image_url"],"title":"ChatAssistantImagesItems","type":"object"},"OpenRouterChatAssistantImagesItemsImageUrl":{"properties":{"url":{"description":"URL or base64-encoded data of the generated image","type":"string"}},"required":["url"],"title":"ChatAssistantImagesItemsImageUrl","type":"object"},"OpenRouterChatAssistantMessage":{"description":"Assistant message for requests and responses","properties":{"audio":{"$ref":"#/components/schemas/OpenRouterChatAudioOutput"},"content":{"$ref":"#/components/schemas/OpenRouterChatMessagesDiscriminatorMappingAssistantContent"},"images":{"$ref":"#/components/schemas/OpenRouterChatAssistantImages"},"name":{"description":"Optional name for the assistant","type":"string"},"reasoning":{"description":"Reasoning output","nullable":true,"type":"string"},"reasoning_details":{"$ref":"#/components/schemas/OpenRouterChatReasoningDetails"},"refusal":{"description":"Refusal message if content was refused","nullable":true,"type":"string"},"tool_calls":{"description":"Tool calls made by the assistant","items":{"$ref":"#/components/schemas/OpenRouterChatToolCall"},"type":"array"}},"title":"ChatAssistantMessage","type":"object"},"OpenRouterChatAudioOutput":{"description":"Audio output data or reference","properties":{"data":{"description":"Base64 encoded audio data","type":"string"},"expires_at":{"description":"Audio expiration timestamp","type":"integer"},"id":{"description":"Audio output identifier","type":"string"},"transcript":{"description":"Audio transcript","type":"string"}},"title":"ChatAudioOutput","type":"object"},"OpenRouterChatChoice":{"description":"Chat completion choice","properties":{"finish_reason":{"$ref":"#/components/schemas/OpenRouterChatFinishReasonEnum"},"index":{"description":"Choice index","type":"integer"},"logprobs":{"$ref":"#/components/schemas/OpenRouterChatTokenLogprobs"},"message":{"$ref":"#/components/schemas/OpenRouterChatAssistantMessage"}},"required":["finish_reason","index","message"],"title":"ChatChoice","type":"object"},"OpenRouterChatContentCacheControl":{"description":"Cache control for the content part","properties":{"ttl":{"$ref":"#/components/schemas/OpenRouterAnthropicCacheControlTtl"},"type":{"$ref":"#/components/schemas/OpenRouterChatContentCacheControlType"}},"required":["type"],"title":"ChatContentCacheControl","type":"object"},"OpenRouterChatContentCacheControlType":{"enum":["ephemeral"],"title":"ChatContentCacheControlType","type":"string"},"OpenRouterChatContentItems":{"description":"Content part for chat completion messages","oneOf":[{"description":"File content part for document processing","properties":{"file":{"$ref":"#/components/schemas/OpenRouterChatContentItemsDiscriminatorMappingFileFile"},"type":{"description":"Discriminator value: file","enum":["file"],"type":"string"}},"required":["type","file"],"type":"object"},{"description":"Image content part for vision models","properties":{"image_url":{"$ref":"#/components/schemas/OpenRouterChatContentItemsDiscriminatorMappingImageUrlImageUrl"},"type":{"description":"Discriminator value: image_url","enum":["image_url"],"type":"string"}},"required":["type","image_url"],"type":"object"},{"description":"Audio input content part. Supported audio formats vary by provider.","properties":{"input_audio":{"$ref":"#/components/schemas/OpenRouterChatContentItemsDiscriminatorMappingInputAudioInputAudio"},"type":{"description":"Discriminator value: input_audio","enum":["input_audio"],"type":"string"}},"required":["type","input_audio"],"type":"object"},{"description":"Video input content part (legacy format - deprecated)","properties":{"type":{"$ref":"#/components/schemas/OpenRouterLegacyChatContentVideoType"},"video_url":{"$ref":"#/components/schemas/OpenRouterChatContentVideoInput"}},"required":["type","video_url"],"type":"object"},{"description":"Text content part","properties":{"cache_control":{"$ref":"#/components/schemas/OpenRouterChatContentCacheControl"},"text":{"type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterChatContentTextType"}},"required":["type","text"],"type":"object"},{"description":"Video input content part","properties":{"type":{"$ref":"#/components/schemas/OpenRouterChatContentVideoType"},"video_url":{"$ref":"#/components/schemas/OpenRouterChatContentVideoInput"}},"required":["type","video_url"],"type":"object"}],"title":"ChatContentItems"},"OpenRouterChatContentItemsDiscriminatorMappingFileFile":{"properties":{"file_data":{"description":"File content as base64 data URL or URL","type":"string"},"file_id":{"description":"File ID for previously uploaded files","type":"string"},"filename":{"description":"Original filename","type":"string"}},"title":"ChatContentItemsDiscriminatorMappingFileFile","type":"object"},"OpenRouterChatContentItemsDiscriminatorMappingImageUrlImageUrl":{"properties":{"detail":{"$ref":"#/components/schemas/OpenRouterChatContentItemsDiscriminatorMappingImageUrlImageUrlDetail"},"url":{"description":"URL of the image (data: URLs supported)","type":"string"}},"required":["url"],"title":"ChatContentItemsDiscriminatorMappingImageUrlImageUrl","type":"object"},"OpenRouterChatContentItemsDiscriminatorMappingImageUrlImageUrlDetail":{"description":"Image detail level for vision models","enum":["auto","low","high"],"title":"ChatContentItemsDiscriminatorMappingImageUrlImageUrlDetail","type":"string"},"OpenRouterChatContentItemsDiscriminatorMappingInputAudioInputAudio":{"properties":{"data":{"description":"Base64 encoded audio data","type":"string"},"format":{"description":"Audio format (e.g., wav, mp3, flac, m4a, ogg, aiff, aac, pcm16, pcm24). Supported formats vary by provider.","type":"string"}},"required":["data","format"],"title":"ChatContentItemsDiscriminatorMappingInputAudioInputAudio","type":"object"},"OpenRouterChatContentText":{"description":"Text content part","properties":{"cache_control":{"$ref":"#/components/schemas/OpenRouterChatContentCacheControl"},"text":{"type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterChatContentTextType"}},"required":["text","type"],"title":"ChatContentText","type":"object"},"OpenRouterChatContentTextType":{"enum":["text"],"title":"ChatContentTextType","type":"string"},"OpenRouterChatContentVideoInput":{"description":"Video input object","properties":{"url":{"description":"URL of the video (data: URLs supported)","type":"string"}},"required":["url"],"title":"ChatContentVideoInput","type":"object"},"OpenRouterChatContentVideoType":{"enum":["video_url"],"title":"ChatContentVideoType","type":"string"},"OpenRouterChatDebugOptions":{"description":"Debug options for inspecting request transformations (streaming only)","properties":{"echo_upstream_body":{"description":"If true, includes the transformed upstream request body in a debug chunk at the start of the stream. Only works with streaming mode.","type":"boolean"}},"title":"ChatDebugOptions","type":"object"},"OpenRouterChatFinishReasonEnum":{"enum":["tool_calls","stop","length","content_filter","error"],"title":"ChatFinishReasonEnum","type":"string"},"OpenRouterChatFunctionTool":{"description":"Tool definition for function calling (regular function or OpenRouter built-in server tool)","oneOf":[{"$ref":"#/components/schemas/OpenRouterChatFunctionTool0"},{"$ref":"#/components/schemas/OpenRouterDatetimeServerTool"},{"$ref":"#/components/schemas/ImageGenerationServerTool_OpenRouter"},{"$ref":"#/components/schemas/OpenRouterChatSearchModelsServerTool"},{"$ref":"#/components/schemas/OpenRouterWebFetchServerTool"},{"$ref":"#/components/schemas/OpenRouterWebSearchServerTool"},{"$ref":"#/components/schemas/OpenRouterChatWebSearchShorthand"}],"title":"ChatFunctionTool"},"OpenRouterChatFunctionTool0":{"properties":{"cache_control":{"$ref":"#/components/schemas/OpenRouterChatContentCacheControl"},"function":{"$ref":"#/components/schemas/OpenRouterChatFunctionToolOneOf0Function"},"type":{"$ref":"#/components/schemas/OpenRouterChatFunctionToolOneOf0Type"}},"required":["function","type"],"title":"ChatFunctionTool0","type":"object"},"OpenRouterChatFunctionToolOneOf0Function":{"description":"Function definition for tool calling","properties":{"description":{"description":"Function description for the model","type":"string"},"name":{"description":"Function name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars)","type":"string"},"parameters":{"additionalProperties":{"description":"Any type"},"description":"Function parameters as JSON Schema object","type":"object"},"strict":{"description":"Enable strict schema adherence","nullable":true,"type":"boolean"}},"required":["name"],"title":"ChatFunctionToolOneOf0Function","type":"object"},"OpenRouterChatFunctionToolOneOf0Type":{"enum":["function"],"title":"ChatFunctionToolOneOf0Type","type":"string"},"OpenRouterChatJsonSchemaConfig":{"description":"JSON Schema configuration object","properties":{"description":{"description":"Schema description for the model","type":"string"},"name":{"description":"Schema name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars)","type":"string"},"schema":{"additionalProperties":{"description":"Any type"},"description":"JSON Schema object","type":"object"},"strict":{"description":"Enable strict schema adherence","nullable":true,"type":"boolean"}},"required":["name"],"title":"ChatJsonSchemaConfig","type":"object"},"OpenRouterChatMessages":{"description":"Chat completion message with role-based discrimination","oneOf":[{"description":"Assistant message for requests and responses","properties":{"audio":{"$ref":"#/components/schemas/OpenRouterChatAudioOutput"},"content":{"$ref":"#/components/schemas/OpenRouterChatMessagesDiscriminatorMappingAssistantContent"},"images":{"$ref":"#/components/schemas/OpenRouterChatAssistantImages"},"name":{"description":"Optional name for the assistant","type":"string"},"reasoning":{"description":"Reasoning output","nullable":true,"type":"string"},"reasoning_details":{"$ref":"#/components/schemas/OpenRouterChatReasoningDetails"},"refusal":{"description":"Refusal message if content was refused","nullable":true,"type":"string"},"role":{"description":"Discriminator value: assistant","enum":["assistant"],"type":"string"},"tool_calls":{"description":"Tool calls made by the assistant","items":{"$ref":"#/components/schemas/OpenRouterChatToolCall"},"type":"array"}},"required":["role"],"type":"object"},{"description":"Developer message","properties":{"content":{"$ref":"#/components/schemas/OpenRouterChatMessagesDiscriminatorMappingDeveloperContent"},"name":{"description":"Optional name for the developer message","type":"string"},"role":{"description":"Discriminator value: developer","enum":["developer"],"type":"string"}},"required":["role","content"],"type":"object"},{"description":"System message for setting behavior","properties":{"content":{"$ref":"#/components/schemas/OpenRouterChatSystemMessageContent"},"name":{"description":"Optional name for the system message","type":"string"},"role":{"$ref":"#/components/schemas/OpenRouterChatSystemMessageRole"}},"required":["role","content"],"type":"object"},{"description":"Tool response message","properties":{"content":{"$ref":"#/components/schemas/OpenRouterChatToolMessageContent"},"role":{"$ref":"#/components/schemas/OpenRouterChatToolMessageRole"},"tool_call_id":{"description":"ID of the assistant message tool call this message responds to","type":"string"}},"required":["role","content","tool_call_id"],"type":"object"},{"description":"User message","properties":{"content":{"$ref":"#/components/schemas/OpenRouterChatUserMessageContent"},"name":{"description":"Optional name for the user","type":"string"},"role":{"$ref":"#/components/schemas/OpenRouterChatUserMessageRole"}},"required":["role","content"],"type":"object"}],"title":"ChatMessages"},"OpenRouterChatMessagesDiscriminatorMappingAssistantContent":{"description":"Assistant message content","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/OpenRouterChatMessagesDiscriminatorMappingAssistantContent1"},{"description":"Any type"}],"title":"ChatMessagesDiscriminatorMappingAssistantContent"},"OpenRouterChatMessagesDiscriminatorMappingAssistantContent1":{"items":{"$ref":"#/components/schemas/OpenRouterChatContentItems"},"title":"ChatMessagesDiscriminatorMappingAssistantContent1","type":"array"},"OpenRouterChatMessagesDiscriminatorMappingDeveloperContent":{"description":"Developer message content","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/OpenRouterChatMessagesDiscriminatorMappingDeveloperContent1"}],"title":"ChatMessagesDiscriminatorMappingDeveloperContent"},"OpenRouterChatMessagesDiscriminatorMappingDeveloperContent1":{"items":{"$ref":"#/components/schemas/OpenRouterChatContentText"},"title":"ChatMessagesDiscriminatorMappingDeveloperContent1","type":"array"},"OpenRouterChatModelNames":{"description":"Models to use for completion","items":{"$ref":"#/components/schemas/OpenRouterModelName"},"title":"ChatModelNames","type":"array"},"OpenRouterChatNamedToolChoice":{"description":"Named tool choice for specific function","properties":{"function":{"$ref":"#/components/schemas/OpenRouterChatNamedToolChoiceFunction"},"type":{"$ref":"#/components/schemas/OpenRouterChatNamedToolChoiceType"}},"required":["function","type"],"title":"ChatNamedToolChoice","type":"object"},"OpenRouterChatNamedToolChoiceFunction":{"properties":{"name":{"description":"Function name to call","type":"string"}},"required":["name"],"title":"ChatNamedToolChoiceFunction","type":"object"},"OpenRouterChatNamedToolChoiceType":{"enum":["function"],"title":"ChatNamedToolChoiceType","type":"string"},"OpenRouterChatReasoningDetails":{"description":"Reasoning details for extended thinking models","items":{"$ref":"#/components/schemas/OpenRouterReasoningDetailUnion"},"title":"ChatReasoningDetails","type":"array"},"OpenRouterChatReasoningSummaryVerbosityEnum":{"enum":["auto","concise","detailed"],"title":"ChatReasoningSummaryVerbosityEnum","type":"string"},"OpenRouterChatRequest":{"description":"Chat completion request parameters","properties":{"cache_control":{"$ref":"#/components/schemas/OpenRouterAnthropicCacheControlDirective"},"debug":{"$ref":"#/components/schemas/OpenRouterChatDebugOptions"},"frequency_penalty":{"description":"Frequency penalty (-2.0 to 2.0)","format":"double","nullable":true,"type":"number"},"image_config":{"$ref":"#/components/schemas/OpenRouterImageConfig"},"logit_bias":{"additionalProperties":{"format":"double","type":"number"},"description":"Token logit bias adjustments","nullable":true,"type":"object"},"logprobs":{"description":"Return log probabilities","nullable":true,"type":"boolean"},"max_completion_tokens":{"description":"Maximum tokens in completion","nullable":true,"type":"integer"},"max_tokens":{"description":"Maximum tokens (deprecated, use max_completion_tokens). Note: some providers enforce a minimum of 16.","nullable":true,"type":"integer"},"messages":{"description":"List of messages for the conversation","items":{"$ref":"#/components/schemas/OpenRouterChatMessages"},"type":"array"},"metadata":{"additionalProperties":{"type":"string"},"description":"Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values)","type":"object"},"modalities":{"description":"Output modalities for the response. Supported values are \"text\", \"image\", and \"audio\".","items":{"$ref":"#/components/schemas/OpenRouterChatRequestModalitiesItems"},"type":"array"},"model":{"$ref":"#/components/schemas/OpenRouterModelName"},"models":{"$ref":"#/components/schemas/OpenRouterChatModelNames"},"parallel_tool_calls":{"description":"Whether to enable parallel function calling during tool use. When true, the model may generate multiple tool calls in a single response.","nullable":true,"type":"boolean"},"plugins":{"description":"Plugins you want to enable for this request, including their settings.","items":{"$ref":"#/components/schemas/OpenRouterChatRequestPluginsItems"},"type":"array"},"presence_penalty":{"description":"Presence penalty (-2.0 to 2.0)","format":"double","nullable":true,"type":"number"},"provider":{"$ref":"#/components/schemas/OpenRouterProviderPreferences"},"reasoning":{"$ref":"#/components/schemas/OpenRouterChatRequestReasoning"},"response_format":{"$ref":"#/components/schemas/OpenRouterChatRequestResponseFormat"},"route":{"description":"Any type"},"seed":{"description":"Random seed for deterministic outputs","nullable":true,"type":"integer"},"service_tier":{"description":"The service tier to use for processing this request.","oneOf":[{"$ref":"#/components/schemas/OpenRouterChatRequestServiceTier"}]},"session_id":{"description":"A unique identifier for grouping related requests (e.g., a conversation or agent workflow) for observability. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.","type":"string"},"stop":{"$ref":"#/components/schemas/OpenRouterChatRequestStop"},"stop_server_tools_when":{"$ref":"#/components/schemas/OpenRouterStopServerToolsWhen"},"stream":{"default":false,"description":"Enable streaming response","type":"boolean"},"stream_options":{"$ref":"#/components/schemas/OpenRouterChatStreamOptions"},"temperature":{"description":"Sampling temperature (0-2)","format":"double","nullable":true,"type":"number"},"tool_choice":{"$ref":"#/components/schemas/OpenRouterChatToolChoice"},"tools":{"description":"Available tools for function calling","items":{"$ref":"#/components/schemas/OpenRouterChatFunctionTool"},"type":"array"},"top_logprobs":{"description":"Number of top log probabilities to return (0-20)","nullable":true,"type":"integer"},"top_p":{"description":"Nucleus sampling parameter (0-1)","format":"double","nullable":true,"type":"number"},"trace":{"$ref":"#/components/schemas/OpenRouterTraceConfig"},"user":{"description":"Unique user identifier","type":"string"}},"required":["messages"],"title":"ChatRequest","type":"object"},"OpenRouterChatRequestModalitiesItems":{"enum":["text","image","audio"],"title":"ChatRequestModalitiesItems","type":"string"},"OpenRouterChatRequestPluginsItems":{"oneOf":[{"description":"auto-router variant","properties":{"allowed_models":{"description":"List of model patterns to filter which models the auto-router can route between. Supports wildcards (e.g., \"anthropic/*\" matches all Anthropic models). When not specified, uses the default supported models list.","items":{"type":"string"},"type":"array"},"enabled":{"description":"Set to false to disable the auto-router plugin for this request. Defaults to true.","type":"boolean"},"id":{"description":"Discriminator value: auto-router","enum":["auto-router"],"type":"string"}},"required":["id"],"type":"object"},{"description":"context-compression variant","properties":{"enabled":{"description":"Set to false to disable the context-compression plugin for this request. Defaults to true.","type":"boolean"},"engine":{"$ref":"#/components/schemas/OpenRouterContextCompressionEngine"},"id":{"description":"Discriminator value: context-compression","enum":["context-compression"],"type":"string"}},"required":["id"],"type":"object"},{"description":"file-parser variant","properties":{"enabled":{"description":"Set to false to disable the file-parser plugin for this request. Defaults to true.","type":"boolean"},"id":{"description":"Discriminator value: file-parser","enum":["file-parser"],"type":"string"},"pdf":{"$ref":"#/components/schemas/OpenRouterPDFParserOptions"}},"required":["id"],"type":"object"},{"description":"fusion variant","properties":{"analysis_models":{"description":"Slugs of models to run in parallel as the \"expert panel\" the judge analyzes. Each model receives the same user prompt with web_search + web_fetch enabled. Capped at 8 models to bound cost amplification. When omitted, defaults to the Quality preset from the /labs/fusion UI (~anthropic/claude-opus-latest, ~openai/gpt-latest, ~google/gemini-pro-latest).","items":{"type":"string"},"type":"array"},"enabled":{"description":"Set to false to disable the fusion plugin for this request. Defaults to true.","type":"boolean"},"id":{"description":"Discriminator value: fusion","enum":["fusion"],"type":"string"},"max_tool_calls":{"description":"Maximum number of tool-calling steps each panelist (analysis model) and the judge model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.","type":"integer"},"model":{"description":"Slug of the model that performs both the judge step (with web_search + web_fetch) and the final synthesis. When omitted, defaults to the first model in the Quality preset.","type":"string"}},"required":["id"],"type":"object"},{"description":"moderation variant","properties":{"id":{"description":"Discriminator value: moderation","enum":["moderation"],"type":"string"}},"required":["id"],"type":"object"},{"description":"pareto-router variant","properties":{"enabled":{"description":"Set to false to disable the pareto-router plugin for this request. Defaults to true.","type":"boolean"},"id":{"description":"Discriminator value: pareto-router","enum":["pareto-router"],"type":"string"},"min_coding_score":{"description":"Minimum desired coding score between 0 and 1, where 1 is best. Higher values select from stronger coding models (sourced from Artificial Analysis coding percentiles). Maps internally to one of three tiers (low, medium, high). Omit to use the router default tier.","format":"double","type":"number"}},"required":["id"],"type":"object"},{"description":"response-healing variant","properties":{"enabled":{"description":"Set to false to disable the response-healing plugin for this request. Defaults to true.","type":"boolean"},"id":{"description":"Discriminator value: response-healing","enum":["response-healing"],"type":"string"}},"required":["id"],"type":"object"},{"description":"web variant","properties":{"enabled":{"description":"Set to false to disable the web-search plugin for this request. Defaults to true.","type":"boolean"},"engine":{"$ref":"#/components/schemas/OpenRouterWebSearchEngine"},"exclude_domains":{"description":"A list of domains to exclude from web search results. Supports wildcards (e.g. \"*.substack.com\") and path filtering (e.g. \"openai.com/blog\").","items":{"type":"string"},"type":"array"},"id":{"$ref":"#/components/schemas/OpenRouterWebSearchPluginId"},"include_domains":{"description":"A list of domains to restrict web search results to. Supports wildcards (e.g. \"*.substack.com\") and path filtering (e.g. \"openai.com/blog\").","items":{"type":"string"},"type":"array"},"max_results":{"type":"integer"},"max_uses":{"description":"Maximum number of times the model can invoke web search in a single turn. Passed through to native providers that support it (e.g. Anthropic).","type":"integer"},"search_prompt":{"type":"string"},"user_location":{"$ref":"#/components/schemas/OpenRouterWebSearchPluginUserLocation"}},"required":["id"],"type":"object"},{"description":"web-fetch variant","properties":{"allowed_domains":{"description":"Only fetch from these domains.","items":{"type":"string"},"type":"array"},"blocked_domains":{"description":"Never fetch from these domains.","items":{"type":"string"},"type":"array"},"id":{"$ref":"#/components/schemas/OpenRouterWebFetchPluginId"},"max_content_tokens":{"description":"Maximum content length in approximate tokens. Content exceeding this limit is truncated.","type":"integer"},"max_uses":{"description":"Maximum number of web fetches per request. Once exceeded, the tool returns an error.","type":"integer"}},"required":["id"],"type":"object"}],"title":"ChatRequestPluginsItems"},"OpenRouterChatRequestReasoning":{"description":"Configuration options for reasoning models","properties":{"effort":{"description":"Constrains effort on reasoning for reasoning models","oneOf":[{"$ref":"#/components/schemas/OpenRouterChatRequestReasoningEffort"}]},"summary":{"$ref":"#/components/schemas/OpenRouterChatReasoningSummaryVerbosityEnum"}},"title":"ChatRequestReasoning","type":"object"},"OpenRouterChatRequestReasoningEffort":{"description":"Constrains effort on reasoning for reasoning models","enum":["xhigh","high","medium","low","minimal","none"],"title":"ChatRequestReasoningEffort","type":"string"},"OpenRouterChatRequestResponseFormat":{"description":"Response format configuration","oneOf":[{"description":"Custom grammar response format","properties":{"grammar":{"description":"Custom grammar for text generation","type":"string"},"type":{"description":"Discriminator value: grammar","enum":["grammar"],"type":"string"}},"required":["type","grammar"],"type":"object"},{"description":"JSON object response format","properties":{"type":{"$ref":"#/components/schemas/OpenRouterFormatJsonObjectConfigType"}},"required":["type"],"type":"object"},{"description":"JSON Schema response format for structured outputs","properties":{"json_schema":{"$ref":"#/components/schemas/OpenRouterChatJsonSchemaConfig"},"type":{"description":"Discriminator value: json_schema","enum":["json_schema"],"type":"string"}},"required":["type","json_schema"],"type":"object"},{"description":"Python code response format","properties":{"type":{"description":"Discriminator value: python","enum":["python"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Default text response format","properties":{"type":{"description":"Discriminator value: text","enum":["text"],"type":"string"}},"required":["type"],"type":"object"}],"title":"ChatRequestResponseFormat"},"OpenRouterChatRequestServiceTier":{"description":"The service tier to use for processing this request.","enum":["auto","default","flex","priority","scale"],"title":"ChatRequestServiceTier","type":"string"},"OpenRouterChatRequestStop":{"description":"Stop sequences (up to 4)","oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"description":"Any type"}],"title":"ChatRequestStop"},"OpenRouterChatResult":{"description":"Chat completion response","properties":{"choices":{"description":"List of completion choices","items":{"$ref":"#/components/schemas/OpenRouterChatChoice"},"type":"array"},"created":{"description":"Unix timestamp of creation","type":"integer"},"id":{"description":"Unique completion identifier","type":"string"},"model":{"description":"Model used for completion","type":"string"},"object":{"$ref":"#/components/schemas/OpenRouterChatResultObject"},"openrouter_metadata":{"$ref":"#/components/schemas/OpenRouterMetadata"},"service_tier":{"description":"The service tier used by the upstream provider for this request","nullable":true,"type":"string"},"system_fingerprint":{"description":"System fingerprint","nullable":true,"type":"string"},"usage":{"$ref":"#/components/schemas/OpenRouterChatUsage"}},"required":["choices","created","id","model","object","system_fingerprint"],"title":"ChatResult","type":"object"},"OpenRouterChatResultObject":{"enum":["chat.completion"],"title":"ChatResultObject","type":"string"},"OpenRouterChatSearchModelsServerTool":{"description":"OpenRouter built-in server tool: searches and filters AI models available on OpenRouter","properties":{"parameters":{"$ref":"#/components/schemas/OpenRouterSearchModelsServerToolConfig"},"type":{"$ref":"#/components/schemas/OpenRouterChatSearchModelsServerToolType"}},"required":["type"],"title":"ChatSearchModelsServerTool","type":"object"},"OpenRouterChatSearchModelsServerToolType":{"enum":["openrouter:experimental__search_models"],"title":"ChatSearchModelsServerToolType","type":"string"},"OpenRouterChatStreamOptions":{"description":"Streaming configuration options","properties":{"include_usage":{"description":"Deprecated: This field has no effect. Full usage details are always included.","type":"boolean"}},"title":"ChatStreamOptions","type":"object"},"OpenRouterChatSystemMessageContent":{"description":"System message content","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/OpenRouterChatSystemMessageContent1"}],"title":"ChatSystemMessageContent"},"OpenRouterChatSystemMessageContent1":{"items":{"$ref":"#/components/schemas/OpenRouterChatContentText"},"title":"ChatSystemMessageContent1","type":"array"},"OpenRouterChatSystemMessageRole":{"enum":["system"],"title":"ChatSystemMessageRole","type":"string"},"OpenRouterChatTokenLogprob":{"description":"Token log probability information","properties":{"bytes":{"description":"UTF-8 bytes of the token","items":{"type":"integer"},"nullable":true,"type":"array"},"logprob":{"description":"Log probability of the token","format":"double","type":"number"},"token":{"description":"The token","type":"string"},"top_logprobs":{"description":"Top alternative tokens with probabilities","items":{"$ref":"#/components/schemas/OpenRouterChatTokenLogprobTopLogprobsItems"},"type":"array"}},"required":["bytes","logprob","token","top_logprobs"],"title":"ChatTokenLogprob","type":"object"},"OpenRouterChatTokenLogprobTopLogprobsItems":{"properties":{"bytes":{"items":{"type":"integer"},"nullable":true,"type":"array"},"logprob":{"format":"double","type":"number"},"token":{"type":"string"}},"required":["bytes","logprob","token"],"title":"ChatTokenLogprobTopLogprobsItems","type":"object"},"OpenRouterChatTokenLogprobs":{"description":"Log probabilities for the completion","properties":{"content":{"description":"Log probabilities for content tokens","items":{"$ref":"#/components/schemas/OpenRouterChatTokenLogprob"},"nullable":true,"type":"array"},"refusal":{"description":"Log probabilities for refusal tokens","items":{"$ref":"#/components/schemas/OpenRouterChatTokenLogprob"},"nullable":true,"type":"array"}},"required":["content"],"title":"ChatTokenLogprobs","type":"object"},"OpenRouterChatToolCall":{"description":"Tool call made by the assistant","properties":{"function":{"$ref":"#/components/schemas/OpenRouterChatToolCallFunction"},"id":{"description":"Tool call identifier","type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterChatToolCallType"}},"required":["function","id","type"],"title":"ChatToolCall","type":"object"},"OpenRouterChatToolCallFunction":{"properties":{"arguments":{"description":"Function arguments as JSON string","type":"string"},"name":{"description":"Function name to call","type":"string"}},"required":["arguments","name"],"title":"ChatToolCallFunction","type":"object"},"OpenRouterChatToolCallType":{"enum":["function"],"title":"ChatToolCallType","type":"string"},"OpenRouterChatToolChoice":{"description":"Tool choice configuration","oneOf":[{"$ref":"#/components/schemas/OpenRouterChatToolChoice0"},{"$ref":"#/components/schemas/OpenRouterChatToolChoice1"},{"$ref":"#/components/schemas/OpenRouterChatToolChoice2"},{"$ref":"#/components/schemas/OpenRouterChatNamedToolChoice"}],"title":"ChatToolChoice"},"OpenRouterChatToolChoice0":{"enum":["none"],"title":"ChatToolChoice0","type":"string"},"OpenRouterChatToolChoice1":{"enum":["auto"],"title":"ChatToolChoice1","type":"string"},"OpenRouterChatToolChoice2":{"enum":["required"],"title":"ChatToolChoice2","type":"string"},"OpenRouterChatToolMessageContent":{"description":"Tool response content","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/OpenRouterChatToolMessageContent1"}],"title":"ChatToolMessageContent"},"OpenRouterChatToolMessageContent1":{"items":{"$ref":"#/components/schemas/OpenRouterChatContentItems"},"title":"ChatToolMessageContent1","type":"array"},"OpenRouterChatToolMessageRole":{"enum":["tool"],"title":"ChatToolMessageRole","type":"string"},"OpenRouterChatUsage":{"description":"Token usage statistics","properties":{"completion_tokens":{"description":"Number of tokens in the completion","type":"integer"},"completion_tokens_details":{"description":"Detailed completion token usage","oneOf":[{"$ref":"#/components/schemas/OpenRouterChatUsageCompletionTokensDetails"}]},"cost":{"description":"Cost of the completion","format":"double","nullable":true,"type":"number"},"cost_details":{"$ref":"#/components/schemas/OpenRouterCostDetails"},"is_byok":{"description":"Whether a request was made using a Bring Your Own Key configuration","type":"boolean"},"prompt_tokens":{"description":"Number of tokens in the prompt","type":"integer"},"prompt_tokens_details":{"description":"Detailed prompt token usage","oneOf":[{"$ref":"#/components/schemas/OpenRouterChatUsagePromptTokensDetails"}]},"total_tokens":{"description":"Total number of tokens","type":"integer"}},"required":["completion_tokens","prompt_tokens","total_tokens"],"title":"ChatUsage","type":"object"},"OpenRouterChatUsageCompletionTokensDetails":{"description":"Detailed completion token usage","properties":{"accepted_prediction_tokens":{"description":"Accepted prediction tokens","nullable":true,"type":"integer"},"audio_tokens":{"description":"Tokens used for audio output","nullable":true,"type":"integer"},"reasoning_tokens":{"description":"Tokens used for reasoning","nullable":true,"type":"integer"},"rejected_prediction_tokens":{"description":"Rejected prediction tokens","nullable":true,"type":"integer"}},"title":"ChatUsageCompletionTokensDetails","type":"object"},"OpenRouterChatUsagePromptTokensDetails":{"description":"Detailed prompt token usage","properties":{"audio_tokens":{"description":"Audio input tokens","type":"integer"},"cache_write_tokens":{"description":"Tokens written to cache. Only returned for models with explicit caching and cache write pricing.","type":"integer"},"cached_tokens":{"description":"Cached prompt tokens","type":"integer"},"video_tokens":{"description":"Video input tokens","type":"integer"}},"title":"ChatUsagePromptTokensDetails","type":"object"},"OpenRouterChatUserMessageContent":{"description":"User message content","oneOf":[{"type":"string"},{"$ref":"#/components/schemas/OpenRouterChatUserMessageContent1"}],"title":"ChatUserMessageContent"},"OpenRouterChatUserMessageContent1":{"items":{"$ref":"#/components/schemas/OpenRouterChatContentItems"},"title":"ChatUserMessageContent1","type":"array"},"OpenRouterChatUserMessageRole":{"enum":["user"],"title":"ChatUserMessageRole","type":"string"},"OpenRouterChatWebSearchShorthand":{"description":"Web search tool using OpenAI Responses API syntax. Automatically converted to openrouter:web_search.","properties":{"allowed_domains":{"description":"Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, and most native providers (Anthropic, OpenAI, xAI). Not supported with Perplexity. Cannot be used with excluded_domains.","items":{"type":"string"},"type":"array"},"engine":{"$ref":"#/components/schemas/OpenRouterWebSearchEngineEnum"},"excluded_domains":{"description":"Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Anthropic, and xAI. Not supported with OpenAI (silently ignored) or Perplexity. Cannot be used with allowed_domains.","items":{"type":"string"},"type":"array"},"max_results":{"description":"Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, and Parallel engines; ignored with native provider search.","type":"integer"},"max_total_results":{"description":"Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified.","type":"integer"},"parameters":{"$ref":"#/components/schemas/OpenRouterWebSearchConfig"},"search_context_size":{"$ref":"#/components/schemas/OpenRouterSearchQualityLevel"},"type":{"$ref":"#/components/schemas/OpenRouterChatWebSearchShorthandType"},"user_location":{"$ref":"#/components/schemas/OpenRouterWebSearchUserLocationServerTool"}},"required":["type"],"title":"ChatWebSearchShorthand","type":"object"},"OpenRouterChatWebSearchShorthandType":{"enum":["web_search","web_search_preview","web_search_preview_2025_03_11","web_search_2025_08_26"],"title":"ChatWebSearchShorthandType","type":"string"},"OpenRouterContextCompressionEngine":{"description":"The compression engine to use. Defaults to \"middle-out\".","enum":["middle-out"],"title":"ContextCompressionEngine","type":"string"},"OpenRouterCostDetails":{"description":"Breakdown of upstream inference costs","properties":{"upstream_inference_completions_cost":{"format":"double","type":"number"},"upstream_inference_cost":{"format":"double","nullable":true,"type":"number"},"upstream_inference_prompt_cost":{"format":"double","type":"number"}},"required":["upstream_inference_completions_cost","upstream_inference_prompt_cost"],"title":"CostDetails","type":"object"},"OpenRouterDatetimeServerTool":{"description":"OpenRouter built-in server tool: returns the current date and time","properties":{"parameters":{"$ref":"#/components/schemas/OpenRouterDatetimeServerToolConfig"},"type":{"$ref":"#/components/schemas/OpenRouterDatetimeServerToolType"}},"required":["type"],"title":"DatetimeServerTool","type":"object"},"OpenRouterDatetimeServerToolConfig":{"description":"Configuration for the openrouter:datetime server tool","properties":{"timezone":{"description":"IANA timezone name (e.g. \"America/New_York\"). Defaults to UTC.","type":"string"}},"title":"DatetimeServerToolConfig","type":"object"},"OpenRouterDatetimeServerToolType":{"enum":["openrouter:datetime"],"title":"DatetimeServerToolType","type":"string"},"OpenRouterEndpointInfo":{"properties":{"model":{"type":"string"},"provider":{"type":"string"},"selected":{"type":"boolean"}},"required":["model","provider","selected"],"title":"EndpointInfo","type":"object"},"OpenRouterEndpointsMetadata":{"properties":{"available":{"items":{"$ref":"#/components/schemas/OpenRouterEndpointInfo"},"type":"array"},"total":{"type":"integer"}},"required":["available","total"],"title":"EndpointsMetadata","type":"object"},"OpenRouterFormatJsonObjectConfigType":{"enum":["json_object"],"title":"FormatJsonObjectConfigType","type":"string"},"OpenRouterImageConfig":{"oneOf":[{"type":"string"},{"format":"double","type":"number"},{"items":{"description":"Any type"},"type":"array"}],"title":"ImageConfig"},"OpenRouterImageGenerationServerToolConfig":{"description":"Configuration for the openrouter:image_generation server tool. Accepts all image_config params (aspect_ratio, quality, size, background, output_format, output_compression, moderation, etc.) plus a model field.","properties":{"model":{"description":"Which image generation model to use (e.g. \"openai/gpt-5-image\"). Defaults to \"openai/gpt-5-image\".","type":"string"}},"title":"ImageGenerationServerToolConfig","type":"object"},"OpenRouterImageGenerationServerToolOpenRouterType":{"enum":["openrouter:image_generation"],"title":"ImageGenerationServerToolOpenRouterType","type":"string"},"OpenRouterLegacyChatContentVideoType":{"enum":["input_video"],"title":"LegacyChatContentVideoType","type":"string"},"OpenRouterMetadata":{"properties":{"attempt":{"type":"integer"},"attempts":{"items":{"$ref":"#/components/schemas/OpenRouterRouterAttempt"},"type":"array"},"endpoints":{"$ref":"#/components/schemas/OpenRouterEndpointsMetadata"},"is_byok":{"type":"boolean"},"params":{"$ref":"#/components/schemas/OpenRouterRouterParams"},"pipeline":{"items":{"$ref":"#/components/schemas/OpenRouterPipelineStage"},"type":"array"},"region":{"nullable":true,"type":"string"},"requested":{"type":"string"},"strategy":{"$ref":"#/components/schemas/OpenRouterRoutingStrategy"},"summary":{"type":"string"}},"required":["attempt","endpoints","is_byok","region","requested","strategy","summary"],"title":"OpenRouterMetadata","type":"object"},"OpenRouterModelName":{"description":"Model to use for completion","title":"ModelName","type":"string"},"OpenRouterPDFParserEngine":{"description":"The engine to use for parsing PDF files. \"pdf-text\" is deprecated and automatically redirected to \"cloudflare-ai\".","oneOf":[{"$ref":"#/components/schemas/OpenRouterPdfParserEngine0"},{"$ref":"#/components/schemas/OpenRouterPdfParserEngine1"}],"title":"PDFParserEngine"},"OpenRouterPDFParserOptions":{"description":"Options for PDF parsing.","properties":{"engine":{"$ref":"#/components/schemas/OpenRouterPDFParserEngine"}},"title":"PDFParserOptions","type":"object"},"OpenRouterPdfParserEngine0":{"enum":["mistral-ocr","native","cloudflare-ai"],"title":"PdfParserEngine0","type":"string"},"OpenRouterPdfParserEngine1":{"enum":["pdf-text"],"title":"PdfParserEngine1","type":"string"},"OpenRouterPercentileLatencyCutoffs":{"description":"Percentile-based latency cutoffs. All specified cutoffs must be met for an endpoint to be preferred.","properties":{"p50":{"description":"Maximum p50 latency (seconds)","format":"double","nullable":true,"type":"number"},"p75":{"description":"Maximum p75 latency (seconds)","format":"double","nullable":true,"type":"number"},"p90":{"description":"Maximum p90 latency (seconds)","format":"double","nullable":true,"type":"number"},"p99":{"description":"Maximum p99 latency (seconds)","format":"double","nullable":true,"type":"number"}},"title":"PercentileLatencyCutoffs","type":"object"},"OpenRouterPercentileThroughputCutoffs":{"description":"Percentile-based throughput cutoffs. All specified cutoffs must be met for an endpoint to be preferred.","properties":{"p50":{"description":"Minimum p50 throughput (tokens/sec)","format":"double","nullable":true,"type":"number"},"p75":{"description":"Minimum p75 throughput (tokens/sec)","format":"double","nullable":true,"type":"number"},"p90":{"description":"Minimum p90 throughput (tokens/sec)","format":"double","nullable":true,"type":"number"},"p99":{"description":"Minimum p99 throughput (tokens/sec)","format":"double","nullable":true,"type":"number"}},"title":"PercentileThroughputCutoffs","type":"object"},"OpenRouterPipelineStage":{"properties":{"cost_usd":{"format":"double","nullable":true,"type":"number"},"data":{"additionalProperties":{"description":"Any type"},"type":"object"},"guardrail_id":{"type":"string"},"guardrail_scope":{"type":"string"},"name":{"type":"string"},"summary":{"type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterPipelineStageType"}},"required":["name","type"],"title":"PipelineStage","type":"object"},"OpenRouterPipelineStageType":{"description":"Categorical kind of a pipeline stage. Multiple plugins can share a type (e.g. all guardrail-level plugins emit `guardrail`); the `name` field disambiguates which plugin emitted it.","enum":["guardrail","plugin","server_tools","response_healing","context_compression"],"title":"PipelineStageType","type":"string"},"OpenRouterPreferredMaxLatency":{"description":"Preferred maximum latency (in seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints above the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold.","oneOf":[{"format":"double","type":"number"},{"$ref":"#/components/schemas/OpenRouterPercentileLatencyCutoffs"},{"description":"Any type"}],"title":"PreferredMaxLatency"},"OpenRouterPreferredMinThroughput":{"description":"Preferred minimum throughput (in tokens per second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints below the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold.","oneOf":[{"format":"double","type":"number"},{"$ref":"#/components/schemas/OpenRouterPercentileThroughputCutoffs"},{"description":"Any type"}],"title":"PreferredMinThroughput"},"OpenRouterProviderName":{"enum":["AkashML","AI21","AionLabs","Alibaba","Ambient","Baidu","Amazon Bedrock","Amazon Nova","Anthropic","Arcee AI","AtlasCloud","Avian","Azure","BaseTen","BytePlus","Black Forest Labs","Cerebras","Chutes","Cirrascale","Clarifai","Cloudflare","Cohere","Crucible","Crusoe","DeepInfra","DeepSeek","DekaLLM","Featherless","Fireworks","Friendli","GMICloud","Google","Google AI Studio","Groq","Hyperbolic","Inception","Inceptron","InferenceNet","Ionstream","Infermatic","Io Net","Inflection","Liquid","Mara","Mancer 2","Minimax","ModelRun","Mistral","Modular","Moonshot AI","Morph","NCompass","Nebius","Nex AGI","NextBit","Novita","Nvidia","OpenAI","OpenInference","Parasail","Poolside","Perceptron","Perplexity","Phala","Recraft","Reka","Relace","SambaNova","Seed","SiliconFlow","Sourceful","StepFun","Stealth","StreamLake","Switchpoint","Together","Upstage","Venice","WandB","Xiaomi","xAI","Z.AI","FakeProvider"],"title":"ProviderName","type":"string"},"OpenRouterProviderPreferences":{"description":"When multiple model providers are available, optionally indicate your routing preference.","properties":{"allow_fallbacks":{"description":"Whether to allow backup providers to serve requests\n- true: (default) when the primary provider (or your custom providers in \"order\") is unavailable, use the next best provider.\n- false: use only the primary/custom provider, and return the upstream error if it's unavailable.\n","nullable":true,"type":"boolean"},"data_collection":{"description":"Data collection setting. If no available model provider meets the requirement, your request will return an error.\n- allow: (default) allow providers which store user data non-transiently and may train on it\n\n- deny: use only providers which do not collect user data.","oneOf":[{"$ref":"#/components/schemas/OpenRouterProviderPreferencesDataCollection"}]},"enforce_distillable_text":{"description":"Whether to restrict routing to only models that allow text distillation. When true, only models where the author has allowed distillation will be used.","nullable":true,"type":"boolean"},"ignore":{"description":"List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request.","items":{"$ref":"#/components/schemas/OpenRouterProviderPreferencesIgnoreItems"},"nullable":true,"type":"array"},"max_price":{"$ref":"#/components/schemas/OpenRouterProviderPreferencesMaxPrice"},"only":{"description":"List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request.","items":{"$ref":"#/components/schemas/OpenRouterProviderPreferencesOnlyItems"},"nullable":true,"type":"array"},"order":{"description":"An ordered list of provider slugs. The router will attempt to use the first provider in the subset of this list that supports your requested model, and fall back to the next if it is unavailable. If no providers are available, the request will fail with an error message.","items":{"$ref":"#/components/schemas/OpenRouterProviderPreferencesOrderItems"},"nullable":true,"type":"array"},"preferred_max_latency":{"$ref":"#/components/schemas/OpenRouterPreferredMaxLatency"},"preferred_min_throughput":{"$ref":"#/components/schemas/OpenRouterPreferredMinThroughput"},"quantizations":{"description":"A list of quantization levels to filter the provider by.","items":{"$ref":"#/components/schemas/OpenRouterQuantization"},"nullable":true,"type":"array"},"require_parameters":{"description":"Whether to filter providers to only those that support the parameters you've provided. If this setting is omitted or set to false, then providers will receive only the parameters they support, and ignore the rest.","nullable":true,"type":"boolean"},"sort":{"$ref":"#/components/schemas/OpenRouterProviderPreferencesSort"},"zdr":{"description":"Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. When true, only endpoints that do not retain prompts will be used.","nullable":true,"type":"boolean"}},"title":"ProviderPreferences","type":"object"},"OpenRouterProviderPreferencesDataCollection":{"description":"Data collection setting. If no available model provider meets the requirement, your request will return an error.\n- allow: (default) allow providers which store user data non-transiently and may train on it\n\n- deny: use only providers which do not collect user data.","enum":["deny","allow"],"title":"ProviderPreferencesDataCollection","type":"string"},"OpenRouterProviderPreferencesIgnoreItems":{"oneOf":[{"$ref":"#/components/schemas/OpenRouterProviderName"},{"type":"string"}],"title":"ProviderPreferencesIgnoreItems"},"OpenRouterProviderPreferencesMaxPrice":{"description":"The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion.","properties":{"audio":{"$ref":"#/components/schemas/OpenRouterBigNumberUnion"},"completion":{"$ref":"#/components/schemas/OpenRouterBigNumberUnion"},"image":{"$ref":"#/components/schemas/OpenRouterBigNumberUnion"},"prompt":{"$ref":"#/components/schemas/OpenRouterBigNumberUnion"},"request":{"$ref":"#/components/schemas/OpenRouterBigNumberUnion"}},"title":"ProviderPreferencesMaxPrice","type":"object"},"OpenRouterProviderPreferencesOnlyItems":{"oneOf":[{"$ref":"#/components/schemas/OpenRouterProviderName"},{"type":"string"}],"title":"ProviderPreferencesOnlyItems"},"OpenRouterProviderPreferencesOrderItems":{"oneOf":[{"$ref":"#/components/schemas/OpenRouterProviderName"},{"type":"string"}],"title":"ProviderPreferencesOrderItems"},"OpenRouterProviderPreferencesSort":{"description":"The sorting strategy to use for this request, if \"order\" is not specified. When set, no load balancing is performed.","oneOf":[{"$ref":"#/components/schemas/OpenRouterProviderSort"},{"$ref":"#/components/schemas/OpenRouterProviderSortConfig"},{"description":"Any type"}],"title":"ProviderPreferencesSort"},"OpenRouterProviderSort":{"description":"The provider sorting strategy (price, throughput, latency)","enum":["price","throughput","latency","exacto"],"title":"ProviderSort","type":"string"},"OpenRouterProviderSortConfig":{"description":"The provider sorting strategy (price, throughput, latency)","properties":{"by":{"description":"The provider sorting strategy (price, throughput, latency)","oneOf":[{"$ref":"#/components/schemas/OpenRouterProviderSortConfigBy"}]},"partition":{"description":"Partitioning strategy for sorting: \"model\" (default) groups endpoints by model before sorting (fallback models remain fallbacks), \"none\" sorts all endpoints together regardless of model.","oneOf":[{"$ref":"#/components/schemas/OpenRouterProviderSortConfigPartition"}]}},"title":"ProviderSortConfig","type":"object"},"OpenRouterProviderSortConfigBy":{"description":"The provider sorting strategy (price, throughput, latency)","enum":["price","throughput","latency","exacto"],"title":"ProviderSortConfigBy","type":"string"},"OpenRouterProviderSortConfigPartition":{"description":"Partitioning strategy for sorting: \"model\" (default) groups endpoints by model before sorting (fallback models remain fallbacks), \"none\" sorts all endpoints together regardless of model.","enum":["model","none"],"title":"ProviderSortConfigPartition","type":"string"},"OpenRouterQuantization":{"enum":["int4","int8","fp4","fp6","fp8","fp16","bf16","fp32","unknown"],"title":"Quantization","type":"string"},"OpenRouterReasoningDetailUnion":{"description":"Reasoning detail union schema","oneOf":[{"description":"Reasoning detail encrypted schema","properties":{"data":{"type":"string"},"format":{"$ref":"#/components/schemas/OpenRouterReasoningFormat"},"id":{"nullable":true,"type":"string"},"index":{"type":"integer"},"type":{"description":"Discriminator value: reasoning.encrypted","type":"string"}},"required":["type","data"],"type":"object"},{"description":"Reasoning detail summary schema","properties":{"format":{"$ref":"#/components/schemas/OpenRouterReasoningFormat"},"id":{"nullable":true,"type":"string"},"index":{"type":"integer"},"summary":{"type":"string"},"type":{"description":"Discriminator value: reasoning.summary","type":"string"}},"required":["type","summary"],"type":"object"},{"description":"Reasoning detail text schema","properties":{"format":{"$ref":"#/components/schemas/OpenRouterReasoningFormat"},"id":{"nullable":true,"type":"string"},"index":{"type":"integer"},"signature":{"nullable":true,"type":"string"},"text":{"nullable":true,"type":"string"},"type":{"description":"Discriminator value: reasoning.text","type":"string"}},"required":["type"],"type":"object"}],"title":"ReasoningDetailUnion"},"OpenRouterReasoningFormat":{"enum":["unknown","openai-responses-v1","azure-openai-responses-v1","xai-responses-v1","anthropic-claude-v1","google-gemini-v1"],"title":"ReasoningFormat","type":"string"},"OpenRouterRouterAttempt":{"properties":{"model":{"type":"string"},"provider":{"type":"string"},"status":{"type":"integer"}},"required":["model","provider","status"],"title":"RouterAttempt","type":"object"},"OpenRouterRouterParams":{"properties":{"quality_floor":{"format":"double","type":"number"},"throughput_floor":{"format":"double","type":"number"},"version_group":{"type":"string"}},"title":"RouterParams","type":"object"},"OpenRouterRoutingStrategy":{"enum":["direct","auto","free","latest","alias","fallback","pareto","bodybuilder","fusion"],"title":"RoutingStrategy","type":"string"},"OpenRouterSearchModelsServerToolConfig":{"description":"Configuration for the openrouter:experimental__search_models server tool","properties":{"max_results":{"description":"Maximum number of models to return. Defaults to 5, max 20.","type":"integer"}},"title":"SearchModelsServerToolConfig","type":"object"},"OpenRouterSearchQualityLevel":{"description":"How much context to retrieve per result. Applies to Exa and Parallel engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size.","enum":["low","medium","high"],"title":"SearchQualityLevel","type":"string"},"OpenRouterStopServerToolsWhen":{"description":"Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`.","items":{"$ref":"#/components/schemas/OpenRouterStopServerToolsWhenCondition"},"title":"StopServerToolsWhen","type":"array"},"OpenRouterStopServerToolsWhenCondition":{"description":"A single condition that, when met, halts the server-tool agent loop.","oneOf":[{"description":"Stop when the upstream model emits this finish reason (e.g. `length`).","properties":{"reason":{"type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterStopServerToolsWhenFinishReasonIsType"}},"required":["type","reason"],"type":"object"},{"description":"Stop after a tool with this name has been called.","properties":{"tool_name":{"type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterStopServerToolsWhenHasToolCallType"}},"required":["type","tool_name"],"type":"object"},{"description":"Stop once cumulative cost across the loop exceeds this dollar threshold.","properties":{"max_cost_in_dollars":{"format":"double","type":"number"},"type":{"$ref":"#/components/schemas/OpenRouterStopServerToolsWhenMaxCostType"}},"required":["type","max_cost_in_dollars"],"type":"object"},{"description":"Stop once cumulative token usage across the loop exceeds this threshold.","properties":{"max_tokens":{"type":"integer"},"type":{"$ref":"#/components/schemas/OpenRouterStopServerToolsWhenMaxTokensUsedType"}},"required":["type","max_tokens"],"type":"object"},{"description":"Stop after the agent loop has executed this many steps.","properties":{"step_count":{"type":"integer"},"type":{"$ref":"#/components/schemas/OpenRouterStopServerToolsWhenStepCountIsType"}},"required":["type","step_count"],"type":"object"}],"title":"StopServerToolsWhenCondition"},"OpenRouterStopServerToolsWhenFinishReasonIsType":{"enum":["finish_reason_is"],"title":"StopServerToolsWhenFinishReasonIsType","type":"string"},"OpenRouterStopServerToolsWhenHasToolCallType":{"enum":["has_tool_call"],"title":"StopServerToolsWhenHasToolCallType","type":"string"},"OpenRouterStopServerToolsWhenMaxCostType":{"enum":["max_cost"],"title":"StopServerToolsWhenMaxCostType","type":"string"},"OpenRouterStopServerToolsWhenMaxTokensUsedType":{"enum":["max_tokens_used"],"title":"StopServerToolsWhenMaxTokensUsedType","type":"string"},"OpenRouterStopServerToolsWhenStepCountIsType":{"enum":["step_count_is"],"title":"StopServerToolsWhenStepCountIsType","type":"string"},"OpenRouterTraceConfig":{"description":"Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations.","properties":{"generation_name":{"type":"string"},"parent_span_id":{"type":"string"},"span_name":{"type":"string"},"trace_id":{"type":"string"},"trace_name":{"type":"string"}},"title":"TraceConfig","type":"object"},"OpenRouterWebFetchEngineEnum":{"description":"Which fetch engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in fetch. \"exa\" uses Exa Contents API. \"openrouter\" uses direct HTTP fetch. \"firecrawl\" uses Firecrawl scrape (requires BYOK).","enum":["auto","native","openrouter","firecrawl","exa"],"title":"WebFetchEngineEnum","type":"string"},"OpenRouterWebFetchPluginId":{"enum":["web-fetch"],"title":"WebFetchPluginId","type":"string"},"OpenRouterWebFetchServerTool":{"description":"OpenRouter built-in server tool: fetches full content from a URL (web page or PDF)","properties":{"parameters":{"$ref":"#/components/schemas/OpenRouterWebFetchServerToolConfig"},"type":{"$ref":"#/components/schemas/OpenRouterWebFetchServerToolType"}},"required":["type"],"title":"WebFetchServerTool","type":"object"},"OpenRouterWebFetchServerToolConfig":{"description":"Configuration for the openrouter:web_fetch server tool","properties":{"allowed_domains":{"description":"Only fetch from these domains.","items":{"type":"string"},"type":"array"},"blocked_domains":{"description":"Never fetch from these domains.","items":{"type":"string"},"type":"array"},"engine":{"$ref":"#/components/schemas/OpenRouterWebFetchEngineEnum"},"max_content_tokens":{"description":"Maximum content length in approximate tokens. Content exceeding this limit is truncated.","type":"integer"},"max_uses":{"description":"Maximum number of web fetches per request. Once exceeded, the tool returns an error.","type":"integer"}},"title":"WebFetchServerToolConfig","type":"object"},"OpenRouterWebFetchServerToolType":{"enum":["openrouter:web_fetch"],"title":"WebFetchServerToolType","type":"string"},"OpenRouterWebSearchConfig":{"properties":{"allowed_domains":{"description":"Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, and most native providers (Anthropic, OpenAI, xAI). Not supported with Perplexity. Cannot be used with excluded_domains.","items":{"type":"string"},"type":"array"},"engine":{"$ref":"#/components/schemas/OpenRouterWebSearchEngineEnum"},"excluded_domains":{"description":"Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Anthropic, and xAI. Not supported with OpenAI (silently ignored) or Perplexity. Cannot be used with allowed_domains.","items":{"type":"string"},"type":"array"},"max_results":{"description":"Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, and Parallel engines; ignored with native provider search.","type":"integer"},"max_total_results":{"description":"Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified.","type":"integer"},"search_context_size":{"$ref":"#/components/schemas/OpenRouterSearchQualityLevel"},"user_location":{"$ref":"#/components/schemas/OpenRouterWebSearchUserLocationServerTool"}},"title":"WebSearchConfig","type":"object"},"OpenRouterWebSearchEngine":{"description":"The search engine to use for web search.","enum":["native","exa","firecrawl","parallel"],"title":"WebSearchEngine","type":"string"},"OpenRouterWebSearchEngineEnum":{"description":"Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API.","enum":["auto","native","exa","firecrawl","parallel"],"title":"WebSearchEngineEnum","type":"string"},"OpenRouterWebSearchPluginId":{"enum":["web"],"title":"WebSearchPluginId","type":"string"},"OpenRouterWebSearchPluginUserLocation":{"description":"Approximate user location for location-biased search results. Passed through to native providers that support it (e.g. Anthropic).","properties":{"city":{"nullable":true,"type":"string"},"country":{"nullable":true,"type":"string"},"region":{"nullable":true,"type":"string"},"timezone":{"nullable":true,"type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterWebSearchPluginUserLocationType"}},"required":["type"],"title":"WebSearchPluginUserLocation","type":"object"},"OpenRouterWebSearchPluginUserLocationType":{"enum":["approximate"],"title":"WebSearchPluginUserLocationType","type":"string"},"OpenRouterWebSearchServerTool":{"description":"OpenRouter built-in server tool: searches the web for current information","properties":{"parameters":{"$ref":"#/components/schemas/OpenRouterWebSearchConfig"},"type":{"$ref":"#/components/schemas/OpenRouterWebSearchServerToolType"}},"required":["type"],"title":"OpenRouterWebSearchServerTool","type":"object"},"OpenRouterWebSearchServerToolType":{"enum":["openrouter:web_search"],"title":"OpenRouterWebSearchServerToolType","type":"string"},"OpenRouterWebSearchUserLocationServerTool":{"description":"Approximate user location for location-biased results.","properties":{"city":{"nullable":true,"type":"string"},"country":{"nullable":true,"type":"string"},"region":{"nullable":true,"type":"string"},"timezone":{"nullable":true,"type":"string"},"type":{"$ref":"#/components/schemas/OpenRouterWebSearchUserLocationServerToolType"}},"title":"WebSearchUserLocationServerTool","type":"object"},"OpenRouterWebSearchUserLocationServerToolType":{"enum":["approximate"],"title":"WebSearchUserLocationServerToolType","type":"string"},"OutputAudioContent":{"properties":{"data":{"description":"Base64-encoded audio data","type":"string"},"transcript":{"description":"Transcript of the audio","type":"string"},"type":{"description":"The type of output content","enum":["output_audio"],"type":"string"}},"required":["type","data","transcript"],"type":"object"},"OutputContent":{"oneOf":[{"$ref":"#/components/schemas/OutputTextContent"},{"$ref":"#/components/schemas/OutputAudioContent"},{"$ref":"#/components/schemas/RefusalContent"}]},"OutputItem":{"oneOf":[{"$ref":"#/components/schemas/OutputMessage"},{"$ref":"#/components/schemas/FileSearchToolCall"},{"$ref":"#/components/schemas/FunctionToolCall"},{"$ref":"#/components/schemas/WebSearchToolCall"},{"$ref":"#/components/schemas/ComputerToolCall"},{"$ref":"#/components/schemas/ReasoningItem"},{"$ref":"#/components/schemas/ImageGenerationCall"}]},"OutputMessage":{"properties":{"content":{"description":"The content of the message","items":{"$ref":"#/components/schemas/OutputContent"},"type":"array"},"id":{"description":"The unique ID of the output message","type":"string"},"phase":{"description":"Labels an assistant message as intermediate commentary (`commentary`) or the final answer (`final_answer`)","type":"string"},"role":{"description":"The role of the message","enum":["assistant"],"type":"string"},"status":{"description":"The status of the message, e.g. `in_progress`, `completed`, or `incomplete`","type":"string"},"type":{"description":"The type of output item","enum":["message"],"type":"string"}},"required":["type","role","content"],"type":"object"},"OutputTextContent":{"properties":{"annotations":{"description":"Annotations attached to the text content, such as file citations or URL citations","items":{"additionalProperties":true,"type":"object"},"type":"array"},"logprobs":{"description":"Log probability information for the output tokens","items":{"additionalProperties":true,"type":"object"},"type":"array"},"text":{"description":"The text content","type":"string"},"type":{"description":"The type of output content","enum":["output_text"],"type":"string"}},"required":["type","text"],"type":"object"},"PersonalAccessToken":{"properties":{"createdAt":{"description":"[Output Only]The date and time the token was created.","format":"date-time","type":"string"},"description":{"description":"Optional. A more detailed description of the token's intended use.","type":"string"},"id":{"description":"Unique identifier for the GitCommit","format":"uuid","type":"string"},"name":{"description":"Required. The name of the token. Can be a simple description.","type":"string"},"token":{"description":"[Output Only]. The personal access token. Only returned during creation.","type":"string"}},"type":"object"},"PikaBody_generate_2_2_c2v_generate_2_2_pikascenes_post":{"properties":{"aspectRatio":{"anyOf":[{"maximum":2.5,"minimum":0.4,"type":"number"}],"description":"Aspect ratio (width / height)","title":"Aspectratio"},"duration":{"default":5,"title":"Duration","type":"integer"},"images":{"items":{"format":"binary","type":"string"},"title":"Images","type":"array"},"ingredientsMode":{"enum":["creative","precise"],"title":"Ingredientsmode","type":"string"},"negativePrompt":{"anyOf":[{"type":"string"}],"title":"Negativeprompt"},"promptText":{"anyOf":[{"type":"string"}],"title":"Prompttext"},"resolution":{"default":"1080p","title":"Resolution","type":"string"},"seed":{"anyOf":[{"type":"integer"}],"title":"Seed"}},"required":["ingredientsMode"],"title":"Body_generate_2_2_c2v_generate_2_2_pikascenes_post","type":"object"},"PikaBody_generate_2_2_i2v_generate_2_2_i2v_post":{"properties":{"duration":{"$ref":"#/components/schemas/PikaDurationEnum"},"image":{"format":"binary","nullable":true,"title":"Image","type":"string"},"negativePrompt":{"nullable":true,"title":"Negativeprompt","type":"string"},"promptText":{"nullable":true,"title":"Prompttext","type":"string"},"resolution":{"$ref":"#/components/schemas/PikaResolutionEnum"},"seed":{"nullable":true,"title":"Seed","type":"integer"}},"title":"Body_generate_2_2_i2v_generate_2_2_i2v_post","type":"object"},"PikaBody_generate_2_2_keyframe_generate_2_2_pikaframes_post":{"properties":{"duration":{"maximum":10,"minimum":5,"title":"Duration","type":"integer"},"keyFrames":{"description":"Array of keyframe images","items":{"format":"binary","type":"string"},"title":"Keyframes","type":"array"},"negativePrompt":{"anyOf":[{"type":"string"}],"title":"Negativeprompt"},"promptText":{"title":"Prompttext","type":"string"},"resolution":{"$ref":"#/components/schemas/PikaResolutionEnum"},"seed":{"anyOf":[{"type":"integer"}],"title":"Seed"}},"required":["promptText"],"title":"Body_generate_2_2_keyframe_generate_2_2_pikaframes_post","type":"object"},"PikaBody_generate_2_2_t2v_generate_2_2_t2v_post":{"properties":{"aspectRatio":{"default":1.7777777777777777,"description":"Aspect ratio (width / height)","format":"float","maximum":2.5,"minimum":0.4,"title":"Aspectratio","type":"number"},"duration":{"$ref":"#/components/schemas/PikaDurationEnum"},"negativePrompt":{"nullable":true,"title":"Negativeprompt","type":"string"},"promptText":{"title":"Prompttext","type":"string"},"resolution":{"$ref":"#/components/schemas/PikaResolutionEnum"},"seed":{"nullable":true,"title":"Seed","type":"integer"}},"required":["promptText"],"title":"Body_generate_2_2_t2v_generate_2_2_t2v_post","type":"object"},"PikaBody_generate_pikadditions_generate_pikadditions_post":{"properties":{"image":{"format":"binary","title":"Image","type":"string"},"negativePrompt":{"anyOf":[{"type":"string"}],"title":"Negativeprompt"},"promptText":{"anyOf":[{"type":"string"}],"title":"Prompttext"},"seed":{"anyOf":[{"type":"integer"}],"title":"Seed"},"video":{"format":"binary","title":"Video","type":"string"}},"title":"Body_generate_pikadditions_generate_pikadditions_post","type":"object"},"PikaBody_generate_pikaffects_generate_pikaffects_post":{"properties":{"image":{"format":"binary","title":"Image","type":"string"},"negativePrompt":{"anyOf":[{"type":"string"}],"title":"Negativeprompt"},"pikaffect":{"$ref":"#/components/schemas/Pikaffect"},"promptText":{"anyOf":[{"type":"string"}],"title":"Prompttext"},"seed":{"anyOf":[{"type":"integer"}],"title":"Seed"}},"title":"Body_generate_pikaffects_generate_pikaffects_post","type":"object"},"PikaBody_generate_pikaswaps_generate_pikaswaps_post":{"properties":{"image":{"anyOf":[{"format":"binary","type":"string"}],"title":"Image"},"modifyRegionMask":{"anyOf":[{"format":"binary","type":"string"}],"description":"A mask image that specifies the region to modify, where the mask is white and the background is black","title":"Modifyregionmask"},"modifyRegionRoi":{"anyOf":[{"type":"string"}],"description":"Plaintext description of the object / region to modify","title":"Modifyregionroi"},"negativePrompt":{"anyOf":[{"type":"string"}],"title":"Negativeprompt"},"promptText":{"anyOf":[{"type":"string"}],"title":"Prompttext"},"seed":{"anyOf":[{"type":"integer"}],"title":"Seed"},"video":{"format":"binary","title":"Video","type":"string"}},"title":"Body_generate_pikaswaps_generate_pikaswaps_post","type":"object"},"PikaDurationEnum":{"default":5,"enum":[5,10],"type":"integer"},"PikaGenerateResponse":{"properties":{"video_id":{"title":"Video Id","type":"string"}},"required":["video_id"],"title":"GenerateResponse","type":"object"},"PikaHTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/PikaValidationError"},"title":"Detail","type":"array"}},"title":"HTTPValidationError","type":"object"},"PikaResolutionEnum":{"default":"1080p","enum":["1080p","720p"],"type":"string"},"PikaStatusEnum":{"enum":["queued","started","finished"],"type":"string"},"PikaValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"title":"Location","type":"array"},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationError","type":"object"},"PikaVideoResponse":{"properties":{"id":{"title":"Id","type":"string"},"progress":{"nullable":true,"title":"Progress","type":"integer"},"status":{"$ref":"#/components/schemas/PikaStatusEnum"},"url":{"nullable":true,"title":"Url","type":"string"}},"required":["id","status"],"title":"VideoResponse","type":"object"},"Pikaffect":{"enum":["Cake-ify","Crumble","Crush","Decapitate","Deflate","Dissolve","Explode","Eye-pop","Inflate","Levitate","Melt","Peel","Poke","Squish","Ta-da","Tear"],"type":"string"},"PixverseExtendVideoRequest":{"properties":{"duration":{"maximum":15,"minimum":1,"type":"integer"},"generate_audio_switch":{"default":false,"type":"boolean"},"model":{"type":"string"},"negative_prompt":{"type":"string"},"prompt":{"type":"string"},"quality":{"type":"string"},"seed":{"type":"integer"},"source_video_id":{"type":"integer"},"video_media_id":{"type":"integer"}},"required":["model","duration","quality","prompt"],"type":"object"},"PixverseFusionVideoRequest":{"properties":{"aspect_ratio":{"type":"string"},"duration":{"maximum":15,"minimum":1,"type":"integer"},"generate_audio_switch":{"default":false,"type":"boolean"},"image_references":{"items":{"$ref":"#/components/schemas/PixverseImageReference"},"type":"array"},"model":{"type":"string"},"prompt":{"type":"string"},"quality":{"type":"string"},"seed":{"type":"integer"},"video_references":{"items":{"$ref":"#/components/schemas/PixverseVideoReference"},"type":"array"}},"required":["aspect_ratio","image_references","model","duration","quality","prompt"],"type":"object"},"PixverseImageReference":{"properties":{"img_id":{"type":"integer"},"ref_name":{"type":"string"},"type":{"type":"string"}},"required":["img_id"],"type":"object"},"PixverseImageUploadResponse":{"properties":{"ErrCode":{"type":"integer"},"ErrMsg":{"type":"string"},"Resp":{"properties":{"img_id":{"type":"integer"}},"type":"object"}},"type":"object"},"PixverseImageVideoRequest":{"properties":{"duration":{"maximum":15,"minimum":1,"type":"integer"},"generate_audio_switch":{"default":false,"type":"boolean"},"img_id":{"type":"integer"},"model":{"enum":["v3.5","v6"],"type":"string"},"motion_mode":{"enum":["normal","fast"],"type":"string"},"prompt":{"type":"string"},"quality":{"enum":["360p","540p","720p","1080p"],"type":"string"},"seed":{"type":"integer"},"style":{"enum":["anime","3d_animation","clay","comic","cyberpunk"],"type":"string"},"template_id":{"type":"integer"},"water_mark":{"type":"boolean"}},"required":["img_id","model","duration","quality","prompt"],"type":"object"},"PixverseMediaUploadResponse":{"properties":{"ErrCode":{"type":"integer"},"ErrMsg":{"type":"string"},"Resp":{"properties":{"height":{"type":"integer"},"media_id":{"type":"integer"},"media_type":{"type":"string"},"url":{"type":"string"},"width":{"type":"integer"}},"type":"object"}},"type":"object"},"PixverseTextVideoRequest":{"properties":{"aspect_ratio":{"enum":["16:9","4:3","1:1","3:4","9:16","2:3","3:2","21:9"],"type":"string"},"duration":{"maximum":15,"minimum":1,"type":"integer"},"generate_audio_switch":{"default":false,"type":"boolean"},"model":{"enum":["v3.5","v6"],"type":"string"},"motion_mode":{"enum":["normal","fast"],"type":"string"},"negative_prompt":{"type":"string"},"prompt":{"type":"string"},"quality":{"enum":["360p","540p","720p","1080p"],"type":"string"},"seed":{"type":"integer"},"style":{"enum":["anime","3d_animation","clay","comic","cyberpunk"],"type":"string"},"template_id":{"type":"integer"},"water_mark":{"type":"boolean"}},"required":["aspect_ratio","duration","model","prompt","quality"],"type":"object"},"PixverseTransitionVideoRequest":{"properties":{"duration":{"maximum":15,"minimum":1,"type":"integer"},"first_frame_img":{"type":"integer"},"generate_audio_switch":{"default":false,"type":"boolean"},"last_frame_img":{"type":"integer"},"model":{"enum":["v3.5","v6"],"type":"string"},"motion_mode":{"enum":["normal","fast"],"type":"string"},"prompt":{"type":"string"},"quality":{"enum":["360p","540p","720p","1080p"],"type":"string"},"seed":{"type":"integer"},"style":{"enum":["anime","3d_animation","clay","comic","cyberpunk"],"type":"string"},"template_id":{"type":"integer"},"water_mark":{"type":"boolean"}},"required":["first_frame_img","last_frame_img","model","duration","quality","prompt"],"type":"object"},"PixverseVideoReference":{"properties":{"ref_name":{"type":"string"},"source_video_id":{"type":"integer"},"video_media_id":{"type":"integer"}},"type":"object"},"PixverseVideoResponse":{"properties":{"ErrCode":{"type":"integer"},"ErrMsg":{"type":"string"},"Resp":{"properties":{"video_id":{"type":"integer"}},"type":"object"}},"type":"object"},"PixverseVideoResultResponse":{"properties":{"ErrCode":{"type":"integer"},"ErrMsg":{"type":"string"},"Resp":{"properties":{"create_time":{"type":"string"},"credits":{"type":"integer"},"id":{"type":"integer"},"modify_time":{"type":"string"},"negative_prompt":{"type":"string"},"outputHeight":{"type":"integer"},"outputWidth":{"type":"integer"},"prompt":{"type":"string"},"resolution_ratio":{"type":"integer"},"seed":{"type":"integer"},"size":{"type":"integer"},"status":{"description":"Video generation status codes:\n* 1 - Generation successful\n* 5 - Generating\n* 6 - Deleted\n* 7 - Contents moderation failed\n* 8 - Generation failed\n","enum":[1,5,6,7,8],"type":"integer"},"style":{"type":"string"},"url":{"type":"string"}},"type":"object"}},"type":"object"},"PromoCodeResponse":{"properties":{"active":{"description":"Whether the promo code is currently active","type":"boolean"},"code":{"description":"The generated promotional code","type":"string"},"coupon_id":{"description":"The Stripe coupon ID associated with this promo code","type":"string"},"expires_at":{"description":"Unix timestamp when the promo code expires","format":"int64","type":"integer"},"id":{"description":"The Stripe promotion code ID","type":"string"},"max_redemptions":{"description":"Maximum number of times this code can be redeemed","type":"integer"},"metadata":{"additionalProperties":{"type":"string"},"description":"Set of key-value pairs for storing additional information","type":"object"},"times_redeemed":{"description":"Number of times this code has been redeemed","type":"integer"}},"required":["id","code","coupon_id","active"],"type":"object"},"Publisher":{"properties":{"createdAt":{"description":"The date and time the publisher was created.","format":"date-time","type":"string"},"description":{"type":"string"},"id":{"description":"The unique identifier for the publisher. It's akin to a username. Should be lowercase.","type":"string"},"logo":{"description":"URL to the publisher's logo.","type":"string"},"members":{"description":"A list of members in the publisher.","items":{"$ref":"#/components/schemas/PublisherMember"},"type":"array"},"name":{"type":"string"},"source_code_repo":{"type":"string"},"status":{"$ref":"#/components/schemas/PublisherStatus"},"support":{"type":"string"},"website":{"type":"string"}},"type":"object"},"PublisherMember":{"properties":{"id":{"description":"The unique identifier for the publisher member.","type":"string"},"role":{"description":"The role of the user in the publisher.","type":"string"},"user":{"$ref":"#/components/schemas/PublisherUser"}},"type":"object"},"PublisherStatus":{"enum":["PublisherStatusActive","PublisherStatusBanned"],"type":"string"},"PublisherUser":{"properties":{"email":{"description":"The email address for this user.","type":"string"},"id":{"description":"The unique id for this user.","type":"string"},"name":{"description":"The name for this user.","type":"string"}},"type":"object"},"QuiverImageObject":{"description":"Image input for Quiver AI (URL or base64)","properties":{"base64":{"description":"Base64-encoded image payload","maxLength":16777216,"type":"string"},"url":{"description":"Network image URL. Only http/https URLs allowed.","format":"uri","type":"string"}},"type":"object"},"QuiverImageToSVGRequest":{"description":"Request body for Quiver AI image-to-SVG vectorization","properties":{"auto_crop":{"default":false,"description":"Auto-crop image to the dominant subject before vectorization","type":"boolean"},"image":{"$ref":"#/components/schemas/QuiverImageObject"},"max_output_tokens":{"description":"Maximum number of output tokens","maximum":131072,"minimum":1,"type":"integer"},"model":{"description":"Model identifier for SVG vectorization","example":"arrow-1.1","type":"string"},"presence_penalty":{"default":0,"description":"Penalty for tokens already present in prior output","maximum":2,"minimum":-2,"nullable":true,"type":"number"},"stream":{"default":false,"description":"Enable Server-Sent Events streaming","type":"boolean"},"target_size":{"description":"Square resize target in pixels","maximum":4096,"minimum":128,"type":"integer"},"temperature":{"default":1,"description":"Sampling temperature","maximum":2,"minimum":0,"type":"number"},"top_p":{"default":1,"description":"Nucleus sampling probability","maximum":1,"minimum":0,"type":"number"}},"required":["model","image"],"type":"object"},"QuiverSVGResponse":{"description":"Response from Quiver AI SVG generation/vectorization","properties":{"created":{"description":"Unix timestamp of creation","type":"integer"},"credits":{"description":"Credit cost for this request. Use this for billing instead of usage tokens.","minimum":0,"type":"integer"},"data":{"items":{"properties":{"mime_type":{"description":"MIME type of the output","enum":["image/svg+xml"],"type":"string"},"svg":{"description":"Raw SVG markup","type":"string"}},"required":["svg","mime_type"],"type":"object"},"minItems":1,"type":"array"},"id":{"description":"Unique identifier for the generation","type":"string"},"usage":{"deprecated":true,"description":"Deprecated. Use credits for billing values.","properties":{"input_tokens":{"deprecated":true,"description":"Deprecated. Token counts are retained for compatibility and may be zeroed.","minimum":0,"type":"integer"},"output_tokens":{"deprecated":true,"description":"Deprecated. Token counts are retained for compatibility and may be zeroed.","minimum":0,"type":"integer"},"total_tokens":{"deprecated":true,"description":"Deprecated. Token counts are retained for compatibility and may be zeroed.","minimum":0,"type":"integer"}},"type":"object"}},"required":["id","created","data"],"type":"object"},"QuiverTextToSVGRequest":{"description":"Request body for Quiver AI text-to-SVG generation","properties":{"instructions":{"description":"Additional style or formatting guidance","type":"string"},"max_output_tokens":{"description":"Maximum number of output tokens","maximum":131072,"minimum":1,"type":"integer"},"model":{"description":"Model identifier for SVG generation","example":"arrow-1.1","type":"string"},"n":{"default":1,"description":"Number of SVGs to generate","maximum":16,"minimum":1,"type":"integer"},"presence_penalty":{"default":0,"description":"Penalty for tokens already present in prior output","maximum":2,"minimum":-2,"nullable":true,"type":"number"},"prompt":{"description":"Text description of the desired SVG output","type":"string"},"references":{"description":"Optional reference images to guide style/composition. Accepts URL object, base64 object, or URL string shorthand. Runtime limits are model-specific.","items":{"oneOf":[{"$ref":"#/components/schemas/QuiverImageObject"},{"description":"URL string shorthand for a reference image","format":"uri","type":"string"}]},"maxItems":16,"type":"array"},"temperature":{"default":1,"description":"Sampling temperature","maximum":2,"minimum":0,"type":"number"},"top_p":{"default":1,"description":"Nucleus sampling probability","maximum":1,"minimum":0,"type":"number"}},"required":["model","prompt"],"type":"object"},"QwenMultimodalGenerationRequest":{"properties":{"input":{"description":"The input parameter object containing the request messages","properties":{"messages":{"description":"The request content array. Only single-round conversations are supported, so the array must contain exactly one object","items":{"properties":{"content":{"description":"The message content array. Text-to-image contains one text object; image editing contains 1-3 image objects and one text object","items":{"properties":{"image":{"description":"The URL or Base64 encoded data of an input image. 1-3 images are supported for image editing","type":"string"},"text":{"description":"The positive prompt that describes the image content, style, and composition to generate or edit","type":"string"}},"type":"object"},"type":"array"},"role":{"description":"The role of the message sender. Must be set to user","type":"string"}},"required":["role","content"],"type":"object"},"type":"array"}},"required":["messages"],"type":"object"},"model":{"description":"The ID of the model to call for multimodal image generation and editing. Available values are qwen-image-3.0-pro and qwen-image-3.0","type":"string"},"parameters":{"description":"Additional parameters to control image generation","properties":{"n":{"default":1,"description":"The number of output images. Range 1-6, default is 1","maximum":6,"minimum":1,"type":"integer"},"negative_prompt":{"description":"The negative prompt that describes content you do not want to appear in the image","type":"string"},"prompt_extend":{"default":true,"description":"Whether to enable intelligent prompt rewriting. Default is true","type":"boolean"},"prompt_extend_mode":{"default":"direct","description":"The prompt rewriting method, direct (default, supported for T2I and I2I) or agent (T2I only)","type":"string"},"seed":{"description":"Random number seed to control randomness. Range [0, 2147483647]","maximum":2147483647,"minimum":0,"type":"integer"},"size":{"description":"The output image resolution in the format width*height, for example 1024*1024. The API accepts a pixel area between 262144 (512*512) and 6553600 (2560*2560) with an aspect ratio between 1:8 and 8:1. If not specified, the model automatically recommends a resolution based on the prompt","type":"string"},"watermark":{"default":false,"description":"Whether to add a watermark. Default is false","type":"boolean"}},"type":"object"}},"required":["model","input"],"type":"object"},"QwenMultimodalGenerationResponse":{"properties":{"code":{"description":"The error code for the failed request (not returned if request is successful)","type":"string"},"message":{"description":"Detailed information about the failed request (not returned if request is successful)","type":"string"},"output":{"description":"Contains the model generation results","properties":{"choices":{"description":"The list of result options","items":{"properties":{"finish_reason":{"description":"The reason why the task stopped. The value is stop when the task completes normally","type":"string"},"message":{"description":"The message returned by the model","properties":{"content":{"description":"The message content containing the generated image information","items":{"properties":{"image":{"description":"The URL of the generated image in PNG format. The link is valid for 24 hours","type":"string"},"text":{"description":"A textual element returned in place of an image. An element carrying only this field produced NO asset, so a caller keys completion off `image` rather than off the presence of a content element","type":"string"}},"type":"object"},"type":"array"},"role":{"description":"The role of the message. Fixed as assistant","type":"string"}},"type":"object"}},"type":"object"},"type":"array"}},"type":"object"},"request_id":{"description":"Unique request identifier","type":"string"},"usage":{"description":"The resource usage of this call. Only returned on success","properties":{"input_image_count":{"description":"The number of input images in the request. Returns 0 for text-to-image","type":"integer"},"input_image_type":{"description":"The input image billing tier, qima_input_1k or qima_input_2k, determined by the output resolution pixel area","type":"string"},"output_height":{"description":"The height of the final output image in pixels","type":"integer"},"output_image_count":{"description":"The actual number of output images returned","type":"integer"},"output_image_type":{"description":"The output image billing tier, qima_output_1k or qima_output_2k, determined by the output resolution pixel area","type":"string"},"output_width":{"description":"The width of the final output image in pixels","type":"integer"}},"type":"object"}},"type":"object"},"RGBColor":{"description":"RGB color values","example":{"rgb":[255,0,0]},"properties":{"rgb":{"items":{"maximum":255,"minimum":0,"type":"integer"},"maxItems":3,"minItems":3,"type":"array"}},"required":["rgb"],"type":"object"},"Reasoning":{"description":"**o-series models only**\n\nConfiguration options for\n[reasoning models](https://platform.openai.com/docs/guides/reasoning).\n","properties":{"context":{"description":"Controls which reasoning items are rendered back to the model on later turns, e.g. `auto`, `current_turn`, or `all_turns`.","nullable":true,"type":"string"},"effort":{"allOf":[{"$ref":"#/components/schemas/ReasoningEffort"}],"nullable":true},"generate_summary":{"deprecated":true,"description":"**Deprecated:** use `summary` instead.\n\nA summary of the reasoning performed by the model. This can be\nuseful for debugging and understanding the model's reasoning process.\nOne of `auto`, `concise`, or `detailed`.\n","enum":["auto","concise","detailed"],"type":"string"},"mode":{"description":"The reasoning mode used for the response.","type":"string"},"summary":{"description":"A summary of the reasoning performed by the model. This can be\nuseful for debugging and understanding the model's reasoning process.\nOne of `auto`, `concise`, or `detailed`.\n","enum":["auto","concise","detailed"],"nullable":true,"type":"string"}},"title":"Reasoning","type":"object"},"ReasoningEffort":{"default":"medium","description":"**o-series models only**\n\nConstrains effort on reasoning for\n[reasoning models](https://platform.openai.com/docs/guides/reasoning).\nCurrently supported values are `low`, `medium`, and `high`. Reducing\nreasoning effort can result in faster responses and fewer tokens used\non reasoning in a response.\n","enum":["low","medium","high"],"type":"string"},"ReasoningItem":{"description":"A description of the chain of thought used by a reasoning model while generating\na response.\n","properties":{"id":{"description":"The unique identifier of the reasoning content.\n","type":"string"},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or\n`incomplete`. Populated when items are returned via API.\n","enum":["in_progress","completed","incomplete"],"type":"string"},"summary":{"description":"Reasoning text contents.\n","items":{"properties":{"text":{"description":"A short summary of the reasoning used by the model when generating\nthe response.\n","type":"string"},"type":{"description":"The type of the object. Always `summary_text`.\n","enum":["summary_text"],"type":"string","x-stainless-const":true}},"required":["type","text"],"type":"object"},"type":"array"},"type":{"description":"The type of the object. Always `reasoning`.\n","enum":["reasoning"],"type":"string","x-stainless-const":true}},"required":["id","summary","type"],"title":"Reasoning","type":"object"},"RecraftCreateStyleRequest":{"description":"Request body for creating a Recraft style reference","properties":{"file1":{"description":"First image file (PNG, JPG, or WEBP)","format":"binary","type":"string"},"file2":{"description":"Second image file (PNG, JPG, or WEBP)","format":"binary","type":"string"},"file3":{"description":"Third image file (PNG, JPG, or WEBP)","format":"binary","type":"string"},"file4":{"description":"Fourth image file (PNG, JPG, or WEBP)","format":"binary","type":"string"},"file5":{"description":"Fifth image file (PNG, JPG, or WEBP)","format":"binary","type":"string"},"style":{"description":"The base style of the generated images","enum":["realistic_image","digital_illustration","vector_illustration","icon"],"type":"string"}},"required":["style","file1"],"type":"object"},"RecraftCreateStyleResponse":{"description":"Response containing the created style ID","properties":{"id":{"description":"The unique identifier of the created style","format":"uuid","type":"string"}},"required":["id"],"type":"object"},"RecraftGenerateImageResponse":{"properties":{"created":{"type":"integer"},"credits":{"type":"integer"},"data":{"items":{"$ref":"#/components/schemas/RecraftImage"},"type":"array"}},"required":["created","data","credits"],"type":"object"},"RecraftImage":{"properties":{"b64_json":{"type":"string"},"features":{"$ref":"#/components/schemas/RecraftImageFeatures"},"image_id":{"format":"uuid","type":"string"},"revised_prompt":{"type":"string"},"url":{"type":"string"}},"required":["image_id"],"type":"object"},"RecraftImageColor":{"properties":{"rgb":{"items":{"type":"integer"},"type":"array"},"std":{"items":{"type":"number"},"type":"array"},"weight":{"type":"number"}},"type":"object"},"RecraftImageFeatures":{"properties":{"nsfw_score":{"type":"number"}},"type":"object"},"RecraftImageFormat":{"enum":["webp","png"],"type":"string"},"RecraftImageGenerationRequest":{"description":"Parameters for the Recraft image generation proxy request.","properties":{"controls":{"description":"The controls for the generated image","properties":{"artistic_level":{"description":"Defines artistic tone of your image. At a simple level, the person looks straight at the camera in a static and clean style. Dynamic and eccentric levels introduce movement and creativity.","maximum":5,"minimum":0,"nullable":true,"type":"integer"},"background_color":{"$ref":"#/components/schemas/RGBColor"},"colors":{"description":"An array of preferable colors","items":{"$ref":"#/components/schemas/RGBColor"},"type":"array"},"no_text":{"description":"Do not embed text layouts","type":"boolean"}},"type":"object"},"model":{"description":"The model to use for generation (e.g., \"recraftv3\"). This field is NOT constrained to an enum: the proxy forwards whatever the caller sends. The spellings Comfy ships — the set Comfy Router addresses as `recraft/\u003cmodel\u003e` — are recraftv2, recraftv3, recraftv4, recraftv4_pro, recraftv4_1, recraftv4_1_utility, recraftv4_1_pro, recraftv4_1_utility_pro, recraftv4_styles, recraftv4_styles_pro, recraftv4_1_vector, recraftv4_1_utility_vector, recraftv4_1_pro_vector, recraftv4_1_utility_pro_vector, recraftv4_styles_vector and recraftv4_styles_pro_vector. They are written out here rather than named by reference because the RecraftGenerationModel component that declares them is `$ref`-ed by nothing and is therefore pruned from the spec served at GET /openapi, so a pointer to it would dangle in the served document. The four `recraftv4_styles*` spellings additionally require `style_id` — see that field.","type":"string"},"n":{"description":"The number of images to generate","maximum":4,"minimum":1,"type":"integer"},"prompt":{"description":"The text prompt describing the image to generate","type":"string"},"size":{"description":"The size of the generated image (e.g., \"1024x1024\")","type":"string"},"style":{"description":"The style to apply to the generated image (e.g., \"digital_illustration\")","type":"string"},"style_id":{"description":"The style ID to apply to the generated image (e.g., \"123e4567-e89b-12d3-a456-426614174000\"). If style_id is provided, style should not be provided. REQUIRED by the four `recraftv4_styles*` models: Recraft rejects those without a style_id or style reference. Mint one with `POST /proxy/recraft/styles`, which this same proxy serves under the same credentials. Nothing on this route enforces the pairing — the body is forwarded to Recraft unchanged, so a `recraftv4_styles*` call without it reaches the partner and comes back 4xx.","type":"string"}},"required":["prompt","model","size","n"],"type":"object"},"RecraftImageGenerationResponse":{"description":"Response from the Recraft image generation API.","properties":{"created":{"description":"Unix timestamp when the generation was created","type":"integer"},"credits":{"description":"Number of credits used for the generation","type":"integer"},"data":{"description":"Array of generated image information","items":{"properties":{"image_id":{"description":"Unique identifier for the generated image","type":"string"},"url":{"description":"URL to access the generated image","type":"string"}},"type":"object"},"type":"array"}},"required":["created","credits","data"],"type":"object"},"RecraftImageStyle":{"enum":["digital_illustration","icon","realistic_image","vector_illustration"],"type":"string"},"RecraftImageSubStyle":{"enum":["2d_art_poster","3d","80s","glow","grain","hand_drawn","infantile_sketch","kawaii","pixel_art","psychedelic","seamless","voxel","watercolor","broken_line","colored_outline","colored_shapes","colored_shapes_gradient","doodle_fill","doodle_offset_fill","offset_fill","outline","outline_gradient","uneven_fill","70s","cartoon","doodle_line_art","engraving","flat_2","kawaii","line_art","linocut","seamless","b_and_w","enterprise","hard_flash","hdr","motion_blur","natural_light","studio_portrait","line_circuit","2d_art_poster_2","engraving_color","flat_air_art","hand_drawn_outline","handmade_3d","stickers_drawings","plastic","pictogram"],"type":"string"},"RecraftImageToImageRequest":{"properties":{"block_nsfw":{"type":"boolean"},"calculate_features":{"type":"boolean"},"controls":{"$ref":"#/components/schemas/RecraftUserControls"},"image":{"format":"binary","type":"string"},"image_format":{"$ref":"#/components/schemas/RecraftImageFormat"},"model":{"$ref":"#/components/schemas/RecraftTransformModel"},"n":{"type":"integer"},"negative_prompt":{"type":"string"},"prompt":{"type":"string"},"response_format":{"$ref":"#/components/schemas/RecraftResponseFormat"},"strength":{"type":"number"},"style":{"$ref":"#/components/schemas/RecraftImageStyle"},"style_id":{"format":"uuid","type":"string"},"substyle":{"$ref":"#/components/schemas/RecraftImageSubStyle"},"text_layout":{"$ref":"#/components/schemas/RecraftTextLayout"}},"required":["prompt","image","strength"],"type":"object"},"RecraftProcessImageRequest":{"properties":{"image":{"format":"binary","type":"string"},"image_format":{"$ref":"#/components/schemas/RecraftImageFormat"},"response_format":{"$ref":"#/components/schemas/RecraftResponseFormat"}},"required":["image"],"type":"object"},"RecraftProcessImageResponse":{"properties":{"created":{"type":"integer"},"credits":{"type":"integer"},"image":{"$ref":"#/components/schemas/RecraftImage"}},"required":["created","image","credits"],"type":"object"},"RecraftResponseFormat":{"enum":["url","b64_json"],"type":"string"},"RecraftTextLayout":{"items":{"$ref":"#/components/schemas/RecraftTextLayoutItem"},"type":"array"},"RecraftTextLayoutItem":{"properties":{"bbox":{"items":{"items":{"type":"number","x-go-type":"float32"},"type":"array"},"type":"array"},"text":{"type":"string"}},"required":["text","bbox"],"type":"object"},"RecraftTransformImageWithMaskRequest":{"properties":{"block_nsfw":{"type":"boolean"},"calculate_features":{"type":"boolean"},"image":{"format":"binary","type":"string"},"image_format":{"$ref":"#/components/schemas/RecraftImageFormat"},"mask":{"format":"binary","type":"string"},"model":{"$ref":"#/components/schemas/RecraftTransformModel"},"n":{"type":"integer"},"negative_prompt":{"type":"string"},"prompt":{"type":"string"},"response_format":{"$ref":"#/components/schemas/RecraftResponseFormat"},"style":{"$ref":"#/components/schemas/RecraftImageStyle"},"style_id":{"format":"uuid","type":"string"},"substyle":{"$ref":"#/components/schemas/RecraftImageSubStyle"},"text_layout":{"$ref":"#/components/schemas/RecraftTextLayout"}},"required":["image","mask","prompt"],"type":"object"},"RecraftTransformModel":{"enum":["refm1","recraft20b","recraftv2","recraftv3","recraftv4","recraftv4_pro","flux1_1pro","flux1dev","imagen3","hidream_i1_dev"],"type":"string"},"RecraftUserControls":{"properties":{"artistic_level":{"type":"integer"},"background_color":{"$ref":"#/components/schemas/RecraftImageColor"},"colors":{"items":{"$ref":"#/components/schemas/RecraftImageColor"},"type":"array"},"no_text":{"type":"boolean"}},"type":"object"},"RefusalContent":{"description":"A refusal emitted by the model in place of generated content. It arrives inside an `OutputMessage`, exactly where an `output_text` part would, and the response's `status` is still `completed`.\n","properties":{"refusal":{"description":"The refusal explanation from the model.","type":"string"},"type":{"description":"The type of output content. Always `refusal`.","enum":["refusal"],"type":"string","x-stainless-const":true}},"required":["type","refusal"],"title":"Refusal","type":"object"},"ReleaseNote":{"properties":{"attention":{"description":"The attention level for this release","enum":["low","medium","high"],"type":"string"},"content":{"description":"The content of the release note in markdown format","type":"string"},"id":{"description":"Unique identifier for the release note","type":"integer"},"project":{"description":"The project this release note belongs to","enum":["comfyui","comfyui_frontend","desktop","cloud"],"type":"string"},"published_at":{"description":"When the release note was published","format":"date-time","type":"string"},"version":{"description":"The version of the release","type":"string"}},"required":["id","project","version","attention","content","published_at"],"type":"object"},"RenderingSpeed":{"default":"DEFAULT","description":"The rendering speed setting that controls the trade-off between generation speed and quality","enum":["DEFAULT","TURBO","QUALITY"],"type":"string"},"ResponseCompletedEvent":{"description":"Emitted when the model response is complete.","properties":{"response":{"$ref":"#/components/schemas/OpenAIResponse"},"type":{"description":"The type of the event. Always `response.completed`.","enum":["response.completed"],"type":"string","x-stainless-const":true}},"required":["type","response"],"type":"object"},"ResponseContentPartAddedEvent":{"description":"Emitted when a new content part is added.","properties":{"content_index":{"description":"The index of the content part that was added.","type":"integer"},"item_id":{"description":"The ID of the output item that the content part was added to.","type":"string"},"output_index":{"description":"The index of the output item that the content part was added to.","type":"integer"},"part":{"$ref":"#/components/schemas/OutputContent"},"type":{"description":"The type of the event. Always `response.content_part.added`.","enum":["response.content_part.added"],"type":"string","x-stainless-const":true}},"required":["type","item_id","output_index","content_index","part"],"type":"object"},"ResponseContentPartDoneEvent":{"description":"Emitted when a content part is done.","properties":{"content_index":{"description":"The index of the content part that is done.","type":"integer"},"item_id":{"description":"The ID of the output item that the content part was added to.","type":"string"},"output_index":{"description":"The index of the output item that the content part was added to.","type":"integer"},"part":{"$ref":"#/components/schemas/OutputContent"},"type":{"description":"The type of the event. Always `response.content_part.done`.","enum":["response.content_part.done"],"type":"string","x-stainless-const":true}},"required":["type","item_id","output_index","content_index","part"],"type":"object"},"ResponseCreatedEvent":{"description":"An event that is emitted when a response is created.","properties":{"response":{"$ref":"#/components/schemas/OpenAIResponse"},"type":{"description":"The type of the event. Always `response.created`.","enum":["response.created"],"type":"string","x-stainless-const":true}},"required":["type","response"],"type":"object"},"ResponseError":{"description":"An error object returned when the model fails to generate a Response.","properties":{"code":{"$ref":"#/components/schemas/ResponseErrorCode"},"message":{"description":"A human-readable description of the error.","type":"string"}},"required":["code","message"],"type":"object"},"ResponseErrorCode":{"description":"The error code for the response.","enum":["server_error","rate_limit_exceeded","invalid_prompt","vector_store_timeout","invalid_image","invalid_image_format","invalid_base64_image","invalid_image_url","image_too_large","image_too_small","image_parse_error","image_content_policy_violation","invalid_image_mode","image_file_too_large","unsupported_image_media_type","empty_image_file","failed_to_download_image","image_file_not_found"],"type":"string"},"ResponseErrorEvent":{"description":"Emitted when an error occurs.","properties":{"code":{"description":"The error code.\n","type":"string"},"message":{"description":"The error message.\n","type":"string"},"param":{"description":"The error parameter.\n","type":"string"},"type":{"description":"The type of the event. Always `error`.\n","enum":["error"],"type":"string","x-stainless-const":true}},"required":["type","code","message","param"],"type":"object"},"ResponseFailedEvent":{"description":"An event that is emitted when a response fails.\n","properties":{"response":{"$ref":"#/components/schemas/OpenAIResponse"},"type":{"description":"The type of the event. Always `response.failed`.\n","enum":["response.failed"],"type":"string","x-stainless-const":true}},"required":["type","response"],"type":"object"},"ResponseFormatJsonObject":{"description":"JSON object response format. An older method of generating JSON responses.\nUsing `json_schema` is recommended for models that support it. Note that the\nmodel will not generate JSON without a system or user message instructing it\nto do so.\n","properties":{"type":{"description":"The type of response format being defined. Always `json_object`.","enum":["json_object"],"type":"string","x-stainless-const":true}},"required":["type"],"title":"JSON object","type":"object"},"ResponseFormatJsonSchemaSchema":{"additionalProperties":true,"description":"The schema for the response format, described as a JSON Schema object.\nLearn how to build JSON schemas [here](https://json-schema.org/).\n","title":"JSON schema","type":"object"},"ResponseFormatText":{"description":"Default response format. Used to generate text responses.\n","properties":{"type":{"description":"The type of response format being defined. Always `text`.","enum":["text"],"type":"string","x-stainless-const":true}},"required":["type"],"title":"Text","type":"object"},"ResponseInProgressEvent":{"description":"Emitted when the response is in progress.","properties":{"response":{"$ref":"#/components/schemas/OpenAIResponse"},"type":{"description":"The type of the event. Always `response.in_progress`.\n","enum":["response.in_progress"],"type":"string","x-stainless-const":true}},"required":["type","response"],"type":"object"},"ResponseIncompleteEvent":{"description":"An event that is emitted when a response finishes as incomplete.\n","properties":{"response":{"$ref":"#/components/schemas/OpenAIResponse"},"type":{"description":"The type of the event. Always `response.incomplete`.\n","enum":["response.incomplete"],"type":"string","x-stainless-const":true}},"required":["type","response"],"type":"object"},"ResponseOutputItemAddedEvent":{"description":"Emitted when a new output item is added.","properties":{"item":{"$ref":"#/components/schemas/OutputItem"},"output_index":{"description":"The index of the output item that was added.\n","type":"integer"},"type":{"description":"The type of the event. Always `response.output_item.added`.\n","enum":["response.output_item.added"],"type":"string","x-stainless-const":true}},"required":["type","output_index","item"],"type":"object"},"ResponseOutputItemDoneEvent":{"description":"Emitted when an output item is marked done.","properties":{"item":{"$ref":"#/components/schemas/OutputItem"},"output_index":{"description":"The index of the output item that was marked done.\n","type":"integer"},"type":{"description":"The type of the event. Always `response.output_item.done`.\n","enum":["response.output_item.done"],"type":"string","x-stainless-const":true}},"required":["type","output_index","item"],"type":"object"},"ResponseProperties":{"properties":{"instructions":{"description":"Inserts a system (or developer) message as the first item in the model's context.\n\nWhen using along with `previous_response_id`, the instructions from a previous\nresponse will not be carried over to the next response. This makes it simple\nto swap out system (or developer) messages in new responses.\n","nullable":true,"type":"string"},"max_output_tokens":{"description":"An upper bound for the number of tokens that can be generated for a response, including visible output tokens and [reasoning tokens](/docs/guides/reasoning).\n","type":"integer"},"previous_response_id":{"description":"The unique ID of the previous response to the model. Use this to\ncreate multi-turn conversations. Learn more about\n[conversation state](/docs/guides/conversation-state).\n","nullable":true,"type":"string"},"reasoning":{"$ref":"#/components/schemas/Reasoning"},"text":{"properties":{"format":{"$ref":"#/components/schemas/TextResponseFormatConfiguration"},"verbosity":{"description":"Constrains the verbosity of the model's response. One of `low`, `medium`, or `high`.","type":"string"}},"type":"object"},"tool_choice":{"description":"How the model should select which tool (or tools) to use when generating\na response. See the `tools` parameter to see how to specify which tools\nthe model can call.\n","oneOf":[{"$ref":"#/components/schemas/ToolChoiceOptions"},{"$ref":"#/components/schemas/ToolChoiceTypes"},{"$ref":"#/components/schemas/ToolChoiceFunction"}]},"tools":{"items":{"$ref":"#/components/schemas/Tool"},"type":"array"},"truncation":{"default":"disabled","description":"The truncation strategy to use for the model response.\n- `auto`: If the context of this response and previous ones exceeds\n the model's context window size, the model will truncate the\n response to fit the context window by dropping input items in the\n middle of the conversation.\n- `disabled` (default): If a model response will exceed the context window\n size for a model, the request will fail with a 400 error.\n","enum":["auto","disabled"],"type":"string"}},"type":"object"},"ResponseUsage":{"description":"Represents token usage details including input tokens, output tokens,\na breakdown of output tokens, and the total tokens used.\n","properties":{"input_tokens":{"description":"The number of input tokens.","type":"integer"},"input_tokens_details":{"description":"A detailed breakdown of the input tokens.","properties":{"cache_write_tokens":{"description":"The number of input tokens that were written to the cache.","type":"integer"},"cached_tokens":{"description":"The number of tokens that were retrieved from the cache.\n[More on prompt caching](/docs/guides/prompt-caching).\n","type":"integer"}},"required":["cached_tokens"],"type":"object"},"output_tokens":{"description":"The number of output tokens.","type":"integer"},"output_tokens_details":{"description":"A detailed breakdown of the output tokens.","properties":{"reasoning_tokens":{"description":"The number of reasoning tokens.","type":"integer"}},"required":["reasoning_tokens"],"type":"object"},"total_tokens":{"description":"The total number of tokens used.","type":"integer"}},"required":["input_tokens","input_tokens_details","output_tokens","output_tokens_details","total_tokens"],"type":"object"},"ReveImageCreateRequest":{"description":"Request body for Reve image creation.","properties":{"aspect_ratio":{"default":"3:2","description":"The desired aspect ratio of the generated image.","enum":["16:9","9:16","3:2","2:3","4:3","3:4","1:1"],"type":"string"},"postprocessing":{"description":"Optional postprocessing operations to apply after generation. May add additional cost.","items":{"$ref":"#/components/schemas/RevePostprocessingOperation"},"type":"array"},"prompt":{"description":"The text description of the desired image. Maximum length is 2560 characters.","maxLength":2560,"type":"string"},"test_time_scaling":{"description":"If included, the model will spend more effort making better images. Values between 1 and 15 are accepted. Adds additional credits cost.","maximum":15,"minimum":1,"type":"number"},"version":{"default":"latest","description":"Model version to use. Supported: latest, reve-create@20250915.","type":"string"}},"required":["prompt"],"type":"object"},"ReveImageEditRequest":{"description":"Request body for Reve image editing.","properties":{"aspect_ratio":{"description":"The desired aspect ratio. Defaults to the aspect ratio of the reference image if not provided.","enum":["16:9","9:16","3:2","2:3","4:3","3:4","1:1"],"type":"string"},"edit_instruction":{"description":"The text description of how to edit the provided image. Maximum length is 2560 characters.","maxLength":2560,"type":"string"},"postprocessing":{"description":"Optional postprocessing operations to apply after generation. May add additional cost.","items":{"$ref":"#/components/schemas/RevePostprocessingOperation"},"type":"array"},"reference_image":{"description":"A base64 encoded image to use as reference for the edit.","type":"string"},"test_time_scaling":{"description":"If included, the model will spend more effort making better images. Values between 1 and 15 are accepted. Adds additional credits cost.","maximum":15,"minimum":1,"type":"number"},"version":{"default":"latest","description":"Model version to use. Supported: latest-fast, latest, reve-edit-fast@20251030, reve-edit@20250915.","type":"string"}},"required":["edit_instruction","reference_image"],"type":"object"},"ReveImageRemixRequest":{"description":"Request body for Reve image remixing.","properties":{"aspect_ratio":{"description":"The desired aspect ratio. If not provided, smartly chosen by the model.","enum":["16:9","9:16","3:2","2:3","4:3","3:4","1:1"],"type":"string"},"postprocessing":{"description":"Optional postprocessing operations to apply after generation. May add additional cost.","items":{"$ref":"#/components/schemas/RevePostprocessingOperation"},"type":"array"},"prompt":{"description":"The text description of the desired image. May include xml img tags to refer to specific reference images by index. Maximum length is 2560 characters.","maxLength":2560,"type":"string"},"reference_images":{"description":"A list of 1-6 base64 encoded reference images. Each must be less than 10 MB. Total pixel count must be no more than 32 million pixels.","items":{"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"test_time_scaling":{"description":"If included, the model will spend more effort making better images. Values between 1 and 15 are accepted. Adds additional credits cost.","maximum":15,"minimum":1,"type":"number"},"version":{"default":"latest","description":"Model version to use. Supported: latest-fast, latest, reve-remix-fast@20251030, reve-remix@20250915.","type":"string"}},"required":["prompt","reference_images"],"type":"object"},"ReveImageResponse":{"description":"Response from the Reve image API.","properties":{"content_violation":{"description":"Indicates whether the generated image violates the content policy.","type":"boolean"},"credits_remaining":{"description":"The number of credits remaining in your budget.","type":"number"},"credits_used":{"description":"The number of credits used for this request.","type":"number"},"image":{"description":"The base64 encoded image data. Empty if the request was not successful.","type":"string"},"request_id":{"description":"A unique id for the request.","type":"string"},"version":{"description":"The specific model version used in the generation process.","type":"string"}},"type":"object"},"RevePostprocessingOperation":{"description":"A postprocessing operation to apply after image generation.","properties":{"effect_name":{"description":"Name of the effect to apply. Only used when process is effect.","type":"string"},"effect_parameters":{"description":"Optional parameters to override default effect settings.","type":"object"},"max_dim":{"description":"Maximum dimension for fit_image. At least one of max_dim, max_width, or max_height must be set.","maximum":1024,"type":"integer"},"max_height":{"description":"Maximum height for fit_image.","maximum":1024,"type":"integer"},"max_width":{"description":"Maximum width for fit_image.","maximum":1024,"type":"integer"},"process":{"description":"The postprocessing operation: upscale, remove_background, fit_image, or effect.","enum":["upscale","remove_background","fit_image","effect"],"type":"string"},"upscale_factor":{"description":"Upscale factor (2, 3, or 4). Only used when process is upscale.","maximum":4,"minimum":2,"type":"integer"}},"required":["process"],"type":"object"},"Rodin3DCheckStatusRequest":{"properties":{"subscription_key":{"description":"subscription from generate endpoint","type":"string"}},"required":["subscription_key"],"type":"object"},"Rodin3DCheckStatusResponse":{"properties":{"jobs":{"description":"Details for the generation status.","items":{"$ref":"#/components/schemas/RodinCheckStatusJobItem"},"type":"array"}},"type":"object"},"Rodin3DDownloadRequest":{"properties":{"task_uuid":{"description":"Task UUID","type":"string"}},"required":["task_uuid"],"type":"object"},"Rodin3DDownloadResponse":{"properties":{"list":{"items":{"$ref":"#/components/schemas/RodinResourceItem"},"type":"array"}},"type":"object"},"Rodin3DGenerateRequest":{"properties":{"TAPose":{"description":"Optional. When generating the human-like model, this parameter controls the generation result to T/A pose. When true, your model will be either T pose or A pose.\n","type":"boolean"},"addons":{"description":"Optional. The default is []. Possible value is `HighPack`. By selecting HighPack: generate 4K resolution texture instead of the default 2K. If Quad mode, the number of faces will be ~16 times the number of faces selected in the `quality` parameter.\n","items":{"$ref":"#/components/schemas/RodinAddonType"},"type":"array"},"bbox_condition":{"description":"Optional. This is a controlnet that controls the maximum size of the generated model. This array must contain 3 elements, Width (Y-axis), Height (Z-axis), and Length (X-axis), in this exact fixed sequence (y, z, x).\n","items":{"type":"integer"},"type":"array"},"condition_mode":{"$ref":"#/components/schemas/RodinConditionModeType"},"geometry_file_format":{"$ref":"#/components/schemas/RodinGeometryFileFormatType"},"geometry_instruct_mode":{"$ref":"#/components/schemas/RodinGeometryInstructModeType"},"hd_texture":{"description":"Optional. Default is false. If true, high-quality texture will be provided.\n","type":"boolean"},"images":{"description":"Images to be used in generation, up to 5 images. As the form data request will preserve the order of the images, the first image will be the image for material generation. For Image-to-3D generation: required (one or more images are needed, maximum 5 images). For Text-to-3D generation: null.\n","type":"string"},"is_micro":{"description":"Optional. Default is false. If true, micro detail scale is applied. This parameter is only available in the Gen-2.5-Extreme-High tier.\n","type":"boolean"},"is_symmetric":{"description":"Optional. Default is false. If true, this parameter will determine whether the generated model is symmetric.\n","type":"boolean"},"material":{"$ref":"#/components/schemas/RodinMaterialType"},"mesh_mode":{"$ref":"#/components/schemas/RodinMeshModeType"},"mesh_simplify":{"description":"Optional. Default is true. If true, the generated models will be simplified. This parameter takes effect when mesh_mode is set to Raw.\n","type":"boolean"},"mesh_smooth":{"description":"Optional. Default is false. If true, the generated models will be smoothed (similar to Rodin Gen-1). This parameter takes effect when mesh_mode is set to Quad.\n","type":"boolean"},"preview_render":{"description":"Optional. Default is false. If true, an additional high-quality render image will be provided in the download list.\n","type":"boolean"},"prompt":{"description":"A textual prompt to guide the model generation. For Image-to-3D generation: optional (if not provided, an AI-generated prompt based on the provided images will be used). For Text-to-3D generation: required.\n","type":"string"},"quality":{"$ref":"#/components/schemas/RodinQualityType"},"quality_override":{"description":"Optional. Customize poly count for generation, providing more accurate control over mesh face count. When mesh_mode = Raw: range from 500 to 1,000,000 (default 500,000). When mesh_mode = Quad: range from 1,000 to 200,000 (default 18,000). When this parameter is invoked, the `quality` parameter will not take effect.\n","type":"integer"},"seed":{"description":"Optional. A seed value for randomization in the mesh generation, ranging from 0 to 65535 (both inclusive). If not provided, the seed will be randomly generated.\n","type":"integer"},"texture_delight":{"description":"Optional. Default is false. If true, this parameter applies images preprocessing to remove lighting information from textures.\n","type":"boolean"},"texture_mode":{"$ref":"#/components/schemas/RodinTextureModeType"},"tier":{"$ref":"#/components/schemas/RodinTierType"},"use_original_alpha":{"description":"Default is false. If true, the original transparency channel of the images will be used when processing the image.\n","type":"boolean"}},"type":"object"},"Rodin3DGenerateResponse":{"properties":{"error":{"description":"Error message, if any. Possible values include NO_ACTIVE_SUBSCRIPTION, SUBSCRIPTION_PLAN_TOO_LOW, INSUFFICIENT_FUND, INVALID_REQUEST, USER_NOT_FOUND, GROUP_NOT_FOUND, PERMISSION_DENIED, UNKNOWN.\n","nullable":true,"type":"string"},"jobs":{"$ref":"#/components/schemas/RodinGenerateJobsData"},"message":{"description":"Success message or detailed error information.","type":"string"},"prompt":{"description":"Echoed prompt (when applicable).","type":"string"},"submit_time":{"description":"Submission timestamp.","type":"string"},"uuid":{"description":"Task UUID. Use this for status/download requests.","type":"string"}},"type":"object"},"RodinAddonType":{"description":"Possible value is `HighPack`. By selecting HighPack: generate 4K resolution texture instead of the default 2K. If Quad mode, the number of faces will be ~16 times the number of faces selected in the `quality` parameter. Additional 1 credit per generation.\n","enum":["HighPack"],"type":"string"},"RodinCheckStatusJobItem":{"properties":{"status":{"$ref":"#/components/schemas/RodinStatusOptions"},"uuid":{"description":"sub uuid","type":"string"}},"type":"object"},"RodinConditionModeType":{"description":"Useful only for multi-image 3D generation. Optional. Chooses the mode of the multi-image generation. Default is concat. For `fuse` mode (uploading images of multiple objects), fuse mode will extract and fuse all the features of all the objects from the images for generation. For `concat` mode (uploading images of a single object), concat mode will inform the Rodin model to expect these images to be multi-view images of a single object.\n","enum":["fuse","concat"],"type":"string"},"RodinGenerateJobsData":{"properties":{"subscription_key":{"description":"Subscription Key.","type":"string"},"uuids":{"description":"subjobs uuid.","items":{"type":"string"},"type":"array"}},"type":"object"},"RodinGeometryFileFormatType":{"description":"Optional. The format of the output geometry file. Default is glb.\n","enum":["glb","usdz","fbx","obj","stl"],"type":"string"},"RodinGeometryInstructModeType":{"description":"Optional. Default is `faithful`. The Creative mode enhances generative robustness while ensuring output consistency, allowing for more flexible and creative generation while maintaining quality and consistency across outputs. Available for Gen-2.5-Medium and Gen-2.5-High tiers.\n","enum":["faithful","creative"],"type":"string"},"RodinMaterialType":{"description":"Optional. The material type. Default is PBR. PBR: Physically Based Materials, including base color texture, metallicness texture, normal texture and roughness texture, providing high realism and physically accurate behavior over dynamic lighting. Shaded: only base color texture with baked lighting, providing stylized visuals. All: both PBR and Shaded will be delivered. None: asset without material.\n","enum":["PBR","Shaded","All","None"],"type":"string"},"RodinMeshModeType":{"description":"Optional. It controls the type of faces of generated models. Default is Quad. The Raw mode generates triangular face models. The Quad mode generates quadrilateral face models. When its value is Raw, `quality` will be fixed to medium and `addons` will be fixed to []. For Rodin Sketch tier, only triangular faces can be generated.\n","enum":["Quad","Raw"],"type":"string"},"RodinQualityType":{"description":"Optional. The face count of the generated model. Default is medium.\n","enum":["extra-low","low","medium","high"],"type":"string"},"RodinResourceItem":{"properties":{"name":{"description":"File name","type":"string"},"url":{"description":"Download url","type":"string"}},"type":"object"},"RodinStatusOptions":{"enum":["Done","Failed","Generating","Waiting"],"type":"string"},"RodinTextureModeType":{"description":"Optional. Higher values invest more thinking effort and produce better results, at the cost of longer generation time.\n","enum":["legacy","extreme-low","low","medium","high"],"type":"string"},"RodinTierType":{"description":"Tier of generation. The default value is Regular. Sketch: fast generation with basic details, suitable for initial concepts. Regular: balanced quality and speed, ideal for general use. Detail: enhanced details compared to Regular, recommended for intricate results (longer processing time). Smooth: clearer and sharper output than Regular, with slightly longer processing time. Set the value to `Gen-2` to invoke Gen-2 generation. Use the `Gen-2.5-*` values to invoke Gen-2.5 generation: Gen-2.5-Extreme-Low (quick simple assets), Gen-2.5-Low (clean assets and small hardsurface props), Gen-2.5-Medium (moderately complex models), Gen-2.5-High (high-quality assets with richer structural representation and smooth surfaces), Gen-2.5-Extreme-High (high-frequency detail reproduction).\n","enum":["Regular","Sketch","Detail","Smooth","Gen-2","Gen-2.5-Extreme-Low","Gen-2.5-Low","Gen-2.5-Medium","Gen-2.5-High","Gen-2.5-Extreme-High"],"type":"string"},"RouterChargesOnPolicyRejection":{"description":"Whether a call this model REFUSES on content-policy grounds is nevertheless charged to the caller. Providers differ, the difference is invisible at call time, and a user who sees an error and a charge for the same call has no way to have known - so it is stated per model, before the call, rather than left to per-provider folklore.\nIt pairs with `error_type: content_policy_violation` (`RouterErrorType`): that value makes a policy refusal distinguishable, this one says what it costs.\nTHREE values, and the third is not a formality:\n- `yes` - a policy refusal of this model IS charged. The caller pays for a\n generation they did not receive.\n- `no` - a policy refusal of this model is not charged. - `unknown` - nobody has established this model's behaviour yet.\n`unknown` exists because the alternative is to default to `no`, and `no` is a CLAIM: it tells a caller we do not charge them. Making that the default would assert it about every model nobody has checked, and it is the expensive direction to be wrong in - it is the answer a user quotes back at support. So an unestablished model says `unknown` and means it.\nIt is a plain string rather than an `enum`, for the same reason `RouterErrorType` and every other extensible Router vocabulary is: a generated client that hard-rejects an unrecognized value fails hardest on exactly the models it has not been regenerated for. Treat an unrecognized value as `unknown`.\nThe value is per MODEL and is not derived from the provider: a provider can differ across its own operations, and at least one already does, so a caller must read it for the model it is about to call rather than for the model's provider.","example":"unknown","type":"string"},"RouterErrorResponse":{"description":"Router's request-level error body: what is returned when the request never reached the model, or failed for a reason the model itself did not report - auth, quota, an unknown model ID, or provider transport. A model-level validation failure has its own shape, `RouterValidationErrorResponse`, because flattening a FastAPI `detail[]` array into this `detail` string would destroy the per-field granularity an SDK branches on.","properties":{"detail":{"description":"Human-readable description of the failure, safe to surface to an end user. Not machine-parsed - branch on `error_type` instead.","type":"string"},"error_type":{"$ref":"#/components/schemas/RouterErrorType"}},"required":["detail","error_type"],"type":"object"},"RouterErrorType":{"description":"Coarse, machine-readable bucket for a Router failure, mirrored on the `X-Comfy-Error-Type` response header so a caller can branch without parsing the body. The set is closed at fifteen values: the six request-level buckets `invalid_input`, `content_policy_violation`, `provider_error`, `provider_timeout`, `insufficient_credits` and `model_not_found`, plus the transport-level `unauthorized`, `forbidden`, `concurrency_limit_exceeded`, `client_disconnected`, `internal_error`, `deadline_exceeded`, `not_enabled`, `service_unavailable` and `rate_limited`.\nRETRY SEMANTICS. `not_enabled` is TERMINAL - the same request will be refused the same way, so a client must not retry it - while `service_unavailable` is TRANSIENT and SHOULD be retried with backoff. That opposition is the whole reason they are two buckets rather than one: a retry policy keys off the status/`error_type` pair, and a single shared bucket would make retry wrong in one direction or the other.\n`not_enabled` and `forbidden` both return `403` and, like the `504` pair below, the difference between them is the one the status cannot carry. `forbidden` means the credential is valid but is not entitled to this model or operation - a decision about the caller. `not_enabled` means Comfy Router is not switched on for the caller yet - a state of the product rollout, not a judgement about them, and one that changes without the caller doing anything. `404` would have claimed the model does not exist when it does, and a `5xx` would have blamed the server for a deliberate state, so neither was available as a way to separate the two by status instead.\nHOW OFTEN `not_enabled` IS SEEN CHANGES OVER TIME, AND IT NEVER STOPS BEING VALID. While Comfy Router is rolling out, most callers are not on the ramp yet and this is the ordinary answer for them. Once Router is fully rolled out it becomes rare. It does not become impossible: the deploy-time switch that turns Router off for an environment is a permanent operational lever, so `not_enabled` is still the correct answer the day it is pulled. It is therefore a value Comfy expects to STOP EMITTING often rather than one that is ever withdrawn - a published bucket is never removed, because removing it would delete the generated exception class an SDK built from it and break any client branching on it. `service_unavailable` has no such arc at all: a dependency can always fault.\n`deadline_exceeded` and `provider_timeout` both return `504` and the difference between them is which SIDE ran out of time, which is not cosmetic: `provider_timeout` means the upstream model provider ran out of time, while `deadline_exceeded` means COMFY stopped holding the connection at its own configured bound. A client that collapses the two onto the status alone loses that distinction, and with it the difference between \"the partner is failing\" and \"the call is longer than the connection Comfy will hold\".\nNEITHER BUCKET IS A STATEMENT ABOUT THE CHARGE. Comfy's charges settle on COMPLETION: a generation the provider completed is billed whether or not the caller was still connected to receive the response, and a generation that failed or never completed is not billed. Reaching `deadline_exceeded` or `client_disconnected` therefore does not tell a caller they were not charged.\nIt is deliberately a plain string rather than an `enum`: the set is expected to grow -- it already has, and `file_download_error`, `cancelled` and `queue_timeout` are named as further additions -- and a generated client that hard-rejects an unrecognized bucket would fail hardest exactly when something has already gone wrong. Treat an unknown value as `internal_error`. Bucketing loses no granularity - the specific provider-level reason survives in `RouterValidationErrorDetail.type` and its `ctx`.","example":"invalid_input","type":"string","x-comfy-error-types":[{"meaning":"The request was rejected before it reached the model - a malformed body, a malformed or expired pagination cursor, an input the model's own schema does not accept, or an `Idempotency-Key` that cannot serve this request (already used for a different request - the method, the path and query, or the body differ - or already consumed by a call whose response cannot be replayed). Sent with `409` in the key cases and with `400`/`422` in the others; the status says which, and the key cases are the ones answered by using a NEW key rather than by editing the request.","tier":"request","value":"invalid_input"},{"meaning":"The provider refused the request on content-policy grounds. The refusal is deterministic: re-sending the same input will be refused again.","tier":"request","value":"content_policy_violation"},{"meaning":"The partner provider reported a failure of its own, or returned a response Router could not interpret as a result.","tier":"request","value":"provider_error"},{"meaning":"The partner provider did not answer within its deadline. This bucket is the PROVIDER timing out and never Router's own server deadline, which is reported as `deadline_exceeded` - the two share `504` and are separated because they name different causes: this one says the partner failed, that one says Comfy stopped holding the connection.","tier":"request","value":"provider_timeout"},{"meaning":"The calling workspace does not have enough credits to run the model.","tier":"request","value":"insufficient_credits"},{"meaning":"The `{provider}/{model}` ID names no model Router can run; an unknown provider lands here too. `detail` carries up to three suggestions drawn from the models the caller is entitled to see.","tier":"request","value":"model_not_found"},{"meaning":"The request carried no usable credential.","tier":"transport","value":"unauthorized"},{"meaning":"The credential is valid but is not entitled to this model or this operation.","tier":"transport","value":"forbidden"},{"meaning":"The workspace already has as many calls in flight as it is allowed; retry once one of them finishes. It carries one further condition on the run route, on a `409` rather than the `429` above: another call is already in flight for the `Idempotency-Key` this request presented. Re-send the SAME key after `Retry-After` seconds to collect that call's result.","tier":"transport","value":"concurrency_limit_exceeded"},{"meaning":"The caller closed the connection before Router could return a result. It is logged rather than delivered - there is no socket left to write it to - and it is an attribution, not a billing outcome: a provider generation that completed is billed regardless of whether the caller received the response.","tier":"transport","value":"client_disconnected"},{"meaning":"Router itself failed. It is also the value a client should treat any UNRECOGNIZED bucket as, so a later addition to the set does not break a client generated before it.","tier":"transport","value":"internal_error"},{"meaning":"Comfy stopped holding the connection at its own configured bound before an answer arrived. It shares `504` with `provider_timeout` and the pair says which side ran out of time; this one is Comfy's own bound, so nothing about the request was rejected and the same request may be retried. It says nothing about the charge: a provider generation that completed is billed regardless of whether the caller received the response. Retry it with the SAME `Idempotency-Key`: when the provider had already accepted the generation, the retry collects that generation rather than dispatching another, and a `Retry-After` on the `504` says when to ask.","tier":"transport","value":"deadline_exceeded"},{"meaning":"Comfy Router is not switched on for this caller yet. Nothing about the request is wrong and the model exists, which is why this is not `model_not_found`; it shares `403` with `forbidden` and is NOT the same thing, because `forbidden` is an entitlement decision about the caller while this is a state of the rollout. It is TERMINAL: do not retry, and do not treat it as an outage.","tier":"transport","value":"not_enabled"},{"meaning":"A service Comfy Router depends on is temporarily unavailable and the caller did nothing wrong. Retry it with backoff: it is the one bucket here whose condition clears on its own, without the caller changing the request and without a concurrency slot freeing, which is what distinguishes it from the other retryable answers (`concurrency_limit_exceeded`, `deadline_exceeded`). It is separate from `internal_error` - which is a `500` and means Router itself failed - so a client can tell \"come back shortly\" from \"this call is not going to work\".","tier":"transport","value":"service_unavailable"},{"meaning":"The caller has spent an allowance measured over a WINDOW and must wait for that window to roll. It shares `429` with `concurrency_limit_exceeded` and is not the same thing: that one clears the moment one of the caller's own in-flight calls finishes, so retrying in seconds is right, whereas nothing the caller does drains this one early. `detail` names the window.","tier":"transport","value":"rate_limited"}]},"RouterModelBilling":{"description":"Per-model billing FACTS a caller needs before invoking - not prices. Usage and cost figures never appear here.\nIt is an object with one member rather than a flat sibling field because more pre-invocation billing facts are coming and a flat `billing_charges_*` family would have to be un-flattened later; a nested object absorbs them without a breaking rename. The member is `required` for the reason its own description gives - \"we did not say\" and \"we do not charge\" must not be the same wire state.","properties":{"charges_on_policy_rejection":{"$ref":"#/components/schemas/RouterChargesOnPolicyRejection"}},"required":["charges_on_policy_rejection"],"type":"object"},"RouterModelDetail":{"allOf":[{"$ref":"#/components/schemas/RouterModelListEntry"},{"$ref":"#/components/schemas/RouterModelDetailFields"}],"description":"Per-model detail for one Comfy Router model: everything the catalog listing reports for it, plus the per-model fields that only the single-model route carries.\nIt is `allOf: [RouterModelListEntry, RouterModelDetailFields]` so that the shared half IS the list entry rather than a copy of it - see the section comment above. A generated client can therefore treat a detail response as a list entry everywhere a list entry is expected.","type":"object"},"RouterModelDetailFields":{"description":"The half of `RouterModelDetail` the catalog listing does NOT carry: per-model fields worth one lookup but not worth repeating on every entry of a paginated catalog page.\nEvery property here is OPTIONAL, and each is owned by a sibling E3 story. This contract reserves the field name and its type; the story that lands the feature narrows the description and the value set. A model whose sibling story has not landed for it yet simply omits the field, which is why nothing here is `required` and why a client must treat every one of them as absent-by-default.\nThe `billing_policy` slot this block also reserved is gone: E3 S3.5 landed as `RouterModelListEntry.billing`, on the SHARED half, because the field has to be readable from the listing and not only from the detail - see that schema.","properties":{"input_schema_url":{"description":"Pointer to this model's input schema document - the description of the body `POST /v2/models/{provider}/{model}` accepts for this model. Only the POINTER is part of this contract: the document it addresses is authored separately. Absent when no schema has been authored for the model.\nIt is an ABSOLUTE `https` URI, deliberately not a `uri-reference`. Clients dereference or render this value, and a relative reference would resolve against the caller's own base while a `file:`, `data:` or `javascript:` scheme would be scheme confusion in every generated SDK. If this field is ever populated from partner- or admin-supplied metadata, that constraint is the only thing standing between that metadata and the client, so a server MUST NOT emit a value this pattern rejects.","format":"uri","maxLength":2048,"pattern":"^https://","type":"string"}},"type":"object"},"RouterModelId":{"description":"A canonical Comfy Router model ID, `{provider}/{model}` - exactly the value that addresses the model on `POST /v2/models/{provider}/{model}`, so a caller can interpolate it into that path without re-deriving it from anything. Its `pattern` is `RouterProviderSegment` and `RouterModelSegment` joined by a single `/`, and `maxLength` is their sum plus that separator.\nTestRouterCatalogIdsMatchInvocationRoute probes all three patterns behaviourally against one corpus, so loosening or tightening any of them alone fails CI rather than silently letting the catalog advertise an ID the invocation route would reject. The optional `variant` third segment is deliberately absent: how a variant is addressed is not settled by the invocation contract, so the catalog must not list an ID that route is not yet defined to accept. ONE bound does not survive the composition: `maxLength` here is the TOTAL, so a 193-character ID made of a 100-character provider and a 92-character model satisfies this schema while its provider segment exceeds `RouterProviderSegment`'s own 64. A single `pattern` cannot express a per-segment length bound - the structural alphabet and a character count are not jointly expressible without lookahead, which this repo's Go-side pattern probes cannot compile. The per-segment bounds are therefore carried by the sibling `provider` and `model` fields of `RouterModelListEntry`, which reference the bounded segment schemas directly, so no CONFORMING entry can carry such an `id`. TestRouterCatalogIdsMatchInvocationRoute pins that this residual is length-only: over-length segments are in its corpus, and any divergence that is not purely a per-segment length overrun fails.","example":"fal-ai/flux-pro","maxLength":193,"pattern":"^[a-z0-9]+([._-][a-z0-9]+)*/[a-z0-9]+([._-][a-z0-9]+)*$","type":"string"},"RouterModelInput":{"additionalProperties":true,"description":"A partner model's native JSON input document, forwarded to the provider as-is. Its concrete shape is owned by the partner rather than by Comfy, so this is an open object: Router does not narrow, rename, or re-envelope the fields. It is a named component (never an inline anonymous object) because ComfyUI's spec-driven codegen needs a class to generate.\nDeclaring an object here is a codegen requirement, not a licence to re-decode the payload: numeric fidelity is the handler's job, since decoding into a Go `map[string]any` rounds integers above 2^53 (partner seeds and IDs) to `float64`. Forward the raw bytes rather than round-tripping them through a generic map. Body size is likewise bounded at the handler - comfy-api caps comparable bodies with `http.MaxBytesReader` - not by this schema.","type":"object"},"RouterModelInputSchemaDocument":{"additionalProperties":true,"description":"A standalone OpenAPI document describing ONE Comfy Router model's input AND output - the body `POST /v2/models/{provider}/{model}` accepts for that model, under the operation's `requestBody`, and the body it returns, under that operation's `200` content. It is what `GET /v2/models/{provider}/{model}/openapi.json` returns. The component keeps its historical name, which predates the output half; the shape it describes is the whole document, not the input alone.\nIt is a full OpenAPI document rather than a bare JSON Schema because that is what the tools this endpoint exists for consume: an SDK generator takes an OpenAPI document. The document is STANDALONE: every schema component EITHER half references travels with it under its own `components.schemas` - the two closures are unioned, because the document has only one components section - so nothing in it points at a section the caller does not have.\nA DESCRIBED output is keyed `application/json`, or with whatever media type its authored component declares through `x-comfy-router-output-media-type` (a media-type string, e.g. `video/mp4`) - so a generated client decodes the body the way the provider actually sends it rather than trying to JSON-parse a binary one.\nAn output Comfy has NOT described yet is keyed `*/*`, not `application/json`. The two are different claims: an undescribed output is unknown in its media type as much as in its shape, and some Router models answer with binary bodies, so keying the permissive output as JSON would assert a contract Comfy has not established. Read `x-comfy-output-schema-authored` to tell the two apart.\nThe shape is left open here on purpose. Its concrete contents are an OpenAPI document, and restating the OpenAPI meta-schema inside this spec would be a second copy of a specification Comfy does not own - the exact publish-versus-enforce drift this endpoint exists to prevent, one level up. It is a named component (never an inline anonymous object) because ComfyUI's spec-driven codegen needs a class to generate.\nThree Comfy extensions are carried at the document root and are part of this contract. `x-comfy-router-model-id` repeats the canonical model ID, so a document saved to disk still names the model it describes. `x-comfy-input-schema-authored` is a boolean reporting whether the embedded REQUEST schema was authored for this model (`true`) or is the permissive fallback served until one is (`false`); the two are indistinguishable from the schema alone, and a caller that cannot tell them apart would read \"any JSON object\" as a narrowed contract. `x-comfy-output-schema-authored` reports the same thing for the RESPONSE schema under the `200`. The two flags are INDEPENDENT and must be read separately: the halves are authored one at a time, so an authored input with an undescribed output is the ordinary state rather than an edge case.","type":"object"},"RouterModelListEntry":{"description":"One entry in the Router model catalog: the identity of a runnable model, and nothing else. The per-model detail route composes this same entry rather than restating it, which is why the name is `...ListEntry` and not `...Summary` - there must be exactly one definition of what a catalog entry is. Per-model detail and the per-model input/output schemas are their own routes, so this shape stays the minimum a caller needs in order to invoke the model - deliberately, because this is the payload an SDK fetches on cold start. `id` is `provider` and `model` joined by `/`; the two fields are carried separately as well so a caller composes the invocation path without splitting a string.\n`billing` is the one non-identity member, and it is here rather than on the detail route deliberately: it exists so a caller can branch BEFORE invoking, and the listing is the payload an SDK already has in hand at that moment. Pushing it to the detail route would mean one extra round trip per model to answer a question asked about every model.","properties":{"billing":{"$ref":"#/components/schemas/RouterModelBilling"},"id":{"$ref":"#/components/schemas/RouterModelId"},"model":{"$ref":"#/components/schemas/RouterModelSegment"},"provider":{"$ref":"#/components/schemas/RouterProviderSegment"}},"required":["id","provider","model","billing"],"type":"object"},"RouterModelListResponse":{"description":"One page of the Router model catalog.\n`has_more` is the ONLY correct stop condition for a walk: a short page is not one, because a page can be trimmed by an entry that disappeared between the cursor being minted and the page being served. `next_cursor` is present exactly when `has_more` is true, and omitted otherwise. `limit` echoes the page size actually served, which is what makes a clamped request detectable.","properties":{"data":{"description":"The models on this page, at most `limit` of them.","items":{"$ref":"#/components/schemas/RouterModelListEntry"},"type":"array"},"has_more":{"description":"Whether another page exists beyond this one. Keep walking while this is true; do not infer the end of the catalog from a short or empty `data`.","type":"boolean"},"limit":{"description":"The page size actually served. A requested `limit` above the maximum is CLAMPED down to the maximum rather than rejected, so this can be smaller than the value asked for - paginate with this number, not with the one you sent, or you will assume rows you never received.\nUnlike the REQUEST parameter, this one declares a `minimum`: sub-1 is meaningful on the way in (it selects the default) but a page size actually served is always positive, and `0` is exactly what an unset Go field serializes to - so without the bound a handler that forgets to populate this still emits a conforming response, and `limit: 0` beside `has_more: true` describes a walk that cannot advance.","example":20,"maximum":100,"minimum":1,"type":"integer"},"next_cursor":{"$ref":"#/components/schemas/RouterPageCursor"}},"required":["data","has_more","limit"],"type":"object"},"RouterModelOutput":{"additionalProperties":true,"description":"A partner model's native JSON output document, returned to the caller as-is. Its concrete shape is owned by the partner rather than by Comfy, so this is an open object: Router does not narrow, rename, or re-envelope the fields. It is a named component (never an inline anonymous object) because ComfyUI's spec-driven codegen needs a class to generate. For the concrete shape ONE model returns, read that model's own document at `GET /v2/models/{provider}/{model}/openapi.json`, whose `200` carries the per-model output schema when Comfy has described it.\nDeclaring an object here is a codegen requirement, not a licence to re-decode the payload: numeric fidelity is the handler's job, since decoding into a Go `map[string]any` rounds integers above 2^53 (partner seeds and IDs) to `float64`. Forward the raw bytes rather than round-tripping them through a generic map. Body size is likewise bounded at the handler - comfy-api caps comparable bodies with `http.MaxBytesReader` - not by this schema.","type":"object"},"RouterModelSegment":{"description":"Lowercase `model` segment of the canonical `{provider}/{model}[/{variant}]` model ID - the model to run within that provider. Shared by the invocation route's `model` path parameter and a catalog entry's `model` field, for the same no-drift reason as `RouterProviderSegment`.\nAs with the provider segment, the `pattern` documents the contract and does not enforce it. Dots are permitted inside the segment because partner model IDs use them for versions (`flux-1.1-pro`), but a repeated separator is not, so `..` cannot appear.","example":"flux-pro","maxLength":128,"pattern":"^[a-z0-9]+([._-][a-z0-9]+)*$","type":"string"},"RouterPageCursor":{"description":"An OPAQUE cursor into a Router list. It is produced by the server and only ever round-tripped: it is not an offset, not a model ID, not ordered, and not stable across catalog rebuilds, so parsing one, incrementing one, or persisting one beyond the walk it came from are all outside the contract. Cursor rather than offset because the catalog is a moving list - an offset walk silently skips or repeats entries when entries are added or removed mid-walk, and a caller cannot tell that it happened.\n`maxLength` bounds it because the value arrives in a query string and is fed to a decoder; a cursor that is malformed, truncated, over-long or no longer valid is a `400` from the Router error contract, never a `500`. `minLength: 1` is load-bearing rather than tidy: Echo's `QueryParam` returns `\"\"` for both `?cursor=` and an omitted `cursor`, so without it the empty string is a schema-valid cursor indistinguishable from no cursor at all, and a handler would silently restart the walk at page one - the infinite loop `RouterCatalogCursor` explicitly forbids. An empty `cursor` is therefore a `400`, not page one. The `pattern` fixes the alphabet at URL- and base64-safe characters so a control character, a CR/LF, or a space can never ride a query string into the decoder or into a `400`'s free-text `detail`. It constrains the SERVER, which is the only party that mints these; as with the model-ID segments it is a CONTRACT statement and not enforcement, since comfy-api installs no OpenAPI request validator - a handler must still validate the value it was handed before decoding it.","example":"q7Fm2xTn9pLd4RsV","maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9._~+/=-]+$","type":"string"},"RouterProviderSegment":{"description":"Lowercase `provider` segment of the canonical `{provider}/{model}[/{variant}]` model ID - the partner whose model is being addressed. The invocation route's `provider` path parameter and a catalog entry's `provider` field both reference this one schema, which is what keeps the listed IDs and the accepted IDs from drifting apart.\nThe `pattern` is a CONTRACT statement, not enforcement: comfy-api installs no OpenAPI request validator and oapi-codegen binds path parameters as plain strings, so a handler must re-validate the segment itself before using it to select a provider or compose an upstream URL. The alphabet deliberately admits no `/`, no percent-encoding, and no repeated separator, so no accepted value can contain a `.` or `..` path segment.","example":"fal-ai","maxLength":64,"pattern":"^[a-z0-9]+([._-][a-z0-9]+)*$","type":"string"},"RouterValidationErrorContext":{"additionalProperties":true,"description":"The violated bound for one `RouterValidationErrorDetail`, carried from the provider verbatim - for example `{\"limit_value\": 8}` alongside `greater_than`, `{\"min_width\": 512}` alongside `image_too_small`, or `{\"max_size_bytes\": 10485760}` alongside `file_too_large`. The key set is specific to the provider and the error type, so this is deliberately an open object: narrowing it to a fixed field list, or folding it into the `msg` string, is precisely how a ported integration compiles and then silently loses the branch that read the bound. Absent when the error type carries no bound.","type":"object"},"RouterValidationErrorDetail":{"description":"One model-level validation failure, in the FastAPI form. `type` carries the SPECIFIC provider reason - `value_error`, `missing`, `image_too_small`, `unsupported_audio_format`, `greater_than`, `file_too_large` and the rest - which is the granularity `RouterErrorType`'s coarse bucket cannot express. It is an open string and not an `enum` for the same reason: the provider vocabulary runs to roughly 48 values across two tiers and grows on the provider's release cycle, not ours, and an unmodelled value must reach the caller rather than fail deserialization.","properties":{"ctx":{"$ref":"#/components/schemas/RouterValidationErrorContext"},"input":{"$ref":"#/components/schemas/RouterValidationErrorInput"},"loc":{"description":"Path to the offending field, outermost segment first - for example `[\"body\", \"image_url\"]`, or `[\"body\", \"images\", 0]` where an integer indexes into an array.","items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},"msg":{"description":"Human-readable description of this single failure.","type":"string"},"type":{"description":"Specific, machine-readable reason for this failure, passed through from the provider unchanged. This is the value a typed SDK exception hierarchy branches on; `error_type` on the response header is only its coarse bucket.","example":"image_too_small","type":"string"}},"required":["loc","msg","type"],"type":"object"},"RouterValidationErrorInput":{"description":"The offending input value, echoed back verbatim so a caller can see what was rejected without re-deriving it from `loc`. Any JSON type - string, number, boolean, array, object or null - so this schema is deliberately left untyped rather than narrowed to an object. Absent when the provider does not echo the input back."},"RouterValidationErrorResponse":{"description":"Router's model-level `422` body, in the FastAPI form: the request was well-formed enough to reach the model and the model rejected its contents. Note it carries no `error_type` of its own - that is what `X-Comfy-Error-Type` on the response is for, so a client can read the coarse bucket off the header without first deciding which of the two Router error bodies it received.","properties":{"detail":{"description":"Every validation failure found on the request, one entry per offending field.","items":{"$ref":"#/components/schemas/RouterValidationErrorDetail"},"type":"array"}},"required":["detail"],"type":"object"},"RunwayAspectRatioEnum":{"enum":["1280:720","720:1280","1104:832","832:1104","960:960","1584:672","1280:768","768:1280"],"type":"string"},"RunwayContentModeration":{"description":"Settings that affect the behavior of the content moderation system.","properties":{"publicFigureThreshold":{"description":"When set to `low`, the content moderation system will be less strict about preventing generations that include recognizable public figures.","enum":["auto","low"],"type":"string"}},"type":"object"},"RunwayDurationEnum":{"enum":[5,10],"type":"integer"},"RunwayImageToVideoRequest":{"properties":{"duration":{"$ref":"#/components/schemas/RunwayDurationEnum"},"model":{"$ref":"#/components/schemas/RunwayModelEnum"},"promptImage":{"$ref":"#/components/schemas/RunwayPromptImageObject"},"promptText":{"description":"Text prompt for the generation","maxLength":1000,"type":"string"},"ratio":{"$ref":"#/components/schemas/RunwayAspectRatioEnum"},"seed":{"description":"Random seed for generation","format":"int64","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["promptImage","seed","model","duration","ratio"],"type":"object"},"RunwayImageToVideoResponse":{"properties":{"id":{"description":"Task ID","type":"string"}},"type":"object"},"RunwayModelEnum":{"description":"Available Runway models for generation.","enum":["gen4_turbo"],"type":"string"},"RunwayPromptImageDetailedObject":{"description":"Represents an image with its position in the video sequence.","properties":{"position":{"description":"The position of the image in the output video. Runway documented 'last' as supported by the gen3a_turbo model only, and that model reached its sunset date on 2026-07-30; no model this operation still admits is documented to accept it. Consult Runway's own documentation before relying on it.","enum":["first","last"],"type":"string"},"uri":{"description":"A HTTPS URL or data URI containing an encoded image.","type":"string"}},"required":["uri","position"],"type":"object"},"RunwayPromptImageObject":{"description":"Image(s) to use for the video generation. Can be a single URI or an array of image objects with positions.","oneOf":[{"description":"A single HTTPS URL or data URI for the first frame image.","type":"string"},{"description":"An array of image objects with positions. No two images can have the same position.","items":{"$ref":"#/components/schemas/RunwayPromptImageDetailedObject"},"type":"array"}]},"RunwayTaskStatusEnum":{"description":"Possible statuses for a Runway task.","enum":["SUCCEEDED","RUNNING","FAILED","PENDING","CANCELLED","THROTTLED"],"type":"string"},"RunwayTaskStatusResponse":{"properties":{"createdAt":{"description":"Task creation timestamp","format":"date-time","type":"string"},"id":{"description":"Task ID","type":"string"},"output":{"description":"Array of the finished task's output asset URLs. This route is shared by every Runway model, so the medium follows the model that was submitted - a video URL for the image_to_video and video_to_video models, an image URL for the text_to_image model.","items":{"type":"string"},"type":"array"},"progress":{"description":"Float value between 0 and 1 representing the progress of the task. Only available if status is RUNNING.","format":"float","maximum":1,"minimum":0,"type":"number"},"status":{"$ref":"#/components/schemas/RunwayTaskStatusEnum"}},"required":["id","status","createdAt"],"type":"object"},"RunwayTextToImageAspectRatioEnum":{"enum":["1920:1080","1080:1920","1024:1024","1360:768","1080:1080","1168:880","1440:1080","1080:1440","1808:768","2112:912"],"type":"string"},"RunwayTextToImageRequest":{"properties":{"model":{"description":"Model to use for generation","enum":["gen4_image"],"type":"string"},"promptText":{"description":"Text prompt for the image generation","maxLength":1000,"type":"string"},"ratio":{"$ref":"#/components/schemas/RunwayTextToImageAspectRatioEnum"},"referenceImages":{"description":"Array of reference images to guide the generation","items":{"properties":{"uri":{"description":"A HTTPS URL or data URI containing an encoded image","type":"string"}},"type":"object"},"type":"array"}},"required":["promptText","model","ratio"],"type":"object"},"RunwayTextToImageResponse":{"properties":{"id":{"description":"Task ID","type":"string"}},"type":"object"},"RunwayVideoToVideoKeyframe":{"description":"Timed guidance image placed at a specific point in the input video.","oneOf":[{"properties":{"seconds":{"description":"Absolute timestamp in seconds from the start of the input video when this guidance image should apply.","maximum":30,"minimum":0,"type":"number"},"uri":{"description":"A HTTPS URL, Runway or data URI containing an encoded image.","type":"string"}},"required":["uri","seconds"],"type":"object"},{"properties":{"at":{"description":"Position as a fraction [0.0, 1.0] of the input video duration when this guidance image should apply.","maximum":1,"minimum":0,"type":"number"},"uri":{"description":"A HTTPS URL, Runway or data URI containing an encoded image.","type":"string"}},"required":["uri","at"],"type":"object"}]},"RunwayVideoToVideoModelEnum":{"description":"Available Runway models for video-to-video generation.","enum":["aleph2"],"type":"string"},"RunwayVideoToVideoPromptImage":{"description":"An image keyframe for guiding the edit at a specific point in the video.","properties":{"position":{"$ref":"#/components/schemas/RunwayVideoToVideoPromptImagePosition"},"uri":{"description":"A HTTPS URL, Runway or data URI containing an encoded image.","type":"string"}},"required":["uri","position"],"type":"object"},"RunwayVideoToVideoPromptImagePosition":{"description":"The position in the output video where the image should apply.","oneOf":[{"description":"\"first\" places the image at the start (timestamp 0); \"last\" places it at the end (timestamp = duration).","enum":["first","last"],"type":"string"},{"description":"Places the image at an absolute timestamp.","properties":{"timestampSeconds":{"description":"Absolute timestamp in seconds from the start of the output video.","minimum":0,"type":"number"},"type":{"enum":["timestamp"],"type":"string"}},"required":["type","timestampSeconds"],"type":"object"},{"description":"Places the image at a relative position.","properties":{"positionPercentage":{"description":"Position as a fraction [0.0, 1.0] of the total video duration.","maximum":1,"minimum":0,"type":"number"},"type":{"enum":["position"],"type":"string"}},"required":["type","positionPercentage"],"type":"object"}]},"RunwayVideoToVideoRequest":{"description":"Request to edit an input video into a new video using Runway's API.","properties":{"contentModeration":{"$ref":"#/components/schemas/RunwayContentModeration"},"keyframes":{"description":"Timed guidance images placed at specific points in the input video. Up to 5 keyframes.","items":{"$ref":"#/components/schemas/RunwayVideoToVideoKeyframe"},"maxItems":5,"minItems":1,"type":"array"},"model":{"$ref":"#/components/schemas/RunwayVideoToVideoModelEnum"},"promptImage":{"description":"A list of up to 5 image keyframes for guiding the edit at specific points in the video.","items":{"$ref":"#/components/schemas/RunwayVideoToVideoPromptImage"},"maxItems":5,"minItems":1,"type":"array"},"promptText":{"description":"A non-empty string up to 1000 characters describing what should appear in the output.","maxLength":1000,"minLength":1,"type":"string"},"seed":{"description":"Random seed for generation.","format":"int64","maximum":4294967295,"minimum":0,"type":"integer"},"videoUri":{"description":"The input video to edit (HTTPS URL, Runway upload URI, or data URI). Must be 30 seconds or shorter.","type":"string"}},"required":["model","promptText","videoUri"],"type":"object"},"RunwayVideoToVideoResponse":{"properties":{"id":{"description":"Task ID","type":"string"}},"type":"object"},"SeedanceAssetError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"SeedanceAssetModeration":{"properties":{"strategy":{"description":"Content Pre-filter review strategy. \"Skip\" bypasses most non-baseline policies (requires Secure Mode off on the account).","enum":["Default","Skip"],"type":"string"}},"required":["strategy"],"type":"object"},"SeedanceCreateAssetRequest":{"properties":{"asset_type":{"enum":["Image","Video","Audio"],"type":"string"},"group_id":{"description":"BytePlus Asset Group ID the asset will belong to. Caller must own this group.","type":"string"},"moderation":{"$ref":"#/components/schemas/SeedanceAssetModeration"},"name":{"description":"Optional asset name, up to 64 characters.","type":"string"},"project_name":{"description":"BytePlus project name. Defaults to \"default\". Must match the Asset Group's project.","type":"string"},"url":{"description":"Publicly accessible URL of the asset.","type":"string"}},"required":["group_id","url","asset_type"],"type":"object"},"SeedanceCreateAssetResponse":{"properties":{"asset_id":{"description":"BytePlus-issued asset id. Clients poll seedanceGetAsset with this until status == Active.","type":"string"}},"required":["asset_id"],"type":"object"},"SeedanceCreateVisualValidateSessionRequest":{"properties":{"name":{"description":"Optional human-readable label for the asset group that will be created by this verification. Stored locally and returned by seedanceListVisualValidationGroups so users can identify their groups in selectors.\n","maxLength":64,"type":"string"}},"type":"object"},"SeedanceCreateVisualValidateSessionResponse":{"properties":{"h5_link":{"description":"BytePlus-issued H5 liveness link. Open in a browser with camera access. Valid for ~120 seconds.","type":"string"},"session_id":{"description":"Session identifier. Clients poll seedanceGetVisualValidateSession with this.","format":"uuid","type":"string"}},"required":["session_id","h5_link"],"type":"object"},"SeedanceGetAssetResponse":{"properties":{"asset_type":{"enum":["Image","Video","Audio"],"type":"string"},"create_time":{"format":"date-time","nullable":true,"type":"string"},"error":{"$ref":"#/components/schemas/SeedanceAssetError"},"group_id":{"type":"string"},"id":{"type":"string"},"name":{"nullable":true,"type":"string"},"project_name":{"nullable":true,"type":"string"},"status":{"enum":["Active","Processing","Failed"],"type":"string"},"update_time":{"format":"date-time","nullable":true,"type":"string"},"url":{"description":"Access URL valid for ~12 hours.","nullable":true,"type":"string"}},"required":["id","asset_type","group_id","status"],"type":"object"},"SeedanceGetVisualValidateSessionResponse":{"properties":{"error_code":{"nullable":true,"type":"string"},"error_message":{"nullable":true,"type":"string"},"group_id":{"description":"Populated only when status == completed. This is the BytePlus Asset Group ID the user will upload assets into.","nullable":true,"type":"string"},"name":{"description":"Optional human-readable label provided when the session was created.","nullable":true,"type":"string"},"session_id":{"format":"uuid","type":"string"},"status":{"enum":["pending","completed","failed"],"type":"string"}},"required":["session_id","status"],"type":"object"},"SeedanceListUserAssetsResponse":{"properties":{"assets":{"items":{"$ref":"#/components/schemas/SeedanceUserAsset"},"type":"array"},"truncated":{"description":"True if the global per-request asset cap was hit and older results were dropped.","type":"boolean"}},"required":["assets","truncated"],"type":"object"},"SeedanceListVisualValidationGroupsResponse":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/SeedanceVisualValidationGroup"},"type":"array"}},"required":["groups"],"type":"object"},"SeedanceUserAsset":{"properties":{"asset_id":{"type":"string"},"asset_type":{"enum":["Image","Video","Audio"],"type":"string"},"create_time":{"format":"date-time","type":"string"},"group_id":{"type":"string"},"group_name":{"description":"Display label of the source group, denormalized for client-side search.","type":"string"},"name":{"nullable":true,"type":"string"},"status":{"enum":["Active","Processing","Failed"],"type":"string"},"url":{"description":"BytePlus access URL (~12h validity). Refreshed on each list call.","nullable":true,"type":"string"}},"required":["asset_id","group_id","group_name","asset_type","status","create_time"],"type":"object"},"SeedanceVirtualLibraryCreateAssetRequest":{"properties":{"asset_type":{"default":"Image","description":"BytePlus asset type. The AIGC virtual library accepts both Image and Video. Defaults to Image for backward compatibility with existing clients.","enum":["Image","Video"],"type":"string"},"hash":{"description":"Client-supplied content hash used as the per-customer dedup key. Re-submitting the same hash returns the existing asset id without re-uploading to BytePlus.","type":"string"},"url":{"description":"Publicly accessible URL of the asset to upload to the caller's virtual portrait library.","type":"string"}},"required":["url","hash"],"type":"object"},"SeedanceVirtualLibraryCreateAssetResponse":{"properties":{"asset_id":{"description":"BytePlus-issued asset id. Clients poll seedanceGetAsset with this until status == Active.","type":"string"}},"required":["asset_id"],"type":"object"},"SeedanceVisualValidationGroup":{"properties":{"created_at":{"format":"date-time","type":"string"},"group_id":{"description":"BytePlus-issued asset group id.","type":"string"},"name":{"description":"Display label. Caller-supplied at creation time when available; otherwise a server-generated fallback derived from the creation date.\n","type":"string"}},"required":["group_id","name","created_at"],"type":"object"},"SoniloErrorResponse":{"properties":{"detail":{"properties":{"code":{"description":"Error code","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"}},"type":"object"},"SoniloStreamEvent":{"description":"A single NDJSON event from the Sonilo streaming response. Additional event types beyond those listed may appear; unknown types should be ignored by clients.","oneOf":[{"properties":{"copy_index":{"minimum":0,"type":"integer"},"display_tags":{"items":{"type":"string"},"type":"array"},"prompt_index":{"minimum":0,"type":"integer"},"stream_index":{"minimum":0,"type":"integer"},"summary":{"description":"Short natural-language description of the generated track.","type":"string"},"title":{"type":"string"},"type":{"enum":["title"],"type":"string"}},"required":["type","stream_index","prompt_index","copy_index","title","display_tags"],"type":"object"},{"properties":{"channels":{"type":"integer"},"data":{"description":"Base64-encoded AAC in fMP4 fragments; concatenate per stream_index.","type":"string"},"num_streams":{"minimum":1,"type":"integer"},"sample_rate":{"type":"integer"},"stream_index":{"minimum":0,"type":"integer"},"type":{"enum":["audio_chunk"],"type":"string"}},"required":["type","sample_rate","channels","stream_index","num_streams","data"],"type":"object"},{"properties":{"type":{"enum":["complete"],"type":"string"}},"required":["type"],"type":"object"},{"properties":{"code":{"type":"string"},"message":{"type":"string"},"type":{"enum":["error"],"type":"string"}},"required":["type","message"],"type":"object"}]},"SoniloTextToMusicRequest":{"properties":{"duration":{"description":"Desired duration of the output track in seconds.","maximum":360,"minimum":1,"type":"integer"},"prompt":{"description":"Text prompt describing the desired music. Max length 1000 characters.","maxLength":1000,"minLength":1,"type":"string"}},"required":["prompt","duration"],"type":"object"},"SoniloVideoToMusicRequest":{"oneOf":[{"properties":{"prompt":{"description":"Optional text prompt to guide music generation.","type":"string"},"video":{"description":"Multipart file part; e.g. video/mp4. Max file size 300MB.","format":"binary","type":"string"}},"required":["video"],"type":"object"},{"properties":{"prompt":{"description":"Optional text prompt to guide music generation.","type":"string"},"video_url":{"description":"Public http:// or https:// URL of the video. Private/internal addresses are rejected.","format":"uri","type":"string"}},"required":["video_url"],"type":"object"}]},"StorageFile":{"properties":{"file_path":{"description":"Path to the file in storage","type":"string"},"id":{"description":"Unique identifier for the storage file","format":"uuid","type":"string"},"public_url":{"description":"Public URL","type":"string"}},"type":"object"},"StripeEvent":{"properties":{"data":{"properties":{"object":{"type":"object"}},"type":"object"},"id":{"type":"string"},"object":{"enum":["event"],"type":"string"},"type":{"enum":["invoice.paid"],"type":"string"}},"required":["id","object","type","data"],"type":"object"},"SubscriptionDuration":{"description":"The subscription billing duration","enum":["MONTHLY","ANNUAL"],"type":"string"},"SubscriptionTier":{"description":"The subscription tier level","enum":["FREE","STANDARD","CREATOR","PRO","FOUNDERS_EDITION"],"type":"string"},"SyncLabsActiveSpeaker":{"description":"Active speaker detection configuration","properties":{"auto_detect":{"description":"Whether to automatically detect and apply generation to the active speaker","type":"boolean"},"bounding_boxes":{"description":"Per-frame array of bounding boxes [x1, y1, x2, y2] for the detected face","items":{"items":{"type":"integer"},"type":"array"},"type":"array"},"bounding_boxes_url":{"description":"URL to a JSON file containing bounding boxes","type":"string"},"coordinates":{"description":"Pixel coordinates [x, y] in the source video frame identified by frame_number","items":{"type":"integer"},"type":"array"},"frame_number":{"description":"Frame index that corresponds to the provided coordinates for manual speaker selection","type":"integer"},"v3":{"description":"Whether to use ASD v3","type":"boolean"}},"type":"object"},"SyncLabsDubParams":{"description":"Dubbing parameters attached to a Sync Labs generate request","properties":{"numSpeakers":{"description":"Number of speakers in the source video; 0 enables auto-detection","type":"integer"},"providerName":{"description":"Provider to use for dubbing (e.g. elevenlabs)","type":"string"},"sourceLang":{"description":"Source language code; defaults to auto","type":"string"},"targetLang":{"description":"Target language code for dubbing","type":"string"}},"required":["providerName","targetLang"],"type":"object"},"SyncLabsGenerateRequest":{"description":"Request body for creating a Sync Labs lipsync generation","properties":{"dubParams":{"$ref":"#/components/schemas/SyncLabsDubParams"},"input":{"description":"Input items; exactly one visual input (video or image) and one audio or text input","items":{"$ref":"#/components/schemas/SyncLabsGenerationInput"},"type":"array"},"model":{"description":"Name of the model to use for generation; only sync-3 is supported","type":"string"},"options":{"$ref":"#/components/schemas/SyncLabsGenerationOptions"},"outputFileName":{"description":"Base filename for the generated output without extension","type":"string"},"projectId":{"description":"Optionally attach this generation to a Sync Labs project","type":"string"},"segments":{"description":"Segment definitions applying different audio inputs to different video segments","items":{"$ref":"#/components/schemas/SyncLabsGenerationSegment"},"type":"array"},"webhookUrl":{"description":"Webhook URL for generation status updates","type":"string"}},"required":["model","input"],"type":"object"},"SyncLabsGeneration":{"description":"A Sync Labs lipsync generation","properties":{"createdAt":{"description":"The date and time the generation was created","type":"string"},"error":{"description":"The error message if the generation failed","type":"string"},"errorCode":{"description":"Stable, machine-readable error code if the generation failed","type":"string"},"id":{"description":"Unique identifier for the generation","type":"string"},"input":{"description":"The input items used for generation","items":{"$ref":"#/components/schemas/SyncLabsGenerationInput"},"type":"array"},"model":{"description":"The name of the model used for generation","type":"string"},"options":{"$ref":"#/components/schemas/SyncLabsGenerationOptions"},"outputDuration":{"description":"The duration of the output media in seconds","format":"double","type":"number"},"outputFileName":{"description":"The sanitized filename applied to the output media","type":"string"},"outputUrl":{"description":"The URL of the output media","type":"string"},"projectId":{"description":"The id of the project this generation is attached to","type":"string"},"segmentOutputUrl":{"description":"The URL of the segment output media","type":"string"},"segments":{"description":"The segments of the generation","items":{"$ref":"#/components/schemas/SyncLabsGenerationSegment"},"type":"array"},"status":{"description":"The status of the generation (PENDING, PROCESSING, COMPLETED, FAILED, REJECTED)","type":"string"},"synthesizedAudioUrl":{"description":"The URL of the audio synthesized from a text (TTS) input","type":"string"},"webhookUrl":{"description":"The URL to the webhook endpoint","type":"string"}},"type":"object"},"SyncLabsGenerationInput":{"description":"An input item for a Sync Labs generation. type is one of video, image,\naudio, or text. Video/image/audio inputs are provided by url or\nassetId; text inputs carry a TTS provider configuration.\n","properties":{"assetId":{"description":"ID of an asset from the Sync Labs media library","type":"string"},"provider":{"$ref":"#/components/schemas/SyncLabsTTSProvider"},"refId":{"description":"Reference identifier used to link this input to segment definitions","type":"string"},"segments_frames":{"description":"Deprecated - use the top-level segments array instead","items":{"items":{"type":"integer"},"type":"array"},"type":"array"},"segments_secs":{"description":"Deprecated - use the top-level segments array instead","items":{"items":{"format":"double","type":"number"},"type":"array"},"type":"array"},"type":{"description":"Input type (video, image, audio, or text)","type":"string"},"url":{"description":"URL of the media to be used for generation","type":"string"}},"required":["type"],"type":"object"},"SyncLabsGenerationOptions":{"description":"Additional options available for a Sync Labs generation","properties":{"active_speaker_detection":{"$ref":"#/components/schemas/SyncLabsActiveSpeaker"},"model_mode":{"description":"Edit region for the model (lips, face, head); only works with react-1","type":"string"},"occlusion_detection_enabled":{"description":"Whether to detect occlusion during generation","type":"boolean"},"prompt":{"description":"Emotion prompt; only works with react-1","type":"string"},"sync_mode":{"description":"How to handle duration mismatches between video and audio (bounce, loop, cut_off, silence, remap)","type":"string"},"temperature":{"description":"How expressive lipsync can be, 0 to 1","format":"double","type":"number"}},"type":"object"},"SyncLabsGenerationSegment":{"description":"Defines a video segment with its corresponding audio input","properties":{"audioInput":{"$ref":"#/components/schemas/SyncLabsSegmentAudioInput"},"endTime":{"description":"Segment end time in seconds","format":"double","type":"number"},"optionsOverride":{"$ref":"#/components/schemas/SyncLabsSegmentOptionsOverride"},"startTime":{"description":"Segment start time in seconds","format":"double","type":"number"}},"required":["startTime","endTime","audioInput"],"type":"object"},"SyncLabsSegmentAudioInput":{"description":"Audio input configuration for a specific segment","properties":{"endTime":{"description":"Optional end time in seconds to crop the referenced audio","format":"double","type":"number"},"refId":{"description":"Reference ID of the audio/text-to-speech input to use for this segment","type":"string"},"startTime":{"description":"Optional start time in seconds to crop the referenced audio","format":"double","type":"number"}},"required":["refId"],"type":"object"},"SyncLabsSegmentOptionsOverride":{"description":"Override generation options for a specific segment","properties":{"active_speaker_detection":{"$ref":"#/components/schemas/SyncLabsActiveSpeaker"},"occlusion_detection_enabled":{"description":"Override occlusion detection for this segment","type":"boolean"},"sync_mode":{"description":"Override the sync mode for this segment","type":"string"},"temperature":{"description":"Override temperature (0-1) for this segment","format":"double","type":"number"}},"type":"object"},"SyncLabsTTSProvider":{"description":"Text-to-speech provider configuration for a Sync Labs text input","properties":{"name":{"description":"TTS provider name (e.g. elevenlabs)","type":"string"},"script":{"description":"Script to be used for generation","type":"string"},"similarityBoost":{"description":"How closely the AI should adhere to the original voice","format":"double","type":"number"},"stability":{"description":"Voice stability; lower values introduce broader emotional range","format":"double","type":"number"},"voiceId":{"description":"Sync voice id (cloned voice from the Studio) or ElevenLabs voice ID","type":"string"}},"required":["name","voiceId","script"],"type":"object"},"TencentErrorResponse":{"description":"Error response from Tencent API","properties":{"Response":{"properties":{"Error":{"properties":{"Code":{"description":"Error code","type":"string"},"Message":{"description":"Error message","type":"string"}},"type":"object"},"RequestId":{"description":"Unique request ID for troubleshooting","type":"string"}},"type":"object"}},"type":"object"},"TencentFile3D":{"description":"3D file information","properties":{"PreviewImageUrl":{"description":"Preview image URL","format":"uri","type":"string"},"Type":{"description":"3D file format","enum":["GLB","OBJ"],"type":"string"},"Url":{"description":"File URL (valid for 24 hours)","format":"uri","type":"string"}},"type":"object"},"TencentHunyuan3DProRequest":{"description":"Request body for Tencent Hunyuan 3D Pro generation","properties":{"EnablePBR":{"default":false,"description":"Whether to enable PBR material generation.","type":"boolean"},"FaceCount":{"default":500000,"description":"Face count for 3D model generation.","maximum":1500000,"minimum":40000,"type":"integer"},"GenerateType":{"default":"Normal","description":"Generation task type:\n- Normal: generates a geometric model with textures (default)\n- LowPoly: model generated after intelligent polygon reduction\n- Geometry: generate model without textures (white model)\n- Sketch: generative model from sketch or line drawing\n","enum":["Normal","LowPoly","Geometry","Sketch"],"type":"string"},"ImageBase64":{"description":"Base64 encoded image for image-to-3D generation.\nResolution: min 128px, max 5000px per side.\nMax size: 8MB (recommend 6MB before encoding).\nSupported formats: jpg, png, jpeg, webp.\nEither ImageBase64/ImageUrl or Prompt is required.\n","type":"string"},"ImageUrl":{"description":"URL of input image for image-to-3D generation.\nResolution: min 128px, max 5000px per side.\nMax size: 8MB.\nSupported formats: jpg, png, jpeg, webp.\nEither ImageBase64/ImageUrl or Prompt is required.\n","format":"uri","type":"string"},"Model":{"default":"3.0","description":"Tencent HY 3D Global model version.\nDefaults to 3.0, with optional choices: 3.0, 3.1.\nWhen selecting version 3.1, the LowPoly parameter is unavailable.\n","enum":["3.0","3.1"],"example":"3.0","type":"string"},"MultiViewImages":{"description":"Multi-perspective model images for 3D generation.\nEach perspective is limited to one image.\nImage size limit: max 8MB after encoding.\nImage resolution: min 128px, max 5000px per side.\nSupported formats: JPG, PNG.\n","items":{"$ref":"#/components/schemas/TencentViewImage"},"type":"array"},"PolygonType":{"default":"triangle","description":"Polygon type (only effective when GenerateType is LowPoly).\n- triangle: triangular faces (default)\n- quadrilateral: mix of quadrangle and triangle faces\n","enum":["triangle","quadrilateral"],"type":"string"},"Prompt":{"description":"Text description for 3D content generation.\nSupports up to 1024 utf-8 characters.\nEither Prompt or ImageBase64/ImageUrl is required, but not both.\n","example":"A cat","maxLength":1024,"type":"string"}},"type":"object"},"TencentHunyuan3DProResponse":{"description":"Response from Tencent Hunyuan 3D Pro submit endpoint","properties":{"Response":{"properties":{"Error":{"description":"Error object (present when request fails)","properties":{"Code":{"description":"Error code","type":"string"},"Message":{"description":"Error message","type":"string"}},"type":"object"},"JobId":{"description":"Task ID (valid for 24 hours)","example":"1375367755519696896","type":"string"},"RequestId":{"description":"Unique request ID for troubleshooting","example":"13f47dd0-1af9-4383-b401-dae18d6e99fc","type":"string"}},"type":"object"}},"type":"object"},"TencentHunyuan3DQueryRequest":{"properties":{"JobId":{"description":"The JobId returned from the submit endpoint","example":"1375367755519696896","type":"string"}},"required":["JobId"],"type":"object"},"TencentHunyuan3DQueryResponse":{"description":"Response from Tencent Hunyuan 3D query endpoint","properties":{"Response":{"properties":{"ErrorCode":{"description":"Error code (empty string if no error)","type":"string"},"ErrorMessage":{"description":"Error message if task failed (empty string if no error)","type":"string"},"RequestId":{"description":"Unique request ID for troubleshooting","type":"string"},"ResultFile3Ds":{"description":"Array of generated 3D files","items":{"$ref":"#/components/schemas/TencentFile3D"},"type":"array"},"Status":{"description":"Task status:\n- WAIT: waiting\n- RUN: running\n- FAIL: failed\n- DONE: successful\n","enum":["WAIT","RUN","FAIL","DONE"],"type":"string"}},"type":"object"}},"type":"object"},"TencentHunyuan3DSmartTopologyRequest":{"description":"Request body for Tencent Hunyuan 3D Smart Topology (retopology/polygon reduction)","properties":{"FaceLevel":{"description":"Polygon reduction level.","enum":["high","medium","low"],"example":"medium","type":"string"},"File3D":{"$ref":"#/components/schemas/TencentInputFile3D"},"PolygonType":{"description":"Polygon type for the output mesh. Defaults to triangle.","enum":["triangle","quadrilateral"],"example":"triangle","type":"string"}},"required":["File3D"],"type":"object"},"TencentHunyuan3DTextureEditRequest":{"description":"Request body for Tencent Hunyuan 3D texture edit","properties":{"EnablePBR":{"description":"Whether to enable the PBR texture parameter; only supported when using Prompt.","example":true,"type":"boolean"},"File3D":{"$ref":"#/components/schemas/TencentInputFile3D"},"Image":{"$ref":"#/components/schemas/TencentImageInfo"},"Prompt":{"description":"Describes texture editing. Either Image or Prompt is required; they cannot coexist.","example":"a kitten","maxLength":1024,"type":"string"}},"required":["File3D"],"type":"object"},"TencentHunyuan3DUVRequest":{"description":"Request body for Tencent Hunyuan 3D UV unfolding","properties":{"File":{"$ref":"#/components/schemas/TencentInputFile3D"}},"type":"object"},"TencentHunyuan3DUVResponse":{"description":"Response from Tencent Hunyuan 3D UV submit endpoint","properties":{"Response":{"properties":{"Error":{"description":"Error object (present when request fails)","properties":{"Code":{"description":"Error code","type":"string"},"Message":{"description":"Error message","type":"string"}},"type":"object"},"JobId":{"description":"Task ID for the UV unwrapping job","example":"1384898587778465792","type":"string"},"RequestId":{"description":"Unique request ID for troubleshooting","example":"5265eb4a-0f4f-4cb1-9b3d-d9f1fb9347d2","type":"string"}},"type":"object"}},"type":"object"},"TencentImageInfo":{"description":"Reference image - Base64 data or image URL","properties":{"ImageBase64":{"description":"Base64 encoded image. Resolution 128-4096 per side, converted Base64 less than 10MB. Formats jpg, jpeg, png.","type":"string"},"ImageUrl":{"description":"Image URL. If both Base64 and Url provided, Url prevails.","format":"uri","type":"string"}},"type":"object"},"TencentInputFile3D":{"description":"3D file input for UV unwrapping","properties":{"Type":{"description":"3D file format type","enum":["FBX","OBJ","GLB"],"example":"GLB","type":"string"},"Url":{"description":"URL of the 3D file that needs UV unwrapping","example":"https://example.com/model.glb","format":"uri","type":"string"}},"required":["Type","Url"],"type":"object"},"TencentViewImage":{"description":"A view image for multi-perspective 3D generation","properties":{"ViewImageBase64":{"description":"Base64 encoded image for this view.\nResolution: min 128px, max 5000px per side.\nMax size: 8MB.\nSupported formats: JPG, PNG.\n","type":"string"},"ViewImageUrl":{"description":"URL of the image for this view.\nResolution: min 128px, max 5000px per side.\nMax size: 8MB.\nSupported formats: JPG, PNG.\n","format":"uri","type":"string"},"ViewType":{"description":"The viewing angle type for this image.\n- left: Left view\n- right: Right view\n- back: Rear view\n- top: Top view (only supported in Model 3.1)\n- bottom: Bottom view (only supported in Model 3.1)\n- left_front: Left front 45 degree view (only supported in Model 3.1)\n- right_front: Right front 45 degree view (only supported in Model 3.1)\n","enum":["left","right","back","top","bottom","left_front","right_front"],"type":"string"}},"type":"object"},"TextResponseFormatConfiguration":{"description":"An object specifying the format that the model must output.\n\nConfiguring `{ \"type\": \"json_schema\" }` enables Structured Outputs,\nwhich ensures the model will match your supplied JSON schema. Learn more in the\n[Structured Outputs guide](/docs/guides/structured-outputs).\n\nThe default format is `{ \"type\": \"text\" }` with no additional options.\n\n**Not recommended for gpt-4o and newer models:**\n\nSetting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\nensures the message the model generates is valid JSON. Using `json_schema`\nis preferred for models that support it.\n","oneOf":[{"$ref":"#/components/schemas/ResponseFormatText"},{"$ref":"#/components/schemas/TextResponseFormatJsonSchema"},{"$ref":"#/components/schemas/ResponseFormatJsonObject"}]},"TextResponseFormatJsonSchema":{"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](/docs/guides/structured-outputs).\n","properties":{"description":{"description":"A description of what the response format is for, used by the model to\ndetermine how to respond in the format.\n","type":"string"},"name":{"description":"The name of the response format. Must be a-z, A-Z, 0-9, or contain\nunderscores and dashes, with a maximum length of 64.\n","type":"string"},"schema":{"$ref":"#/components/schemas/ResponseFormatJsonSchemaSchema"},"strict":{"default":false,"description":"Whether to enable strict schema adherence when generating the output.\nIf set to true, the model will always follow the exact schema defined\nin the `schema` field. Only a subset of JSON Schema is supported when\n`strict` is `true`. To learn more, read the [Structured Outputs\nguide](/docs/guides/structured-outputs).\n","type":"boolean"},"type":{"description":"The type of response format being defined. Always `json_schema`.","enum":["json_schema"],"type":"string","x-stainless-const":true}},"required":["type","schema","name"],"title":"JSON schema","type":"object"},"Tool":{"discriminator":{"mapping":{"computer_use_preview":"#/components/schemas/ComputerUsePreviewTool","file_search":"#/components/schemas/FileSearchTool","function":"#/components/schemas/FunctionTool","web_search_preview":"#/components/schemas/WebSearchPreviewTool","web_search_preview_2025_03_11":"#/components/schemas/WebSearchPreviewTool"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/FileSearchTool"},{"$ref":"#/components/schemas/FunctionTool"},{"$ref":"#/components/schemas/WebSearchPreviewTool"},{"$ref":"#/components/schemas/ComputerUsePreviewTool"}]},"ToolChoiceFunction":{"description":"Use this option to force the model to call a specific function.\n","properties":{"name":{"description":"The name of the function to call.","type":"string"},"type":{"description":"For function calling, the type is always `function`.","enum":["function"],"type":"string","x-stainless-const":true}},"required":["type","name"],"title":"Function tool","type":"object"},"ToolChoiceOptions":{"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools.\n","enum":["none","auto","required"],"title":"Tool choice mode","type":"string"},"ToolChoiceTypes":{"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](/docs/guides/tools).\n","properties":{"type":{"description":"The type of hosted tool the model should to use. Learn more about\n[built-in tools](/docs/guides/tools).\n\nAllowed values are:\n- `file_search`\n- `web_search_preview`\n- `computer_use_preview`\n","enum":["file_search","web_search_preview","computer_use_preview","web_search_preview_2025_03_11"],"type":"string"}},"required":["type"],"title":"Hosted tool","type":"object"},"TopazCreateRequestImageSequenceSchema":{"properties":{"destination":{"properties":{"external":{"$ref":"#/components/schemas/TopazExternalStorage"}},"type":"object"},"filters":{"$ref":"#/components/schemas/TopazInputFilters"},"output":{"$ref":"#/components/schemas/TopazOutputInformationImageSequence"},"source":{"description":"Source details for the video","properties":{"container":{"description":"The container format of the image files","enum":["DPX","EXR","JPEG","PNG","TIFF"],"example":"TIFF","type":"string"},"endNumber":{"description":"Optional ending frame number for image sequences","example":120,"type":"integer"},"external":{"$ref":"#/components/schemas/TopazExternalStorage"},"frameCount":{"description":"Total number of frames in the video, in this case, equal to the number of image files.","example":18000,"type":"number"},"frameRate":{"description":"Frame rate of the video","example":30,"type":"number"},"resolution":{"description":"Resolution details of the image","properties":{"height":{"description":"Height of the image in pixels","example":1080,"type":"integer"},"width":{"description":"Width of the image in pixels","example":1920,"type":"integer"}},"required":["width","height"],"type":"object"},"startNumber":{"description":"Optional starting frame number for image sequences","example":120,"type":"integer"}},"required":["container","frameCount","frameRate","resolution","external"],"type":"object"}},"required":["source","filters","output","destination"],"title":"Image Sequence","type":"object"},"TopazCreateRequestVideoSchema":{"properties":{"destination":{"properties":{"external":{"$ref":"#/components/schemas/TopazExternalStorage"}},"type":"object"},"filters":{"$ref":"#/components/schemas/TopazInputFilters"},"output":{"$ref":"#/components/schemas/TopazOutputInformationVideo"},"overrides":{"properties":{"isPaidDiffusion":{"type":"boolean"}},"type":"object"},"source":{"description":"Source details for the video","properties":{"container":{"description":"The container format of the video file","enum":["mp4","mov","mkv"],"example":"mp4","type":"string"},"duration":{"description":"Duration of the video file in seconds","example":600,"type":"number"},"external":{"$ref":"#/components/schemas/TopazExternalStorage"},"frameCount":{"description":"Total number of frames in the video","example":18000,"type":"number"},"frameRate":{"description":"Frame rate of the video","example":30,"type":"number"},"resolution":{"description":"Resolution details of the video","properties":{"height":{"description":"Height of the video in pixels","example":1080,"type":"integer"},"width":{"description":"Width of the video in pixels","example":1920,"type":"integer"}},"required":["width","height"],"type":"object"},"size":{"description":"Size of the video file in bytes","example":123456000,"type":"integer"}},"required":["container","size","duration","frameCount","frameRate","resolution"],"type":"object"}},"required":["source","filters","output"],"title":"Video AI","type":"object"},"TopazCredentialsS3":{"properties":{"externalId":{"description":"Kind of like a secret string for extra layer of security","example":"MSTnuGztXtTU25XKjVfMJCsujv6VtAGtv1TGSjtOL6M=","type":"string"},"roleArn":{"description":"AWS ARN of the role to assume","example":"arn:aws:iam::123456789:role/topazlabs","type":"string"}},"required":["roleArn","externalId"],"type":"object"},"TopazDownloadResponse":{"properties":{"download_url":{"description":"Presigned URL to download the image","example":"https://example.com/d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b?presigned_headers","type":"string"},"expiry":{"description":"Expiration time of the presigned URLs in Unix timestamp","example":1617220000,"type":"integer"},"head_url":{"description":"Presigned URL to get image metadata","example":"https://example.com/d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b?presigned_headers","type":"string"}},"required":["download_url","expiry"],"type":"object"},"TopazEnhanceGenRequest":{"properties":{"autoprompt":{"default":true,"description":"Automatically generate a prompt from the input image - available for Bloom 2 only","type":"boolean"},"color_preservation":{"default":"true","description":"To preserve the original color - available for Reimagine and Bloom 2 only (must be string \"true\" or \"false\" due to Topaz API requirement)","enum":["true","false"],"type":"string"},"creativity":{"default":3,"description":"Creativity settings range from 1 to 9 - available for Reimagine and Bloom 2 only","maximum":9,"minimum":1,"type":"integer"},"crop_to_fill":{"default":false,"description":"Default behavior is to letterbox the image if a differing aspect ratio is chosen. Enable crop_to_fill by setting this to true if you instead want to crop the image to fill the dimensions","type":"boolean"},"enhancement_strength":{"default":"high","description":"Strength of the enhancement - low, medium or high - available for Wonder 3.5 only","type":"string"},"face_enhancement":{"default":true,"description":"By default, faces (if any) are enhanced during image processing as well. Set face_enhancement to false if you don't want this","type":"boolean"},"face_enhancement_creativity":{"default":0,"description":"Choose the level of creativity for face enhancement from 0 to 1. Defaults to 0, and is ignored if face_enhancement is false","maximum":1,"minimum":0,"type":"number"},"face_enhancement_strength":{"default":0.8,"description":"Control how sharp the enhanced faces are relative to the background from 0 to 1. Defaults to 0.8, and is ignored if face_enhancement is false","maximum":1,"minimum":0,"type":"number"},"face_preservation":{"default":"true","description":"To preserve the identity of characters - available for Reimagine only (must be string \"true\" or \"false\" due to Topaz API requirement)","enum":["true","false"],"type":"string"},"grain":{"default":false,"description":"Whether to add grain to the output image - available for Wonder 3.5 and Bloom 2 only","type":"boolean"},"grain_density":{"default":0.5,"description":"Density of the added grain from 0 to 1 - ignored if grain is false - available for Wonder 3.5 and Bloom 2 only","maximum":1,"minimum":0,"type":"number"},"grain_model":{"default":"silver","description":"Grain model - silver, gaussian or grey - ignored if grain is false - available for Wonder 3.5 and Bloom 2 only","type":"string"},"grain_size":{"default":1,"description":"Size of the added grain from 1 to 5 - ignored if grain is false - available for Wonder 3.5 and Bloom 2 only","maximum":5,"minimum":1,"type":"number"},"grain_strength":{"default":0.5,"description":"Strength of the added grain from 0 to 1 - ignored if grain is false - available for Wonder 3.5 and Bloom 2 only","maximum":1,"minimum":0,"type":"number"},"image":{"description":"The image file to be processed. Supported formats - jpeg (or jpg), png, tiff (or tif)","format":"binary","type":"string"},"input_height":{"description":"Height of the input image in pixels - available for Wonder 3.5 and Bloom 2 only","type":"integer"},"input_width":{"description":"Width of the input image in pixels - available for Wonder 3.5 and Bloom 2 only","type":"integer"},"model":{"default":"Reimagine","description":"The model to use for processing the image","enum":["Reimagine","Wonder 3.5","Bloom 2"],"type":"string"},"output_format":{"default":"jpeg","description":"The desired format of the output image","enum":["jpeg","jpg","png","tiff","tif"],"type":"string"},"output_height":{"description":"The desired height of the output image in pixels","maximum":32000,"minimum":1,"type":"integer"},"output_width":{"description":"The desired width of the output image in pixels","maximum":32000,"minimum":1,"type":"integer"},"prompt":{"description":"Text prompt for creative upscaling guidance - available for Reimagine and Bloom 2 only","example":"enter-your-prompt-here","type":"string"},"reference_uri":{"description":"URI of a reference image to guide generation - available for Bloom 2 only","type":"string"},"seed":{"description":"Seed for reproducible generation - available for Bloom 2 only","type":"integer"},"source_id":{"description":"Unique identifier of the source image","example":"d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b","type":"string"},"source_url":{"description":"The URL of the source image","example":"https://example.com/image.jpg","type":"string"},"subject_detection":{"default":"All","description":"Specifies whether you want to detect all subjects in the image, only the foreground subject, or only the background for the AI model to run on","enum":["All","Foreground","Background"],"type":"string"}},"required":["model"],"type":"object"},"TopazEnhanceGenResponse":{"properties":{"eta":{"description":"Expected completion time in Unix timestamp","example":1617220000,"type":"integer"},"process_id":{"description":"Unique identifier for the processing job","example":"d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b","type":"string"},"source_id":{"description":"Unique identifier of the source image","example":"d7b3b3b3-7b3b-4b3b-8b3b-3b3b3b3b3b3b","type":"string"}},"required":["process_id","eta"],"type":"object"},"TopazExternalStorage":{"properties":{"bucketName":{"example":"galaxies","type":"string"},"credentials":{"$ref":"#/components/schemas/TopazCredentialsS3"},"key":{"description":"The example includes the standard specifier for image sequence requests, with optional directory path. It must begin with \"%\" and end with the integer specifier \"d\". The \"0\" in the example indicates left-padding with zeroes, and \"6\" indicates the number of digits in the file name.\nKeys for video requests must be valid characters supported by S3.\n","example":"milky_way/%06d.tiff","type":"string"},"provider":{"enum":["s3"],"example":"s3","type":"string"}},"required":["provider","credentials","bucketName","key"],"type":"object"},"TopazInputFilters":{"description":"Array of EnhancementFilter or FrameInterpolationFilter objects","example":[{"auto":"Auto","blur":0.6,"compression":0.1,"details":0.2,"fieldOrder":"Auto","focusFixLevel":"Normal","grain":0.02,"grainSize":1,"halo":0.4,"model":"prob-4","noise":0.3,"preblur":0.5,"prenoise":0.01,"recoverOriginalDetailValue":0.7,"videoType":"Progressive"},{"duplicate":true,"duplicateThreshold":0.01,"fps":60,"model":"apo-8","slowmo":2}],"items":{"anyOf":[{"$ref":"#/components/schemas/TopazVideoEnhancementFilter"},{"$ref":"#/components/schemas/TopazVideoFrameInterpolationFilter"}]},"type":"array"},"TopazOutputInformationImageSequence":{"properties":{"codecId":{"description":"Video codec ID, if known. Defaults to videoEncoder.","example":"h265-main-win-nvidia","type":"string"},"container":{"description":"Desired output container, defaults to the input container","enum":["DPX","EXR","JPEG","PNG","TIFF"],"example":"TIFF","type":"string"},"cropToFit":{"description":"Center cropping to fit the output dimensions","example":true,"type":"boolean"},"frameRate":{"description":"Frame rate","example":30,"type":"number"},"resolution":{"description":"Desired output resolution","properties":{"height":{"description":"Height in pixels. The maximum size depends on the encoder and can be referenced using the table below \u003ctable\u003e \u003ctr\u003e \u003ctd\u003eH264\u003c/td\u003e \u003ctd\u003eH265\u003c/td\u003e \u003ctd\u003eProRes \u003ctd\u003eAV1 \u003ctd\u003eVP9 \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003e4096\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003ctd\u003e16386\u003c/td\u003e \u003ctd\u003e8704\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e","example":4320,"type":"integer"},"width":{"description":"Width in pixels. The maximum size depends on the encoder and can be referenced using the table below \u003ctable\u003e \u003ctr\u003e \u003ctd\u003eH264\u003c/td\u003e \u003ctd\u003eH265\u003c/td\u003e \u003ctd\u003eProRes \u003ctd\u003eAV1 \u003ctd\u003eVP9 \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003e4096\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003ctd\u003e16386\u003c/td\u003e \u003ctd\u003e16384\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e","example":7680,"type":"integer"}},"required":["width","height"],"type":"object"},"videoEncoder":{"enum":["DPX","EXR","JPEG","PNG","TIFF"],"example":"TIFF","type":"string"},"videoProfile":{"description":"Codec profile specific to videoEncoder","example":"Main","type":"string"}},"required":["resolution","frameRate"],"type":"object"},"TopazOutputInformationVideo":{"properties":{"audioBitrate":{"description":"Audio bitrate, if audioTransfer is Copy or Convert. Default values for the codec are used if not provided.","example":"320","type":"string"},"audioCodec":{"description":"__Required if audioTransfer is Copy or Convert.__","enum":["AAC","AC3","PCM"],"example":"AAC","type":"string"},"audioTransfer":{"enum":["Copy","Convert","None"],"example":"Copy","type":"string"},"codecId":{"description":"Video codec ID, if known. Defaults to videoEncoder.","example":"h265-main-win-nvidia","type":"string"},"container":{"description":"Desired output container","enum":["mp4","mov","mkv"],"example":"mp4","type":"string"},"cropToFit":{"description":"Center cropping to fit the output dimensions","example":true,"type":"boolean"},"dynamicCompressionLevel":{"description":"__Required if videoBitrate is not provided.__ Automatic CQP selection.","enum":["Low","Mid","High"],"example":"Mid","type":"string"},"frameRate":{"description":"Frame rate","example":30,"type":"number"},"resolution":{"description":"Desired output resolution","properties":{"height":{"description":"Height in pixels. The maximum size depends on the encoder and can be referenced using the table below \u003ctable\u003e \u003ctr\u003e \u003ctd\u003eH264\u003c/td\u003e \u003ctd\u003eH265\u003c/td\u003e \u003ctd\u003eProRes \u003ctd\u003eAV1 \u003ctd\u003eVP9 \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003e4096\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003ctd\u003e16386\u003c/td\u003e \u003ctd\u003e8704\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e","example":4320,"type":"integer"},"width":{"description":"Width in pixels. The maximum size depends on the encoder and can be referenced using the table below \u003ctable\u003e \u003ctr\u003e \u003ctd\u003eH264\u003c/td\u003e \u003ctd\u003eH265\u003c/td\u003e \u003ctd\u003eProRes \u003ctd\u003eAV1 \u003ctd\u003eVP9 \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003e4096\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003ctd\u003e16386\u003c/td\u003e \u003ctd\u003e16384\u003c/td\u003e \u003ctd\u003e8192\u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e","example":7680,"type":"integer"}},"required":["width","height"],"type":"object"},"videoBitrate":{"description":"__Required if dynamicCompressionLevel is not provided.__ Constant bitrate, suffixed with \"k\" for kilobits or \"m\" for megabits per second.","example":"1k","type":"string"},"videoEncoder":{"enum":["AV1","FFV1","H264","H265","ProRes","QuickTime Animation","QuickTime R210","QuickTime V210","VP9"],"example":"H265","type":"string"},"videoProfile":{"description":"Codec profile specific to videoEncoder. The following are some combinations of available profiles based on the 'videoEncoder' selection \u003ctable\u003e \u003ctr\u003e \u003ctd\u003eH264\u003c/td\u003e \u003ctd\u003eH265\u003c/td\u003e \u003ctd\u003eProRes \u003ctd\u003eAV1 \u003ctd\u003eVP9 \u003c/tr\u003e \u003ctr\u003e \u003ctd\u003eHigh\u003c/td\u003e \u003ctd\u003eMain, Main10\u003c/td\u003e \u003ctd\u003e422 Proxy, 422 LT, 422 Std, 422 HQ\u003c/td\u003e \u003ctd\u003e8-bit, 10-bit\u003c/td\u003e \u003ctd\u003eGood, Best\u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e","example":"Main","type":"string"}},"required":["resolution","frameRate","audioCodec","audioTransfer"],"type":"object"},"TopazStatusResponse":{"properties":{"category":{"description":"Processing category (e.g., \"Enhance\")","type":"string"},"creation_time":{"description":"Creation time in Unix timestamp","type":"integer"},"credits":{"description":"Credits consumed for this job","type":"integer"},"crop_to_fill":{"description":"Whether crop to fill is enabled","type":"boolean"},"eta":{"description":"Expected completion time in Unix timestamp","type":"integer"},"face_enhancement":{"description":"Whether face enhancement is enabled","type":"boolean"},"face_enhancement_creativity":{"description":"Face enhancement creativity level","type":"number"},"face_enhancement_strength":{"description":"Face enhancement strength level","type":"number"},"filename":{"description":"Original filename without extension","type":"string"},"input_format":{"description":"Format of the input image","type":"string"},"input_height":{"description":"Height of the input image in pixels","type":"integer"},"input_width":{"description":"Width of the input image in pixels","type":"integer"},"model":{"description":"Specific model used (e.g., \"Reimagine\")","type":"string"},"model_type":{"description":"Type of model used (e.g., \"Generative\")","type":"string"},"modification_time":{"description":"Last modification time in Unix timestamp","type":"integer"},"options_json":{"description":"JSON string containing additional options","type":"string"},"output_format":{"description":"Format of the output image","type":"string"},"output_height":{"description":"Height of the output image in pixels","type":"integer"},"output_width":{"description":"Width of the output image in pixels","type":"integer"},"process_id":{"description":"Unique identifier for the processing job","type":"string"},"progress":{"description":"Progress percentage (0-100)","maximum":100,"minimum":0,"type":"number"},"source_id":{"description":"Unique identifier of the source image","type":"string"},"status":{"description":"Current status of the processing job","enum":["Pending","Processing","Completed","Failed","Cancelled"],"type":"string"},"subject_detection":{"description":"Subject detection setting","type":"string"},"sync":{"description":"Whether this was a synchronous request","type":"boolean"}},"required":["process_id","status","credits"],"type":"object"},"TopazVideoAcceptResponse":{"properties":{"message":{"description":"Response message","example":"Accepted","type":"string"},"uploadId":{"description":"Upload ID for completing multi-part upload","example":"GDlWC7qIaE6okS41Xf/ktpuS5XzTRabg","type":"string"},"urls":{"description":"URLs to PUT the parts to","example":["https://videocloud.s3.amazonaws.com/source.mp4?uploadPart1","https://videocloud.s3.amazonaws.com/source.mp4?uploadPart2"],"items":{"type":"string"},"type":"array"}},"required":["uploadId","urls"],"type":"object"},"TopazVideoCompleteUploadRequest":{"properties":{"md5Hash":{"description":"MD5 hash of the source video file in hex","example":"4d186321c1a7f0f354b297e8914ab240","type":"string"},"uploadResults":{"description":"An array of part number and ETag pairs of the uploaded parts. ETags are returned by S3 upon upload of the part.","items":{"properties":{"eTag":{"description":"eTag value returned by S3 upon upload of the part","example":"d41d8cd98f00b204e9800998ecf8427e","type":"string"},"partNum":{"description":"Part number of the uploaded part, starting from 1","example":1,"type":"integer"}},"required":["partNum","eTag"],"type":"object"},"type":"array"}},"required":["uploadResults"],"type":"object"},"TopazVideoCompleteUploadResponse":{"properties":{"message":{"description":"Confirmation message","example":"Processing has been queued","type":"string"}},"required":["message"],"type":"object"},"TopazVideoCreateRequest":{"oneOf":[{"$ref":"#/components/schemas/TopazCreateRequestVideoSchema"},{"$ref":"#/components/schemas/TopazCreateRequestImageSequenceSchema"}]},"TopazVideoCreateResponse":{"properties":{"estimates":{"$ref":"#/components/schemas/TopazVideoRequestEstimates"},"requestId":{"description":"Unique identifier for the video processing request","example":"c1f96dc2-c448-00e6-82ed-14ecb6403c62","format":"uuid","type":"string"}},"required":["requestId","estimates"],"type":"object"},"TopazVideoEnhancedDownload":{"description":"Signed download URL to the enhanced video file","properties":{"expiresAt":{"description":"Time in milliseconds since UTC epoch","example":1727213400000,"type":"integer"},"expiresIn":{"description":"TTL in milliseconds","example":86400000,"type":"integer"},"url":{"example":"https://videocloud.r2.cloudflarestorage.com/enhanced.mp4","type":"string"}},"type":"object"},"TopazVideoEnhancementFilter":{"properties":{"auto":{"description":"Parameter mode of the selected model","enum":["Auto","Manual","Relative"],"example":"Auto","type":"string"},"blur":{"description":"Amount of sharpness applied","example":0.6,"maximum":1,"minimum":-1,"type":"number"},"compression":{"description":"Adjust strength of compression recovery","example":0.1,"maximum":1,"minimum":-1,"type":"number"},"creativity":{"description":"Creativity level for Starlight Creative (slc-1) only","enum":["low","high"],"type":"string"},"details":{"description":"Amount of detail reconstruction","example":0.2,"maximum":1,"minimum":-1,"type":"number"},"fieldOrder":{"description":"Optional specification of field order for interlaced input videos","enum":["TopFirst","BottomFirst","Auto"],"example":"Auto","type":"string"},"focusFixLevel":{"description":"Downscales video input for stronger correction of blurred subjects","enum":["None","Normal","Strong"],"example":"Normal","type":"string"},"grain":{"description":"Adds grain after AI model processing","example":0.02,"maximum":0.1,"minimum":0,"type":"number"},"grainSize":{"description":"Size of generated grain","example":1,"maximum":5,"minimum":0,"type":"number"},"halo":{"description":"Amount of halo reduction","example":0.4,"maximum":1,"minimum":-1,"type":"number"},"isOptimizedMode":{"description":"Set to true for Starlight Creative (slc-1) only","type":"boolean"},"model":{"description":"Short code name for AI model","enum":["aaa-9","ahq-12","alq-13","alqs-2","amq-13","amqs-2","ddv-3","dtd-4","dtds-2","dtv-4","dtvs-2","gcg-5","ghq-5","iris-2","iris-3","nxf-1","nyx-3","prob-4","rhea-1","rxl-1","thd-3","thf-4","thm-2","slf-1","slc-1"],"example":"prob-4","type":"string"},"noise":{"description":"Amount of noise reduction","example":0.3,"maximum":1,"minimum":-1,"type":"number"},"preblur":{"description":"Adjust anti-aliasing and deblurring strength","example":0.5,"maximum":1,"minimum":-1,"type":"number"},"prenoise":{"description":"Adds noise to input to reduce over-smoothing","example":0.01,"maximum":0.1,"minimum":0,"type":"number"},"recoverOriginalDetailValue":{"description":"Reintroduce source details into the output video","example":0.7,"maximum":1,"minimum":0,"type":"number"},"videoType":{"description":"Frame/field type of the video","enum":["Progressive","Interlaced","ProgressiveInterlaced"],"example":"Progressive","type":"string"}},"required":["model"],"type":"object"},"TopazVideoFrameInterpolationFilter":{"properties":{"duplicate":{"description":"Analyze input for duplicate frames and remove them","example":true,"type":"boolean"},"duplicateThreshold":{"description":"Sensitivity of detection for duplicate frames","example":0.01,"maximum":0.1,"minimum":0.001,"type":"number"},"fps":{"description":"Output frame rate, does not increase duration","example":60,"maximum":240,"minimum":15,"type":"number"},"model":{"description":"Short code name for AI model","enum":["aion-1","apf-2","apo-8","chf-3","chr-2"],"example":"apo-8","type":"string"},"slowmo":{"description":"Slow motion factor applied to input video","example":2,"maximum":16,"minimum":1,"type":"number"}},"required":["model"],"type":"object"},"TopazVideoRequestEstimates":{"description":"Lower and upper bound estimates","properties":{"cost":{"description":"Cost range in credits","example":[10,12],"items":{"type":"integer"},"type":"array"},"time":{"description":"Time range in seconds","example":[600,700],"items":{"type":"integer"},"type":"array"}},"type":"object"},"TopazVideoStatusResponse":{"properties":{"averageFps":{"description":"Average processing speed of each node","example":1.23,"type":"number"},"combinedFps":{"description":"Combined processing speed of all nodes","example":12.34,"type":"number"},"download":{"$ref":"#/components/schemas/TopazVideoEnhancedDownload"},"estimates":{"$ref":"#/components/schemas/TopazVideoRequestEstimates"},"message":{"example":"Processing","type":"string"},"outputSize":{"description":"Size of output video","example":"10 GB","type":"string"},"progress":{"description":"Total progress percentage","example":82,"maximum":100,"minimum":0,"type":"number"},"status":{"description":"Current status of the video processing","enum":["requested","accepted","initializing","preprocessing","processing","postprocessing","complete","canceling","canceled","failed"],"example":"processing","type":"string"}},"required":["status"],"type":"object"},"TripoAnimation":{"enum":["preset:idle","preset:walk","preset:climb","preset:jump","preset:run","preset:slash","preset:shoot","preset:hurt","preset:fall","preset:turn"],"type":"string"},"TripoBalance":{"properties":{"balance":{"type":"number"},"frozen":{"type":"number"}},"required":["balance","frozen"],"type":"object"},"TripoConvertFormat":{"enum":["GLTF","USDZ","FBX","OBJ","STL","3MF"],"type":"string"},"TripoErrorResponse":{"properties":{"code":{"enum":[1001,2000,2001,2002,2003,2004,2006,2007,2008,2010],"type":"integer"},"message":{"type":"string"},"suggestion":{"type":"string"}},"required":["code","message","suggestion"],"type":"object"},"TripoGeometryQuality":{"enum":["standard","detailed"],"type":"string"},"TripoImageToModel":{"description":"Task type for Tripo image-to-model generation.","enum":["image_to_model"],"example":"image_to_model","type":"string"},"TripoModelStyle":{"description":"Style for the Tripo model generation.","enum":["person:person2cartoon","animal:venom","object:clay","object:steampunk","object:christmas","object:barbie","gold","ancient_bronze"],"example":"object:clay","type":"string"},"TripoModelVersion":{"description":"Version of the Tripo model.","enum":["v2.5-20250123","v2.0-20240919","v1.4-20240625"],"example":"v2.5-20250123","type":"string"},"TripoMultiviewMode":{"description":"Mode for multiview generation, specifying view orientation.","enum":["LEFT","RIGHT"],"example":"LEFT","type":"string"},"TripoMultiviewToModel":{"description":"Task type for Tripo multiview-to-model generation.","enum":["multiview_to_model"],"example":"multiview_to_model","type":"string"},"TripoOrientation":{"default":"default","enum":["align_image","default"],"type":"string"},"TripoResponseSuccessCode":{"description":"Standard success code for Tripo API responses. Typically 0 for success.","example":0,"type":"integer"},"TripoSpec":{"enum":["mixamo","tripo"],"type":"string"},"TripoStandardFormat":{"enum":["glb","fbx"],"type":"string"},"TripoStylizeOptions":{"enum":["lego","voxel","voronoi","minecraft"],"type":"string"},"TripoSuccessTask":{"properties":{"code":{"enum":[0],"type":"integer"},"data":{"properties":{"task_id":{"description":"used for getTask","type":"string"}},"required":["task_id"],"type":"object"}},"required":["code","data"],"type":"object"},"TripoTask":{"properties":{"consumed_credit":{"description":"Actual credits consumed by the task. Present once status is finalized; 0 for failed tasks.","type":"integer"},"create_time":{"type":"integer"},"input":{"type":"object"},"output":{"properties":{"base_model":{"type":"string"},"model":{"type":"string"},"pbr_model":{"type":"string"},"rendered_image":{"type":"string"},"riggable":{"type":"boolean"},"topology":{"enum":["bip","quad"],"type":"string"}},"type":"object"},"progress":{"maximum":100,"minimum":0,"type":"integer"},"status":{"enum":["queued","running","success","failed","cancelled","unknown","banned","expired"],"type":"string"},"task_id":{"type":"string"},"type":{"type":"string"}},"required":["task_id","type","status","input","output","progress","create_time"],"type":"object"},"TripoTextToModel":{"description":"The type of the Tripo task, specifically for text-to-model operations.","enum":["text_to_model"],"example":"text_to_model","type":"string"},"TripoTextureAlignment":{"enum":["original_image","geometry"],"type":"string"},"TripoTextureFormat":{"enum":["BMP","DPX","HDR","JPEG","OPEN_EXR","PNG","TARGA","TIFF","WEBP"],"type":"string"},"TripoTextureQuality":{"enum":["standard","detailed"],"type":"string"},"TripoTopology":{"enum":["bip","quad"],"type":"string"},"TripoTypeAnimatePrerigcheck":{"enum":["animate_prerigcheck"],"type":"string"},"TripoTypeAnimateRetarget":{"enum":["animate_retarget"],"type":"string"},"TripoTypeAnimateRig":{"enum":["animate_rig"],"type":"string"},"TripoTypeConvertModel":{"enum":["convert_model"],"type":"string"},"TripoTypeRefineModel":{"enum":["refine_model"],"type":"string"},"TripoTypeStylizeModel":{"enum":["stylize_model"],"type":"string"},"TripoTypeTextureModel":{"enum":["texture_model"],"type":"string"},"UpdateCouponRequest":{"properties":{"metadata":{"additionalProperties":{"type":"string"},"description":"Set of key-value pairs for storing additional information","type":"object"},"name":{"description":"Name of the coupon displayed to customers","type":"string"}},"type":"object"},"UpdatePromoCodeRequest":{"properties":{"active":{"description":"Whether the promo code is active","type":"boolean"},"metadata":{"additionalProperties":{"type":"string"},"description":"Set of key-value pairs for storing additional information","type":"object"}},"type":"object"},"UsageBalance":{"description":"Current remaining balance, mirroring /customers/balance.","properties":{"amount_micros":{"format":"double","type":"number"},"cloud_credit_balance_micros":{"format":"double","type":"number"},"currency":{"type":"string"},"prepaid_balance_micros":{"format":"double","type":"number"}},"type":"object"},"UsageBreakdownRow":{"properties":{"cost_micros":{"description":"Total gross spend for this group over the range, in microamount.","format":"double","type":"number"},"group_key":{"type":"string"},"share":{"description":"Fraction of total spend attributable to this group (0-1).","format":"double","type":"number"}},"required":["group_key","cost_micros","share"],"type":"object"},"UsageBucket":{"properties":{"cost_micros":{"description":"Gross spend in this period for this group, in microamount (1/1,000,000 USD).","format":"double","type":"number"},"group_key":{"description":"Group value (e.g. model name) this bucket belongs to.","type":"string"},"period_end":{"description":"End of the billing period this bucket belongs to.","format":"date-time","type":"string"},"period_start":{"description":"Start of the billing period this bucket belongs to.","format":"date-time","type":"string"}},"required":["period_start","period_end","group_key","cost_micros"],"type":"object"},"UsageSummary":{"properties":{"balance":{"$ref":"#/components/schemas/UsageBalance"},"spend_micros":{"description":"Total gross spend over the range, in microamount.","format":"double","type":"number"}},"required":["spend_micros"],"type":"object"},"User":{"properties":{"email":{"description":"The email address for this user.","type":"string"},"id":{"description":"The unique id for this user.","type":"string"},"isAdmin":{"description":"Indicates if the user has admin privileges.","type":"boolean"},"isApproved":{"description":"Indicates if the user is approved.","type":"boolean"},"name":{"description":"The name for this user.","type":"string"}},"type":"object"},"Veo2GenVidPollRequest":{"properties":{"operationName":{"description":"Full operation name (from predict response)","example":"projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/OPERATION_ID","type":"string"}},"required":["operationName"],"type":"object"},"Veo2GenVidPollResponse":{"properties":{"done":{"type":"boolean"},"error":{"description":"Error details if operation failed","properties":{"code":{"description":"Error code","type":"integer"},"message":{"description":"Error message","type":"string"}},"type":"object"},"name":{"type":"string"},"response":{"description":"The actual prediction response if done is true","properties":{"@type":{"example":"type.googleapis.com/cloud.ai.large_models.vision.GenerateVideoResponse","type":"string"},"raiMediaFilteredCount":{"description":"Count of media filtered by responsible AI policies","type":"integer"},"raiMediaFilteredReasons":{"description":"Reasons why media was filtered by responsible AI policies","items":{"type":"string"},"type":"array"},"videos":{"items":{"properties":{"bytesBase64Encoded":{"description":"Base64-encoded video content","type":"string"},"gcsUri":{"description":"Cloud Storage URI of the video","type":"string"},"mimeType":{"description":"Video MIME type","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}},"type":"object"},"Veo2GenVidRequest":{"properties":{"instances":{"items":{"properties":{"image":{"description":"Optional image to guide video generation","oneOf":[{"required":["bytesBase64Encoded"]},{"required":["gcsUri"]}],"properties":{"bytesBase64Encoded":{"format":"byte","type":"string"},"gcsUri":{"type":"string"},"mimeType":{"type":"string"}},"type":"object"},"prompt":{"description":"Text description of the video","type":"string"}},"required":["prompt"],"type":"object"},"type":"array"},"parameters":{"properties":{"aspectRatio":{"example":"16:9","type":"string"},"durationSeconds":{"type":"integer"},"enhancePrompt":{"type":"boolean"},"negativePrompt":{"type":"string"},"personGeneration":{"enum":["ALLOW","BLOCK"],"type":"string"},"sampleCount":{"type":"integer"},"seed":{"format":"uint32","type":"integer"},"storageUri":{"description":"Optional Cloud Storage URI to upload the video","type":"string"}},"type":"object"}},"type":"object"},"Veo2GenVidResponse":{"properties":{"name":{"description":"Operation resource name","example":"projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8","type":"string"}},"required":["name"],"type":"object"},"VeoGenVidPollRequest":{"properties":{"operationName":{"description":"Full operation name returned from the generate response","example":"projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/OPERATION_ID","type":"string"}},"required":["operationName"],"type":"object"},"VeoGenVidPollResponse":{"description":"Response from polling a Veo video generation operation","properties":{"done":{"description":"Whether the operation has completed","type":"boolean"},"error":{"description":"Error details, present if the operation failed","properties":{"code":{"description":"gRPC error code","type":"integer"},"message":{"description":"Error message","type":"string"}},"type":"object"},"name":{"description":"Operation resource name","type":"string"},"response":{"description":"The prediction response, present when done is true","properties":{"@type":{"example":"type.googleapis.com/cloud.ai.large_models.vision.GenerateVideoResponse","type":"string"},"raiMediaFilteredCount":{"description":"Number of videos filtered by responsible AI policies","type":"integer"},"raiMediaFilteredReasons":{"description":"Reasons why videos were filtered by responsible AI policies","items":{"type":"string"},"type":"array"},"videos":{"items":{"properties":{"bytesBase64Encoded":{"description":"Base64-encoded video content","type":"string"},"gcsUri":{"description":"Cloud Storage URI of the generated video","type":"string"},"mimeType":{"description":"Video MIME type (video/mp4)","type":"string"}},"type":"object"},"type":"array"}},"type":"object"}},"type":"object"},"VeoGenVidRequest":{"properties":{"instances":{"items":{"properties":{"cameraControl":{"description":"Camera motion type. Requires image to be provided.","enum":["fixed","pan_left","pan_right","tilt_up","tilt_down","truck_left","truck_right","pedestal_up","pedestal_down","push_in","pull_out"],"type":"string"},"image":{"description":"Optional first frame image to guide video generation","oneOf":[{"required":["bytesBase64Encoded"]},{"required":["gcsUri"]}],"properties":{"bytesBase64Encoded":{"description":"Base64-encoded image data","format":"byte","type":"string"},"gcsUri":{"description":"Cloud Storage URI of the image","type":"string"},"mimeType":{"description":"MIME type of the image (image/jpeg or image/png)","enum":["image/jpeg","image/png"],"type":"string"}},"type":"object"},"lastFrame":{"description":"Optional last frame image. Used with image to generate video between first and last frames. Supported by Veo 3.0+ models.","oneOf":[{"required":["bytesBase64Encoded"]},{"required":["gcsUri"]}],"properties":{"bytesBase64Encoded":{"description":"Base64-encoded image data","format":"byte","type":"string"},"gcsUri":{"description":"Cloud Storage URI of the image","type":"string"},"mimeType":{"description":"MIME type of the image (image/jpeg or image/png)","enum":["image/jpeg","image/png"],"type":"string"}},"type":"object"},"mask":{"description":"Optional mask for video editing. Applies to input video.","oneOf":[{"required":["bytesBase64Encoded"]},{"required":["gcsUri"]}],"properties":{"bytesBase64Encoded":{"description":"Base64-encoded mask bytes","format":"byte","type":"string"},"gcsUri":{"description":"Cloud Storage URI to mask file","type":"string"},"maskMode":{"description":"How the mask is applied","enum":["insert","remove","remove_static","outpaint"],"type":"string"},"mimeType":{"description":"MIME type of the mask (image/png, image/jpeg, image/webp, or video formats)","type":"string"}},"type":"object"},"prompt":{"description":"Text description of the video to generate","type":"string"},"referenceImages":{"description":"Optional reference images to guide video generation. Supports up to 3 asset images or 1 style image. Supported by Veo 3.1 models (preview).","items":{"properties":{"image":{"oneOf":[{"required":["bytesBase64Encoded"]},{"required":["gcsUri"]}],"properties":{"bytesBase64Encoded":{"description":"Base64-encoded image data","format":"byte","type":"string"},"gcsUri":{"description":"Cloud Storage URI of the image","type":"string"},"mimeType":{"description":"MIME type of the image (image/jpeg or image/png)","enum":["image/jpeg","image/png"],"type":"string"}},"type":"object"},"referenceId":{"description":"Optional identifier for the reference image","type":"string"},"referenceType":{"description":"Type of reference image","enum":["asset","style"],"type":"string"}},"required":["image","referenceType"],"type":"object"},"type":"array"},"video":{"description":"Optional input video for video extension or editing. Incompatible with image and referenceImages.","oneOf":[{"required":["bytesBase64Encoded"]},{"required":["gcsUri"]}],"properties":{"bytesBase64Encoded":{"description":"Base64-encoded video bytes","format":"byte","type":"string"},"gcsUri":{"description":"Cloud Storage URI of the input video","type":"string"},"mimeType":{"description":"MIME type of the video","enum":["video/mov","video/mpeg","video/mp4","video/mpg","video/avi","video/wmv","video/mpegps","video/x-flv"],"type":"string"}},"type":"object"}},"required":["prompt"],"type":"object"},"type":"array"},"parameters":{"properties":{"aspectRatio":{"description":"Aspect ratio of the generated video. Default: 16:9","enum":["16:9","9:16"],"example":"16:9","type":"string"},"compressionQuality":{"description":"Video compression quality. Default: optimized","enum":["optimized","lossless"],"type":"string"},"durationSeconds":{"description":"Target duration of the generated video in seconds. Veo 2: 5-8. Veo 3/3.1: 4, 6, or 8. Default: 8","type":"number"},"enhancePrompt":{"description":"Automatically improve prompt for higher quality. Defaults to true.","type":"boolean"},"fps":{"description":"Frame rate of generated videos in frames per second","type":"integer"},"generateAudio":{"description":"Whether to generate audio along with the video. Defaults to true. Supported by Veo 3.0+ models.","type":"boolean"},"negativePrompt":{"description":"Text describing what to avoid in the generated video","type":"string"},"personGeneration":{"description":"Controls people in generated videos. Default: allow_adult","enum":["dont_allow","allow_adult","allowAll"],"type":"string"},"pubsubTopic":{"description":"Cloud Pub/Sub topic for progress updates (projects/{project}/topics/{topic})","type":"string"},"resizeMode":{"description":"Resize approach for input image. Default: pad","enum":["pad","crop"],"type":"string"},"resolution":{"description":"Output video resolution. Supported by Veo 3.0+ models. Default: 720p","enum":["720p","1080p","4k"],"type":"string"},"sampleCount":{"description":"Number of videos to generate. If not specified, 1 video is generated.","maximum":4,"minimum":1,"type":"integer"},"seed":{"description":"Random seed for deterministic output. Different seeds used per video if sampleCount \u003e 1.","format":"uint32","type":"integer"},"storageUri":{"description":"Cloud Storage URI (gs://) for saving generated videos","type":"string"},"task":{"description":"Operation type for the video generation request","enum":["textToVideo","imageToVideo","referenceToVideo","edit","extend","upscale"],"type":"string"}},"type":"object"}},"type":"object"},"VeoGenVidResponse":{"description":"Response from a Veo video generation request. Contains the operation name for polling.","properties":{"name":{"description":"Operation resource name used to poll for results via fetchPredictOperation","example":"projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8","type":"string"}},"required":["name"],"type":"object"},"ViduCreation":{"properties":{"cover_url":{"type":"string"},"id":{"type":"string"},"moderation_url":{"items":{"type":"string"},"type":"array"},"url":{"type":"string"},"watermarked_url":{"type":"string"}},"type":"object"},"ViduExtendReply":{"properties":{"created_at":{"format":"date-time","type":"string"},"credits":{"format":"int32","type":"integer"},"duration":{"format":"int32","type":"integer"},"images":{"items":{"type":"string"},"type":"array"},"model":{"type":"string"},"payload":{"type":"string"},"prompt":{"type":"string"},"resolution":{"type":"string"},"state":{"$ref":"#/components/schemas/ViduState"},"task_id":{"type":"string"},"video_creation_id":{"type":"string"},"video_url":{"type":"string"}},"required":["task_id","state","credits"],"type":"object"},"ViduExtendRequest":{"properties":{"callback_url":{"description":"Callback URL for task status updates","type":"string"},"duration":{"description":"Extended duration in seconds (1-7, default 5)","format":"int32","type":"integer"},"images":{"description":"Extended reference image to the end frame (only accepts 1 image)","items":{"type":"string"},"type":"array"},"model":{"description":"Model name (viduq2-pro or viduq2-turbo)","type":"string"},"payload":{"description":"Transparent transmission parameters (max 1048576 characters)","type":"string"},"prompt":{"description":"Text prompt for video generation (max 2000 characters)","type":"string"},"resolution":{"description":"Resolution (540p, 720p, 1080p)","type":"string"},"video_creation_id":{"description":"Vidu video_creation_id, required with video_url","type":"string"},"video_url":{"description":"Any video URL, required with video_creation_id","type":"string"}},"required":["model"],"type":"object"},"ViduGetCreationsReply":{"properties":{"creations":{"items":{"$ref":"#/components/schemas/ViduCreation"},"type":"array"},"err_code":{"type":"string"},"id":{"type":"string"},"state":{"$ref":"#/components/schemas/ViduState"}},"type":"object"},"ViduImageSetting":{"properties":{"duration":{"description":"Duration between key frames in seconds (2-7, default 5)","format":"int32","type":"integer"},"key_image":{"description":"Reference image for each key frame","type":"string"},"prompt":{"description":"Prompt for extending the previous frame","type":"string"}},"required":["key_image"],"type":"object"},"ViduMultiframeReply":{"properties":{"created_at":{"format":"date-time","type":"string"},"credits":{"format":"int32","type":"integer"},"image_settings":{"items":{"$ref":"#/components/schemas/ViduImageSetting"},"type":"array"},"model":{"type":"string"},"payload":{"type":"string"},"resolution":{"type":"string"},"start_image":{"type":"string"},"state":{"$ref":"#/components/schemas/ViduState"},"task_id":{"type":"string"}},"required":["task_id","state","credits"],"type":"object"},"ViduMultiframeRequest":{"properties":{"callback_url":{"description":"Callback URL for task status updates","type":"string"},"image_settings":{"description":"Configuration for intelligent multi-frame generation (2-9 frames)","items":{"$ref":"#/components/schemas/ViduImageSetting"},"type":"array"},"model":{"description":"Model name (viduq2-pro or viduq2-turbo)","type":"string"},"payload":{"description":"Transparent transmission parameters (max 1048576 characters)","type":"string"},"resolution":{"description":"Video resolution (540p, 720p, 1080p)","type":"string"},"start_image":{"description":"The first frame image (Base64 or URL)","type":"string"}},"required":["model","start_image","image_settings"],"type":"object"},"ViduState":{"enum":["created","processing","queueing","success","failed"],"type":"string"},"ViduTaskReply":{"properties":{"aspect_ratio":{"type":"string"},"bgm":{"description":"Whether background music was added","type":"boolean"},"created_at":{"format":"date-time","type":"string"},"credits":{"format":"int32","type":"integer"},"duration":{"format":"int32","type":"integer"},"images":{"items":{"type":"string"},"type":"array"},"model":{"type":"string"},"movement_amplitude":{"enum":["auto","small","medium","large"],"type":"string"},"off_peak":{"description":"Off peak mode status","type":"boolean"},"payload":{"description":"Transparent transmission parameters","type":"string"},"prompt":{"type":"string"},"resolution":{"type":"string"},"seed":{"format":"int32","type":"integer"},"state":{"$ref":"#/components/schemas/ViduState"},"style":{"enum":["general","anime"],"type":"string"},"task_id":{"type":"string"},"watermark":{"description":"Whether watermark was added","type":"boolean"}},"required":["task_id","state","credits"],"type":"object"},"ViduTaskRequest":{"properties":{"aspect_ratio":{"type":"string"},"audio":{"description":"Enable direct audio-video generation capability (default true for q3 model)","type":"boolean"},"audio_type":{"description":"Audio type when audio is true: all (sound effects + vocals), speech_only, sound_effect_only. Ineffective for q3 model","enum":["all","speech_only","sound_effect_only"],"type":"string"},"bgm":{"description":"Add background music to generated video (ineffective for q3 model)","type":"boolean"},"callback_url":{"description":"Callback URL for task status updates","type":"string"},"duration":{"description":"Video duration in seconds. viduq3-pro: 1-16, viduq2-pro-fast: 1-10, viduq2-pro/turbo: 1-8","format":"int32","type":"integer"},"enhance":{"type":"boolean"},"images":{"description":"Images for img2video (accepts 1 image as start frame)","items":{"type":"string"},"type":"array"},"is_rec":{"description":"Use recommended prompt (consumes additional 10 credits)","type":"boolean"},"meta_data":{"description":"Metadata identification, JSON format string for custom metadata","type":"string"},"model":{"description":"Model name: viduq3-pro, viduq2-pro-fast, viduq2-pro, viduq2-turbo, viduq1, viduq1-classic, vidu2.0","type":"string"},"movement_amplitude":{"description":"Movement amplitude of objects in frame (ineffective for q2, q3 models)","enum":["auto","small","medium","large"],"type":"string"},"off_peak":{"description":"Off peak mode (lower cost, tasks generated within 48 hours)","type":"boolean"},"payload":{"description":"Transparent transmission parameters (max 1048576 characters)","type":"string"},"priority":{"format":"int32","type":"integer"},"prompt":{"description":"Text prompt for video generation (max 2000 characters)","type":"string"},"resolution":{"description":"Resolution: 360p, 540p, 720p, 1080p, 2K (availability depends on model and duration)","type":"string"},"seed":{"description":"Random seed (defaults to random if not specified)","format":"int32","type":"integer"},"style":{"enum":["general","anime"],"type":"string"},"voice_id":{"description":"Voice ID for audio (ineffective for q3 model)","type":"string"},"watermark":{"description":"Add watermark to video (default false)","type":"boolean"},"wm_position":{"description":"Watermark position: 1 (top left), 2 (top right), 3 (bottom right, default), 4 (bottom left)","format":"int32","type":"integer"},"wm_url":{"description":"Watermark image URL (uses default watermark if not provided)","type":"string"}},"type":"object"},"WanImage2ImageGenerationRequest":{"properties":{"input":{"description":"Enter basic information, such as prompt words, images, etc.","properties":{"images":{"description":"Array of image URLs for image-to-image generation","items":{"description":"Image URL. Supported formats JPEG, JPG, PNG, BMP, WEBP. Resolution width and height must be between 384 and 5000 pixels. File size no larger than 10MB.","type":"string"},"maxItems":2,"minItems":1,"type":"array"},"negative_prompt":{"description":"Reverse prompt words to describe content that you do not want to see in the image","maxLength":500,"type":"string"},"prompt":{"description":"Positive prompt words to describe expected image elements and visual features. Support Chinese and English, length not exceeding 2000 characters","maxLength":2000,"type":"string"}},"required":["prompt","images"],"type":"object"},"model":{"description":"The ID of the model to call for image-to-image generation","enum":["wan2.5-i2i-preview"],"type":"string"},"parameters":{"description":"Image processing parameters","properties":{"n":{"default":1,"description":"Number of generated images. Range 1-4, default is 1","maximum":4,"minimum":1,"type":"integer"},"seed":{"description":"Random number seed to control randomness. Range [0, 2147483647]","maximum":2147483647,"minimum":0,"type":"integer"},"size":{"default":"1280*1280","description":"Output image resolution. Default is 1280*1280. Width and height must be between 384 and 5000 pixels.","type":"string"},"watermark":{"default":false,"description":"Whether to add watermark logo in lower right corner","type":"boolean"}},"type":"object"}},"required":["model","input"],"type":"object"},"WanImage2ImageGenerationResponse":{"properties":{"code":{"description":"The error code for the failed request (not returned if request is successful)","type":"string"},"message":{"description":"Detailed information about the failed request (not returned if request is successful)","type":"string"},"output":{"properties":{"task_id":{"description":"Task ID","type":"string"},"task_status":{"description":"Task status","enum":["PENDING","RUNNING","SUCCEEDED","FAILED","CANCELED","UNKNOWN"],"type":"string"}},"required":["task_id","task_status"],"type":"object"},"request_id":{"description":"Unique request identifier","type":"string"}},"required":["request_id","output"],"type":"object"},"WanImageGenerationRequest":{"properties":{"input":{"description":"Enter basic information, such as prompt words, etc.","properties":{"negative_prompt":{"description":"Reverse prompt words to describe content that you do not want to see in the image","type":"string"},"prompt":{"description":"Positive prompt words to describe expected image elements and visual features. Support Chinese and English, length not exceeding 800 characters","type":"string"}},"required":["prompt"],"type":"object"},"model":{"description":"The ID of the model to call for text-to-image generation","enum":["wan2.5-t2i-preview"],"type":"string"},"parameters":{"description":"Image processing parameters","properties":{"n":{"default":4,"description":"Number of generated images. Range 1-4, default is 4","maximum":4,"minimum":1,"type":"integer"},"prompt_extend":{"default":true,"description":"Enable prompt intelligent rewriting. Default is true","type":"boolean"},"seed":{"description":"Random number seed to control randomness. Range [0, 2147483647]","maximum":2147483647,"minimum":0,"type":"integer"},"size":{"default":"1024*1024","description":"Output image resolution. Default is 1024*1024. Pixel range [512, 1440], up to 200 megapixels","type":"string"},"watermark":{"default":false,"description":"Whether to add watermark logo in lower right corner","type":"boolean"}},"type":"object"}},"required":["model","input"],"type":"object"},"WanImageGenerationResponse":{"properties":{"code":{"description":"The error code for the failed request (not returned if request is successful)","type":"string"},"message":{"description":"Detailed information about the failed request (not returned if request is successful)","type":"string"},"output":{"properties":{"task_id":{"description":"Task ID","type":"string"},"task_status":{"description":"Task status","enum":["PENDING","RUNNING","SUCCEEDED","FAILED","CANCELED","UNKNOWN"],"type":"string"}},"required":["task_id","task_status"],"type":"object"},"request_id":{"description":"Unique request identifier","type":"string"}},"required":["request_id","output"],"type":"object"},"WanTaskQueryResponse":{"properties":{"output":{"properties":{"actual_prompt":{"description":"Actual prompt after intelligent rewriting (for video tasks)","type":"string"},"check_audio":{"description":"Audio URL for I2V tasks with audio generation","type":"string"},"code":{"description":"The error code for the failed request (not returned if request is successful)","type":"string"},"end_time":{"description":"Task completion time","type":"string"},"message":{"description":"Detailed information about the failed request (not returned if request is successful)","type":"string"},"orig_prompt":{"description":"Original input prompt (for video tasks)","type":"string"},"results":{"description":"List of task results for image generation tasks","items":{"properties":{"actual_prompt":{"description":"Actual prompt after intelligent rewriting (if enabled)","type":"string"},"code":{"description":"Image error code (returned when some tasks fail)","type":"string"},"message":{"description":"Image error information (returned when some tasks fail)","type":"string"},"orig_prompt":{"description":"Original input prompt","type":"string"},"url":{"description":"Generated image URL address","type":"string"}},"type":"object"},"type":"array"},"scheduled_time":{"description":"Task execution time","type":"string"},"submit_time":{"description":"Task submission time","type":"string"},"task_id":{"description":"Task ID","type":"string"},"task_metrics":{"description":"Task result statistics for image generation tasks","properties":{"FAILED":{"description":"Number of failed tasks","type":"integer"},"SUCCEEDED":{"description":"Number of successful tasks","type":"integer"},"TOTAL":{"description":"Total number of tasks","type":"integer"}},"type":"object"},"task_status":{"description":"Task status","enum":["PENDING","RUNNING","SUCCEEDED","FAILED","CANCELED","UNKNOWN"],"type":"string"},"video_url":{"description":"Video URL for completed video generation tasks. Link validity period 24 hours","type":"string"}},"required":["task_id","task_status"],"type":"object"},"request_id":{"description":"Unique request identifier","type":"string"},"usage":{"description":"Output information statistics. Only successful results are counted","properties":{"SR":{"description":"Video resolution level (I2V and wan3.0-video tasks)","type":"integer"},"duration":{"description":"Duration of generated video in seconds (I2V and wan3.0-video tasks)","type":"number"},"fps":{"description":"Frame rate of the generated video (wan3.0-video tasks)","type":"integer"},"image_count":{"description":"Number of generated images (T2I tasks)","type":"integer"},"input_video_duration":{"description":"Duration of the input video in seconds, 0.0 when no video input (wan3.0-video tasks)","type":"number"},"output_video_duration":{"description":"Duration of the output video in seconds (wan3.0-video tasks)","type":"number"},"ratio":{"description":"Aspect ratio of the generated video, e.g. 16:9 (wan3.0-video tasks)","type":"string"},"size":{"description":"Image resolution (T2I tasks)","type":"string"},"video_count":{"description":"Number of generated videos (T2V tasks)","type":"integer"},"video_duration":{"description":"Duration of generated video in seconds (T2V tasks)","type":"number"},"video_ratio":{"description":"Video resolution ratio (T2V tasks)","type":"string"}},"type":"object"}},"required":["request_id","output"],"type":"object"},"WanVideoGenerationRequest":{"properties":{"input":{"description":"Enter basic information, such as prompt words, etc.","properties":{"audio_url":{"description":"Audio file download URL. Supported formats: mp3 and wav. Cannot be used with reference_video_urls.","type":"string"},"img_url":{"description":"First frame image URL or Base64 encoded data. Required for I2V models. Image formats: JPEG, JPG, PNG, BMP, WEBP. Resolution: 360-2000 pixels. File size: max 10MB.","type":"string"},"media":{"description":"Media asset list for wan2.7 and wan3.0 models. Specifies reference materials (image, audio, video)\nfor video generation. Each element contains a type and url field.\nSupported type values vary by model:\n- wan2.7-i2v: first_frame, last_frame, driving_audio, first_clip\n- wan2.7-r2v: reference_image, reference_video\n- wan2.7-videoedit: video, reference_image\n- wan3.0-video: first_frame (max 1), last_frame (max 1), reference_image (max 10),\n reference_video (max 5 clips, total duration \u003c= 15s), reference_audio (max 5 clips,\n total duration \u003c= 15s), file (max 1, cannot be used with link), link (max 1, cannot\n be used with file). The reference_*/file/link types and first_frame/last_frame types\n are mutually exclusive within the same request. The array order defines the reference\n order of assets in the prompt (Image 1, Video 1, Audio 1, ...).\n","items":{"properties":{"type":{"description":"Media asset type","enum":["first_frame","last_frame","driving_audio","first_clip","reference_image","reference_video","reference_audio","video","file","link"],"type":"string"},"url":{"description":"URL of the media file (public HTTP/HTTPS URL or OSS temporary URL)","type":"string"}},"required":["type","url"],"type":"object"},"type":"array"},"negative_prompt":{"description":"Reverse prompt words are used to describe content that you do not want to see in the video screen","maxLength":500,"type":"string"},"prompt":{"description":"Text prompt words. Support Chinese and English, length not exceeding 800 characters\n(up to 20,000 characters for wan3.0-video; content exceeding the limit is truncated).\nFor wan2.6-r2v with multiple reference videos, use 'character1', 'character2', etc. to refer to subjects\nin the order of reference videos. Example: \"Character1 sings on the roadside, Character2 dances beside it\"\nFor wan3.0-video reference mode, use 'Image 1', 'Video 1', 'Audio 1', etc. to refer to media assets\nin the corresponding order within the media array.\n","maxLength":20000,"type":"string"},"reference_video_urls":{"description":"Reference video URLs for wan2.6-r2v model only. Array of 1-3 video URLs.\nInput restrictions:\n- Format: mp4, mov\n- Quantity: 1-3 videos\n- Single video length: 2-30 seconds\n- Single file size: max 30MB\n- Cannot be used with audio_url\nReference duration: Single video max 5s, two videos max 2.5s each, three videos proportionally less.\nBilling: Based on actual reference duration used.\n","items":{"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"template":{"description":"Video effect template name. Optional. Currently supported: squish, flying, carousel. When used, prompt parameter is ignored.","type":"string"}},"type":"object"},"model":{"description":"The ID of the model to call","enum":["wan2.5-t2v-preview","wan2.5-i2v-preview","wan2.6-t2v","wan2.6-i2v","wan2.6-r2v","wan2.7-i2v","wan2.7-t2v","wan2.7-r2v","wan2.7-videoedit","wan3.0-video","wan3.0-video-prime","happyhorse-1.0-t2v","happyhorse-1.0-i2v","happyhorse-1.0-r2v","happyhorse-1.0-video-edit","happyhorse-1.1-t2v","happyhorse-1.1-i2v","happyhorse-1.1-r2v"],"type":"string"},"parameters":{"description":"Video processing parameters","properties":{"audio":{"default":true,"description":"Whether to add audio to the video","type":"boolean"},"audio_setting":{"default":"auto","description":"Video audio setting for wan2.7-videoedit model.\n- auto (default): Model intelligently judges based on prompt content\n- origin: Forcefully preserve the original audio from the input video\n","enum":["auto","origin"],"type":"string"},"duration":{"default":5,"description":"The duration of the video generated, in seconds:\n- wan2.5 models: 5 or 10 seconds\n- wan2.6-t2v, wan2.6-i2v: 5, 10, or 15 seconds\n- wan2.6-r2v: 5 or 10 seconds only (no 15s support)\n- wan2.7-i2v, wan2.7-t2v: integer in [2, 15]\n- wan2.7-r2v, wan2.7-videoedit: integer in [2, 10]\n- wan3.0-video: integer in [2, 30] without video input; with video input the total\n input video duration + output video duration must not exceed 30 seconds; -1 enables\n smart duration mode where the model picks a suitable duration\n","maximum":30,"minimum":-1,"type":"integer"},"prompt_extend":{"default":true,"description":"Is it enabled prompt intelligent rewriting. Default is true","type":"boolean"},"ratio":{"description":"Aspect ratio of the generated video. For wan2.7 and wan3.0 models only.\nFor wan2.7 models, defaults based on the resolution tier if not provided.\nFor wan3.0-video, adaptive (the default) automatically recommends a suitable\naspect ratio based on the input media proportions and intent.\n","enum":["adaptive","16:9","9:16","1:1","4:3","3:4"],"type":"string"},"resolution":{"description":"Resolution level. Supported values vary by model:\n- wan2.5-i2v-preview: 480P, 720P, 1080P\n- wan2.6-i2v: 720P, 1080P only (no 480P support)\n- wan2.7 models (i2v, t2v, r2v, videoedit): 720P, 1080P (default 1080P)\n- wan3.0-video, wan3.0-video-prime: 480P, 720P, 1080P (upstream default 1080P)\nThis proxy rejects video generation requests that provide neither resolution\nnor size, because the resolution tier selects the billing rate.\n","enum":["480P","720P","1080P"],"type":"string"},"seed":{"description":"Random number seed, used to control the randomness of the model generated content","maximum":2147483647,"minimum":0,"type":"integer"},"shot_type":{"default":"single","description":"Intelligent multi-lens control. Only active when prompt_extend is enabled.\nFor wan2.6 and wan2.7-r2v models.\n- single: Single-shot video (default)\n- multi: Multi-shot video\n","enum":["multi","single"],"type":"string"},"size":{"description":"Video resolution in format width*height. Supported resolutions vary by model:\nFor wan2.5 T2V: 480P (480*832, 832*480, 624*624), 720P, 1080P sizes\nFor wan2.6 T2V/R2V (no 480P):\n 720P: 1280*720, 720*1280, 960*960, 1088*832, 832*1088\n 1080P: 1920*1080, 1080*1920, 1440*1440, 1632*1248, 1248*1632\n","type":"string"},"watermark":{"default":false,"description":"Whether to add a watermark logo, the watermark is located in the lower right corner","type":"boolean"}},"type":"object"}},"required":["model","input"],"type":"object"},"WanVideoGenerationResponse":{"properties":{"code":{"description":"The error code for the failed request (not returned if request is successful)","type":"string"},"message":{"description":"Detailed information about the failed request (not returned if request is successful)","type":"string"},"output":{"properties":{"task_id":{"description":"Task ID","type":"string"},"task_status":{"description":"Task status","enum":["PENDING","RUNNING","SUCCEEDED","FAILED","CANCELED","UNKNOWN"],"type":"string"}},"required":["task_id","task_status"],"type":"object"},"request_id":{"description":"Unique request identifier","type":"string"}},"required":["output","request_id"],"type":"object"},"WavespeedFlashVSRRequest":{"description":"Request body for WavespeedAI FlashVSR video upscaling","properties":{"duration":{"description":"Duration of the video in seconds\n","type":"number"},"target_resolution":{"default":"1080p","description":"Target resolution to upscale to.","enum":["720p","1080p","2k","4k"],"type":"string"},"video":{"description":"The video to upscale. Can be a URL to the video file or a base64-encoded video.\n","type":"string"}},"required":["video","duration"],"type":"object"},"WavespeedSeedVR2ImageRequest":{"description":"Request body for WavespeedAI SeedVR2 image upscaling","properties":{"enable_base64_output":{"default":false,"description":"If enabled, the output will be encoded into a BASE64 string instead of a URL.","type":"boolean"},"image":{"description":"The URL of the image to upscale.","type":"string"},"output_format":{"default":"jpeg","description":"The format of the output image.","enum":["jpeg","png","webp"],"type":"string"},"target_resolution":{"default":"4k","description":"The target resolution of the output image.","enum":["2k","4k","8k"],"type":"string"}},"required":["image"],"type":"object"},"WavespeedTaskResponse":{"description":"Response from WavespeedAI task submission","properties":{"code":{"description":"HTTP status code (e.g., 200 for success)","type":"integer"},"data":{"properties":{"created_at":{"description":"ISO timestamp of when the request was created","type":"string"},"error":{"description":"Error message (empty if no error occurred)","type":"string"},"has_nsfw_contents":{"description":"Array of boolean values indicating NSFW detection for each output","items":{"type":"boolean"},"type":"array"},"id":{"description":"Unique identifier for the prediction/task","type":"string"},"model":{"description":"Model ID used for the prediction","type":"string"},"outputs":{"description":"Array of URLs to the generated content (empty when status is not completed)","items":{"type":"string"},"type":"array"},"status":{"description":"Status of the task","enum":["created","processing","completed","failed"],"type":"string"},"timings":{"properties":{"inference":{"description":"Inference time in milliseconds","type":"integer"}},"type":"object"},"urls":{"properties":{"get":{"description":"URL to retrieve the prediction result","type":"string"}},"type":"object"}},"type":"object"},"message":{"description":"Status message (e.g., \"success\")","type":"string"}},"type":"object"},"WavespeedTaskResultResponse":{"description":"Response from WavespeedAI task result query","properties":{"code":{"description":"HTTP status code (e.g., 200 for success)","type":"integer"},"data":{"properties":{"created_at":{"description":"ISO timestamp of when the request was created","type":"string"},"error":{"description":"Error message (empty if no error occurred)","type":"string"},"id":{"description":"Unique identifier for the prediction/task","type":"string"},"model":{"description":"Model ID used for the prediction","type":"string"},"outputs":{"description":"Array of URLs to the generated content (empty when status is not completed)","items":{"type":"string"},"type":"array"},"status":{"description":"Status of the task","enum":["created","processing","completed","failed"],"type":"string"},"timings":{"properties":{"inference":{"description":"Inference time in milliseconds","type":"integer"}},"type":"object"},"urls":{"properties":{"get":{"description":"URL to retrieve the prediction result","type":"string"}},"type":"object"}},"type":"object"},"message":{"description":"Status message (e.g., \"success\")","type":"string"}},"type":"object"},"WebSearchPreviewTool":{"description":"This tool searches the web for relevant results to use in a response. Learn more about the [web search tool](https://platform.openai.com/docs/guides/tools-web-search).","properties":{"search_context_size":{"description":"High level guidance for the amount of context window space to use for the search. One of `low`, `medium`, or `high`. `medium` is the default.","enum":["low","medium","high"],"type":"string"},"type":{"default":"web_search_preview","description":"The type of the web search tool. One of `web_search_preview` or `web_search_preview_2025_03_11`.","enum":["web_search_preview","web_search_preview_2025_03_11"],"type":"string","x-stainless-const":true}},"required":["type"],"title":"Web search preview","type":"object"},"WebSearchToolCall":{"description":"The results of a web search tool call. See the\n[web search guide](/docs/guides/tools-web-search) for more information.\n","properties":{"id":{"description":"The unique ID of the web search tool call.\n","type":"string"},"status":{"description":"The status of the web search tool call.\n","enum":["in_progress","searching","completed","failed"],"type":"string"},"type":{"description":"The type of the web search tool call. Always `web_search_call`.\n","enum":["web_search_call"],"type":"string","x-stainless-const":true}},"required":["id","type","status"],"title":"Web search tool call","type":"object"},"WorkflowRunStatus":{"enum":["WorkflowRunStatusStarted","WorkflowRunStatusFailed","WorkflowRunStatusCompleted"],"type":"string"},"XAIGeneratedImage":{"description":"A generated image from xAI","properties":{"b64_json":{"description":"A base64-encoded string representation of the generated image in jpeg encoding (if response_format is b64_json)","type":"string"},"mime_type":{"description":"The MIME type of the generated image (e.g. image/png, image/jpeg, image/webp).","type":"string"},"url":{"description":"A url to the generated image (if response_format is url)","type":"string"}},"type":"object"},"XAIGeneratedVideo":{"description":"A generated video from xAI","properties":{"duration":{"description":"Duration of the generated video in seconds","type":"integer"},"respect_moderation":{"description":"Whether the video generated by the model respects moderation rules","type":"boolean"},"url":{"description":"Download URL for the generated video. Router re-hosts the video onto Comfy storage and rewrites this field, so it is normally a Comfy-signed URL valid for up to 24 hours - signed for 24 hours when minted and replayed from a 23-hour memo, so a later poll can hand back one with as little as an hour left. When the re-host could not be performed the field keeps xAI's own short-lived URL instead. NULLABLE: a success whose `url` is empty is not a completed generation. Either way the link expires, so download the video rather than storing the URL.","nullable":true,"type":"string"}},"type":"object"},"XAIImageEditRequest":{"description":"Request body for xAI Grok Imagine image editing","properties":{"aspect_ratio":{"description":"Aspect ratio of the output image for image editing with multiple images. For single image editing, do not set this.","enum":["1:1","3:4","4:3","9:16","16:9","2:3","3:2","9:19.5","19.5:9","9:20","20:9","1:2","2:1","auto"],"type":"string"},"image":{"$ref":"#/components/schemas/XAIImageObject"},"images":{"description":"List of input images for multi-reference editing. Mutually exclusive with image. When multiple images are provided, refer to them as \u003cIMAGE_0\u003e, \u003cIMAGE_1\u003e, etc. in the prompt.","items":{"$ref":"#/components/schemas/XAIImageObject"},"type":"array"},"mask":{"$ref":"#/components/schemas/XAIImageObject"},"model":{"default":"grok-imagine-image","description":"Model to be used. Supported: grok-imagine-image (default), grok-imagine-image-pro, grok-imagine-image-quality, grok-imagine-image-2.0. Deprecated -beta ids are aliased to their GA model.","type":"string"},"n":{"description":"Number of image edits to be generated","type":"integer"},"prompt":{"description":"Prompt for image editing","type":"string"},"quality":{"description":"Quality of the output image. For grok-imagine-image-2.0 this selects the price tier (low/medium; medium is the default); other models currently ignore it.","enum":["low","medium","high"],"type":"string"},"resolution":{"default":"1k","description":"Resolution of the generated image. Defaults to 1k.","enum":["1k","2k"],"type":"string"},"response_format":{"default":"url","description":"Response format to return the image in. Can be url or b64_json.","enum":["url","b64_json"],"type":"string"},"size":{"description":"Size of the image (not supported)","type":"string"},"style":{"description":"Style of the image (not supported)","type":"string"},"user":{"description":"A unique identifier representing your end-user, which can help xAI to monitor and detect abuse","type":"string"}},"required":["prompt"],"type":"object"},"XAIImageGenerationRequest":{"description":"Request body for xAI Grok Imagine image generation","properties":{"aspect_ratio":{"default":"auto","description":"Aspect ratio of the generated image. Defaults to auto for automatically selecting the best ratio for the prompt.","enum":["1:1","3:4","4:3","9:16","16:9","2:3","3:2","9:19.5","19.5:9","9:20","20:9","1:2","2:1","auto"],"type":"string"},"model":{"default":"grok-imagine-image","description":"Model to be used. Supported: grok-imagine-image (default), grok-imagine-image-pro, grok-imagine-image-quality, grok-imagine-image-2.0. Deprecated -beta ids are aliased to their GA model.","type":"string"},"n":{"default":1,"description":"Number of images to be generated","maximum":10,"minimum":1,"type":"integer"},"prompt":{"description":"Prompt for image generation","type":"string"},"quality":{"description":"Quality of the output image. For grok-imagine-image-2.0 this selects the price tier (low/medium; medium is the default); other models currently ignore it.","enum":["low","medium","high"],"type":"string"},"resolution":{"default":"1k","description":"Resolution of the generated image. Defaults to 1k.","enum":["1k","2k"],"type":"string"},"response_format":{"default":"url","description":"Response format to return the image in. Can be url or b64_json. Comfy Router (`POST /v2/models/xai/{model}`) coerces this to `url` on the outbound request because it serves image results as re-hosted URLs either way; this `/proxy/` route honours it as written.","enum":["url","b64_json"],"type":"string"},"size":{"description":"Size of the image (not supported)","type":"string"},"style":{"description":"Style of the image (not supported)","type":"string"},"user":{"description":"A unique identifier representing your end-user, which can help xAI to monitor and detect abuse","type":"string"}},"required":["prompt"],"type":"object"},"XAIImageGenerationResponse":{"description":"Response from xAI image generation or editing","properties":{"block_reason":{"description":"If the request was blocked by input moderation, contains the block reason","type":"string"},"data":{"description":"A list of generated image objects","items":{"$ref":"#/components/schemas/XAIGeneratedImage"},"type":"array"},"usage":{"$ref":"#/components/schemas/XAIImageUsage"}},"type":"object"},"XAIImageObject":{"description":"Input image object for xAI endpoints","properties":{"type":{"description":"Type of the image input","enum":["image_url"],"type":"string"},"url":{"description":"URL of the input image (public URL or base64-encoded data URI)","type":"string"}},"required":["url"],"type":"object"},"XAIImageUsage":{"description":"Usage information for the image generation request","properties":{"cost_in_usd_ticks":{"description":"Accurate cost of this request in USD ticks (10,000,000,000 ticks = 1 USD)","type":"integer"}},"type":"object"},"XAIReferenceImageObject":{"description":"A reference image used to guide video generation in R2V mode","properties":{"url":{"description":"URL of the reference image. Supports HTTPS URLs (public) or base64-encoded data URLs (e.g., data:image/jpeg;base64,...).","type":"string"}},"required":["url"],"type":"object"},"XAIVideoAsyncResponse":{"description":"Response from xAI video generation or editing (async operation)","properties":{"request_id":{"description":"Unique identifier to poll for the completed video","type":"string"}},"type":"object"},"XAIVideoEditRequest":{"description":"Request body for xAI Grok Imagine video editing","properties":{"model":{"description":"Model to be used","nullable":true,"type":"string"},"output":{"description":"Optional output destination for generated video","nullable":true,"type":"object"},"prompt":{"description":"Prompt for video editing","type":"string"},"user":{"description":"A unique identifier representing your end-user","nullable":true,"type":"string"},"video":{"$ref":"#/components/schemas/XAIVideoObject"}},"required":["prompt","video"],"type":"object"},"XAIVideoExtensionRequest":{"description":"Request body for xAI Grok Imagine video extension","properties":{"duration":{"default":6,"description":"Length of the extension in seconds. Range [2, 10]. Default 6.","maximum":10,"minimum":2,"nullable":true,"type":"integer"},"model":{"description":"Model to use","nullable":true,"type":"string"},"prompt":{"description":"Text description of what should happen next in the video","type":"string"},"video":{"$ref":"#/components/schemas/XAIVideoObject"}},"required":["prompt","video"],"type":"object"},"XAIVideoGenerationRequest":{"description":"Request body for xAI Grok Imagine video generation.\nSupports three modes: text-to-video (prompt only), image-to-video (prompt + image),\nand reference-to-video (prompt + reference_images).\nThe fields image, reference_images, and video are mutually exclusive.\n","properties":{"aspect_ratio":{"default":"16:9","description":"Aspect ratio of the generated video","enum":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"type":"string"},"duration":{"default":8,"description":"Video duration in seconds. Range [1, 15]. Default 8.","maximum":15,"minimum":1,"nullable":true,"type":"integer"},"image":{"$ref":"#/components/schemas/XAIImageObject"},"model":{"description":"Model to be used","type":"string"},"output":{"description":"Optional output destination for generated video","nullable":true,"type":"object"},"prompt":{"description":"Prompt for video generation. Maximum 4,096 characters.","type":"string"},"reference_images":{"description":"One or more reference images to guide the video generation (reference-to-video mode). Mutually exclusive with image and video.","items":{"$ref":"#/components/schemas/XAIReferenceImageObject"},"type":"array"},"resolution":{"description":"Resolution of the output video","nullable":true,"type":"string"},"size":{"description":"Size of the output video","nullable":true,"type":"string"},"user":{"description":"A unique identifier representing your end-user","nullable":true,"type":"string"}},"required":["prompt"],"type":"object"},"XAIVideoObject":{"description":"Input video object for xAI endpoints","properties":{"url":{"description":"URL of the video (public URL or base64-encoded data URL). The video must have the .mp4 file extension and be encoded with .mp4 supported codecs such as H.265, H.264, AV1, etc.","type":"string"}},"required":["url"],"type":"object"},"XAIVideoResultResponse":{"description":"Response from getting video generation result","properties":{"block_reason":{"description":"If the request was blocked by input moderation, contains the block reason","nullable":true,"type":"string"},"model":{"description":"The model used to generate the video","type":"string"},"status":{"description":"Status of the deferred request: \"pending\" or \"done\"","enum":["pending","done"],"type":"string"},"usage":{"$ref":"#/components/schemas/XAIVideoUsage"},"video":{"$ref":"#/components/schemas/XAIGeneratedVideo"}},"type":"object"},"XAIVideoUsage":{"description":"Usage information for the video generation request","properties":{"cost_in_usd_ticks":{"description":"The cost of this request expressed in USD ticks. One USD cent equals 100,000,000 ticks, so one US dollar equals 10,000,000,000 ticks.\n","type":"integer"}},"type":"object"}},"securitySchemes":{"ApiKeyAuth":{"description":"API key authentication. Send the key in the X-API-Key header; keys are prefixed with 'comfyui-' and are generated from user account settings. The same 'comfyui-' key is also accepted in Authorization: Bearer (see BearerAuth), and when both headers carry a key, X-API-Key wins.\nThe comfyFirebase auth middleware checks this header before falling back to the Authorization bearer token, and it backs both the /customers and the /proxy authset entries.","in":"header","name":"X-API-Key","type":"apiKey"},"BearerAuth":{"bearerFormat":"JWT","description":"Bearer token authentication. Normally a Firebase or Cloud JWT. A 'comfyui-' prefixed API key is ALSO accepted in this header: the prefix classifies the value as an API key and it is validated exactly as if it had been sent in X-API-Key.\nAccepted on the operations served by the comfyFirebase auth middleware (BE-9720, parity with ingest).","scheme":"bearer","type":"http"},"ComfyAdminSecretAuth":{"description":"Shared admin secret for trusted server-side callers. Accepted by the\nAPISecretMiddleware authset, which grants admin context without a user\nsession. Note the header is X-Comfy-Admin-Secret, not the\nX-ComfyAPI-Secret used by the separate ingest service.\n","in":"header","name":"X-Comfy-Admin-Secret","type":"apiKey"}}},"info":{"title":"Comfy API","version":"1.0"},"openapi":"3.0.2","paths":{"/admin/customers/{customer_id}/archive-metronome-data":{"post":{"description":"Archives metronome data. See https://docs.metronome.com/api-reference/customers/archive-a-customer","operationId":"PostAdminArchiveMetronomeData","parameters":[{"description":"The ID of the customer whose Metronome data to archive","in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"description":"Admin API secret used to authorize this request","in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"description":"Success message","type":"string"}},"type":"object"}}},"description":"Metronome data archived successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request - missing required parameter"},"401":{"description":"Unauthorized or missing admin API secret"},"404":{"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Archive customer Metronome data","tags":["Admin"],"x-excluded":true}},"/admin/customers/{customer_id}/balance":{"get":{"description":"Returns the specified customer's current remaining balance in microamount and its currency.","operationId":"GetAdminCustomerBalance","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"amount_micros":{"format":"double","type":"number"},"cloud_credit_balance_micros":{"format":"double","type":"number"},"currency":{"type":"string"},"effective_balance_micros":{"format":"double","type":"number"},"pending_charges_micros":{"format":"double","type":"number"},"prepaid_balance_micros":{"format":"double","type":"number"}},"required":["amount_micros","currency"],"type":"object"}}},"description":"Customer balance retrieved successfully"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin get customer's remaining balance","tags":["Admin"],"x-excluded":true}},"/admin/customers/{customer_id}/cloud-subscription-status":{"get":{"description":"Allows an admin to inspect a specific customer's cloud subscription status.","operationId":"GetAdminCustomerCloudSubscriptionStatus","parameters":[{"description":"The ID of the customer whose subscription status to retrieve","in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"description":"Admin API secret used to authorize this request","in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"end_date":{"description":"The date when the subscription is set to end (ISO 8601 format)","format":"date-time","nullable":true,"type":"string"},"has_fund":{"description":"Whether the customer has funds/credits available","type":"boolean"},"is_active":{"description":"Whether the customer has an active cloud subscription","type":"boolean"},"renewal_date":{"description":"The next renewal date for the subscription (ISO 8601 format)","format":"date-time","nullable":true,"type":"string"},"subscription_duration":{"allOf":[{"$ref":"#/components/schemas/SubscriptionDuration"}],"nullable":true},"subscription_id":{"description":"The active subscription ID if one exists","nullable":true,"type":"string"},"subscription_tier":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTier"}],"nullable":true}},"type":"object"}}},"description":"Cloud subscription status retrieved successfully"},"401":{"description":"Unauthorized or missing admin API secret"},"404":{"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin check cloud subscription status","tags":["Admin"],"x-excluded":true}},"/admin/customers/{customer_id}/partner-node-concurrency-override":{"delete":{"description":"Clears the override (sets it to NULL) so the customer's limit reverts to the spend engine.\n","operationId":"ClearAdminCustomerConcurrencyOverride","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"type":"object"}}},"description":"Override cleared successfully"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin clear customer partner-node concurrency override","tags":["Admin"],"x-excluded":true},"get":{"description":"Returns the customer's current partner-node concurrency override (the raw column value), the limit the gate enforces right now, and the limit the spend engine would apply if the override were cleared.\n","operationId":"GetAdminCustomerConcurrencyOverride","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"customer_id":{"type":"string"},"effective_limit":{"description":"Limit the gate enforces right now.","type":"integer"},"effective_reason":{"type":"string"},"engine_limit":{"description":"Limit the spend engine would apply if the override were cleared.","type":"integer"},"engine_reason":{"type":"string"},"lifetime_paid_spend_cents":{"description":"Lifetime paid spend in cents; null when the spend query failed.","format":"int64","nullable":true,"type":"integer"},"override":{"description":"Raw override column value; null when unset.","nullable":true,"type":"integer"}},"required":["customer_id","effective_limit","effective_reason","engine_limit","engine_reason"],"type":"object"}}},"description":"Override and resolved limits retrieved successfully"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin get customer partner-node concurrency override","tags":["Admin"],"x-excluded":true},"put":{"description":"Pins the customer's partner-node concurrency override. Semantics: 0 = blocked, -1 = unlimited, positive = hard limit. Allowed values are -1, 0, and 1..200.\n","operationId":"SetAdminCustomerConcurrencyOverride","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"override":{"description":"-1 unlimited, 0 blocked, 1..200 hard limit. Must be present and non-null; a missing or null value is rejected with 400 (use DELETE to clear the override).\n","nullable":true,"type":"integer"}},"required":["override"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"type":"object"}}},"description":"Override set successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid override value"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin set customer partner-node concurrency override","tags":["Admin"],"x-excluded":true}},"/admin/customers/{customer_id}/stripe-data":{"delete":{"description":"Deletes the Stripe customer data associated with the given customer ID.","operationId":"DeleteAdminCustomerStripeData","parameters":[{"description":"The ID of the customer whose Stripe data to delete","in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"description":"Admin API secret used to authorize this request","in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"description":"Success message","type":"string"}},"type":"object"}}},"description":"Stripe data deleted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request - missing required parameter"},"401":{"description":"Unauthorized or missing admin API secret"},"404":{"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Delete customer Stripe data","tags":["Admin"],"x-excluded":true}},"/admin/generate-token":{"post":{"description":"Generates a short-lived JWT admin token for browser-based admin operations.\nThe user must already be authenticated with Firebase and have admin privileges.\nThe generated token expires after 1 hour.\n","operationId":"GenerateAdminToken","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"expires_at":{"description":"When the token expires","format":"date-time","type":"string"},"token":{"description":"The JWT admin token","type":"string"}},"required":["token","expires_at"],"type":"object"}}},"description":"JWT token generated successfully"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized or user is not an admin"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Generate a short-lived JWT admin token","tags":["Admin"]}},"/admin/nodes":{"post":{"operationId":"AdminCreateNode","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"description":"Node created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Duplicate error."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Create a new custom node using admin priviledge","tags":["Registry"],"x-excluded":true}},"/admin/nodes/{nodeId}":{"put":{"description":"Only admins can update a node with admin privileges.","operationId":"AdminUpdateNode","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"description":"Node updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Node not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Admin Update Node","tags":["Registry"],"x-excluded":true}},"/admin/nodes/{nodeId}/versions/{versionNumber}":{"put":{"description":"Only admins can approve a node version.","operationId":"AdminUpdateNodeVersion","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"in":"path","name":"versionNumber","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"status":{"$ref":"#/components/schemas/NodeVersionStatus"},"status_reason":{"description":"The reason for the status change.","type":"string"},"supported_accelerators":{"description":"List of accelerators (e.g. CUDA, DirectML, ROCm) that this node supports","items":{"type":"string"},"type":"array"},"supported_comfyui_frontend_version":{"description":"Supported versions of ComfyUI frontend","type":"string"},"supported_comfyui_version":{"description":"Supported versions of ComfyUI","type":"string"},"supported_os":{"description":"List of operating systems that this node supports","items":{"type":"string"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeVersion"}}},"description":"Version updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Admin Update Node Version Status","tags":["Registry"],"x-excluded":true}},"/admin/nodeversions":{"get":{"description":"Admin-only endpoint to list all node versions with support for including deleted versions. Only admins can access this endpoint.","operationId":"AdminListAllNodeVersions","parameters":[{"in":"query","name":"nodeId","schema":{"type":"string"}},{"explode":true,"in":"query","name":"statuses","schema":{"items":{"$ref":"#/components/schemas/NodeVersionStatus"},"type":"array"},"style":"form"},{"in":"query","name":"include_status_reason","schema":{"default":false,"type":"boolean"}},{"description":"The page number to retrieve.","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"The number of items to include per page.","in":"query","name":"pageSize","schema":{"default":10,"type":"integer"}},{"description":"search for status_reason, case insensitive","in":"query","name":"status_reason","schema":{"type":"string"}},{"description":"Include soft-deleted node versions in the results","in":"query","name":"include_deleted","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"page":{"description":"Current page number","type":"integer"},"pageSize":{"description":"Maximum number of node versions per page. Maximum is 100.","type":"integer"},"total":{"description":"Total number of node versions available","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"},"versions":{"items":{"$ref":"#/components/schemas/NodeVersion"},"type":"array"}},"type":"object"}}},"description":"List of all node versions"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid input, object invalid"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Admin list all node versions with optional filters","tags":["Registry"],"x-excluded":true}},"/admin/partner-node-model-overrides":{"get":{"description":"Returns the effective tier classification for every model known to the rate card or the override table (override-aware; most rows have no override).\n","operationId":"ListAdminModelOverrides","parameters":[{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ModelClassification"},"type":"array"}},"required":["models"],"type":"object"}}},"description":"Classifications retrieved successfully"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin list partner-node model tier classifications","tags":["Admin"],"x-excluded":true}},"/admin/partner-node-model-overrides/{model}":{"delete":{"description":"Removes the override so the model reverts to cost-based classification. Idempotent (200 even if no override existed).\n","operationId":"DeleteAdminModelOverride","parameters":[{"in":"path","name":"model","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"type":"object"}}},"description":"Override cleared successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin clear a model tier override","tags":["Admin"],"x-excluded":true},"get":{"description":"Returns the model's effective tier — the override if one is set, else the cost-based classification. Always 200; an unknown model resolves to the default (not capped). Note: {model} is a single URL path segment, so a model ID containing a slash cannot be addressed via this route; use the list endpoint (GET /admin/partner-node-model-overrides) to see its classification. Partner-node model IDs are flat today, so this is not a current limitation.\n","operationId":"GetAdminModelOverride","parameters":[{"in":"path","name":"model","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelClassification"}}},"description":"Classification retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin get a model's effective tier","tags":["Admin"],"x-excluded":true},"put":{"description":"Upserts an override pinning the model to a tier. tier must be 'expensive' or 'exempt'. Takes effect immediately on the handling pod and within MODEL_OVERRIDE_REFRESH on others.\n","operationId":"SetAdminModelOverride","parameters":[{"in":"path","name":"model","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"tier":{"description":"'expensive' or 'exempt'.","type":"string"}},"required":["tier"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"type":"object"}}},"description":"Override set successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid tier or model"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Admin set a model tier override","tags":["Admin"],"x-excluded":true}},"/admin/sync-api-key-deletion":{"post":{"description":"Reverse-direction delete-sync (cloud → comfy-api registry, BE-1542). When a\nworkspace API key is deleted in cloud (the new source of truth), cloud calls\nthis endpoint so the comfy-api registry's api_keys row is removed too,\nkeeping the two stores convergent. Idempotent: deleting an unknown hash is a\nno_op. M2M/admin-only; carries the key hash, never plaintext.\n","operationId":"SyncApiKeyDeletion","parameters":[{"description":"Admin API secret used to authorize this request","in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"customer_id":{"description":"Firebase UID of the key's owner, for mismatch detection. The\ndeletion proceeds by hash regardless (mirrors cloud's inbound\nRevokeByHash semantics).\n","type":"string"},"event":{"description":"Sync event type; only \"delete\" is supported.","enum":["delete"],"example":"delete","type":"string"},"key_hash":{"description":"SHA-256 hex hash of the API key to revoke.","maxLength":64,"minLength":64,"pattern":"^[A-Fa-f0-9]{64}$","type":"string"}},"required":["event","key_hash","customer_id"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"result":{"description":"revoked when a matching key was deleted; no_op when no key\nmatched the hash (already deleted or never existed).\n","type":"string"}},"required":["result"],"type":"object"}}},"description":"Delete-sync processed"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request (missing fields or unsupported event)"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized or missing admin API secret"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Revoke a registry API key by hash (reverse delete-sync)","tags":["Admin"],"x-excluded":true}},"/admin/verify-api-key":{"post":{"description":"Validates a ComfyUI API key and returns the associated customer information.\nThis endpoint is used by cloud.comfy.org to authenticate users via API keys\ninstead of Firebase tokens.\n","operationId":"VerifyApiKey","parameters":[{"description":"Admin API secret used to authorize this request","in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"api_key":{"description":"The ComfyUI API key to verify (e.g., comfy_xxx...)","type":"string"},"include_customer_keys":{"description":"When true, the response also includes customer_api_keys: the\nfull set of the customer's API keys (hash + prefix + name +\ndescription) so cloud's migrate-on-miss can seed ALL of the\ncustomer's keys into workspace_api_keys, not just the one being\nverified. M2M/admin-only; carries hashes, never plaintext.\n","type":"boolean"}},"required":["api_key"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"customer_api_keys":{"description":"All of the customer's API keys — returned ONLY when the\nrequest sets include_customer_keys=true. Lets cloud's\nmigrate-on-miss seed every key into workspace_api_keys (by\nhash) so the cloud key list matches the customer's full set,\nnot just the one verified. M2M/admin-only; hashes, no plaintext.\n","items":{"$ref":"#/components/schemas/MigrationAPIKey"},"type":"array"},"email":{"description":"The customer's email address","type":"string"},"firebase_uid":{"description":"The Firebase UID of the user","type":"string"},"is_admin":{"description":"Whether the customer is an admin","type":"boolean"},"key_description":{"description":"The api_keys row's own description. Returned so that cloud's\nmigrate-on-miss path can preserve it on the cached\nworkspace_api_keys row instead of writing a placeholder.\n","type":"string"},"key_name":{"description":"The api_keys row's own name (display label). Returned so that\ncloud's migrate-on-miss path can preserve it on the cached\nworkspace_api_keys row instead of writing a placeholder.\n","type":"string"},"name":{"description":"The customer's name","type":"string"},"valid":{"description":"Whether the API key is valid","type":"boolean"}},"required":["valid","firebase_uid"],"type":"object"}}},"description":"API key is valid"},"401":{"description":"Unauthorized or missing admin API secret"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"API key auth not allowed for this account (e.g., free tier)"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"API key not found or invalid"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Verify a ComfyUI API key and return customer details","tags":["Admin"],"x-excluded":true}},"/branch":{"get":{"description":"Returns all branches for a given repo.","operationId":"GetBranch","parameters":[{"description":"The repo to filter by.","in":"query","name":"repo_name","required":true,"schema":{"default":"comfyanonymous/ComfyUI","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"branches":{"items":{"type":"string"},"type":"array"}},"type":"object"}}},"description":"An array of branches"},"404":{"description":"Repo not found"},"500":{"description":"Internal server error"}},"summary":"Retrieve all distinct branches for a given repo","tags":["ComfyUI CI"],"x-excluded":true}},"/bulk/nodes/versions":{"post":{"operationId":"GetBulkNodeVersions","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkNodeVersionsRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkNodeVersionsResponse"}}},"description":"Successfully retrieved node versions"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve multiple node versions in a single request","tags":["Registry"]}},"/comfy-nodes":{"get":{"operationId":"ListAllComfyNodes","parameters":[{"description":"The number of items to include per page. A value above the maximum is clamped down to it; 0 and negative values are accepted and select the default. (That is why no minimum is declared — sub-1 is meaningful here, not invalid.) The page size actually served is echoed back as page_size, so a clamp is always detectable.","in":"query","name":"pageSize","schema":{"default":100,"maximum":100,"type":"integer"}},{"description":"Page number (1-based indexing)","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"Filter by node ID","in":"query","name":"node_id","schema":{"type":"string"}},{"description":"Filter by node version","in":"query","name":"node_version","schema":{"type":"string"}},{"description":"Filter by ComfyUI node name","in":"query","name":"comfy_node_name","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"comfy_nodes":{"items":{"$ref":"#/components/schemas/ComfyNode"},"type":"array"},"page_size":{"description":"The page size actually served. The server clamps pageSize to the documented maximum, so this can be smaller than the requested value; paginate with this number rather than the one you asked for, or you will skip rows.","type":"integer"},"total":{"description":"Total number of comfy nodes","type":"integer"}},"type":"object"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"list all comfy-nodes","tags":["Registry"]}},"/comfy-nodes/backfill":{"post":{"operationId":"ComfyNodesBackfill","parameters":[{"in":"query","name":"max_node","schema":{"default":10,"type":"integer"}}],"responses":{"204":{"description":"Backfill triggered"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"trigger comfy nodes backfill","tags":["Registry"],"x-excluded":true}},"/comfy-nodes/{comfyNodeName}/node":{"get":{"description":"Returns the node that contains a ComfyUI node with the specified name","operationId":"GetNodeByComfyNodeName","parameters":[{"description":"The name of the ComfyUI node","in":"path","name":"comfyNodeName","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"description":"Node details"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No node found containing the specified ComfyUI node name"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve a node by ComfyUI node name","tags":["Registry"]}},"/customers":{"get":{"description":"Search for customers by email, name, Stripe ID, or Metronome ID.","operationId":"SearchCustomers","parameters":[{"description":"Email address to search for","in":"query","name":"email","schema":{"type":"string"}},{"description":"Customer name to search for","in":"query","name":"name","schema":{"type":"string"}},{"description":"Stripe customer ID to search for","in":"query","name":"stripe_id","schema":{"type":"string"}},{"description":"Metronome customer ID to search for\\","in":"query","name":"metronome_id","schema":{"type":"string"}},{"description":"Page number to retrieve","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"Number of customers to return per page","in":"query","name":"limit","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"customers":{"items":{"$ref":"#/components/schemas/Customer"},"type":"array"},"limit":{"description":"Number of customers per page","type":"integer"},"page":{"description":"Current page number","type":"integer"},"total":{"description":"Total number of matching customers","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"}},"type":"object"}}},"description":"Customers matching the search criteria"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request parameters"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - insufficient permissions"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Search for customers","tags":["API Nodes","Admin"],"x-excluded":true},"post":{"description":"Creates a new customer. User identity is taken from the bearer token; the optional request body carries a Cloudflare Turnstile token used for server-side bot verification at signup (BE-1490). The body is optional — clients that do not run the Turnstile widget (e.g. the local OSS build) may omit it.","operationId":"CreateCustomer","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomerRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}},"description":"Customer already exists"},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}},"description":"Customer created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a new customer","tags":["API Nodes"],"x-excluded":true}},"/customers/admin/coupons":{"get":{"description":"Retrieves a list of all coupons from Stripe. Only admins can list coupons.","operationId":"ListCoupons","parameters":[{"description":"Number of coupons to return","in":"query","name":"limit","schema":{"default":10,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"coupons":{"items":{"$ref":"#/components/schemas/CouponResponse"},"type":"array"},"has_more":{"description":"Whether there are more results available","type":"boolean"}},"required":["coupons"],"type":"object"}}},"description":"List of coupons retrieved successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List all coupons","tags":["Admin","API Nodes"],"x-excluded":true},"post":{"description":"Creates a new coupon in Stripe. Only admins can create coupons.","operationId":"CreateCoupon","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCouponRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponResponse"}}},"description":"Coupon created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a new Stripe coupon","tags":["Admin","API Nodes"],"x-excluded":true}},"/customers/admin/coupons/{coupon_id}":{"delete":{"description":"Deletes a coupon in Stripe. Only admins can delete coupons.","operationId":"DeleteCoupon","parameters":[{"description":"The Stripe coupon ID","in":"path","name":"coupon_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"coupon_id":{"description":"The deleted coupon ID","type":"string"},"message":{"description":"Success message","type":"string"}},"required":["message","coupon_id"],"type":"object"}}},"description":"Coupon deleted successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coupon not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete a coupon","tags":["Admin","API Nodes"],"x-excluded":true},"get":{"description":"Retrieves details of a specific coupon from Stripe. Only admins can view coupons.","operationId":"GetCoupon","parameters":[{"description":"The Stripe coupon ID","in":"path","name":"coupon_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponResponse"}}},"description":"Coupon retrieved successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coupon not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a specific coupon","tags":["Admin","API Nodes"],"x-excluded":true},"patch":{"description":"Updates a coupon in Stripe. Only admins can update coupons.","operationId":"UpdateCoupon","parameters":[{"description":"The Stripe coupon ID","in":"path","name":"coupon_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCouponRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponResponse"}}},"description":"Coupon updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Coupon not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Update a coupon","tags":["Admin","API Nodes"],"x-excluded":true}},"/customers/admin/promo-codes":{"get":{"description":"Retrieves a list of all promotional codes from Stripe. Only admins can list promo codes.","operationId":"ListPromoCodes","parameters":[{"description":"Filter by active status","in":"query","name":"active","schema":{"type":"boolean"}},{"description":"Number of promo codes to return","in":"query","name":"limit","schema":{"default":10,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"has_more":{"description":"Whether there are more results available","type":"boolean"},"promo_codes":{"items":{"$ref":"#/components/schemas/PromoCodeResponse"},"type":"array"}},"required":["promo_codes"],"type":"object"}}},"description":"List of promo codes retrieved successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List all promotional codes","tags":["Admin","API Nodes"],"x-excluded":true},"post":{"description":"Creates a new unique promotional code in Stripe for the specified coupon. Only admins can generate promo codes.","operationId":"CreatePromoCode","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePromoCodeRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodeResponse"}}},"description":"Promo code created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate a new Stripe promotional code","tags":["Admin","API Nodes"],"x-excluded":true}},"/customers/admin/promo-codes/{promo_code_id}":{"delete":{"description":"Deactivates a promotional code in Stripe. Only admins can deactivate promo codes.","operationId":"DeletePromoCode","parameters":[{"description":"The Stripe promotion code ID","in":"path","name":"promo_code_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"description":"Success message","type":"string"},"promo_code_id":{"description":"The deactivated promo code ID","type":"string"}},"required":["message","promo_code_id"],"type":"object"}}},"description":"Promo code deactivated successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Promo code not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Deactivate a promotional code","tags":["Admin","API Nodes"],"x-excluded":true},"get":{"description":"Retrieves details of a specific promotional code from Stripe. Only admins can view promo codes.","operationId":"GetPromoCode","parameters":[{"description":"The Stripe promotion code ID","in":"path","name":"promo_code_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodeResponse"}}},"description":"Promo code retrieved successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Promo code not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a specific promotional code","tags":["Admin","API Nodes"],"x-excluded":true},"patch":{"description":"Updates a promotional code in Stripe. Only admins can update promo codes.","operationId":"UpdatePromoCode","parameters":[{"description":"The Stripe promotion code ID","in":"path","name":"promo_code_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePromoCodeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodeResponse"}}},"description":"Promo code updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - Admin access required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Promo code not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Update a promotional code","tags":["Admin","API Nodes"],"x-excluded":true}},"/customers/api-keys":{"get":{"operationId":"ListCustomerAPIKeys","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"api_keys":{"items":{"$ref":"#/components/schemas/APIKey"},"type":"array"}},"type":"object"}}},"description":"List of API keys"},"401":{"description":"Unauthorized"},"404":{"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List all API keys for a customer","x-excluded":true},"post":{"operationId":"CreateCustomerAPIKey","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"api_key":{"$ref":"#/components/schemas/APIKeyWithPlaintext"}},"type":"object"}}},"description":"API key created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Customer or API key not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a new API key for a customer","x-excluded":true}},"/customers/api-keys/{api_key_id}":{"delete":{"operationId":"DeleteCustomerAPIKey","parameters":[{"in":"path","name":"api_key_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"API key deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid api_key_id (must be a UUID)"},"401":{"description":"Unauthorized"},"404":{"description":"Customer or API key not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Delete an API key for a customer","x-excluded":true}},"/customers/balance":{"get":{"description":"Returns the customer's current remaining balance in microamount and its currency, with separate breakdowns for prepaid commits and cloud credits.","operationId":"GetCustomerBalance","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"amount_micros":{"description":"The total remaining balance in microamount (1/1,000,000 of the currency unit)","format":"double","type":"number"},"cloud_credit_balance_micros":{"description":"The remaining balance from cloud credits in microamount","format":"double","type":"number"},"currency":{"description":"The currency code (e.g., \"usd\")","type":"string"},"effective_balance_micros":{"description":"The effective balance (total balance minus pending charges). Can be negative if pending charges exceed the balance. Only included when the show_negative_balances feature flag is enabled.","format":"double","type":"number"},"pending_charges_micros":{"description":"The total amount of pending/unbilled charges from draft invoices in microamount. Only included when the show_negative_balances feature flag is enabled.","format":"double","type":"number"},"prepaid_balance_micros":{"description":"The remaining balance from prepaid commits in microamount","format":"double","type":"number"}},"required":["amount_micros","currency"],"type":"object"}}},"description":"Customer balance retrieved successfully"},"401":{"description":"Unauthorized or invalid token"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get customer's remaining balance","tags":["API Nodes"],"x-excluded":true}},"/customers/billing":{"post":{"description":"Creates a session for the customer to access their billing portal where they can manage subscriptions, payment methods, and view invoices.","operationId":"AccessBillingPortal","requestBody":{"content":{"application/json":{"schema":{"properties":{"return_url":{"description":"Optional URL to redirect the customer after they're done with the billing portal","type":"string"},"target_tier":{"description":"Optional target subscription tier. When provided, creates a deep link directly to the subscription update confirmation screen with this tier pre-selected.","enum":["standard","creator","pro","standard-yearly","creator-yearly","pro-yearly"],"type":"string"}},"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"billing_portal_url":{"description":"The URL to redirect the customer to the billing portal","type":"string"}},"type":"object"}}},"description":"Billing portal session created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request or a provider-state refusal. Plan-change refusals use a stable `error` code: `subscription_update_scheduled`, `subscription_update_pending`, or `subscription_plan_unchanged`.\n"},"401":{"description":"Unauthorized or invalid token"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Access customer billing portal","tags":["API Nodes","Released"],"x-excluded":true}},"/customers/cloud-subscription-checkout":{"post":{"description":"Creates a cloud subscription checkout session for $20/month with automatic billing","operationId":"CreateCloudSubscriptionCheckout","requestBody":{"content":{"application/json":{"schema":{"properties":{"ga_client_id":{"description":"Google Analytics client ID from _ga cookie","type":"string"},"ga_session_id":{"description":"Google Analytics session ID","type":"string"},"ga_session_number":{"description":"Google Analytics session number","type":"string"},"gbraid":{"description":"Google Ads iOS attribution parameter","type":"string"},"gclid":{"description":"Google Ads click ID","type":"string"},"im_ref":{"description":"Impact.com click ID for affiliate conversion tracking","type":"string"},"rewardful_referral":{"description":"Rewardful referral UUID (window.Rewardful.referral), passed to Stripe as client_reference_id for affiliate conversion tracking","type":"string"},"utm_campaign":{"description":"UTM campaign parameter","type":"string"},"utm_content":{"description":"UTM content parameter","type":"string"},"utm_medium":{"description":"UTM medium parameter","type":"string"},"utm_source":{"description":"UTM source parameter","type":"string"},"utm_term":{"description":"UTM term parameter","type":"string"},"wbraid":{"description":"Google Ads web-to-app attribution parameter","type":"string"}},"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"checkout_url":{"description":"The URL to redirect the customer to complete subscription","type":"string"}},"type":"object"}}},"description":"Subscription checkout session created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input"},"401":{"description":"Unauthorized or invalid token"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create cloud subscription checkout session","tags":["API Nodes","Released"],"x-excluded":true}},"/customers/cloud-subscription-checkout/{tier}":{"post":{"description":"Creates a cloud subscription checkout session for a specific subscription tier (standard, creator, or pro) with automatic billing","operationId":"CreateCloudSubscriptionCheckoutTier","parameters":[{"description":"The subscription tier (standard, creator, or pro) with optional yearly billing (standard-yearly, creator-yearly, pro-yearly)","in":"path","name":"tier","required":true,"schema":{"enum":["standard","creator","pro","standard-yearly","creator-yearly","pro-yearly"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"ga_client_id":{"description":"Google Analytics client ID from _ga cookie","type":"string"},"ga_session_id":{"description":"Google Analytics session ID","type":"string"},"ga_session_number":{"description":"Google Analytics session number","type":"string"},"gbraid":{"description":"Google Ads iOS attribution parameter","type":"string"},"gclid":{"description":"Google Ads click ID","type":"string"},"im_ref":{"description":"Impact.com click ID for affiliate conversion tracking","type":"string"},"rewardful_referral":{"description":"Rewardful referral UUID (window.Rewardful.referral), passed to Stripe as client_reference_id for affiliate conversion tracking","type":"string"},"utm_campaign":{"description":"UTM campaign parameter","type":"string"},"utm_content":{"description":"UTM content parameter","type":"string"},"utm_medium":{"description":"UTM medium parameter","type":"string"},"utm_source":{"description":"UTM source parameter","type":"string"},"utm_term":{"description":"UTM term parameter","type":"string"},"wbraid":{"description":"Google Ads web-to-app attribution parameter","type":"string"}},"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"checkout_url":{"description":"The URL to redirect the customer to complete subscription","type":"string"}},"type":"object"}}},"description":"Subscription checkout session created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input or tier"},"401":{"description":"Unauthorized or invalid token"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create cloud subscription checkout session for a specific tier","tags":["API Nodes","Released"],"x-excluded":true}},"/customers/cloud-subscription-status":{"get":{"description":"Check if the customer has an active cloud subscription","operationId":"GetCloudSubscriptionStatus","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"end_date":{"description":"The date when the subscription is set to end (ISO 8601 format)","format":"date-time","nullable":true,"type":"string"},"free_tier_grant_state":{"allOf":[{"$ref":"#/components/schemas/FreeTierGrantState"}],"nullable":true},"has_fund":{"description":"Whether the customer has funds/credits available","type":"boolean"},"is_active":{"description":"Whether the customer has an active cloud subscription","type":"boolean"},"renewal_date":{"description":"The next renewal date for the subscription (ISO 8601 format)","format":"date-time","nullable":true,"type":"string"},"subscription_duration":{"allOf":[{"$ref":"#/components/schemas/SubscriptionDuration"}],"nullable":true},"subscription_id":{"description":"The active subscription ID if one exists","nullable":true,"type":"string"},"subscription_tier":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTier"}],"nullable":true}},"type":"object"}}},"description":"Cloud subscription status retrieved successfully"},"401":{"description":"Unauthorized or invalid token"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check cloud subscription status","tags":["API Nodes","Released"],"x-excluded":true}},"/customers/credit":{"post":{"operationId":"InitiateCreditPurchase","requestBody":{"content":{"application/json":{"schema":{"properties":{"amount_micros":{"description":"the amount of the checkout transaction in micro value","format":"int64","type":"integer"},"currency":{"description":"the currency used in the checkout transaction","type":"string"}},"required":["amount_micros","currency"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"checkout_url":{"description":"the url to redirect the customer","type":"string"}},"type":"object"}}},"description":"Customer Checkout created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid token or user already exists"},"401":{"description":"Unauthorized or invalid token"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Initiates a Credit Purchase.","tags":["API Nodes","Released"],"x-excluded":true}},"/customers/events":{"get":{"operationId":"GetCustomerEvents","parameters":[{"description":"Page number of the nodes list","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"Number of nodes to return per page","in":"query","name":"limit","schema":{"default":10,"type":"integer"}},{"description":"Event type to filter","in":"query","name":"filter","schema":{"type":"string"}},{"description":"Start date for filtering events (RFC3339 format, e.g., 2025-01-01T00:00:00Z)","in":"query","name":"start_date","schema":{"format":"date-time","type":"string"}},{"description":"End date for filtering events (RFC3339 format, e.g., 2025-01-31T23:59:59Z)","in":"query","name":"end_date","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"events":{"items":{"$ref":"#/components/schemas/AuditLog"},"type":"array"},"limit":{"description":"Maximum number of nodes per page","type":"integer"},"page":{"description":"Current page number","type":"integer"},"total":{"description":"Total number of events available","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"}},"type":"object"}}},"description":"A paginated list of nodes"},"400":{"description":"Invalid input, object invalid"},"404":{"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get events related to customer","tags":["API Nodes"],"x-excluded":true}},"/customers/me":{"get":{"description":"Returns details about the currently authenticated customer based on their JWT token.","operationId":"GetAuthenticatedCustomer","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}},"description":"Customer details retrieved successfully"},"401":{"description":"Unauthorized or invalid token"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get authenticated customer details","tags":["API Nodes"],"x-excluded":true}},"/customers/me/partner-node-concurrency":{"get":{"description":"Returns how many partner-node calls the authenticated customer may have in flight at once — the limit the proxy's concurrency gate enforces, resolved the same way the gate resolves it. -1 means unlimited (the gate is off), 0 means blocked, and any other value is a hard ceiling.\n\nThe limit belongs to the customer, not to a workspace: the gate keys on the calling customer, so every workspace that customer acts in shares this one number.\n\nThis is the read the admin override endpoint already performs, minus what a customer has no business seeing. The raw override column, lifetime paid spend, and the limit that clearing the override would revert to stay admin-only. `reason` names the rule that bound the limit without disclosing the spend behind it.\n","operationId":"GetAuthenticatedCustomerPartnerNodeConcurrency","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"limit":{"description":"Concurrent partner-node calls allowed. -1 = unlimited, 0 = blocked, positive = hard ceiling.\n","type":"integer"},"reason":{"description":"Which rule bound the limit.\n","enum":["manual_override","spend_ladder","never_paid","default"],"type":"string"}},"required":["limit","reason"],"type":"object"}}},"description":"Concurrency limit resolved successfully"},"401":{"description":"Unauthorized or invalid token"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the authenticated customer's partner-node concurrency limit","tags":["API Nodes"],"x-excluded":true}},"/customers/storage":{"post":{"description":"Store a resource for a customer. Resource will have a 24 hour expiry. The signed URL will be generated for the specified file path.","operationId":"CreateCustomerStorageResource","requestBody":{"content":{"application/json":{"schema":{"properties":{"content_type":{"description":"The content type of the file (e.g., 'image/png')","type":"string"},"file_hash":{"description":"The hash of the file. If provided, an existing file with the same hash may be returned.","type":"string"},"file_name":{"description":"The desired name of the file (e.g., 'profile.jpg')","type":"string"}},"required":["file_name"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerStorageResourceResponse"}}},"description":"Signed URL generated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Store a resource for a customer","tags":["API Nodes"],"x-excluded":true}},"/customers/usage":{"post":{"description":"Returns the customer's as a dashboard URL.","operationId":"GetCustomerUsage","requestBody":{"content":{"application/json":{"schema":{"properties":{"color_overrides":{"description":"Optional list of colors to override for branding","items":{"properties":{"name":{"description":"The color property to override","enum":["Gray_dark","Gray_medium","Gray_light","Gray_extralight","White","Primary_medium","Primary_light","UsageLine_0","UsageLine_1","UsageLine_2","UsageLine_3","UsageLine_4","UsageLine_5","UsageLine_6","UsageLine_7","UsageLine_8","UsageLine_9","Primary_green","Primary_red","Progress_bar","Progress_bar_background"],"type":"string"},"value":{"description":"Hex color code (e.g., \"#FF5733\")","pattern":"^#[0-9A-Fa-f]{6}$","type":"string"}},"required":["name","value"],"type":"object"},"type":"array"},"dashboard_type":{"default":"usage","description":"The type of dashboard to retrieve","enum":["invoices","usage","credits","commits_and_credits"],"type":"string"}},"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"url":{"description":"The dashboard URL for the customer's usage","type":"string"}},"type":"object"}}},"description":"Successful response"},"401":{"description":"Unauthorized or invalid token"},"404":{"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get customer's usage","tags":["API Nodes"],"x-excluded":true}},"/customers/usage/timeseries":{"get":{"description":"Returns the authenticated customer's gross usage spend, grouped by model, endpoint, or product, as one stacked data point per billing period, plus a per-group breakdown and a summary, for rendering a custom usage dashboard. Sourced from invoice line items (real USD). Replaces the embeddable iframe.","operationId":"GetCustomerUsageTimeSeries","parameters":[{"description":"Dimension to group spend by. Falls back to product name when the chosen key is absent on a line item.","in":"query","name":"group_by","schema":{"default":"model","enum":["model","endpoint","product"],"type":"string"}},{"description":"Bucket size for the time series. \"month\" uses monthly invoice line items; \"day\" and \"hour\" use invoice breakdowns (provide starting_on/ending_before).","in":"query","name":"granularity","schema":{"default":"month","enum":["hour","day","month"],"type":"string"}},{"description":"RFC 3339 start of the range (inclusive). Defaults to months before ending_before.","in":"query","name":"starting_on","schema":{"format":"date-time","type":"string"}},{"description":"RFC 3339 end of the range (exclusive). Defaults to now.","in":"query","name":"ending_before","schema":{"format":"date-time","type":"string"}},{"description":"Lookback window in months, used when starting_on is omitted.","in":"query","name":"months","schema":{"default":6,"maximum":24,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerUsageTimeSeries"}}},"description":"Customer usage time series retrieved successfully"},"401":{"description":"Unauthorized or invalid token"},"404":{"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get customer's usage time series","tags":["API Nodes"],"x-excluded":true}},"/customers/{customer_id}":{"get":{"description":"Returns details about a customer by their ID.","operationId":"GetCustomerById","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"customer":{"$ref":"#/components/schemas/CustomerAdmin"}},"type":"object"}}},"description":"Customer details retrieved successfully"},"401":{"description":"Unauthorized or invalid token"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a customer by ID","tags":["API Nodes","Admin"],"x-excluded":true}},"/customers/{customer_id}/balance":{"get":{"description":"Returns the specified customer's current remaining balance in microamount and its currency, with separate breakdowns for prepaid commits and cloud credits.","operationId":"GetCustomerBalanceById","parameters":[{"description":"The ID of the customer whose balance to retrieve","in":"path","name":"customer_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"amount_micros":{"description":"The total remaining balance in microamount (1/1,000,000 of the currency unit)","format":"double","type":"number"},"cloud_credit_balance_micros":{"description":"The remaining balance from cloud credits in microamount","format":"double","type":"number"},"currency":{"description":"The currency code (e.g., \"usd\")","type":"string"},"effective_balance_micros":{"description":"The effective balance (total balance minus pending charges). Can be negative if pending charges exceed the balance. Only included when the show_negative_balances feature flag is enabled.","format":"double","type":"number"},"pending_charges_micros":{"description":"The total amount of pending/unbilled charges from draft invoices in microamount. Only included when the show_negative_balances feature flag is enabled.","format":"double","type":"number"},"prepaid_balance_micros":{"description":"The remaining balance from prepaid commits in microamount","format":"double","type":"number"}},"required":["amount_micros","currency"],"type":"object"}}},"description":"Customer balance retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized or invalid token"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get customer's remaining balance by ID","tags":["API Nodes","Admin"],"x-excluded":true}},"/customers/{customer_id}/events":{"get":{"operationId":"GetCustomerEventsById","parameters":[{"in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"description":"Page number of the nodes list","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"Number of nodes to return per page","in":"query","name":"limit","schema":{"default":10,"type":"integer"}},{"description":"Event type to filter","in":"query","name":"filter","schema":{"type":"string"}},{"description":"Start date for filtering events (RFC3339 format, e.g., 2025-01-01T00:00:00Z)","in":"query","name":"start_date","schema":{"format":"date-time","type":"string"}},{"description":"End date for filtering events (RFC3339 format, e.g., 2025-01-31T23:59:59Z)","in":"query","name":"end_date","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"events":{"items":{"$ref":"#/components/schemas/AuditLog"},"type":"array"},"limit":{"description":"Maximum number of nodes per page","type":"integer"},"page":{"description":"Current page number","type":"integer"},"total":{"description":"Total number of events available","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"}},"type":"object"}}},"description":"A paginated list of nodes"},"400":{"description":"Invalid input, object invalid"},"404":{"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get events related to customer","tags":["API Nodes"],"x-excluded":true}},"/customers/{customer_id}/usage":{"post":{"description":"Manually track usage for a customer in Metronome. This endpoint is for admin use to record usage events.","operationId":"TrackCustomerUsage","parameters":[{"description":"The ID of the customer to track usage for","in":"path","name":"customer_id","required":true,"schema":{"type":"string"}},{"description":"Admin API secret used to authorize this request","in":"header","name":"X-Comfy-Admin-Secret","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"params":{"additionalProperties":true,"description":"Custom parameters for the usage event","type":"object"},"timestamp":{"description":"Timestamp of the usage event (RFC3339 format)","format":"date-time","type":"string"},"transaction_id":{"description":"Unique transaction ID for this usage event","format":"uuid","type":"string"}},"required":["transaction_id","params"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"description":"Success message","type":"string"}},"type":"object"}}},"description":"Usage tracked successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized or invalid token"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Customer not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"ComfyAdminSecretAuth":[]}],"summary":"Track usage for a customer (Admin only)","tags":["API Nodes","Admin"],"x-excluded":true}},"/features":{"get":{"description":"Returns the server's feature capabilities","operationId":"GetFeatures","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturesResponse"}}},"description":"Success"}},"summary":"Get server feature flags","tags":["Registry"]}},"/gitcommit":{"get":{"description":"Returns all runs, jobs, job results, and storage files associated with a given commit.","operationId":"GetGitcommit","parameters":[{"description":"The ID of the commit to fetch data for.","in":"query","name":"commitId","schema":{"type":"string"}},{"description":"The operating system to filter the CI data by.","in":"query","name":"operatingSystem","schema":{"type":"string"}},{"description":"The name of the workflow to filter the CI data by.","in":"query","name":"workflowName","schema":{"type":"string"}},{"description":"The branch of the gitcommit to filter the CI data by.","in":"query","name":"branch","schema":{"type":"string"}},{"description":"The page number to retrieve. A value below 1 is accepted and selects the first page. (That is why no minimum is declared — sub-1 is meaningful here, not invalid.)","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"The number of items to include per page. This route is unauthenticated, so the server caps the applied page size at the maximum rather than rejecting a larger value, and 0 and negative values are accepted and select the default. (That is why no minimum is declared — sub-1 is meaningful here, not invalid.) totalNumberOfPages is computed from the page size actually served, so a clamp is always detectable.","in":"query","name":"pageSize","schema":{"default":10,"maximum":100,"type":"integer"}},{"description":"The repo to filter by.","in":"query","name":"repoName","schema":{"default":"comfyanonymous/ComfyUI","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"jobResults":{"items":{"$ref":"#/components/schemas/ActionJobResult"},"type":"array"},"totalNumberOfPages":{"type":"integer"}},"type":"object"}}},"description":"An object containing runs, jobs, job results, and storage files"},"404":{"description":"Commit not found"},"500":{"description":"Internal server error"}},"summary":"Retrieve CI data for a given commit","tags":["ComfyUI CI"],"x-excluded":true}},"/gitcommitsummary":{"get":{"description":"Returns a summary of git commits, including status, start time, and end time.","operationId":"GetGitcommitsummary","parameters":[{"description":"The repository name to filter the git commits by.","in":"query","name":"repoName","schema":{"default":"comfyanonymous/ComfyUI","type":"string"}},{"description":"The branch name to filter the git commits by.","in":"query","name":"branchName","schema":{"type":"string"}},{"description":"The page number to retrieve. A value below 1 is accepted and selects the first page. (That is why no minimum is declared — sub-1 is meaningful here, not invalid.)","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"The number of items to include per page. This route is unauthenticated, so the server caps the applied page size at the maximum rather than rejecting a larger value, and 0 and negative values are accepted and select the default. (That is why no minimum is declared — sub-1 is meaningful here, not invalid.) totalNumberOfPages is computed from the page size actually served, so a clamp is always detectable.","in":"query","name":"pageSize","schema":{"default":10,"maximum":100,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"commitSummaries":{"items":{"$ref":"#/components/schemas/GitCommitSummary"},"type":"array"},"totalNumberOfPages":{"type":"integer"}},"type":"object"}}},"description":"Successfully retrieved git commit summaries"},"500":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"type":"object"}}},"description":"Internal server error"}},"summary":"Retrieve a summary of git commits","tags":["ComfyUI CI"],"x-excluded":true}},"/nodes":{"get":{"description":"Returns a paginated list of nodes across all publishers.","operationId":"ListAllNodes","parameters":[{"description":"Page number of the nodes list","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"Number of nodes to return per page. Values above the declared maximum are outside the contract, but this service does not reject them: it serves the maximum instead, and the page size actually served is echoed back as limit (and drives totalPages), so a clamp is always detectable by the caller. Treat the maximum as the real page stride — a client that asks for more and assumes it received more will miss rows. 0 and negative values are also accepted and select the default, which is why no minimum is declared: sub-1 is meaningful here, not invalid.","in":"query","name":"limit","schema":{"default":10,"maximum":100,"type":"integer"}},{"description":"Filter nodes by supported operating systems","examples":{"linux":{"value":"POSIX :: Linux"},"macos":{"value":"MacOS"},"macosx":{"value":"MacOS :: MacOS X"},"osIndependent":{"value":"OS Independent"},"ubuntu":{"value":"POSIX :: Linux :: Ubuntu"},"windows":{"value":"Microsoft :: Windows"},"windows10":{"value":"Microsoft :: Windows :: Windows 10"}},"in":"query","name":"supported_os","schema":{"type":"string"}},{"description":"Filter nodes by supported accelerator","in":"query","name":"supported_accelerator","schema":{"type":"string"}},{"description":"Whether to include banned nodes in the results. Defaults to including them; pass false to exclude.","in":"query","name":"include_banned","schema":{"type":"boolean"}},{"description":"Retrieve nodes created or updated after this timestamp (ISO 8601 format)","in":"query","name":"timestamp","schema":{"format":"date-time","type":"string"}},{"description":"Whether to fetch fresh result from database or use cached one if false","in":"query","name":"latest","schema":{"type":"boolean"}},{"description":"Database column to use as ascending ordering. Add `;desc` as suffix on each column for descending sort","in":"query","name":"sort","schema":{"items":{"type":"string"},"type":"array"}},{"description":"node_id to use as filter","in":"query","name":"node_id","schema":{"items":{"type":"string"},"type":"array"}},{"description":"Comfy UI version","in":"query","name":"comfyui_version","schema":{"type":"string"}},{"description":"The platform requesting the nodes","in":"query","name":"form_factor","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"limit":{"description":"Maximum number of nodes per page","type":"integer"},"nodes":{"items":{"$ref":"#/components/schemas/Node"},"type":"array"},"page":{"description":"Current page number","type":"integer"},"total":{"description":"Total number of nodes available","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"}},"type":"object"}}},"description":"A paginated list of nodes"},"400":{"description":"Invalid input, object invalid"},"404":{"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieves a list of nodes","tags":["Registry"]}},"/nodes/reindex":{"post":{"operationId":"ReindexNodes","parameters":[{"description":"Maximum number of nodes to send to algolia at a time","in":"query","name":"max_batch","schema":{"type":"integer"}}],"responses":{"200":{"description":"Reindex completed successfully."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Reindex all nodes for searching.","tags":["Registry"],"x-excluded":true}},"/nodes/search":{"get":{"description":"Returns a paginated list of nodes across all publishers.","operationId":"SearchNodes","parameters":[{"description":"Page number of the nodes list","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"Number of nodes to return per page. Values above the declared maximum are outside the contract, but this service does not reject them: it serves the maximum instead, and the page size actually served is echoed back as limit (and drives totalPages), so a clamp is always detectable by the caller. Treat the maximum as the real page stride — a client that asks for more and assumes it received more will miss rows. 0 and negative values are also accepted and select the default, which is why no minimum is declared: sub-1 is meaningful here, not invalid.","in":"query","name":"limit","schema":{"default":10,"maximum":100,"type":"integer"}},{"description":"Keyword to search the nodes","in":"query","name":"search","schema":{"type":"string"}},{"description":"Keyword to search the nodes by repository URL","in":"query","name":"repository_url_search","schema":{"type":"string"}},{"description":"Keyword to search the nodes by comfy node name","in":"query","name":"comfy_node_search","schema":{"type":"string"}},{"description":"Filter nodes by supported operating systems","examples":{"linux":{"value":"POSIX :: Linux"},"macos":{"value":"MacOS"},"macosx":{"value":"MacOS :: MacOS X"},"osIndependent":{"value":"OS Independent"},"ubuntu":{"value":"POSIX :: Linux :: Ubuntu"},"windows":{"value":"Microsoft :: Windows"},"windows10":{"value":"Microsoft :: Windows :: Windows 10"}},"in":"query","name":"supported_os","schema":{"type":"string"}},{"description":"Filter nodes by supported accelerator","in":"query","name":"supported_accelerator","schema":{"type":"string"}},{"description":"Whether to include banned nodes in the results. Defaults to including them; pass false to exclude.","in":"query","name":"include_banned","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"limit":{"description":"Maximum number of nodes per page","type":"integer"},"nodes":{"items":{"$ref":"#/components/schemas/Node"},"type":"array"},"page":{"description":"Current page number","type":"integer"},"total":{"description":"Total number of nodes available","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"}},"type":"object"}}},"description":"A paginated list of nodes"},"400":{"description":"Invalid input, object invalid"},"404":{"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieves a list of nodes","tags":["Registry"]}},"/nodes/update-github-stars":{"post":{"operationId":"UpdateGithubStars","parameters":[{"description":"Maximum number of nodes to update in one batch","in":"query","name":"max_batch","schema":{"default":100,"type":"integer"}}],"responses":{"200":{"description":"Update GithubStars request triggered successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request."},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Update GitHub stars for nodes","tags":["Registry"],"x-excluded":true}},"/nodes/{nodeId}":{"get":{"description":"Returns the details of a specific node.","operationId":"GetNode","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"description":"Whether to include the translation or not","in":"query","name":"include_translations","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"description":"Node details"},"302":{"description":"Redirect to node with normalized name match","headers":{"Location":{"description":"URL of the node with the correct ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Node not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve a specific node by ID","tags":["Registry"]}},"/nodes/{nodeId}/install":{"get":{"description":"Retrieves the node data for installation, either the latest or a specific version.","operationId":"InstallNode","parameters":[{"description":"The unique identifier of the node.","in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"description":"Specific version of the node to retrieve. If omitted, the latest version is returned.","in":"query","name":"version","schema":{"pattern":"^\\d+\\.\\d+\\.\\d+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeVersion"}}},"description":"Node data returned successfully."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid input, such as a bad version format."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Node not found."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Returns a node version to be installed.","tags":["Registry"]}},"/nodes/{nodeId}/reviews":{"post":{"operationId":"PostNodeReview","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"description":"number of star given to the node version","in":"query","name":"star","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"description":"Detailed information about a specific node"},"400":{"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Node version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Add review to a specific version of a node","tags":["Registry"]}},"/nodes/{nodeId}/translations":{"post":{"operationId":"CreateNodeTranslations","parameters":[{"description":"The unique identifier of the node.","in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"data":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object"}},"type":"object"}}},"required":true},"responses":{"201":{"description":"Detailed information about a specific node"},"400":{"description":"Bad Request"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Node version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Create Node Translations","tags":["Registry"]}},"/nodes/{nodeId}/versions":{"get":{"operationId":"ListNodeVersions","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"in":"query","name":"statuses","schema":{"items":{"$ref":"#/components/schemas/NodeVersionStatus"},"type":"array"}},{"in":"query","name":"include_status_reason","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NodeVersion"},"type":"array"}}},"description":"List of all node versions"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Node banned"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Node not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"List all versions of a node","tags":["Registry"]}},"/nodes/{nodeId}/versions/{versionId}":{"get":{"operationId":"GetNodeVersion","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"description":"The version of the node. (Not a UUID).","in":"path","name":"versionId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeVersion"}}},"description":"Detailed information about a specific node version"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Node version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve a specific version of a node","tags":["Registry"]}},"/nodes/{nodeId}/versions/{version}/comfy-nodes":{"get":{"operationId":"ListComfyNodes","parameters":[{"description":"The page number to retrieve.","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"The number of items to include per page. A value above the maximum is clamped down to it; 0 and negative values are accepted and select the default. (That is why no minimum is declared — sub-1 is meaningful here, not invalid.) totalNumberOfPages is computed from the page size actually served, so a clamp is always detectable.","in":"query","name":"limit","schema":{"default":10,"maximum":8192,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"comfy_nodes":{"items":{"$ref":"#/components/schemas/ComfyNode"},"type":"array"},"totalNumberOfPages":{"type":"integer"}},"type":"object"}}},"description":"Comy Nodes obtained successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"list comfy-nodes for node version","tags":["Registry"]},"parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"in":"path","name":"version","required":true,"schema":{"type":"string"}}],"post":{"operationId":"CreateComfyNodes","requestBody":{"content":{"application/json":{"schema":{"properties":{"cloud_build_info":{"$ref":"#/components/schemas/ComfyNodeCloudBuildInfo"},"nodes":{"additionalProperties":{"$ref":"#/components/schemas/ComfyNode"}},"reason":{"type":"string"},"status":{"type":"string"},"success":{"type":"boolean"}},"type":"object"}}},"required":true},"responses":{"204":{"description":"Comy Nodes created successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Version not found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Existing Comfy Nodes exists"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"create comfy-nodes for certain node","tags":["Registry"]}},"/nodes/{nodeId}/versions/{version}/comfy-nodes/{comfyNodeName}":{"get":{"operationId":"GetComfyNode","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"in":"path","name":"version","required":true,"schema":{"type":"string"}},{"in":"path","name":"comfyNodeName","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComfyNode"}}},"description":"Comy Nodes created successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"get specify comfy-node based on its id","tags":["Registry"]},"put":{"operationId":"UpdateComfyNode","parameters":[{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"in":"path","name":"version","required":true,"schema":{"type":"string"}},{"in":"path","name":"comfyNodeName","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComfyNodeUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComfyNode"}}},"description":"Comfy Node updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"ComfyNode not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Update a specific comfy-node","tags":["Registry"]}},"/proxy/anthropic/v1/messages":{"post":{"description":"Forwards a Messages API request to Anthropic's `/v1/messages` endpoint\nand returns the model's reply. Supports both JSON responses and\nServer-Sent Events streaming (selected via `stream: true` in the body).\n","operationId":"AnthropicCreateMessage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnthropicCreateMessageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnthropicCreateMessageResponse"}},"text/event-stream":{"schema":{"description":"Server-Sent Events stream of Anthropic message events","type":"string"}}},"description":"Successful response from Anthropic Messages API. JSON shape when `stream` is omitted or false; otherwise a `text/event-stream` of message events."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a message via Anthropic Claude","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/beeble/v1/switchx/generations":{"post":{"description":"Start a SwitchX compositing job.","operationId":"BeebleCreateSwitchXJob","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeebleCreateSwitchXRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeebleSwitchXStatusResponse"}}},"description":"The resulting job data. This will be returned in a pending state until the job is completed. See /v1/switchx/generations/{job_id} for retrieving the results."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Start SwitchX Generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/beeble/v1/switchx/generations/{job_id}":{"get":{"description":"Poll the status of a SwitchX job.","operationId":"BeebleGetSwitchXStatus","parameters":[{"description":"Job identifier (swx_...)","in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeebleSwitchXStatusResponse"}}},"description":"The most up-to-date state of the job. Check the status field to determine completion. Output URLs are signed and expire after 72 hours; each call returns freshly signed URLs."},"401":{"description":"Unauthorized"},"404":{"description":"Job not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get SwitchX Job Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/beeble/v1/uploads":{"post":{"description":"Create a presigned upload URL for a media file. The returned beeble_uri can be used as source_uri, reference_image_uri, or alpha_uri in SwitchX generation calls.","operationId":"BeebleCreateUpload","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeebleUploadRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeebleUploadResponse"}}},"description":"Presigned upload URL and beeble:// URI."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Beeble Upload URL","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-2-max/generate":{"post":{"description":"Forwards image generation requests to BFL's Flux 2 Max API and returns the results. Supports image-to-image generation with up to 8 input images.","operationId":"BflFlux2MaxGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFlux2ProGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProGenerateResponse"}}},"description":"Successful response from BFL Flux 2 Max proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux 2 Max for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-2-pro/generate":{"post":{"description":"Forwards image generation requests to BFL's Flux 2 Pro API and returns the results. Supports image-to-image generation with up to 5 input images.","operationId":"BflFlux2ProGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFlux2ProGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProGenerateResponse"}}},"description":"Successful response from BFL Flux 2 Pro proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux 2 Pro for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-kontext-max/generate":{"post":{"description":"Forwards image editing requests to BFL's Flux Kontext Max API and returns the results.","operationId":"BflFluxKontextMaxGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxKontextMaxGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxKontextMaxGenerateResponse"}}},"description":"Successful response from BFL Flux Kontext Max proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux Kontext Max for image editing","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-kontext-pro/generate":{"post":{"description":"Forwards image editing requests to BFL's Flux Kontext Pro API and returns the results.","operationId":"BflFluxKontextProGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxKontextProGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxKontextProGenerateResponse"}}},"description":"Successful response from BFL Flux Kontext Pro proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux Kontext Pro for image editing","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-pro-1.0-canny/generate":{"post":{"description":"Submits an image generation task with FLUX.1 Canny [pro].","operationId":"BFLProCannyV1FluxPro10CannyPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLCannyInputs"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BFLAsyncResponse"},{"$ref":"#/components/schemas/BFLAsyncWebhookResponse"}],"title":"Response Pro Canny V1 Flux Pro 1 0 Canny Post"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate an image with FLUX.1 Canny [pro] using a control image.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-pro-1.0-depth/generate":{"post":{"description":"Submits an image generation task with FLUX.1 Depth [pro].","operationId":"BFLProDepthV1FluxPro10DepthPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLDepthInputs"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BFLAsyncResponse"},{"$ref":"#/components/schemas/BFLAsyncWebhookResponse"}],"title":"Response Pro Depth V1 Flux Pro 1 0 Depth Post"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate an image with FLUX.1 Depth [pro] using a control image.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-pro-1.0-expand/generate":{"post":{"description":"Submits an image expansion task that adds the specified number of pixels to any combination of sides (top, bottom, left, right) while maintaining context.","operationId":"BFLExpandV1FluxPro10ExpandPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProExpandInputs"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BFLAsyncResponse"},{"$ref":"#/components/schemas/BFLAsyncWebhookResponse"}],"title":"Response Expand V1 Flux Pro 1 0 Expand Post"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Expand an image by adding pixels on any side.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-pro-1.0-fill/generate":{"post":{"description":"Submits an image generation task with the FLUX.1 Fill [pro] model using an input image and mask. Mask can be applied to alpha channel or submitted as a separate image.","operationId":"BFLFillV1FluxPro10FillPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProFillInputs"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BFLAsyncResponse"},{"$ref":"#/components/schemas/BFLAsyncWebhookResponse"}],"title":"Response Fill V1 Flux Pro 1 0 Fill Post"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate an image with FLUX.1 Fill [pro] using an input image and mask.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-pro-1.1-ultra/generate":{"post":{"description":"Forwards image generation requests to BFL's Flux Pro 1.1 Ultra API and returns the results.","operationId":"BflFluxProGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProGenerateResponse"}}},"description":"Successful response from BFL Flux Pro proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux Pro 1.1 Ultra for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/flux-pro-1.1/generate":{"post":{"description":"Forwards image generation requests to BFL's Flux Pro 1.1 API and returns the results.","operationId":"BflFluxPro11Generate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxPro1_1GenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxPro1_1GenerateResponse"}}},"description":"Successful response from BFL Flux Pro proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux Pro 1.1 for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/v1/flux-3-video":{"post":{"description":"Forwards video generation requests to BFL's FLUX 3 video API. The mode is explicit: t2v (text-to-video), i2v (image-continuation via keyframes), v2v (video-continuation via start_video), or draft_enhance (full-quality render of a prior draft's draft_cache).","operationId":"BflFlux3VideoGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFlux3VideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFlux3VideoResponse"}}},"description":"FLUX 3 video task accepted"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"403":{"description":"BFL API key not recognized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLHTTPValidationError"}}},"description":"Validation Error"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Concurrent generation limit reached. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"BFL service temporarily at capacity"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL FLUX 3 for video generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/v1/flux-tools/erase-v1":{"post":{"description":"Forwards erase requests to BFL's Flux Tools Erase v1 API and returns the results. Uses an input image and a mask identifying the object or region to remove.","operationId":"BflEraseV1Generate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLEraseV1Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProGenerateResponse"}}},"description":"Successful response from BFL Flux Tools Erase v1 proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux Tools Erase v1 for object removal","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/v1/flux-tools/video-upscale-v1":{"post":{"description":"Forwards video super-resolution requests to BFL's Flux Tools Video Upscale v1 API. Returns a task identifier and polling URL; the upscaled MP4 is retrieved from the get_result proxy endpoint.","operationId":"BflVideoUpscaleV1Generate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLVideoUpscaleV1Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProGenerateResponse"}}},"description":"Video upscale task accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"403":{"description":"BFL API key not recognized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLHTTPValidationError"}}},"description":"Validation Error"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux Tools Video Upscale v1","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/v1/flux-tools/vto-v1":{"post":{"description":"Forwards virtual try-on requests to BFL's Flux Tools VTO v1 API and returns the results. Person and garment images are mapped to the underlying input image slots.","operationId":"BflVtoV1Generate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLVtoV1Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFluxProGenerateResponse"}}},"description":"Successful response from BFL Flux Tools VTO v1 proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or BFL). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to BFL Flux Tools VTO v1 for virtual try-on","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bfl/v1/get_result":{"get":{"description":"Polls BFL for the current status and result of an asynchronous FLUX 3 task.","operationId":"BflFlux3GetResult","parameters":[{"description":"BFL task identifier returned by the submit endpoint.","in":"query","name":"id","required":true,"schema":{"type":"string"}},{"description":"The polling_url returned by the submit endpoint. BFL serves tasks from regional clusters, so polling must target the host in this URL; without it the request is sent to the global BFL host, which may not know the task. Must be an https BFL /v1/get_result URL.\n","in":"query","name":"polling_url","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BFLFlux3ResultResponse"}}},"description":"Current FLUX 3 task status or completed result"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"403":{"description":"BFL API key not recognized"},"404":{"description":"Task not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with BFL)"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"BFL service temporarily at capacity"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (BFL took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy a BFL FLUX 3 task status request","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/image/edit":{"post":{"description":"Edit an existing image using Bria's FIBO Edit API. You can provide:\n1. A source image and a text-based instruction (prompt)\n2. A source image and a structured_instruction\n3. A source image, a mask, and a text-based instruction\n4. A source image, a mask, and a structured_instruction\n\nThis endpoint always uses async mode (sync: false) and returns a status_url to poll for results.\n","operationId":"BriaFiboEdit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaFiboEditRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Content moderation failure"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Edit an image using Bria FIBO","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/image/edit/erase":{"post":{"description":"Remove objects or regions from an image using Bria's Eraser API. The area to erase is defined by a mask.\n\nReturns HTTP 202 with request_id and status_url when async (default).\nCan return 200 with result directly when sync is true.\n\nAccepted image formats: JPEG, JPG, PNG, WEBP.\n","operationId":"BriaErase","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaEraseRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Content moderation failure"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Erase objects from an image using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/image/edit/expand":{"post":{"description":"Expand an image onto a larger canvas using Bria's Image Expansion API. The expanded area is generated to blend with the original image, optionally guided by a text prompt. The output size is controlled either by aspect_ratio or by canvas_size with original_image_size and original_image_location.\n\nReturns HTTP 202 with request_id and status_url when async (default).\nCan return 200 with result directly when sync is true.\n\nAccepted image formats: JPEG, JPG, PNG, WEBP.\n","operationId":"BriaImageExpansion","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaImageExpansionRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Content moderation failure"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Expand an image beyond its original borders using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/image/edit/gen_fill":{"post":{"description":"Generate objects or scenery inside a masked region of an image, guided by a text prompt, using Bria's Generative Fill API.\n\nReturns HTTP 202 with request_id and status_url when async (default).\nCan return 200 with result directly when sync is true.\n\nAccepted image formats: JPEG, JPG, PNG, WEBP.\n","operationId":"BriaGenFill","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaGenFillRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Content moderation failure"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate content in a masked area of an image using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/image/edit/increase_resolution":{"post":{"description":"Upscale an image by a 2x or 4x multiplier using Bria's Increase Resolution API. Maximum output resolution is 8192x8192.\n\nReturns HTTP 202 with request_id and status_url when async (default).\nCan return 200 with result directly when sync is true.\n\nAccepted image formats: JPEG, JPG, PNG, WEBP.\n","operationId":"BriaIncreaseResolution","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaIncreaseResolutionRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Content moderation failure"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Increase the resolution of an image using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/image/edit/remove_background":{"post":{"description":"Remove the background of an image using Bria's RMBG 2.0 model.\n\nReturns HTTP 202 with request_id and status_url when async (default).\nCan return 200 with result directly when sync is true.\n\nAccepted image formats: JPEG, JPG, PNG, WEBP.\n","operationId":"BriaImageRemoveBackground","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaImageRemoveBackgroundRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Content moderation failure"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remove background from an image using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/status/{request_id}":{"get":{"description":"Retrieves the current status of an asynchronous Bria request.\n\nPoll this endpoint until the status is COMPLETED or ERROR.\n\nStatus values:\n- `IN_PROGRESS` – Request is being processed. Continue polling.\n- `COMPLETED` – Success. Response includes `result.image_url` for images, `result.video_url` for videos, or `result.structured_prompt` for structured prompt generation. Additional optional fields (seed, prompt, refined_prompt) may be included.\n- `ERROR` – Processing failed. Check error object for details.\n- `UNKNOWN` – Unexpected internal error.\n","operationId":"BriaGetStatus","parameters":[{"description":"Unique identifier of the request (returned from edit, generate, or remove_background endpoints)","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaStatusResponse"}}},"description":"Status retrieved successfully"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaStatusNotFoundResponse"}}},"description":"Request ID not found or expired"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Bria request status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/structured_instruction/generate":{"post":{"description":"Translates a user's text-based edit instruction and source image/mask into a detailed,\nmachine-readable structured edit instruction in JSON format.\n\nThis endpoint uses Gemini 2.5 Flash VLM to understand the edit context and returns only\nthe JSON string without generating an image.\n\nThe resulting structured_instruction can be used as input for the /proxy/bria/v2/image/edit endpoint.\n\nThis endpoint always uses async mode (sync: false) and returns a status_url to poll for results.\n","operationId":"BriaStructuredInstructionGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaStructuredInstructionRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Content moderation failure"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate a structured instruction from text","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/video/edit/green_screen":{"post":{"description":"Initiates an asynchronous green-screen (chroma key) job for a video using Bria's API.\nThe original background is replaced with a solid broadcast-green, chroma-green, or blue\nscreen suitable for compositing.\n\nReturns HTTP 202 with request_id and status_url. Poll the status endpoint for results.\n\nSupported input containers: .mp4, .mov, .webm, .avi, .gif\nSupported input codecs: H.264, H.265 (HEVC), VP9, AV1, PhotoJPEG\nMax input duration: 60 seconds. Input resolution up to 16000x16000.\n","operationId":"BriaVideoGreenScreen","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaVideoGreenScreenRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Apply a green screen to a video using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/video/edit/remove_background":{"post":{"description":"Initiates an asynchronous background removal job for a video using Bria's API.\n\nReturns HTTP 202 with request_id and status_url. Poll the status endpoint for results.\n\nSupported input containers: .mp4, .mov, .webm, .avi, .gif\nSupported input codecs: H.264, H.265 (HEVC), VP9, AV1, PhotoJPEG\nMax input duration: 60 seconds. Input resolution up to 16000x16000.\n","operationId":"BriaVideoRemoveBackground","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaVideoRemoveBackgroundRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remove background from a video using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/bria/v2/video/edit/replace_background":{"post":{"description":"Initiates an asynchronous background-replacement job for a video using Bria's API.\nThe original background is composited out and replaced with the supplied background\nimage or video.\n\nReturns HTTP 202 with request_id and status_url. Poll the status endpoint for results.\n\nSupported input containers: .mp4, .mov, .webm, .avi, .gif\nSupported input codecs: H.264, H.265 (HEVC), VP9, AV1, PhotoJPEG\nMax input duration: 60 seconds. Input resolution up to 16000x16000.\nThe background asset must match the foreground aspect ratio.\n","operationId":"BriaVideoReplaceBackground","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaVideoReplaceBackgroundRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaAsyncResponse"}}},"description":"Request accepted, processing asynchronously"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriaErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Replace the background of a video using Bria","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus-seedance2/api/v3/contents/generations/tasks/{task_id}":{"get":{"operationId":"ByteplusSeedance2VideoGenerationQuery","parameters":[{"description":"The ID of the Seedance 2.0 video generation task to query","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusVideoGenerationQueryResponse"}}},"description":"Video generation task information retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus/api/v3/contents/generations/tasks":{"post":{"operationId":"ByteplusVideoGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusVideoGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusVideoGenerationResponse"}}},"description":"Video generation task created successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus/api/v3/contents/generations/tasks/{task_id}":{"get":{"operationId":"ByteplusVideoGenerationQuery","parameters":[{"description":"The ID of the video generation task to query","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusVideoGenerationQueryResponse"}}},"description":"Video generation task information retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus/api/v3/files":{"post":{"description":"Proxies POST https://ark.ap-southeast.bytepluses.com/api/v3/files. Uploads a binary file to ModelArk for later use (e.g. video understanding). See https://docs.byteplus.com/en/docs/ModelArk/1870405 for upstream details.\n","operationId":"ByteplusFileUpload","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BytePlusFileUploadRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusFile"}}},"description":"File uploaded successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload a file to BytePlus ModelArk","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus/api/v3/files/{id}":{"get":{"description":"Proxies GET https://ark.ap-southeast.bytepluses.com/api/v3/files/{id}. See https://docs.byteplus.com/en/docs/ModelArk/1870406 for upstream details.\n","operationId":"ByteplusFileGet","parameters":[{"description":"The ID of the file to retrieve.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusFile"}}},"description":"File information retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Retrieve BytePlus ModelArk file information","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus/api/v3/images/generations":{"post":{"operationId":"ByteplusImageGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusImageGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusImageGenerationResponse"}}},"description":"Image generation completed successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus/api/v3/responses":{"post":{"description":"Proxies POST https://ark.ap-southeast.bytepluses.com/api/v3/responses. Creates a model response that supports text, image, video and file inputs, tool calls, structured output and deep-reasoning. See https://docs.byteplus.com/en/docs/ModelArk/1585128 for the upstream tutorial and request reference; the response object is documented at https://docs.byteplus.com/en/docs/ModelArk/1783703.\n","operationId":"ByteplusResponseCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusResponseCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusResponseObject"}}},"description":"Model response body (BytePlusResponseObject)."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a BytePlus ModelArk model response","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplus/api/v3/tts/create":{"post":{"description":"Proxies POST https://voice.ap-southeast-1.bytepluses.com/api/v3/tts/create. Synchronously generates audio (voice, music and sound effects) with the Seed Audio 1.0 models from a text prompt, optionally guided by reference audio or a reference image. Generated audio is capped at 120 seconds per request. See https://docs.byteplus.com/en/docs/byteplusvoice/seedaudio-01 for upstream details.\n","operationId":"ByteplusTTSCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusTTSCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusTTSCreateResponse"}}},"description":"Audio generation completed successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a BytePlus Seed Audio generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplusmediakit/api/v1/tasks/{task_id}":{"get":{"description":"Returns the state of an AI MediaKit task. When status is completed the download URL of the enhanced video is in result.video_url, valid for 24 hours.\n","operationId":"ByteplusMediaKitTaskQuery","parameters":[{"description":"The ID of the task to query","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusMediaKitTaskResponse"}}},"description":"Task information retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query a BytePlus AI MediaKit task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/byteplusmediakit/api/v1/tools/enhance-video":{"post":{"description":"Submits an asynchronous AI MediaKit video enhancement task for a video reachable at a public URL. Upscales and restores the video with the standard or professional tool version, optionally guided by a scene preset. Returns the task id used to poll for the enhanced output.\n","operationId":"ByteplusMediaKitEnhanceVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusMediaKitEnhanceVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BytePlusMediaKitEnhanceVideoResponse"}}},"description":"Enhancement task created successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a BytePlus AI MediaKit video enhancement task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/comfy-cloud/workflow/generate":{"post":{"operationId":"ComfyCloudGenerate","requestBody":{"content":{"application/json":{"schema":{"properties":{"inputs":{"additionalProperties":true,"description":"Workflow-specific scalar bindings plus named signed media assets. The schema\npermits workflow-specific property names; the selected workflow's server-side\nallowlist rejects unsupported properties. `maxProperties` bounds how large one\nbinding set may be so an open property name space is not an unbounded body.\n","maxProperties":64,"properties":{"aspect_ratio":{"maxLength":32,"type":"string"},"assets":{"additionalProperties":{"properties":{"type":{"enum":["IMAGE","VIDEO","AUDIO"],"type":"string"},"url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"}},"required":["type","url"],"type":"object"},"description":"Named signed media inputs staged into Comfy Cloud before execution.\nAsset URLs are fetched SERVER-SIDE, so the contract constrains them to\n`https://` and the server additionally enforces a host allowlist: an\nunconstrained caller-supplied URL here is a request-forgery path into the\ncluster (link-local metadata, in-cluster services). `maxProperties` bounds\nhow many staging fetches one request can trigger.\n","maxProperties":16,"type":"object"},"audio_url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},"driving_subject":{"maxLength":1024,"type":"string"},"driving_video_url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},"duration_seconds":{"description":"Requested output duration. This is the CONTRACT ceiling on how much GPU\ntime one request may ask for, not the operative limit: the selected\ncurated workflow's own allowlist narrows it further.\n","maximum":300,"minimum":0,"type":"number"},"enhance_prompt":{"type":"boolean"},"first_frame_url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},"image_url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},"last_frame_url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},"negative_prompt":{"maxLength":8192,"type":"string"},"prompt":{"maxLength":8192,"type":"string"},"reference_character_url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},"reference_subject":{"maxLength":1024,"type":"string"},"scene_prompt":{"maxLength":8192,"type":"string"},"seed":{"minimum":0,"type":"integer"}},"type":"object"},"workflow":{"description":"Curated workflow identifier in the two-segment `{model}/{task}` form, e.g.\n`flux-2/text-to-image`. Selects the server-side workflow allowlist entry;\nbounded so an unbounded identifier never reaches the allowlist lookup or a\nlog line.\n\nThe pattern is the one `RouterModelId` already uses, because these ids are\nthe same shape and a caller should not have to learn two. It is not\nenforced at request time: comfy-api installs no OpenAPI request validator\nand the registry is a plain map lookup, so an id outside the set is a 404\nfrom the lookup rather than a 400 from the schema. That makes this pattern\ndocumentation the node is written against, which is exactly why\nTestComfyCloudWorkflowIDsMatchTheSpecPattern pins every registry key\nagainst it: a slash-less id would have satisfied the old pattern and no\nreal id did.\n","example":"flux-2/text-to-image","maxLength":128,"pattern":"^[a-z0-9]+([._-][a-z0-9]+)*/[a-z0-9]+([._-][a-z0-9]+)*$","type":"string"}},"required":["workflow","inputs"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"cancel_url":{"type":"string"},"polling_url":{"type":"string"},"status":{"pattern":"^queued$","type":"string"},"task_id":{"type":"string"}},"required":["task_id","status","polling_url","cancel_url"],"type":"object"}}},"description":"Workflow queued"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid workflow request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Workspace partner-provider policy does not allow this provider, or the caller's workspace identity could not be resolved."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Preview execution service unavailable"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Run a curated workflow on Comfy Cloud","tags":["API Nodes"],"x-excluded":true}},"/proxy/comfy-cloud/workflow/tasks/{task_id}":{"get":{"operationId":"ComfyCloudGetTask","parameters":[{"description":"Opaque, caller-bound task capability","in":"path","name":"task_id","required":true,"schema":{"maxLength":512,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"},"output_url":{"format":"uri","type":"string"},"output_urls":{"additionalProperties":{"format":"uri","type":"string"},"type":"object"},"progress":{"maximum":100,"minimum":0,"type":"number"},"status":{"$ref":"#/components/schemas/ComfyCloudTaskStatus"},"task_id":{"type":"string"}},"required":["task_id","status"],"type":"object"}}},"description":"Current workflow task state"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid task capability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Task capability does not belong to the caller or has expired"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Preview execution service unavailable"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a Comfy Cloud workflow task","tags":["API Nodes"],"x-excluded":true}},"/proxy/comfy-cloud/workflow/tasks/{task_id}/cancel":{"post":{"operationId":"ComfyCloudCancelTask","parameters":[{"description":"Opaque, caller-bound task capability","in":"path","name":"task_id","required":true,"schema":{"maxLength":512,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"status":{"$ref":"#/components/schemas/ComfyCloudCancellationStatus"},"task_id":{"type":"string"}},"required":["task_id","status"],"type":"object"}}},"description":"Cancellation accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid task capability"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Task capability does not belong to the caller or has expired"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Preview execution service unavailable"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Cancel a Comfy Cloud workflow task","tags":["API Nodes"],"x-excluded":true}},"/proxy/dummy":{"post":{"description":"Dummy proxy endpoint that returns a simple string","operationId":"DummyProxy","requestBody":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Reindex completed successfully."}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Dummy proxy","tags":["API Nodes"],"x-excluded":true,"x-partner-governance":"excluded"}},"/proxy/elevenlabs/v1/audio-isolation":{"post":{"description":"Removes background noise from audio. Isolates vocals/speech from background sounds.\n","operationId":"ElevenLabsAudioIsolation","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ElevenLabsAudioIsolationRequest"}}},"required":true},"responses":{"200":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}},"audio/mpeg":{"schema":{"format":"binary","type":"string"}}},"description":"The isolated audio file"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Audio Isolation","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v1/shared-voices":{"get":{"description":"Retrieves a list of shared voices from the ElevenLabs voice library.\n","operationId":"ElevenLabsGetSharedVoices","parameters":[{"description":"How many shared voices to return at maximum. Can not exceed 100, defaults to 30.","in":"query","name":"page_size","schema":{"default":30,"type":"integer"}},{"description":"Voice category used for filtering. One of: professional, famous, high_quality.","in":"query","name":"category","schema":{"type":"string"}},{"description":"Gender used for filtering","in":"query","name":"gender","schema":{"type":"string"}},{"description":"Age used for filtering","in":"query","name":"age","schema":{"type":"string"}},{"description":"Accent used for filtering","in":"query","name":"accent","schema":{"type":"string"}},{"description":"Language used for filtering","in":"query","name":"language","schema":{"type":"string"}},{"description":"Locale used for filtering","in":"query","name":"locale","schema":{"type":"string"}},{"description":"Search term used for filtering","in":"query","name":"search","schema":{"type":"string"}},{"description":"Use-case used for filtering","in":"query","name":"use_cases","schema":{"items":{"type":"string"},"type":"array"}},{"description":"Descriptives used for filtering","in":"query","name":"descriptives","schema":{"items":{"type":"string"},"type":"array"}},{"description":"Filter featured voices","in":"query","name":"featured","schema":{"default":false,"type":"boolean"}},{"description":"Filter voices with a minimum notice period of the given number of days.","in":"query","name":"min_notice_period_days","schema":{"type":"integer"}},{"description":"Include/exclude voices with custom rates","in":"query","name":"include_custom_rates","schema":{"type":"boolean"}},{"description":"Include/exclude voices that are live moderated","in":"query","name":"include_live_moderated","schema":{"type":"boolean"}},{"description":"Filter voices that are enabled for the reader app","in":"query","name":"reader_app_enabled","schema":{"default":false,"type":"boolean"}},{"description":"Filter voices by public owner ID","in":"query","name":"owner_id","schema":{"type":"string"}},{"description":"Sort criteria","in":"query","name":"sort","schema":{"type":"string"}},{"description":"Page number","in":"query","name":"page","schema":{"default":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsSharedVoicesPaginatedResponse"}}},"description":"Shared voices retrieved successfully"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List Shared Voices","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v1/sound-generation":{"post":{"description":"Turn text into sound effects for your videos, voice-overs or video games\nusing the most advanced sound effects models in the world.\n","operationId":"ElevenLabsSoundGeneration","parameters":[{"description":"Output format of the generated audio. Formatted as codec_sample_rate_bitrate.\nExamples: mp3_22050_32, mp3_44100_128, pcm_16000, ulaw_8000\n","in":"query","name":"output_format","schema":{"default":"mp3_44100_128","enum":["mp3_22050_32","mp3_24000_48","mp3_44100_32","mp3_44100_64","mp3_44100_96","mp3_44100_128","mp3_44100_192","pcm_8000","pcm_16000","pcm_22050","pcm_24000","pcm_32000","pcm_44100","pcm_48000","ulaw_8000","alaw_8000","opus_48000_32","opus_48000_64","opus_48000_96","opus_48000_128","opus_48000_192"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsSoundGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}},"audio/mpeg":{"schema":{"format":"binary","type":"string"}}},"description":"The generated sound effect audio file"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Sound Effect","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v1/speech-to-speech/{voice_id}":{"post":{"description":"Transform audio from one voice to another. Maintain full control over emotion, timing and delivery.\n","operationId":"ElevenLabsSpeechToSpeech","parameters":[{"description":"ID of the voice to be used. Use the Get voices endpoint to list all available voices.","in":"path","name":"voice_id","required":true,"schema":{"type":"string"}},{"description":"When enable_logging is set to false zero retention mode will be used for the request.\nThis will mean history features are unavailable for this request, including request stitching.\nZero retention mode may only be used by enterprise customers.\n","in":"query","name":"enable_logging","schema":{"default":true,"type":"boolean"}},{"description":"Latency optimization levels (0-4):\n0 - default mode (no latency optimizations)\n1 - normal latency optimizations (~50% improvement)\n2 - strong latency optimizations (~75% improvement)\n3 - max latency optimizations\n4 - max latency with text normalizer off (best latency but may mispronounce)\n","in":"query","name":"optimize_streaming_latency","schema":{"nullable":true,"type":"integer"}},{"description":"Output format of the generated audio. Formatted as codec_sample_rate_bitrate.\nExamples: mp3_22050_32, mp3_44100_128, pcm_16000, ulaw_8000\n","in":"query","name":"output_format","schema":{"default":"mp3_44100_128","enum":["mp3_22050_32","mp3_24000_48","mp3_44100_32","mp3_44100_64","mp3_44100_96","mp3_44100_128","mp3_44100_192","pcm_8000","pcm_16000","pcm_22050","pcm_24000","pcm_32000","pcm_44100","pcm_48000","ulaw_8000","alaw_8000","opus_48000_32","opus_48000_64","opus_48000_96","opus_48000_128","opus_48000_192"],"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ElevenLabsSpeechToSpeechRequest"}}},"required":true},"responses":{"200":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}},"audio/mpeg":{"schema":{"format":"binary","type":"string"}},"audio/ogg":{"schema":{"format":"binary","type":"string"}},"audio/wav":{"schema":{"format":"binary","type":"string"}}},"description":"The generated audio file"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Voice Changer (Speech-to-Speech)","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v1/speech-to-text":{"post":{"description":"Transcribe an audio or video file. If webhook is set to true, the request will be processed\nasynchronously and results sent to configured webhooks. When use_multi_channel is true and\nthe provided audio has multiple channels, a 'transcripts' object with separate transcripts\nfor each channel is returned. Otherwise, returns a single transcript. The optional\nwebhook_metadata parameter allows you to attach custom data that will be included in\nwebhook responses for request correlation and tracking.\n","operationId":"ElevenLabsSpeechToText","parameters":[{"description":"When enable_logging is set to false zero retention mode will be used for the request.\nThis will mean log and transcript storage features are unavailable for this request.\nZero retention mode may only be used by enterprise customers.\n","in":"query","name":"enable_logging","schema":{"default":true,"type":"boolean"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ElevenLabsSTTRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsSTTResponse"}}},"description":"Synchronous transcription result"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create transcript (Speech-to-Text)","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v1/text-to-dialogue":{"post":{"description":"Converts a list of text and voice ID pairs into speech (dialogue) and returns audio.\nUseful for generating conversations between multiple characters.\n","operationId":"ElevenLabsTextToDialogue","parameters":[{"description":"Output format of the generated audio. Formatted as codec_sample_rate_bitrate.\nExamples: mp3_22050_32, mp3_44100_128, pcm_16000, ulaw_8000\n","in":"query","name":"output_format","schema":{"default":"mp3_44100_128","enum":["mp3_22050_32","mp3_24000_48","mp3_44100_32","mp3_44100_64","mp3_44100_96","mp3_44100_128","mp3_44100_192","pcm_8000","pcm_16000","pcm_22050","pcm_24000","pcm_32000","pcm_44100","pcm_48000","ulaw_8000","alaw_8000","opus_48000_32","opus_48000_64","opus_48000_96","opus_48000_128","opus_48000_192"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsTextToDialogueRequest"}}},"required":true},"responses":{"200":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}},"audio/mpeg":{"schema":{"format":"binary","type":"string"}},"audio/ogg":{"schema":{"format":"binary","type":"string"}},"audio/wav":{"schema":{"format":"binary","type":"string"}}},"description":"The generated audio file"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create dialogue (Multi-voice TTS)","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v1/text-to-speech/{voice_id}":{"post":{"description":"Converts text into speech using a specified voice and returns audio.\n\nThe output format can be specified via the output_format query parameter.\nSupported formats include MP3, PCM, μ-law, and Opus with various sample rates and bitrates.\n","operationId":"ElevenLabsTextToSpeech","parameters":[{"description":"ID of the voice to use. Use the Get voices endpoint to list all available voices.","in":"path","name":"voice_id","required":true,"schema":{"type":"string"}},{"description":"When set to false, enables zero retention mode (enterprise only). History features will be unavailable.","in":"query","name":"enable_logging","schema":{"default":true,"type":"boolean"}},{"description":"Deprecated. Latency optimization levels (0-4):\n0 - default mode (no latency optimizations)\n1 - normal latency optimizations (~50% improvement)\n2 - strong latency optimizations (~75% improvement)\n3 - max latency optimizations\n4 - max latency with text normalizer off (best latency but may mispronounce)\n","in":"query","name":"optimize_streaming_latency","schema":{"maximum":4,"minimum":0,"type":"integer"}},{"description":"Output format of the generated audio. Formatted as codec_sample_rate_bitrate.\nExamples: mp3_22050_32, mp3_44100_128, pcm_16000, pcm_22050, ulaw_8000\n","in":"query","name":"output_format","schema":{"default":"mp3_44100_128","enum":["mp3_22050_32","mp3_44100_32","mp3_44100_64","mp3_44100_96","mp3_44100_128","mp3_44100_192","pcm_8000","pcm_16000","pcm_22050","pcm_24000","pcm_32000","pcm_44100","pcm_48000","ulaw_8000","alaw_8000","opus_48000_32","opus_48000_64","opus_48000_96","opus_48000_128","opus_48000_192","wav_8000","wav_16000","wav_22050","wav_24000","wav_32000","wav_44100","wav_48000"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsTTSRequest"}}},"required":true},"responses":{"200":{"content":{"audio/mpeg":{"schema":{"format":"binary","type":"string"}},"audio/ogg":{"schema":{"format":"binary","type":"string"}},"audio/wav":{"schema":{"format":"binary","type":"string"}}},"description":"The generated audio file"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"ElevenLabs Text to Speech","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v1/voices/add":{"post":{"description":"Create an instant voice clone and add it to your Voices.\n","operationId":"ElevenLabsCreateVoice","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ElevenLabsCreateVoiceRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"requires_verification":{"type":"boolean"},"voice_id":{"type":"string"}},"type":"object"}}},"description":"Voice created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Voice Clone","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/elevenlabs/v2/voices":{"get":{"description":"Proxies ElevenLabs `GET /v2/voices` (the paginated voice search endpoint)\nwith the `category` query parameter pinned to `premade`, so only premade\nvoices from the ElevenLabs voice library are ever returned.\n","operationId":"ElevenLabsGetVoices","parameters":[{"description":"Search term used to filter voices by name or description.","in":"query","name":"search","schema":{"type":"string"}},{"description":"How many voices to return per page. Max 100, defaults to 10.","in":"query","name":"page_size","schema":{"type":"integer"}},{"description":"Pagination cursor returned by a previous call.","in":"query","name":"next_page_token","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElevenLabsVoicesPaginatedResponse"}}},"description":"Voices retrieved successfully"},"401":{"description":"Unauthorized"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List Voices","tags":["API Nodes","ElevenLabs"],"x-excluded":true}},"/proxy/fal/fal-ai/patina":{"post":{"description":"Submits an image to fal's PATINA model (fal-ai/patina) via the async queue API and returns a request_id. Predicts PBR material maps (basecolor, normal, roughness, metalness, height) from a single input image. Poll the status endpoint, then fetch the result.","operationId":"FalPatina","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalPatinaRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Request accepted and queued by fal"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a PBR material prediction to fal PATINA (image-to-image)","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/fal-ai/patina/material":{"post":{"description":"Submits a material generation request to fal's PATINA model (fal-ai/patina/material) via fal's async queue API and returns a request_id. PATINA generations (especially 8K / 4x upscaling) can take minutes, so the job is queued rather than run synchronously: poll the status endpoint and then fetch the result. The base texture plus the requested PBR maps (basecolor, normal, roughness, metalness, height) are returned by the result endpoint once status is COMPLETED.","operationId":"FalPatinaMaterialSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalPatinaMaterialRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Request accepted and queued by fal"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a PBR material generation to fal PATINA","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/fal-ai/patina/material/extract":{"post":{"description":"Submits a prompt + input image to fal's PATINA model (fal-ai/patina/material/extract) via the async queue API and returns a request_id. Extracts a texture from the image and generates a complete tiling PBR material. Poll the status endpoint, then fetch the result.","operationId":"FalPatinaMaterialExtract","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalPatinaMaterialExtractRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Request accepted and queued by fal"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a texture extraction + PBR material generation to fal PATINA","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/fal-ai/patina/requests/{request_id}":{"get":{"description":"Forwards to fal's queue result endpoint for the given request_id and returns the generated material once the request is COMPLETED: a base texture image plus the requested PBR maps.","operationId":"FalPatinaMaterialResult","parameters":[{"description":"The fal queue request id returned at submission.","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalPatinaMaterialResponse"}}},"description":"The completed PATINA material result"},"401":{"description":"Unauthorized"},"404":{"description":"Request not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Fetch the result of a completed fal PATINA request","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/fal-ai/patina/requests/{request_id}/status":{"get":{"description":"Forwards to fal's queue status endpoint for the given request_id. Returns the queue status (IN_QUEUE, IN_PROGRESS, or COMPLETED). Once COMPLETED, fetch the result from the request endpoint.","operationId":"FalPatinaMaterialStatus","parameters":[{"description":"The fal queue request id returned at submission.","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Current queue status of the request"},"401":{"description":"Unauthorized"},"404":{"description":"Request not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Poll the status of a fal PATINA request","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/minimax/h3-max/image-to-video":{"post":{"description":"Submits a text prompt plus optional first/last frame images to the MiniMax H3 Max model (minimax/h3-max/image-to-video) via fal's async queue API and returns a request_id. Poll the status endpoint, then fetch the result.","operationId":"FalMinimaxH3MaxImageToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalMinimaxH3MaxImageToVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Request accepted and queued by fal"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a MiniMax H3 Max image-to-video generation to fal","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/minimax/h3-max/reference-to-video":{"post":{"description":"Submits a text prompt plus reference images, videos, or audio clips to the MiniMax H3 Max model (minimax/h3-max/reference-to-video) via fal's async queue API and returns a request_id. Poll the status endpoint, then fetch the result.","operationId":"FalMinimaxH3MaxReferenceToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalMinimaxH3MaxReferenceToVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Request accepted and queued by fal"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a MiniMax H3 Max reference-to-video generation to fal","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/minimax/h3-max/requests/{request_id}":{"get":{"description":"Forwards to fal's queue result endpoint for the given request_id and returns the generated video once the request is COMPLETED.","operationId":"FalMinimaxH3MaxResult","parameters":[{"description":"The fal queue request id returned at submission.","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalMinimaxH3MaxVideoResponse"}}},"description":"The completed MiniMax H3 Max video result"},"401":{"description":"Unauthorized"},"404":{"description":"Request not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Fetch the result of a completed fal MiniMax H3 Max request","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/minimax/h3-max/requests/{request_id}/status":{"get":{"description":"Forwards to fal's queue status endpoint for the given request_id. Returns the queue status (IN_QUEUE, IN_PROGRESS, or COMPLETED). Once COMPLETED, fetch the result from the request endpoint.","operationId":"FalMinimaxH3MaxStatus","parameters":[{"description":"The fal queue request id returned at submission.","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Current queue status of the request"},"401":{"description":"Unauthorized"},"404":{"description":"Request not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Poll the status of a fal MiniMax H3 Max request","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fal/minimax/h3-max/text-to-video":{"post":{"description":"Submits a text prompt to the MiniMax H3 Max model (minimax/h3-max/text-to-video) via fal's async queue API and returns a request_id. Poll the status endpoint, then fetch the result.","operationId":"FalMinimaxH3MaxTextToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalMinimaxH3MaxTextToVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FalQueueStatus"}}},"description":"Request accepted and queued by fal"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a MiniMax H3 Max text-to-video generation to fal","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fishaudio/model":{"post":{"description":"Creates a voice model (instant voice clone) from 1-20 reference audio clips, for use as reference_id on the text-to-speech endpoint. Accepts multipart/form-data only. Visibility defaults to public upstream, so callers should send visibility explicitly (private or unlist); a public model also requires a cover_image.\n","operationId":"FishAudioCreateModel","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FishAudioCreateModelRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"_id":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"visibility":{"type":"string"}},"type":"object"}}},"description":"Voice model created successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Fish Audio Create Voice Model","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fishaudio/v1/asr":{"post":{"description":"Synchronously transcribes an uploaded audio file to text, returning the transcript, detected language and timestamped segments. Accepts multipart/form-data only — the upstream's application/msgpack variant is not exposed.\n","operationId":"FishAudioSpeechToText","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FishAudioASRRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FishAudioASRResponse"}}},"description":"Transcription completed successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Fish Audio Speech to Text","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/fishaudio/v1/tts":{"post":{"description":"Synchronously converts text to speech and streams back the generated audio in the requested output format (mp3, wav, pcm or opus). The TTS model is selected via the `model` request header; supported values are s1 and s2.1-pro (default s2.1-pro). Only application/json request bodies are accepted — the upstream's application/msgpack variant (inline reference audio) is not exposed.\n","operationId":"FishAudioTextToSpeech","parameters":[{"description":"TTS model to use. Supported values: s1, s2.1-pro. Defaults to s2.1-pro when omitted.\n","in":"header","name":"model","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FishAudioTTSRequest"}}},"required":true},"responses":{"200":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}},"audio/mpeg":{"schema":{"format":"binary","type":"string"}},"audio/ogg":{"schema":{"format":"binary","type":"string"}},"audio/wav":{"schema":{"format":"binary","type":"string"}}},"description":"The generated audio, streamed in the requested output format"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Fish Audio Text to Speech","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/freepik/v1/ai/image-relight":{"post":{"description":"Relight an image using AI. This endpoint accepts a variety of parameters to customize the generated images.\n","operationId":"FreepikMagnificRelight","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikMagnificRelightRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The relight process has started"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Relight an image","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/image-relight/{task_id}":{"get":{"description":"Get the status of the relight task","operationId":"FreepikMagnificRelightGetStatus","parameters":[{"description":"ID of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The task status is returned"},"404":{"description":"Task not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the status of the relight task","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/image-style-transfer":{"post":{"description":"Style transfer an image using AI.","operationId":"FreepikMagnificStyleTransfer","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikMagnificStyleTransferRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskData"}}},"description":"OK - The style transfer process has started"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Style transfer an image","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/image-style-transfer/{task_id}":{"get":{"description":"Get the status of the style transfer task","operationId":"FreepikMagnificStyleTransferGetStatus","parameters":[{"description":"ID of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The task status is returned"},"404":{"description":"Task not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the status of the style transfer task","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/image-upscaler":{"post":{"description":"This asynchronous endpoint enables image upscaling using advanced AI algorithms.\nUpon submission, it returns a unique task_id which can be used to track the progress.\nFor real-time production use, include the optional webhook_url parameter to receive\nan automated notification once the task has been completed.\n","operationId":"FreepikMagnificUpscalerCreative","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikMagnificUpscalerCreativeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The upscaling process has started"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upscale an image with Magnific","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/image-upscaler-precision-v2":{"post":{"description":"Upscales an image while adding new visual elements or details (V2).\nThis endpoint may modify the original image content based on the prompt and inferred context.\nUpon submission, it returns a unique task_id which can be used to track the progress.\n","operationId":"FreepikMagnificUpscalerPrecisionV2","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikMagnificUpscalerPrecisionV2Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The upscaling process has started"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upscale an image with Precision V2","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/image-upscaler-precision-v2/{task_id}":{"get":{"description":"Returns the current status and output URL of a specific precision upscaler V2 task.","operationId":"FreepikMagnificUpscalerPrecisionV2GetStatus","parameters":[{"description":"ID of the task","in":"path","name":"task_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The task status is returned"},"404":{"description":"Task not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the status of the Precision V2 upscaling task","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/image-upscaler/{task_id}":{"get":{"description":"Get the status of the upscaling task","operationId":"FreepikMagnificUpscalerCreativeGetStatus","parameters":[{"description":"ID of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The task status is returned"},"404":{"description":"Task not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the status of the upscaling task","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/skin-enhancer/creative":{"post":{"description":"Enhance skin in images using AI with the Creative mode. This mode provides more artistic and stylized enhancements.","operationId":"FreepikSkinEnhancerCreative","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikSkinEnhancerCreativeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The skin enhancer process has started"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Skin enhancer using AI (Creative)","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/skin-enhancer/faithful":{"post":{"description":"Enhance skin in images using AI with the Faithful mode. This mode preserves the original appearance while improving skin quality.","operationId":"FreepikSkinEnhancerFaithful","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikSkinEnhancerFaithfulRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The skin enhancer process has started"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Skin enhancer using AI (Faithful)","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/skin-enhancer/flexible":{"post":{"description":"Enhance skin in images using AI with the Flexible mode. This mode allows you to choose the optimization target for the enhancement.","operationId":"FreepikSkinEnhancerFlexible","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikSkinEnhancerFlexibleRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The skin enhancer process has started"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Bad Request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Skin enhancer using AI (Flexible)","tags":["Freepik","Proxy"]}},"/proxy/freepik/v1/ai/skin-enhancer/{task_id}":{"get":{"description":"Get the status of a skin enhancer task (works for both Creative and Faithful modes)","operationId":"FreepikSkinEnhancerGetStatus","parameters":[{"description":"ID of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikTaskResponse"}}},"description":"OK - The task status is returned"},"404":{"description":"Task not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreepikErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the status of one skin enhancer task","tags":["Freepik","Proxy"]}},"/proxy/gemini-interactions":{"post":{"description":"Forwards a create-interaction request to the Gemini Interactions API\n(`generativelanguage.googleapis.com/v1beta/interactions`). Billing is\nbased on the `usage` token counts in the response.\n","operationId":"GeminiCreateInteraction","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiInteractionRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiInteraction"}}},"description":"The completed interaction, including output content and token usage."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Gemini interaction","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/gemini-interactions/files/{name}":{"get":{"description":"Retrieves a file resource from the Gemini Files API. Pass the bare file\nname to read its metadata (processing state, size, URI); append\n`:download` to the name with `alt=media` to stream the raw bytes. Used\nto fetch interaction videos generated with `delivery: uri` in\n`response_format`, which returns a URI instead of inline base64 data\nfor outputs larger than 4 MB.\n","operationId":"GeminiGetInteractionFile","parameters":[{"description":"File name from the interaction output URI, optionally suffixed with `:download`.","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Set to `media` together with the `:download` suffix to stream the file bytes.","in":"query","name":"alt","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}},"application/octet-stream":{"schema":{"format":"binary","type":"string"}},"video/mp4":{"schema":{"format":"binary","type":"string"}}},"description":"The file metadata, or the raw file bytes when downloading with `alt=media`."},"401":{"description":"Unauthorized"},"404":{"description":"File not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get or download a Gemini generated file","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/gemini-interactions/{id}":{"get":{"description":"Retrieves a stored interaction from the Gemini Interactions API.","operationId":"GeminiGetInteraction","parameters":[{"description":"Interaction ID returned by the create call.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiInteraction"}}},"description":"The interaction in its current state."},"401":{"description":"Unauthorized"},"404":{"description":"Interaction not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a Gemini interaction by ID","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/heygen/v3/avatars":{"post":{"description":"Create a new avatar from a photo or a text prompt using the HeyGen v3\ncreate-avatar API. Returns the new avatar group and its first look;\ntraining is asynchronous — poll the get-avatar-look endpoint until the\nlook's status reaches a terminal state, then pass the look id as\navatar_id when creating videos. Types 'photo' and 'prompt' are\nsupported through this proxy; 'digital_twin' requires HeyGen's consent\nflow and is not supported.\n","operationId":"HeyGenCreateAvatar","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenCreateAvatarRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenCreateAvatarResponse"}}},"description":"Avatar creation accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"description":"Too Many Requests - rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a HeyGen avatar","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/heygen/v3/avatars/looks/{look_id}":{"get":{"description":"Retrieve details for a specific HeyGen avatar look, including supported\nengines, preferred orientation, preview URLs, and training status. The\nlook id is the value to pass as avatar_id when creating a video.\n","operationId":"HeyGenGetAvatarLook","parameters":[{"description":"Unique avatar look identifier","in":"path","name":"look_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenAvatarLookResponse"}}},"description":"Avatar look details"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"404":{"description":"Avatar look not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a HeyGen avatar look","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/heygen/v3/video-translations":{"post":{"description":"Translate a video into one or more target languages with voice cloning\nand lip-sync using the HeyGen v3 video-translation API. Returns one\nvideo_translation_id per target language. Translation is asynchronous;\npoll the get-video-translation endpoint until status reaches a\nterminal state.\n","operationId":"HeyGenCreateVideoTranslation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenCreateVideoTranslationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenVideoTranslationCreateResponse"}}},"description":"Translation creation accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"description":"Too Many Requests - rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a HeyGen video translation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/heygen/v3/video-translations/{video_translation_id}":{"get":{"description":"Retrieve the status and result of a HeyGen video translation.\nPoll this endpoint until status is completed, then read\ndata.video_url.\n","operationId":"HeyGenGetVideoTranslation","parameters":[{"description":"The video translation id returned by the create endpoint","in":"path","name":"video_translation_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenVideoTranslationDetailResponse"}}},"description":"Translation status and result"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"404":{"description":"Video translation not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a HeyGen video translation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/heygen/v3/videos":{"post":{"description":"Create a video from a HeyGen avatar or an arbitrary image using the\nHeyGen v3 create-video API. The request `type` selects the variant:\n`avatar` (an existing avatar look speaking a script or lip-syncing\naudio), `image` (animate an arbitrary image), or `cinematic_avatar`\n(prompt-driven generation guided by avatar looks and reference assets).\nGeneration is asynchronous; poll the get-video endpoint until status\nreaches a terminal state.\n","operationId":"HeyGenCreateVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenCreateVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenCreateVideoResponse"}}},"description":"Video creation accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"description":"Too Many Requests - rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a HeyGen avatar video","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/heygen/v3/videos/{video_id}":{"get":{"description":"Retrieve the status and result of a HeyGen video generation.\nPoll this endpoint until status is completed, then read\ndata.video_url.\n","operationId":"HeyGenGetVideo","parameters":[{"description":"The video id returned by the create endpoint","in":"path","name":"video_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenVideoDetailResponse"}}},"description":"Video status and result"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"404":{"description":"Video not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a HeyGen video","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/heygen/v3/voices/speech":{"post":{"description":"Synthesize speech audio from text using a HeyGen voice backed by the\nstarfish engine. Supports plain text and SSML. Returns a URL to the\ngenerated audio file along with its duration and optional word-level\ntimestamps. This endpoint is synchronous.\n","operationId":"HeyGenCreateSpeech","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenSpeechRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeyGenSpeechResponse"}}},"description":"Speech generated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"description":"Too Many Requests - rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate speech audio via HeyGen","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/hitpaw/api/photo-enhancer":{"post":{"description":"Submit an image processing task using HitPaw Photo Enhancement API.\nSupports multiple enhancement models for image super-resolution processing.\n\nThe returned job_id can be used with the task-status endpoint to check processing results.\n\n**Available Models:**\n- Enhancement \u0026 Denoise Models (face_2x/4x, face_v2_2x/4x, general_2x/4x, high_fidelity_2x/4x, sharpen_denoise, detail_denoise):\n - Max input: 67 MP, Max output: 600 MP\n - Supported formats: bmp, jpeg, jpg, png, jfif, tga, tiff, webp, heif\n- Generative Models (generative_portrait, generative):\n - No input limit, Max output: 8K (33 MP)\n - Supported formats: bmp, jpeg, jpg, png, jfif, tga, tiff, webp, heif\n","operationId":"HitpawPhotoEnhancer","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawPhotoEnhancerRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawJobResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit HitPaw Photo Enhancement Task","tags":["API Nodes","HitPaw"],"x-excluded":true}},"/proxy/hitpaw/api/task-status":{"post":{"description":"Query the status and result of a previously submitted photo or video enhancement task.\nPoll this endpoint until the task status indicates completion (COMPLETED).\n\n**Status Codes:**\n- CONVERTING: Job is currently being processed\n- COMPLETED: Job has completed successfully, result is available\n- ERROR: Job failed due to an error\n","operationId":"HitpawTaskStatus","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawTaskStatusRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawTaskStatusResponse"}}},"description":"Task status retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query HitPaw Task Status","tags":["API Nodes","HitPaw"],"x-excluded":true}},"/proxy/hitpaw/api/video-enhancer":{"post":{"description":"Submit a video processing task using HitPaw Video Enhancement API.\nUses AI technology to upscale low-resolution videos to high resolution,\neliminate artifacts and noise, and improve clarity and details.\n\nThe returned job_id can be used with the task-status endpoint to check processing results.\n\n**Video Constraints:**\n- Duration: 0.5 seconds to 1 hour\n- Maximum output resolution: 36 MP (Total Pixels)\n- Supported input formats: dv, mlv, m2ts, m2t, m2v, nut, ser, 3g2, 3gp, asf, divx, f4v, h261, h263, m4v, mkv, mov, mp4, mpeg, mpeg4, mpg, mxf, ogv, rm, rmvb, webm, wmv, dmsm, dvdmedia, dvr-ms, mts, trp, ts, vob, vro, gif, xvid\n- Supported output formats: mp4, mov, mkv, m4v, avi, gif\n","operationId":"HitpawVideoEnhancer","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawVideoEnhancerRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawJobResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawErrorResponse"}}},"description":"Payment Required - Insufficient credits"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HitPawErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit HitPaw Video Enhancement Task","tags":["API Nodes","HitPaw"],"x-excluded":true}},"/proxy/ideogram/generate":{"post":{"description":"Forwards image generation requests to Ideogram's API and returns the results.","operationId":"IdeogramGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramGenerateResponse"}}},"description":"Successful response from Ideogram proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Ideogram). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Ideogram)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Ideogram took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Ideogram for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ideogram/ideogram-v3/edit":{"post":{"description":"Forwards image editing requests to Ideogram's API and returns the results.","operationId":"IdeogramV3Edit","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/IdeogramV3EditRequest"}}},"description":"Parameters for Ideogram V3 image editing","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramGenerateResponse"}}},"description":"Successful response from Ideogram proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Prompt or Initial Image failed the safety checks."},"429":{"description":"Rate limit exceeded (either from proxy or Ideogram). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Ideogram for image editing","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ideogram/ideogram-v3/generate":{"post":{"description":"Forwards image generation requests to Ideogram's API and returns the results.","operationId":"IdeogramV3Generate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramV3Request"}}},"description":"Parameters for Ideogram V3 image generation","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramGenerateResponse"}}},"description":"Successful response from Ideogram proxy"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Ideogram for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ideogram/ideogram-v3/reframe":{"post":{"operationId":"IdeogramV3Reframe","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/IdeogramV3ReframeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramV3IdeogramResponse"}}},"description":"Reframed image successfully returned"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"description":"Unprocessable Entity"},"429":{"description":"Too Many Requests. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Reframe an image to a chosen resolution","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ideogram/ideogram-v3/remix":{"post":{"operationId":"IdeogramV3Remix","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/IdeogramV3RemixRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramV3IdeogramResponse"}}},"description":"Remix generated successfully"},"400":{"description":"Bad Request"},"403":{"description":"Forbidden"},"422":{"description":"Unprocessable Entity"},"429":{"description":"Too Many Requests. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remix an image using a prompt","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ideogram/ideogram-v3/replace-background":{"post":{"operationId":"IdeogramV3ReplaceBackground","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/IdeogramV3ReplaceBackgroundRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramV3IdeogramResponse"}}},"description":"Background replaced successfully"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"422":{"description":"Unprocessable Entity"},"429":{"description":"Too Many Requests. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Replace background of an image using a prompt","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ideogram/ideogram-v4/generate":{"post":{"description":"Forwards text-to-image generation requests to Ideogram's 4.0 API and returns the results.","operationId":"IdeogramV4Generate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramV4Request"}}},"description":"Parameters for Ideogram 4.0 image generation","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramGenerateResponse"}}},"description":"Successful response from Ideogram proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Ideogram). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Ideogram)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Ideogram took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Ideogram 4.0 for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ideogram/text-to-image/p-image-ideogram":{"post":{"description":"Forwards text-to-image generation requests to Ideogram's P-Image-Ideogram API and returns the results.","operationId":"IdeogramPImageGenerate","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/IdeogramPImageRequest"}}},"description":"Parameters for P-Image-Ideogram image generation","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramGenerateResponse"}}},"description":"Successful response from Ideogram proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Prompt failed the safety checks."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Ideogram). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Ideogram)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Ideogram took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to P-Image-Ideogram for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/image-to-video/kling-3.0-turbo":{"post":{"operationId":"KlingV2CreateVideoFromImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingV2Image2VideoRequest"}}},"description":"Create a Kling 3.0 Turbo image-to-video task","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingV2CreateTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI 3.0 Turbo Create Video from Image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/tasks":{"get":{"operationId":"KlingV2QueryTask","parameters":[{"description":"System task IDs to query. Supports batch queries separated by \",\". Mutually exclusive with external_task_ids.","in":"query","name":"task_ids","schema":{"type":"string"}},{"description":"Custom task IDs to query. Supports batch queries separated by \",\". Mutually exclusive with task_ids.","in":"query","name":"external_task_ids","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingV2QueryTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI 3.0 Turbo Query Task by ID","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/text-to-video/kling-3.0-turbo":{"post":{"operationId":"KlingV2CreateVideoFromText","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingV2Text2VideoRequest"}}},"description":"Create a Kling 3.0 Turbo text-to-video task","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingV2CreateTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI 3.0 Turbo Create Video from Text","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/account/costs":{"get":{"operationId":"KlingQueryResourcePackages","parameters":[{"in":"query","name":"start_time","required":true,"schema":{"description":"Start time for the query, Unix timestamp in ms","type":"integer"}},{"in":"query","name":"end_time","required":true,"schema":{"description":"End time for the query, Unix timestamp in ms","type":"integer"}},{"in":"query","name":"resource_pack_name","schema":{"description":"Resource package name for precise querying of a specific package","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingResourcePackageResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Resource Package Information","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/general/advanced-presets-elements":{"get":{"description":"Retrieves a list of advanced preset elements from Kling AI.\n","operationId":"KlingGetPresetsElements","parameters":[{"description":"Page number. Value range: [1, 1000].","in":"query","name":"pageNum","schema":{"default":1,"type":"integer"}},{"description":"Data volume per page. Value range: [1, 500].","in":"query","name":"pageSize","schema":{"default":30,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingPresetsElementsResponse"}}},"description":"Presets elements retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Presets Elements","tags":["API Nodes","Kling"],"x-excluded":true}},"/proxy/kling/v1/images/generations":{"get":{"operationId":"KlingImageGenerationsQueryTaskList","parameters":[{"description":"Page number","in":"query","name":"pageNum","schema":{"default":1,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Data volume per page","in":"query","name":"pageSize","schema":{"default":30,"maximum":500,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingImageGenerationsResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Image Generation Task List","tags":["API Nodes","Released"],"x-excluded":true},"post":{"operationId":"KlingCreateImageGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingImageGenerationsRequest"}}},"description":"Create task for generating images","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingImageGenerationsResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Image Generation Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/images/generations/{id}":{"get":{"operationId":"KlingImageGenerationsQuerySingleTask","parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingImageGenerationsResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Image Generation Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/images/kolors-virtual-try-on":{"get":{"operationId":"KlingVirtualTryOnQueryTaskList","parameters":[{"description":"Page number","in":"query","name":"pageNum","schema":{"default":1,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Data volume per page","in":"query","name":"pageSize","schema":{"default":30,"maximum":500,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVirtualTryOnResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Virtual Try-On Task List","tags":["API Nodes","Released"],"x-excluded":true},"post":{"operationId":"KlingCreateVirtualTryOn","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVirtualTryOnRequest"}}},"description":"Create task for virtual try-on of clothing on human images","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVirtualTryOnResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Virtual Try-On Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/images/kolors-virtual-try-on/{id}":{"get":{"operationId":"KlingVirtualTryOnQuerySingleTask","parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVirtualTryOnResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Virtual Try-On Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/images/omni-image":{"post":{"operationId":"KlingCreateOmniImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingOmniImageRequest"}}},"description":"Create task for generating omni-image","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingOmniImageResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Omni-Image Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/images/omni-image/{id}":{"get":{"operationId":"KlingOmniImageQuerySingleTask","parameters":[{"description":"Task ID or External Task ID. Can query by either task_id (generated by system) or external_task_id (customized task ID)","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingOmniImageResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Omni-Image Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/avatar/image2video":{"post":{"operationId":"KlingCreateAvatarVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingAvatarRequest"}}},"description":"Create task for generating avatar video from image and audio","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingAvatarResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Avatar Video","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/avatar/image2video/{id}":{"get":{"operationId":"KlingAvatarQueryTask","parameters":[{"description":"Task ID or external_task_id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingAvatarResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Avatar Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/effects":{"get":{"operationId":"KlingVideoEffectsQueryTaskList","parameters":[{"description":"Page number","in":"query","name":"pageNum","schema":{"default":1,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Data volume per page","in":"query","name":"pageSize","schema":{"default":30,"maximum":500,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoEffectsResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Video Effects Task List","tags":["API Nodes","Released"],"x-excluded":true},"post":{"operationId":"KlingCreateVideoEffects","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoEffectsRequest"}}},"description":"Create task for generating video with effects","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoEffectsResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Video Effects Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/effects/{id}":{"get":{"operationId":"KlingVideoEffectsQuerySingleTask","parameters":[{"description":"Task ID or external_task_id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoEffectsResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Video Effects Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/image2video":{"post":{"operationId":"KlingCreateVideoFromImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingImage2VideoRequest"}}},"description":"Create task for generating video from image","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingQueryTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Video from Image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/image2video/{id}":{"get":{"operationId":"KlingImage2VideoQuerySingleTask","parameters":[{"description":"Task ID or external_task_id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingQueryTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Image2Video Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/lip-sync":{"get":{"operationId":"KlingLipSyncQueryTaskList","parameters":[{"description":"Page number","in":"query","name":"pageNum","schema":{"default":1,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Data volume per page","in":"query","name":"pageSize","schema":{"default":30,"maximum":500,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingLipSyncResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Lip-Sync Task List","tags":["API Nodes","Released"],"x-excluded":true},"post":{"operationId":"KlingCreateLipSyncVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingLipSyncRequest"}}},"description":"Create task for generating lip-sync video","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingLipSyncResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Lip-Sync Video","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/lip-sync/{id}":{"get":{"operationId":"KlingLipSyncQuerySingleTask","parameters":[{"description":"Task ID or external_task_id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingLipSyncResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Lip-Sync Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/motion-control":{"post":{"operationId":"KlingCreateMotionControl","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingMotionControlRequest"}}},"description":"Create task for generating motion control video","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingMotionControlResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Motion Control Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/motion-control/{id}":{"get":{"operationId":"KlingMotionControlQuerySingleTask","parameters":[{"description":"Task ID or external_task_id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingMotionControlResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Motion Control Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/omni-video":{"post":{"operationId":"KlingCreateOmniVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingOmniVideoRequest"}}},"description":"Create task for generating omni-video","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingQueryTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Omni-Video Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/omni-video/{id}":{"get":{"operationId":"KlingOmniVideoQuerySingleTask","parameters":[{"description":"Task ID or External Task ID. Can query by either task_id (generated by system) or external_task_id (customized task ID)","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingQueryTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Omni-Video Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/text2video":{"post":{"operationId":"KlingCreateVideoFromText","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingText2VideoRequest"}}},"description":"Create task for generating video from text","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingQueryTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Create Video from Text","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/text2video/{id}":{"get":{"operationId":"KlingText2VideoQuerySingleTask","parameters":[{"description":"Task ID or external_task_id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingQueryTaskResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/video-extend":{"get":{"operationId":"KlingVideoExtendQueryTaskList","parameters":[{"description":"Page number","in":"query","name":"pageNum","schema":{"default":1,"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Data volume per page","in":"query","name":"pageSize","schema":{"default":30,"maximum":500,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoExtendResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Video-Extend Task List","tags":["API Nodes","Released"],"x-excluded":true},"post":{"operationId":"KlingExtendVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoExtendRequest"}}},"description":"Create task for extending video duration","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoExtendResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Extend Video Duration","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/kling/v1/videos/video-extend/{id}":{"get":{"operationId":"KlingVideoExtendQuerySingleTask","parameters":[{"description":"Task ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingVideoExtendResponse"}}},"description":"Successful response (Request successful)"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlingErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"KlingAI Query Single Video-Extend Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/krea/assets":{"post":{"description":"Upload an asset","operationId":"KreaUploadAsset","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/KreaAssetUploadRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaAsset"}}},"description":"The uploaded asset."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid file type/size"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload an asset","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/krea/generate/image/krea/krea-2/large":{"post":{"description":"Best for expressive photorealism.","operationId":"KreaGenerateImageLarge","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaGenerateImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaJob"}}},"description":"The resulting job data. This will be returned in a pending state until the job is completed. See /jobs/{id} for retrieving the results."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Krea 2 Large","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/krea/generate/image/krea/krea-2/medium":{"post":{"description":"Best for expressive illustrations.","operationId":"KreaGenerateImageMedium","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaGenerateImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaJob"}}},"description":"The resulting job data. This will be returned in a pending state until the job is completed. See /jobs/{id} for retrieving the results."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Krea 2 Medium","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/krea/generate/image/krea/krea-2/medium-turbo":{"post":{"description":"Faster, more affordable variant of Krea 2 Medium.","operationId":"KreaGenerateImageMediumTurbo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaGenerateImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaJob"}}},"description":"The resulting job data. This will be returned in a pending state until the job is completed. See /jobs/{id} for retrieving the results."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Krea 2 Medium Turbo","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/krea/jobs/{job_id}":{"get":{"description":"Get a job by ID","operationId":"KreaGetJob","parameters":[{"description":"A unique identifier for a job","in":"path","name":"job_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KreaJob"}}},"description":"The most up-to-date state of the job. You can check when the job is completed by checking the status field. For completed loraTraining jobs, the result will include a style_id field."},"401":{"description":"Unauthorized"},"404":{"description":"Job not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a job by ID","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v1/image-to-video":{"post":{"description":"Transform a static image into a dynamic video using LTX Video AI models","operationId":"LtxCreateVideoFromImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXImage2VideoRequest"}}},"description":"Create video from image","required":true},"responses":{"200":{"content":{"video/mp4":{"schema":{"format":"binary","type":"string"}}},"description":"Video generated successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Generate Video from Image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v1/text-to-video":{"post":{"description":"Generate a video from a text prompt using LTX Video AI models","operationId":"LtxCreateVideoFromText","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXText2VideoRequest"}}},"description":"Create video from text prompt","required":true},"responses":{"200":{"content":{"video/mp4":{"schema":{"format":"binary","type":"string"}}},"description":"Video generated successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Generate Video from Text","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v2/audio-to-video":{"post":{"description":"Submit an asynchronous audio-to-video generation job to LTX Video AI models","operationId":"LtxSubmitAudioToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXAudio2VideoRequest"}}},"description":"Create video from audio","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXAsyncSubmitResponse"}}},"description":"Job submitted successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Submit Async Audio to Video Job","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v2/audio-to-video/{job_id}":{"get":{"description":"Poll the status of an asynchronous LTX audio-to-video job","operationId":"LtxGetAudioToVideoJob","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXJobStatusResponse"}}},"description":"Job status retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Get Audio to Video Job Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v2/image-to-video":{"post":{"description":"Submit an asynchronous image-to-video generation job to LTX Video AI models","operationId":"LtxSubmitImageToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXImage2VideoRequest"}}},"description":"Create video from image","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXAsyncSubmitResponse"}}},"description":"Job submitted successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Submit Async Image to Video Job","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v2/image-to-video/{job_id}":{"get":{"description":"Poll the status of an asynchronous LTX image-to-video job","operationId":"LtxGetImageToVideoJob","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXJobStatusResponse"}}},"description":"Job status retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Get Image to Video Job Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v2/text-to-video":{"post":{"description":"Submit an asynchronous text-to-video generation job to LTX Video AI models","operationId":"LtxSubmitTextToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXText2VideoRequest"}}},"description":"Create video from text prompt","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXAsyncSubmitResponse"}}},"description":"Job submitted successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Submit Async Text to Video Job","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/ltx/v2/text-to-video/{job_id}":{"get":{"description":"Poll the status of an asynchronous LTX text-to-video job","operationId":"LtxGetTextToVideoJob","parameters":[{"in":"path","name":"job_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LTXJobStatusResponse"}}},"description":"Job status retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"LTX Video Get Text to Video Job Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/luma/generations":{"post":{"description":"Initiate a new generation with the provided prompt","operationId":"LumaCreateGeneration","requestBody":{"content":{"application/json":{"examples":{"default":{"value":{"aspect_ratio":"16:9","keyframes":{"frame0":{"type":"image","url":"https://example.com/image.jpg"},"frame1":{"id":"123e4567-e89b-12d3-a456-426614174000","type":"generation"}},"loop":true,"prompt":"A serene lake surrounded by mountains at sunset"}}},"schema":{"$ref":"#/components/schemas/LumaGenerationRequest"}}},"description":"The generation request object","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaGeneration"}}},"description":"Generation created"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaError"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/luma/generations/image":{"post":{"description":"Generate an image with the provided prompt","operationId":"LumaGenerateImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaImageGenerationRequest"}}},"description":"The image generation request object","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaGeneration"}}},"description":"Image generated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaError"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate an image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/luma/generations/{id}":{"get":{"description":"Retrieve details of a specific generation by its ID","operationId":"LumaGetGeneration","parameters":[{"description":"The ID of the generation","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaGeneration"}}},"description":"Generation found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaError"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/luma_2/generations":{"post":{"description":"Submit an image generation or edit job. Returns immediately with an opaque job ID to poll via GET /proxy/luma_2/generations/{id}.","operationId":"LumaAgentsCreateGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaAgentsGenerationRequest"}}},"description":"The generation request object","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaAgentsGeneration"}}},"description":"Generation accepted"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaAgentsError"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Luma Agents generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/luma_2/generations/{generation_id}":{"get":{"description":"Poll for generation status and output. On completion, the response includes presigned URLs to download the generated images.","operationId":"LumaAgentsGetGeneration","parameters":[{"description":"The ID of the generation","in":"path","name":"generation_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaAgentsGeneration"}}},"description":"Generation found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LumaAgentsError"}}},"description":"Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a Luma Agents generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/animations":{"post":{"description":"Create a new task to apply a specific animation action to a previously rigged character. Includes post-processing options.\n","operationId":"MeshyAnimationCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyAnimationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyAnimationCreateResponse"}}},"description":"Task created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an Animation Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/animations/{task_id}":{"get":{"description":"Retrieve the status and result of an Animation task.","operationId":"MeshyAnimationGetTask","parameters":[{"description":"The unique identifier of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyAnimationTask"}}},"description":"Task retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Animation Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/image-to-3d":{"post":{"description":"Create a new Image to 3D task. This task generates a 3D model from an image input.\n","operationId":"MeshyImageTo3DCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyImageTo3DRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyImageTo3DCreateResponse"}}},"description":"Task created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create an Image to 3D Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/image-to-3d/{task_id}":{"get":{"description":"Retrieve the status and result of an Image to 3D task.","operationId":"MeshyImageTo3DGetTask","parameters":[{"description":"The unique identifier of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyImageTo3DTask"}}},"description":"Task retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Image to 3D Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/multi-image-to-3d":{"post":{"description":"Create a new Multi-Image to 3D task. This task generates a 3D model from 1 to 4 images of the same object from different angles.\n","operationId":"MeshyMultiImageTo3DCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyMultiImageTo3DRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyMultiImageTo3DCreateResponse"}}},"description":"Task created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Multi-Image to 3D Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/multi-image-to-3d/{task_id}":{"get":{"description":"Retrieve the status and result of a Multi-Image to 3D task.","operationId":"MeshyMultiImageTo3DGetTask","parameters":[{"description":"The unique identifier of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyMultiImageTo3DTask"}}},"description":"Task retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Multi-Image to 3D Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/remesh":{"post":{"description":"Create a new remesh task to remesh and export an existing 3D model into various formats.\n","operationId":"MeshyRemeshCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRemeshRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRemeshCreateResponse"}}},"description":"Task created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Remesh Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/remesh/{task_id}":{"get":{"description":"Retrieve the status and result of a Remesh task.","operationId":"MeshyRemeshGetTask","parameters":[{"description":"The unique identifier of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRemeshTask"}}},"description":"Task retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Remesh Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/retexture":{"post":{"description":"Create a new Retexture task to generate 3D texture from text or image inputs.\n","operationId":"MeshyRetextureCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRetextureRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRetextureCreateResponse"}}},"description":"Task created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Retexture Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/retexture/{task_id}":{"get":{"description":"Retrieve the status and result of a Retexture task.","operationId":"MeshyRetextureGetTask","parameters":[{"description":"The unique identifier of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRetextureTask"}}},"description":"Task retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Retexture Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/rigging":{"post":{"description":"Create a new rigging task for a given 3D model. Upon successful completion, provides a rigged character in standard formats and optionally basic walking/running animations.\n","operationId":"MeshyRiggingCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRiggingRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRiggingCreateResponse"}}},"description":"Task created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Rigging Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v1/rigging/{task_id}":{"get":{"description":"Retrieve the status and result of a Rigging task.","operationId":"MeshyRiggingGetTask","parameters":[{"description":"The unique identifier of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyRiggingTask"}}},"description":"Task retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Rigging Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v2/text-to-3d":{"post":{"description":"Create a new Text to 3D Preview task.\n","operationId":"MeshyTextTo3DCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyTextTo3DRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyTextTo3DCreateResponse"}}},"description":"Task created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Authentication failed"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Text to 3D Preview Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meshy/openapi/v2/text-to-3d/{task_id}":{"get":{"description":"Retrieve the status and result of a Text to 3D task.","operationId":"MeshyTextTo3DGetTask","parameters":[{"description":"The unique identifier of the task","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeshyTextTo3DTask"}}},"description":"Task retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Task not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Text to 3D Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meta/v1/images/edits":{"post":{"operationId":"MetaCreateImageEdit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaCreateImageEditRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaImagesResponse"}}},"description":"Image edit completed successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/meta/v1/images/generations":{"post":{"operationId":"MetaCreateImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaCreateImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaImagesResponse"}}},"description":"Image generation completed successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/minimax/files/retrieve":{"post":{"description":"Proxies a request to Minimax to get the download URL for a file","operationId":"RetrieveMinimaxFile","parameters":[{"description":"Unique identifier for the file, obtained from the generation response","in":"query","name":"file_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxFileRetrieveResponse"}}},"description":"Successful response with file download URL"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Minimax). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Minimax)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Minimax took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Retrieve download URL for a Minimax file","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/minimax/query/video_generation":{"get":{"description":"Proxies a request to Minimax to check the status of a video generation task","operationId":"GetMinimaxVideoGeneration","parameters":[{"description":"The task ID to be queried","in":"query","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxTaskResultResponse"}}},"description":"Successful response with task status"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Minimax). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Minimax)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Minimax took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query status of a Minimax video generation task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/minimax/v2/h3_context_ir":{"post":{"description":"Forwards H3-Context-IR requests to Minimax's V2 API (Hailuo 03) and returns the task ID for asynchronous processing. The task only produces an enhanced video prompt; it does not create a video generation task.","operationId":"MinimaxV2H3ContextIR","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxV2H3ContextIRRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxV2VideoGenerationResponse"}}},"description":"Successful response from Minimax proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Minimax). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Minimax)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Minimax took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Minimax V2 for H3-Context-IR prompt enhancement","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/minimax/v2/query/video_generation/{task_id}":{"get":{"description":"Proxies a request to Minimax's V2 API to check the status of a video generation task","operationId":"GetMinimaxV2VideoGeneration","parameters":[{"description":"The task ID to be queried","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxV2TaskResultResponse"}}},"description":"Successful response with task status"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Minimax). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Minimax)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Minimax took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query status of a Minimax V2 video generation task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/minimax/v2/video_generation":{"post":{"description":"Forwards video generation requests to Minimax's V2 API (Hailuo 03) and returns the task ID for asynchronous processing.","operationId":"MinimaxV2VideoGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxV2VideoGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxV2VideoGenerationResponse"}}},"description":"Successful response from Minimax proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Minimax). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Minimax)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Minimax took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Minimax V2 for video generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/minimax/v2/video_regeneration":{"post":{"description":"Forwards video regeneration requests to Minimax's V2 API (Hailuo 03) and returns the task ID for asynchronous processing. Regenerates a source video that meets the MiniMax-H3 768P output specifications into a 2K video.","operationId":"MinimaxV2VideoRegeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxV2VideoRegenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxV2VideoGenerationResponse"}}},"description":"Successful response from Minimax proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Minimax). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Minimax)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Minimax took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Minimax V2 for video regeneration","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/minimax/video_generation":{"post":{"description":"Forwards video generation requests to Minimax's API and returns the task ID for asynchronous processing.","operationId":"MinimaxVideoGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxVideoGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimaxVideoGenerationResponse"}}},"description":"Successful response from Minimax proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (either from proxy or Minimax). Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Minimax)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Minimax took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Minimax for video generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/moonvalley/prompts/image-to-video":{"post":{"operationId":"MoonvalleyImageToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyImageToVideoRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyPromptResponse"}}},"description":"Prompt created"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Image to Video Prompt","tags":["API Nodes"],"x-excluded":true}},"/proxy/moonvalley/prompts/text-to-image":{"post":{"operationId":"MoonvalleyTextToImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyTextToImageRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyPromptResponse"}}},"description":"Prompt created"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Text to Image Prompt","tags":["API Nodes"],"x-excluded":true}},"/proxy/moonvalley/prompts/text-to-video":{"post":{"operationId":"MoonvalleyTextToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyTextToVideoRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyPromptResponse"}}},"description":"Prompt created"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Text to Video Prompt","tags":["API Nodes"],"x-excluded":true}},"/proxy/moonvalley/prompts/video-to-video":{"post":{"operationId":"MoonvalleyVideoToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyVideoToVideoRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyPromptResponse"}}},"description":"Prompt created"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Video to Video Prompt","tags":["API Nodes"],"x-excluded":true}},"/proxy/moonvalley/prompts/video-to-video/resize":{"post":{"operationId":"MoonvalleyVideoToVideoResize","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyResizeVideoRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyPromptResponse"}}},"description":"Prompt created"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Resize a video","tags":["API Nodes"],"x-excluded":true}},"/proxy/moonvalley/prompts/{prompt_id}":{"get":{"operationId":"MoonvalleyGetPrompt","parameters":[{"in":"path","name":"prompt_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyPromptResponse"}}},"description":"Prompt details retrieved"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Prompt Details","tags":["API Nodes"],"x-excluded":true}},"/proxy/moonvalley/uploads":{"post":{"operationId":"MoonvalleyUpload","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MoonvalleyUploadFileRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoonvalleyUploadFileResponse"}}},"description":"File uploaded successfully"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload Files","tags":["API Nodes"],"x-excluded":true}},"/proxy/openai/images/edits":{"post":{"operationId":"OpenAIEditImage","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/OpenAIImageEditRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAIImageGenerationResponse"}}},"description":"Image edited successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Edit an image using OpenAI's image models","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/openai/images/generations":{"post":{"operationId":"OpenAIGenerateImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAIImageGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAIImageGenerationResponse"}}},"description":"Image generated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate an image using OpenAI's models","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/openai/v1/responses":{"post":{"operationId":"CreateOpenAIResponse","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAICreateResponse"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAIResponse"}},"text/event-stream":{"schema":{"$ref":"#/components/schemas/OpenAIResponseStreamEvent"}}},"description":"OK"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/openai/v1/responses/{id}":{"get":{"operationId":"GetOpenAIResponse","parameters":[{"description":"The ID of the response to retrieve.","in":"path","name":"id","required":true,"schema":{"example":"resp_677efb5139a88190b512bc3fef8e535d","type":"string"}},{"description":"Additional fields to include in the response. See the `include`\nparameter for Response creation above for more information.\n","in":"query","name":"include","schema":{"items":{"$ref":"#/components/schemas/Includable"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAIResponse"}}},"description":"OK"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Retrieves a model response with the given ID.\n","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/openai/v1/videos":{"post":{"operationId":"OpenAICreateVideo","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/OpenAIVideoCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAIVideoJob"}}},"description":"Video generation job created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a video using OpenAI's Sora model","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/openai/v1/videos/{video_id}":{"get":{"operationId":"OpenAIGetVideo","parameters":[{"description":"The identifier of the video to retrieve","in":"path","name":"video_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAIVideoJob"}}},"description":"Video job details"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Video not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Retrieve a video","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/openai/v1/videos/{video_id}/content":{"get":{"operationId":"OpenAIDownloadVideoContent","parameters":[{"description":"The identifier of the video whose media to download","in":"path","name":"video_id","required":true,"schema":{"type":"string"}},{"description":"Which downloadable asset to return","in":"query","name":"variant","schema":{"type":"string"}}],"responses":{"200":{"content":{"video/mp4":{"schema":{"format":"binary","type":"string"}}},"description":"Video content stream"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Video not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Download video content","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/openrouter/api/v1/chat/completions":{"post":{"description":"Forwards a Chat Completions request to OpenRouter's `/api/v1/chat/completions`\nendpoint and returns the model's reply. Streaming (`stream: true`) is\nrejected: billing relies on the `usage.cost` value OpenRouter returns,\nwhich is not guaranteed on every SSE stream. Billing is based on the\n`usage.cost` field in the response body.\n","operationId":"OpenrouterCreateChatCompletion","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenRouterChatRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenRouterChatResult"}}},"description":"Successful response from OpenRouter Chat Completions API."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a chat completion via OpenRouter","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/generate/2.2/i2v":{"post":{"operationId":"PikaGenerate22I2vGenerate22I2vPost","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PikaBody_generate_2_2_i2v_generate_2_2_i2v_post"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaGenerateResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate 2 2 I2V","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/generate/2.2/pikaframes":{"post":{"operationId":"PikaGenerate22KeyframeGenerate22PikaframesPost","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PikaBody_generate_2_2_keyframe_generate_2_2_pikaframes_post"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaGenerateResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate 2 2 Keyframe","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/generate/2.2/pikascenes":{"post":{"operationId":"PikaGenerate22C2vGenerate22PikascenesPost","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PikaBody_generate_2_2_c2v_generate_2_2_pikascenes_post"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaGenerateResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate 2 2 C2V","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/generate/2.2/t2v":{"post":{"operationId":"PikaGenerate22T2vGenerate22T2vPost","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PikaBody_generate_2_2_t2v_generate_2_2_t2v_post"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaGenerateResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate 2 2 T2V","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/generate/pikadditions":{"post":{"operationId":"PikaGeneratePikadditionsGeneratePikadditionsPost","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PikaBody_generate_pikadditions_generate_pikadditions_post"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaGenerateResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate Pikadditions","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/generate/pikaffects":{"post":{"description":"Generate a video with a specific Pikaffect. Supported Pikaffects: Cake-ify, Crumble, Crush, Decapitate, Deflate, Dissolve, Explode, Eye-pop, Inflate, Levitate, Melt, Peel, Poke, Squish, Ta-da, Tear","operationId":"PikaGeneratePikaffectsGeneratePikaffectsPost","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PikaBody_generate_pikaffects_generate_pikaffects_post"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaGenerateResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate Pikaffects","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/generate/pikaswaps":{"post":{"description":"Exactly one of `modifyRegionMask` and `modifyRegionRoi` must be provided.","operationId":"PikaGeneratePikaswapsGeneratePikaswapsPost","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PikaBody_generate_pikaswaps_generate_pikaswaps_post"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaGenerateResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate Pikaswaps","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pika/videos/{video_id}":{"get":{"operationId":"PikaGetVideoVideosVideoIdGet","parameters":[{"in":"path","name":"video_id","required":true,"schema":{"title":"Video Id","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaVideoResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PikaHTTPValidationError"}}},"description":"Validation Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Video","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/image/upload":{"post":{"operationId":"PixverseUploadImage","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"image":{"format":"binary","type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseImageUploadResponse"}}},"description":"Image uploaded"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload an image to the server.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/media/upload":{"post":{"operationId":"PixverseUploadMedia","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"},"file_url":{"description":"Public URL to fetch the media from, instead of uploading bytes.","type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseMediaUploadResponse"}}},"description":"Media uploaded"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload a video to the server.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/video/extend/generate":{"post":{"operationId":"PixverseGenerateExtendVideo","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseExtendVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseVideoResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Extend an existing video.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/video/fusion/generate":{"post":{"operationId":"PixverseGenerateFusionVideo","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseFusionVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseVideoResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate video from reference images and videos.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/video/img/generate":{"post":{"operationId":"PixverseGenerateImageVideo","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseImageVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseVideoResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate video from image.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/video/result/{id}":{"get":{"operationId":"PixverseGetVideoResult","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"},{"in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseVideoResultResponse"}}},"description":"Result fetched"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get the result of a video generation.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/video/text/generate":{"post":{"operationId":"PixverseGenerateTextVideo","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseTextVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseVideoResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate video from text prompt.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/pixverse/video/transition/generate":{"post":{"operationId":"PixverseGenerateTransitionVideo","parameters":[{"$ref":"#/components/parameters/PixverseAiTraceId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseTransitionVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PixverseVideoResponse"}}},"description":"Success"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate transition video between two images.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/quiver/v1/svgs/generations":{"post":{"description":"Generate one or more SVGs from a text prompt using the Quiver AI Arrow model.","operationId":"QuiverTextToSVG","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuiverTextToSVGRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuiverSVGResponse"}}},"description":"SVG generated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate SVG from text using Quiver AI","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/quiver/v1/svgs/vectorizations":{"post":{"description":"Vectorize an image into one or more SVGs using the Quiver AI Arrow model.","operationId":"QuiverImageToSVG","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuiverImageToSVGRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuiverSVGResponse"}}},"description":"SVG vectorization completed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required - Insufficient credits"},"429":{"description":"Too Many Requests - Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Convert image to SVG using Quiver AI","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/qwen/api/v1/services/aigc/multimodal-generation/generation":{"post":{"operationId":"QwenMultimodalGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QwenMultimodalGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QwenMultimodalGenerationResponse"}}},"description":"Multimodal generation completed successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/image_generation":{"post":{"description":"Forwards image generation requests to Recraft's API and returns the generated images.","operationId":"RecraftImageGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftImageGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftImageGenerationResponse"}}},"description":"Successful response from Recraft proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request (invalid input to proxy)"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Gateway (error communicating with Recraft)"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Gateway Timeout (Recraft took too long to respond)"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Proxy request to Recraft for image generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/images/creativeUpscale":{"post":{"operationId":"RecraftCreativeUpscale","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RecraftProcessImageRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftProcessImageResponse"}}},"description":"OK"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Creative Upscale","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/images/crispUpscale":{"post":{"operationId":"RecraftCrispUpscale","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"description":"Image file to process","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftImageGenerationResponse"}}},"description":"Background removed successfully"},"400":{"description":"Bad request - Invalid parameters or file"},"401":{"description":"Unauthorized - Invalid or missing API token"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upscale an image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/images/imageToImage":{"post":{"operationId":"RecraftImageToImage","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RecraftImageToImageRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftGenerateImageResponse"}}},"description":"OK"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate image from image and prompt","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/images/inpaint":{"post":{"operationId":"RecraftInpaintImage","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RecraftTransformImageWithMaskRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftGenerateImageResponse"}}},"description":"OK"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Inpaint Image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/images/removeBackground":{"post":{"operationId":"RecraftRemoveBackground","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"description":"Image file to process","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"image":{"properties":{"url":{"description":"URL of the processed image","format":"uri","type":"string"}},"type":"object"}},"type":"object"}}},"description":"Background removed successfully"},"400":{"description":"Bad request - Invalid parameters or file"},"401":{"description":"Unauthorized - Invalid or missing API token"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remove background from an image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/images/replaceBackground":{"post":{"operationId":"RecraftReplaceBackground","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RecraftTransformImageWithMaskRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftGenerateImageResponse"}}},"description":"OK"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Replace Background","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/images/vectorize":{"post":{"operationId":"RecraftVectorize","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"description":"Image file to process","format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftImageGenerationResponse"}}},"description":"Background removed successfully"},"400":{"description":"Bad request - Invalid parameters or file"},"401":{"description":"Unauthorized - Invalid or missing API token"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Vectorize an image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/recraft/styles":{"post":{"description":"Upload a set of images to create a style reference.","operationId":"RecraftCreateStyle","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RecraftCreateStyleRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecraftCreateStyleResponse"}}},"description":"OK"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create Style","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/reve/v1/image/create":{"post":{"description":"Forwards image creation requests to the Reve API and returns the generated image.","operationId":"ReveImageCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReveImageCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReveImageResponse"}}},"description":"Successful response from Reve proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate an image using Reve","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/reve/v1/image/edit":{"post":{"description":"Forwards image editing requests to the Reve API with an edit instruction and reference image.","operationId":"ReveImageEdit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReveImageEditRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReveImageResponse"}}},"description":"Successful response from Reve proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Edit an image using Reve","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/reve/v1/image/remix":{"post":{"description":"Forwards image remix requests to the Reve API with reference images and a text prompt.","operationId":"ReveImageRemix","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReveImageRemixRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReveImageResponse"}}},"description":"Successful response from Reve proxy"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Remix images using Reve","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/rodin/api/v2/download":{"post":{"operationId":"RodinDownload","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Rodin3DDownloadRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rodin3DDownloadResponse"}}},"description":"Get the download list for the Rodin 3D Assets."},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get rodin 3D Assets download list.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/rodin/api/v2/rodin":{"post":{"operationId":"RodinGenerate3DAsset","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Rodin3DGenerateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rodin3DGenerateResponse"}}},"description":"3D generate Task submitted successfully."},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create 3D generate Task using Rodin API.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/rodin/api/v2/status":{"post":{"operationId":"RodinCheckStatus","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Rodin3DCheckStatusRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rodin3DCheckStatusResponse"}}},"description":"Get the status of the 3D Assets generation."},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Check Rodin 3D Generate Status.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/runway/image_to_video":{"post":{"description":"Converts an image to a video using Runway's API","operationId":"RunwayImageToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunwayImageToVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunwayImageToVideoResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Runway Image to Video Generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/runway/tasks/{task_id}":{"get":{"description":"Get the status and output of a Runway task","operationId":"RunwayGetTaskStatus","parameters":[{"description":"ID of the task to check","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunwayTaskStatusResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Task not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Runway Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/runway/text_to_image":{"post":{"description":"Generates an image from text using Runway's API","operationId":"RunwayTextToImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunwayTextToImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunwayTextToImageResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Runway Text to Image Generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/runway/video_to_video":{"post":{"description":"Edits a video into a new video using Runway's API","operationId":"RunwayVideoToVideo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunwayVideoToVideoRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunwayVideoToVideoResponse"}}},"description":"Successful response"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Runway Video to Video Generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/seedance/assets":{"get":{"description":"Fans out to BytePlus ListAssets across the caller's completed verification groups, denormalizes the group label into each row, and returns a single flat list. Result is post-filtered by asset_type. Optional group_id narrows to one group. Hard caps: 5 pages × 100 assets per group, 1000 total assets.\n","operationId":"SeedanceListUserAssets","parameters":[{"description":"Asset type to return.","in":"query","name":"asset_type","required":true,"schema":{"enum":["Image","Video"],"type":"string"}},{"description":"Narrow the listing to one group. Caller must own it.","in":"query","name":"group_id","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceListUserAssetsResponse"}}},"description":"Assets owned by the caller"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List the caller's assets across all owned groups","tags":["API Nodes","Released"],"x-excluded":true},"post":{"operationId":"SeedanceCreateAsset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceCreateAssetRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceCreateAssetResponse"}}},"description":"Asset creation accepted (asynchronous — poll seedanceGetAsset)"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/seedance/assets/{asset_id}":{"get":{"operationId":"SeedanceGetAsset","parameters":[{"description":"BytePlus-issued asset id returned by seedanceCreateAsset","in":"path","name":"asset_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceGetAssetResponse"}}},"description":"Asset state"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/seedance/virtual-library/assets":{"post":{"operationId":"SeedanceVirtualLibraryCreateAsset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceVirtualLibraryCreateAssetRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceVirtualLibraryCreateAssetResponse"}}},"description":"Asset creation accepted (asynchronous — poll seedanceGetAsset)"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/seedance/visual-validate/groups":{"get":{"description":"Returns the caller's completed visual-validation groups (real-person H5 verification). Used to power the group selector in client UIs. Excludes virtual-library (AIGC) groups, which are not part of the public API surface.\n","operationId":"SeedanceListVisualValidationGroups","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceListVisualValidationGroupsResponse"}}},"description":"Visual-validation groups owned by the caller"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List the caller's completed visual-validation groups","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/seedance/visual-validate/sessions":{"post":{"operationId":"SeedanceCreateVisualValidateSession","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceCreateVisualValidateSessionRequest"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceCreateVisualValidateSessionResponse"}}},"description":"Verification session created"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/seedance/visual-validate/sessions/{session_id}":{"get":{"operationId":"SeedanceGetVisualValidateSession","parameters":[{"description":"The session id returned by seedanceCreateVisualValidateSession","in":"path","name":"session_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeedanceGetVisualValidateSessionResponse"}}},"description":"Session state"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/sonilo/t2m/generate":{"post":{"description":"Generate music from a text prompt using Sonilo text-to-music AI.\nRequires a prompt describing the desired music and a caller-specified duration.\nReturns a streaming NDJSON response with titles, audio chunks, and completion events.\n","operationId":"SoniloTextToMusicGenerate","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SoniloTextToMusicRequest"}}},"required":true},"responses":{"200":{"content":{"application/x-ndjson":{"schema":{"$ref":"#/components/schemas/SoniloStreamEvent"}}},"description":"OK - Streaming NDJSON response with audio generation events"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Unauthorized - Invalid or missing API key"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Payment Required - Insufficient funds"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Unprocessable Entity - Validation error"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Too Many Requests - Rate limited. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Bad Gateway - Upstream generation error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate music from text prompt","tags":["Sonilo","Proxy"]}},"/proxy/sonilo/v2m/generate":{"post":{"description":"Generate music from a video using Sonilo video-to-music AI.\nAccepts either a video file upload or a video URL, with an optional prompt.\nReturns a streaming NDJSON response with one or more parallel audio streams\n(titles, audio chunks, and completion events).\nMax video duration: 6 minutes. Max upload size: 300MB.\n","operationId":"SoniloVideoToMusicGenerate","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SoniloVideoToMusicRequest"}}},"required":true},"responses":{"200":{"content":{"application/x-ndjson":{"schema":{"$ref":"#/components/schemas/SoniloStreamEvent"}}},"description":"OK - Streaming NDJSON response with audio generation events"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Unauthorized - Invalid or missing API key"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Payment Required - Insufficient funds"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Unprocessable Entity - Validation error"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Too Many Requests - Rate limited. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoniloErrorResponse"}}},"description":"Bad Gateway - Upstream generation error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate music from video","tags":["Sonilo","Proxy"]}},"/proxy/synclabs/v2/generate":{"post":{"description":"Create a lip sync generation using the Sync Labs (sync.so) generate API.\nOnly the sync-3 model is supported. Provide exactly one visual input\n(video or image) and one audio or text input, each by url or assetId.\nGeneration is asynchronous; poll the get-generation endpoint until\nstatus reaches a terminal state.\n","operationId":"SyncLabsGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncLabsGenerateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncLabsGeneration"}}},"description":"Generation created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"422":{"description":"Unprocessable Entity - submit-time validation failed"},"429":{"description":"Too Many Requests - generation concurrency limit reached. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create a Sync Labs lipsync generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/synclabs/v2/generate/{id}":{"get":{"description":"Retrieve the status and result of a Sync Labs (sync.so) lipsync generation.\nPoll this endpoint until status is COMPLETED, then read outputUrl.\n","operationId":"SyncLabsGetGeneration","parameters":[{"description":"The generation id returned by the create endpoint","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncLabsGeneration"}}},"description":"Generation status and result"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"404":{"description":"Generation not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get a Sync Labs lipsync generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-part":{"post":{"description":"Submit a component identification and generation task using Tencent Hunyuan.\nAutomatically performs component splitting based on the model structure after inputting a 3D model file.\nRecommends inputting 3D models generated by AIGC. File size not greater than 100MB, face count not greater than 30,000. FBX format only.\n\nThe returned JobId can be used with the query endpoint to check task status.\n","operationId":"TencentHunyuan3DPartSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DUVRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DUVResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit Tencent Hunyuan 3D Part (Component Splitting) Task","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-part/query":{"post":{"description":"Query the status and result of a previously submitted 3D part (component splitting) task.\n\nPoll this endpoint until the task status indicates completion.\n","operationId":"TencentHunyuan3DPartQuery","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryResponse"}}},"description":"Task status retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query Tencent Hunyuan 3D Part Task Status","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-pro":{"post":{"description":"Submit a task to generate 3D content using Tencent HunYuan Large Model.\nSupports text-to-3D and image-to-3D generation.\n\nThis API provides 3 concurrent tasks by default. A new task can be processed\nonly after the previous one is completed.\n\nThe returned JobId can be used with the query endpoint to check task status.\n","operationId":"TencentHunyuan3DProSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DProRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DProResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit Tencent Hunyuan 3D Pro Generation Task","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-pro/query":{"post":{"description":"Query the status and result of a previously submitted 3D generation task.\n\nPoll this endpoint until the task status indicates completion.\n","operationId":"TencentHunyuan3DProQuery","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryResponse"}}},"description":"Task status retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query Tencent Hunyuan 3D Pro Task Status","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-smart-topology":{"post":{"description":"Submit a 3D smart topology (retopology/polygon reduction) task using Tencent Hunyuan.\nTakes an input 3D model and performs intelligent topology optimization.\nSupported input formats: GLB, OBJ. File size max 200MB.\n\nThe returned JobId can be used with the query endpoint to check task status.\n","operationId":"TencentHunyuan3DSmartTopologySubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DSmartTopologyRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DUVResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit Tencent Hunyuan 3D Smart Topology Task","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-smart-topology/query":{"post":{"description":"Query the status and result of a previously submitted 3D smart topology task.\n\nPoll this endpoint until the task status indicates completion.\n","operationId":"TencentHunyuan3DSmartTopologyQuery","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryResponse"}}},"description":"Task status retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query Tencent Hunyuan 3D Smart Topology Task Status","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-texture-edit":{"post":{"description":"Submit a 3D model texture redrawing task using Tencent Hunyuan.\nAfter inputting the 3D model, perform 3D model texture redrawing based on semantics or images.\nSupported format: FBX. 3D model limit: less than 100000 faces.\nEither Image or Prompt is required; they cannot coexist. EnablePBR only supports enabling when using Prompt.\n\nThe returned JobId can be used with the query endpoint to check task status.\n","operationId":"TencentHunyuan3DTextureEditSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DTextureEditRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DUVResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit Tencent Hunyuan 3D Texture Edit Task","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-texture-edit/query":{"post":{"description":"Query the status and result of a previously submitted 3D texture edit task.\n\nPoll this endpoint until the task status indicates completion.\n","operationId":"TencentHunyuan3DTextureEditQuery","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryResponse"}}},"description":"Task status retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query Tencent Hunyuan 3D Texture Edit Task Status","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-uv":{"post":{"description":"Submit a UV unwrapping task for a 3D model using Tencent Hunyuan.\nAfter inputting the model, UV unwrapping can be performed based on the\nmodel texture to output the corresponding UV map.\n\nThe returned JobId can be used with the query endpoint to check task status.\n","operationId":"TencentHunyuan3DUVSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DUVRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DUVResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit Tencent Hunyuan 3D UV Unfolding Task","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/tencent/hunyuan/3d-uv/query":{"post":{"description":"Query the status and result of a previously submitted UV unwrapping task.\n\nPoll this endpoint until the task status indicates completion.\n","operationId":"TencentHunyuan3DUVQuery","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentHunyuan3DQueryResponse"}}},"description":"Task status retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TencentErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query Tencent Hunyuan 3D UV Unfolding Task Status","tags":["API Nodes","Tencent"],"x-excluded":true}},"/proxy/topaz/image/v1/download/{process_id}":{"get":{"operationId":"TopazDownloadResult","parameters":[{"description":"The process ID returned from the enhance-gen request","in":"path","name":"process_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazDownloadResponse"}}},"description":"Presigned download URL for the processed image"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/topaz/image/v1/enhance-gen/async":{"post":{"operationId":"TopazEnhanceGenAsync","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TopazEnhanceGenRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazEnhanceGenResponse"}}},"description":"Image processing request has been successfully created"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/topaz/image/v1/status/{process_id}":{"get":{"operationId":"TopazGetStatus","parameters":[{"description":"The process ID returned from the enhance-gen request","in":"path","name":"process_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazStatusResponse"}}},"description":"Status retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/topaz/video/":{"post":{"operationId":"TopazVideoCreate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazVideoCreateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazVideoCreateResponse"}}},"description":"Video enhancement request created successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/topaz/video/{request_id}/accept":{"patch":{"operationId":"TopazVideoAccept","parameters":[{"description":"The request ID returned from the video create request","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazVideoAcceptResponse"}}},"description":"Video request accepted successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/topaz/video/{request_id}/complete-upload":{"patch":{"description":"Send metadata of the multi-part uploads to complete the upload and begin processing the video.\n\nOptionally include the MD5 hash of the source video file to validate successful upload before processing.\n","operationId":"TopazVideoCompleteUpload","parameters":[{"description":"The request ID returned from the video create request","in":"path","name":"request_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazVideoCompleteUploadRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazVideoCompleteUploadResponse"}}},"description":"Video upload completed successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Complete Video Upload","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/topaz/video/{request_id}/status":{"get":{"operationId":"TopazVideoGetStatus","parameters":[{"description":"The request ID returned from the video create request","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopazVideoStatusResponse"}}},"description":"Video status retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/tripo/v2/openapi/import":{"post":{"description":"Composite endpoint for Tripo model import (PN-328). The client first uploads the\nmodel file to ComfyUI API storage (POST /customers/storage) and then calls this\nendpoint with the resulting download URL. The backend performs the full Tripo\nimport flow server-side: downloads the file from storage, obtains short-lived STS\nupload credentials from Tripo, uploads the file to Tripo's object storage (SigV4),\nand creates an import_model task referencing the uploaded object. Returns Tripo's\ncreate-task response; poll /proxy/tripo/v2/openapi/task/{task_id} for completion.\nThe resulting task id is usable with Tripo post-processing tasks (texture_model,\nanimate_rig, convert_model, ...).\n\nThis is a synthetic comfy-api route (Tripo has no single-call equivalent); it\nexists so that Tripo's temporary storage credentials never leave the backend and\nno model binary ever travels inside this request.\n\nThe url host must be ComfyUI API storage (storage.googleapis.com).\nSupported formats: glb, fbx, obj, stl. Maximum file size: 150MB.\n","operationId":"TripoImportModel","requestBody":{"content":{"application/json":{"schema":{"properties":{"format":{"description":"File format (\"glb\", \"fbx\", \"obj\", \"stl\"). Optional; derived from the URL path extension when omitted.","type":"string"},"url":{"description":"Download URL of the model file previously uploaded to ComfyUI API storage.","type":"string"}},"required":["url"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoSuccessTask"}}},"description":"Import task created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Unauthorized access to requested resource"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"File exceeds the 150MB limit"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Internal server error"},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Upstream upload or task creation failed"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Import an External 3D Model into Tripo","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/tripo/v2/openapi/task":{"post":{"operationId":"TripoCreateTask","requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"properties":{"auto_size":{"default":false,"type":"boolean"},"face_limit":{"type":"integer"},"geometry_quality":{"$ref":"#/components/schemas/TripoGeometryQuality"},"model_seed":{"type":"integer"},"model_version":{"$ref":"#/components/schemas/TripoModelVersion"},"negative_prompt":{"maxLength":1024,"type":"string"},"pbr":{"default":true,"type":"boolean"},"prompt":{"maxLength":1024,"type":"string"},"quad":{"default":false,"type":"boolean"},"style":{"$ref":"#/components/schemas/TripoModelStyle"},"text_seed":{"type":"integer"},"texture":{"default":true,"type":"boolean"},"texture_quality":{"$ref":"#/components/schemas/TripoTextureQuality"},"texture_seed":{"type":"integer"},"type":{"$ref":"#/components/schemas/TripoTextToModel"}},"required":["type","prompt"],"type":"object"},{"properties":{"auto_size":{"default":false,"type":"boolean"},"face_limit":{"type":"integer"},"file":{"properties":{"file_token":{"type":"string"},"type":{"type":"string"}},"required":["type","file_token"],"type":"object"},"geometry_quality":{"$ref":"#/components/schemas/TripoGeometryQuality"},"model_seed":{"type":"integer"},"model_version":{"$ref":"#/components/schemas/TripoModelVersion"},"orientation":{"$ref":"#/components/schemas/TripoOrientation"},"pbr":{"default":true,"type":"boolean"},"quad":{"default":false,"type":"boolean"},"style":{"$ref":"#/components/schemas/TripoModelStyle"},"texture":{"default":true,"type":"boolean"},"texture_alignment":{"$ref":"#/components/schemas/TripoTextureAlignment"},"texture_quality":{"$ref":"#/components/schemas/TripoTextureQuality"},"texture_seed":{"type":"integer"},"type":{"$ref":"#/components/schemas/TripoImageToModel"}},"required":["type","file"],"type":"object"},{"properties":{"auto_size":{"default":false,"type":"boolean"},"face_limit":{"type":"integer"},"files":{"items":{"properties":{"file_token":{"type":"string"},"type":{"type":"string"}},"required":["type","file_token"],"type":"object"},"type":"array"},"geometry_quality":{"$ref":"#/components/schemas/TripoGeometryQuality"},"mode":{"$ref":"#/components/schemas/TripoMultiviewMode"},"model_seed":{"type":"integer"},"model_version":{"$ref":"#/components/schemas/TripoModelVersion"},"orientation":{"$ref":"#/components/schemas/TripoOrientation"},"orthographic_projection":{"default":false,"type":"boolean"},"pbr":{"default":true,"type":"boolean"},"quad":{"default":false,"type":"boolean"},"texture":{"default":true,"type":"boolean"},"texture_alignment":{"$ref":"#/components/schemas/TripoTextureAlignment"},"texture_quality":{"$ref":"#/components/schemas/TripoTextureQuality"},"texture_seed":{"type":"integer"},"type":{"$ref":"#/components/schemas/TripoMultiviewToModel"}},"required":["type","files"],"type":"object"},{"properties":{"model_seed":{"type":"integer"},"original_model_task_id":{"type":"string"},"pbr":{"default":true,"type":"boolean"},"texture":{"default":true,"type":"boolean"},"texture_alignment":{"$ref":"#/components/schemas/TripoTextureAlignment"},"texture_quality":{"$ref":"#/components/schemas/TripoTextureQuality"},"texture_seed":{"type":"integer"},"type":{"$ref":"#/components/schemas/TripoTypeTextureModel"}},"required":["type","original_model_task_id"],"type":"object"},{"properties":{"draft_model_task_id":{"type":"string"},"type":{"$ref":"#/components/schemas/TripoTypeRefineModel"}},"required":["type","draft_model_task_id"],"type":"object"},{"properties":{"original_model_task_id":{"type":"string"},"type":{"$ref":"#/components/schemas/TripoTypeAnimatePrerigcheck"}},"required":["type","original_model_task_id"],"type":"object"},{"properties":{"original_model_task_id":{"type":"string"},"out_format":{"$ref":"#/components/schemas/TripoStandardFormat"},"spec":{"$ref":"#/components/schemas/TripoSpec"},"topology":{"$ref":"#/components/schemas/TripoTopology"},"type":{"$ref":"#/components/schemas/TripoTypeAnimateRig"}},"required":["type","original_model_task_id"],"type":"object"},{"properties":{"animation":{"$ref":"#/components/schemas/TripoAnimation"},"bake_animation":{"default":true,"type":"boolean"},"original_model_task_id":{"type":"string"},"out_format":{"$ref":"#/components/schemas/TripoStandardFormat"},"type":{"$ref":"#/components/schemas/TripoTypeAnimateRetarget"}},"required":["type","original_model_task_id","animation"],"type":"object"},{"properties":{"block_size":{"default":80,"type":"integer"},"original_model_task_id":{"type":"string"},"style":{"$ref":"#/components/schemas/TripoStylizeOptions"},"type":{"$ref":"#/components/schemas/TripoTypeStylizeModel"}},"required":["type","style","original_model_task_id"],"type":"object"},{"properties":{"face_limit":{"default":10000,"type":"integer"},"flatten_bottom":{"default":false,"type":"boolean"},"flatten_bottom_threshold":{"default":0.01,"type":"number"},"force_symmetry":{"default":false,"type":"boolean"},"format":{"$ref":"#/components/schemas/TripoConvertFormat"},"original_model_task_id":{"type":"string"},"pivot_to_center_bottom":{"default":false,"type":"boolean"},"quad":{"default":false,"type":"boolean"},"texture_format":{"$ref":"#/components/schemas/TripoTextureFormat"},"texture_size":{"default":4096,"type":"integer"},"type":{"$ref":"#/components/schemas/TripoTypeConvertModel"}},"required":["type","format","original_model_task_id"],"type":"object"}]}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoSuccessTask"}}},"description":"Request successful"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Create 3D Generation Task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/tripo/v2/openapi/task/{task_id}":{"get":{"operationId":"TripoGetTask","parameters":[{"in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"code":{"$ref":"#/components/schemas/TripoResponseSuccessCode"},"data":{"$ref":"#/components/schemas/TripoTask"}},"required":["code","data"],"type":"object"}}},"description":"Request successful"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Task Status","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/tripo/v2/openapi/upload":{"post":{"operationId":"TripoUploadFile","requestBody":{"content":{"multipart/form-data":{"encoding":{"profileImage":{"contentType":"image/png, image/jpeg"}},"schema":{"properties":{"file":{"format":"binary","type":"string"}},"required":["file"],"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"code":{"$ref":"#/components/schemas/TripoResponseSuccessCode"},"data":{"properties":{"image_token":{"type":"string"}},"required":["image_token"],"type":"object"}},"required":["code","data"],"type":"object"}}},"description":"Request successful"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Upload File for 3D Generation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/tripo/v2/openapi/user/balance":{"get":{"operationId":"TripoGetBalance","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"code":{"$ref":"#/components/schemas/TripoResponseSuccessCode"},"data":{"$ref":"#/components/schemas/TripoBalance"}},"required":["code","data"],"type":"object"}}},"description":"Request successful"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Invalid request parameters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Authentication failed"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Unauthorized access to requested resource"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Resource not found"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Account exception or Rate limit exceeded. Also answered when the caller's in-flight committed partner spend has reached its ceiling; that refusal says so in its message and carries the `X-Committed-Spend-Limit`, `X-Committed-Spend-Current` and `X-Committed-Spend-Remaining` headers (USD cents)."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Service temporarily unavailable"},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TripoErrorResponse"}}},"description":"Server timeout"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Query Account Balance","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/veo/generate":{"post":{"operationId":"VeoGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Veo2GenVidRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Veo2GenVidResponse"}}},"description":"Video generation successful"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"500":{"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate a video from a text prompt and optional image. Deprecated. Use /proxy/veo/{modelId}/generate instead.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/veo/poll":{"post":{"operationId":"VeoPoll","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Veo2GenVidPollRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Veo2GenVidPollResponse"}}},"description":"Operation status and result"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Operation not found"},"500":{"description":"Internal error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Poll the status of a Veo prediction operation. Deprecated. Use /proxy/veo/{modelId}/poll instead.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/veo/{modelId}/generate":{"post":{"operationId":"VeoGenerateNew","parameters":[{"description":"The Veo model ID to use for generation","in":"path","name":"modelId","required":true,"schema":{"enum":["veo-2.0-generate-001","veo-3.0-generate-001","veo-3.0-fast-generate-001","veo-3.1-generate-001","veo-3.1-fast-generate-001","veo-3.1-lite-generate-001"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VeoGenVidRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VeoGenVidResponse"}}},"description":"Video generation successful"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"500":{"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate a video from a text prompt and optional image","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/veo/{modelId}/poll":{"post":{"operationId":"VeoPollNew","parameters":[{"description":"The Veo model ID","in":"path","name":"modelId","required":true,"schema":{"enum":["veo-2.0-generate-001","veo-3.0-generate-001","veo-3.0-fast-generate-001","veo-3.1-generate-001","veo-3.1-fast-generate-001","veo-3.1-lite-generate-001"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VeoGenVidPollRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VeoGenVidPollResponse"}}},"description":"Operation status and result"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Operation not found"},"500":{"description":"Internal error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Poll the status of a Veo prediction operation","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/vertexai/gemini/{model}":{"post":{"operationId":"GeminiGenerateContent","parameters":[{"description":"Full resource name of the model.","in":"path","name":"model","required":true,"schema":{"enum":["gemini-2.5-pro-preview-05-06","gemini-2.5-flash-preview-04-17","gemini-2.5-flash-image-preview","gemini-2.5-flash-image","gemini-2.5-flash","gemini-2.5-pro","gemini-3-pro-preview","gemini-3-pro-image-preview","gemini-3-pro-image","gemini-3.1-flash-image-preview","gemini-3.1-flash-image","gemini-3.1-pro-preview","gemini-3.1-flash-lite-preview","gemini-3.1-flash-lite","gemini-3.1-flash-lite-image","gemini-3.5-flash","gemini-3.7-flash"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiGenerateContentRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiGenerateContentResponse"}}},"description":"Generated content response."},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"500":{"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate content using a specified model.","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/vertexai/imagen/{model}":{"parameters":[{"description":"image generation model","in":"path","name":"model","required":true,"schema":{"enum":["imagen-3.0-generate-002","imagen-3.0-generate-001","imagen-3.0-fast-generate-001","imagegeneration@006","imagegeneration@005","imagegeneration@002"],"type":"string"}}],"post":{"operationId":"ImagenGenerateImages","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagenGenerateImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagenGenerateImageResponse"}}},"description":"Successful image generation"},"4XX":{"description":"Client error"},"5XX":{"description":"Server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate images from a text prompt","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/vidu/extend":{"post":{"operationId":"ViduExtend","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduExtendRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduExtendReply"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"]}},"/proxy/vidu/img2video":{"post":{"operationId":"ViduImg2Video","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskReply"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"]}},"/proxy/vidu/multiframe":{"post":{"operationId":"ViduMultiframe","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduMultiframeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduMultiframeReply"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"]}},"/proxy/vidu/reference2video":{"post":{"operationId":"ViduReference2Video","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskReply"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"]}},"/proxy/vidu/start-end2video":{"post":{"operationId":"ViduStartEnd2Video","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskReply"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"]}},"/proxy/vidu/tasks/{id}/creations":{"get":{"operationId":"ViduGetCreations","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduGetCreationsReply"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"]}},"/proxy/vidu/text2video":{"post":{"operationId":"ViduText2Video","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViduTaskReply"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"]}},"/proxy/wan/api/v1/services/aigc/image2image/image-synthesis":{"post":{"operationId":"WanImage2ImageGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WanImage2ImageGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WanImage2ImageGenerationResponse"}}},"description":"Image-to-image generation task created successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/wan/api/v1/services/aigc/text2image/image-synthesis":{"post":{"operationId":"WanImageGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WanImageGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WanImageGenerationResponse"}}},"description":"Image generation task created successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/wan/api/v1/services/aigc/video-generation/video-synthesis":{"post":{"operationId":"WanVideoGeneration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WanVideoGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WanVideoGenerationResponse"}}},"description":"Video generation task created successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/wan/api/v1/tasks/{task_id}":{"get":{"operationId":"WanTaskQueryProxy","parameters":[{"description":"The ID of the generation task to query","in":"path","name":"task_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WanTaskQueryResponse"}}},"description":"Generation task information retrieved successfully"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Error 4xx/5xx"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/wavespeed/api/v3/predictions/{prediction_id}/result":{"get":{"description":"Retrieve the status and result of a FlashVSR video upscaling task.\n\nPoll this endpoint until status is \"completed\" or \"failed\".\n\nStatus values:\n- `created` - Task has been created\n- `processing` - Task is being processed\n- `completed` - Task completed successfully, outputs array contains result URLs\n- `failed` - Task failed, check error field for details\n","operationId":"WavespeedFlashVSRGetResult","parameters":[{"description":"The unique identifier of the prediction/task","in":"path","name":"prediction_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WavespeedTaskResultResponse"}}},"description":"Task result retrieved successfully"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Task not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get FlashVSR task result","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/wavespeed/api/v3/wavespeed-ai/flashvsr":{"post":{"description":"Submit a video for upscaling using WavespeedAI's FlashVSR model.\nFlashVSR is a fast, high-quality video upscaler that boosts resolution and restores clarity\nfor low-resolution or blurry footage.\n\nSupported target resolutions: 720p, 1080p, 2k, 4k\n\nMax clip length: up to 10 minutes\nProcessing speed: approximately 3-20 seconds of wall time to process 1 second of video\n\nReturns a task ID that can be used to poll for the result.\n","operationId":"WavespeedFlashVSRSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WavespeedFlashVSRRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WavespeedTaskResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a FlashVSR video upscaling task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/wavespeed/api/v3/wavespeed-ai/seedvr2/image":{"post":{"description":"Upscale an image using WavespeedAI's SeedVR2 Image Upscaler.\nSeedVR2 boosts image resolution and quality, upscaling photos to 2K, 4K, or 8K\nfor sharp, detailed results.\n","operationId":"WavespeedSeedVR2ImageSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WavespeedSeedVR2ImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WavespeedTaskResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit a SeedVR2 image upscaling task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/wavespeed/api/v3/wavespeed-ai/ultimate-image-upscaler":{"post":{"description":"Upscale an image using WavespeedAI's Ultimate Image Upscaler.\nThe most advanced AI enhancer that reimagines fine detail while upscaling images to 2K, 4K, or 8K.\n","operationId":"WavespeedUltimateImageUpscalerSubmit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WavespeedSeedVR2ImageRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WavespeedTaskResponse"}}},"description":"Task submitted successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Submit an Ultimate Image Upscaler task","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/xai/v1/images/edits":{"post":{"description":"Modify an existing image based on a text prompt using the Grok Imagine API.","operationId":"XaiImageEdit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIImageEditRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIImageGenerationResponse"}}},"description":"Image edited successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Edit images using xAI Grok Imagine","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/xai/v1/images/generations":{"post":{"description":"Generate one or more images from a text prompt using the Grok Imagine API.","operationId":"XaiImageGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIImageGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIImageGenerationResponse"}}},"description":"Images generated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate images using xAI Grok Imagine","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/xai/v1/videos/edits":{"post":{"description":"Edit an existing video based on a text prompt (video-to-video editing).\nVideo editing is asynchronous. Returns a request_id to poll for the completed video.\nInput video limit is 8 seconds. Audio will not be modified.\n","operationId":"XaiVideoEdit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoEditRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoAsyncResponse"}}},"description":"Video editing job created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Edit videos using xAI Grok Imagine","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/xai/v1/videos/extensions":{"post":{"description":"Generate a seamless continuation of an existing video. You provide a source video and a text prompt\ndescribing what should happen next. The API produces a new video that extends naturally from the end\nof the input video.\nVideo extension is asynchronous. Returns a request_id to poll for the completed video.\n","operationId":"XaiVideoExtension","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoExtensionRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoAsyncResponse"}}},"description":"Video extension job created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Extend videos using xAI Grok Imagine","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/xai/v1/videos/generations":{"post":{"description":"Generate a video from a text prompt (text-to-video), from an image with optional text (image-to-video),\nor from reference images with text (reference-to-video). The mode is determined by which optional fields\nare provided. Video generation is asynchronous. Returns a request_id to poll for the completed video.\n\nConflict rules: image + reference_images, video + reference_images, and image + video cannot be combined.\n","operationId":"XaiVideoGenerate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoGenerationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoAsyncResponse"}}},"description":"Video generation job created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Generate videos using xAI Grok Imagine","tags":["API Nodes","Released"],"x-excluded":true}},"/proxy/xai/v1/videos/{request_id}":{"get":{"description":"Retrieve the result of a video generation or editing request.\nPoll this endpoint until the response includes a video object with the completed video URL.\n","operationId":"XaiVideoGetResult","parameters":[{"description":"The request ID returned by the video generation or editing endpoint","in":"path","name":"request_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoResultResponse"}}},"description":"Video generation result"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XAIVideoResultResponse"}}},"description":"Video generation still pending"},"401":{"description":"Unauthorized"},"402":{"description":"Payment Required"},"404":{"description":"Request ID not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get xAI video generation result","tags":["API Nodes","Released"],"x-excluded":true}},"/publishers":{"get":{"operationId":"ListPublishers","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Publisher"},"type":"array"}}},"description":"A list of publishers"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve all publishers","tags":["Registry"]},"post":{"operationId":"CreatePublisher","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Publisher"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Publisher"}}},"description":"Publisher created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Create a new publisher","tags":["Registry"]}},"/publishers/validate":{"get":{"description":"Checks if the publisher username is already taken.","operationId":"ValidatePublisher","parameters":[{"description":"The publisher username to validate.","in":"query","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"isAvailable":{"description":"True if the username is available, false otherwise.","type":"boolean"}},"type":"object"}}},"description":"Username validation result"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid input, such as missing username in the query."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Validate if a publisher username is available","tags":["Registry"]}},"/publishers/{publisherId}":{"delete":{"operationId":"DeletePublisher","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Publisher deleted successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Publisher not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Delete a publisher","tags":["Registry"]},"get":{"operationId":"GetPublisher","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Publisher"}}},"description":"Publisher retrieved successfully"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Publisher not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve a publisher by ID","tags":["Registry"]},"put":{"operationId":"UpdatePublisher","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Publisher"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Publisher"}}},"description":"Publisher updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"401":{"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Publisher not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Update a publisher","tags":["Registry"]}},"/publishers/{publisherId}/ban":{"post":{"operationId":"BanPublisher","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Publisher Banned Successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Publisher not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Ban a publisher","tags":["Registry"],"x-excluded":true}},"/publishers/{publisherId}/nodes":{"get":{"description":"Returns at most the first 10 nodes for the publisher. This operation takes no pagination parameters and its response carries no total or page metadata, so a truncated result is indistinguishable from a complete one — including when include_banned=false filters the list. Use listNodesForPublisherV2 for a complete, paginated listing.","operationId":"ListNodesForPublisher","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"description":"Whether to include banned nodes in the results. Defaults to including them; pass false to exclude.","in":"query","name":"include_banned","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Node"},"type":"array"}}},"description":"List of all nodes"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Retrieve all nodes","tags":["Registry"]},"post":{"operationId":"CreateNode","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"description":"Node created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Create a new custom node","tags":["Registry"]}},"/publishers/{publisherId}/nodes/v2":{"get":{"operationId":"ListNodesForPublisherV2","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"description":"Whether to include banned nodes in the results. Defaults to including them; pass false to exclude.","in":"query","name":"include_banned","schema":{"type":"boolean"}},{"description":"Page number of the nodes list","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"Number of nodes to return per page. Values above the declared maximum are outside the contract, but this service does not reject them: it serves the maximum instead, and the page size actually served is echoed back as limit (and drives totalPages), so a clamp is always detectable by the caller. Treat the maximum as the real page stride — a client that asks for more and assumes it received more will miss rows. 0 and negative values are also accepted and select the default, which is why no minimum is declared: sub-1 is meaningful here, not invalid.","in":"query","name":"limit","schema":{"default":10,"maximum":100,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"limit":{"description":"Maximum number of nodes per page","type":"integer"},"nodes":{"items":{"$ref":"#/components/schemas/Node"},"type":"array"},"page":{"description":"Current page number","type":"integer"},"total":{"description":"Total number of nodes available","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"}},"type":"object"}}},"description":"List of all nodes"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Retrieve all nodes","tags":["Registry"]}},"/publishers/{publisherId}/nodes/{nodeId}":{"delete":{"operationId":"DeleteNode","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Node deleted successfully"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Node not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Delete a specific node","tags":["Registry"]},"put":{"operationId":"UpdateNode","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}},"description":"Node updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Node not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Update a specific node","tags":["Registry"]}},"/publishers/{publisherId}/nodes/{nodeId}/ban":{"post":{"operationId":"BanPublisherNode","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Node Banned Successfully"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Publisher or Node not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Ban a publisher's Node","tags":["Registry"],"x-excluded":true}},"/publishers/{publisherId}/nodes/{nodeId}/claim-my-node":{"post":{"description":"This endpoint allows a publisher to claim an unclaimed node that they own the repo, which is identified by the nodeId. The unclaimed node's repository must be owned by the authenticated user.\n","operationId":"ClaimMyNode","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimMyNodeRequest"}}},"required":true},"responses":{"204":{"description":"Node claimed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden - various authorization and permission issues\nIncludes:\n- The authenticated user does not have permission to claim the node\n- The node is already claimed by another publisher\n- The GH_TOKEN is invalid\n- The repository is not owned by the authenticated GitHub user\n"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Too many requests - GitHub API rate limit exceeded"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Service unavailable - GitHub API is currently unavailable"}},"security":[{"BearerAuth":[]}],"summary":"Claim nodeId into publisherId for the authenticated publisher","tags":["Registry"]}},"/publishers/{publisherId}/nodes/{nodeId}/permissions":{"get":{"operationId":"GetPermissionOnPublisherNodes","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"canEdit":{"type":"boolean"}},"type":"object"}}},"description":"A list of permissions"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve permissions the user has for a given publisher","tags":["Registry"]}},"/publishers/{publisherId}/nodes/{nodeId}/versions":{"post":{"operationId":"PublishNodeVersion","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"node":{"$ref":"#/components/schemas/Node"},"node_version":{"$ref":"#/components/schemas/NodeVersion"},"personal_access_token":{"type":"string"}},"required":["node","node_version","personal_access_token"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"node_version":{"$ref":"#/components/schemas/NodeVersion"},"signedUrl":{"description":"The signed URL to upload the node version token.","type":"string"}},"type":"object"}}},"description":"New version published successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Publish a new version of a node","tags":["Registry"]}},"/publishers/{publisherId}/nodes/{nodeId}/versions/{versionId}":{"delete":{"operationId":"DeleteNodeVersion","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"in":"path","name":"versionId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Version unpublished (deleted) successfully"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Version does not belong to the publisher"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Version not found"}},"security":[{"BearerAuth":[]}],"summary":"Unpublish (delete) a specific version of a node","tags":["Registry"]},"put":{"description":"Update only the changelog and deprecated status of a specific version of a node.","operationId":"UpdateNodeVersion","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"nodeId","required":true,"schema":{"type":"string"}},{"in":"path","name":"versionId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeVersionUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeVersion"}}},"description":"Version updated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Version not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Update changelog and deprecation status of a node version","tags":["Registry"]}},"/publishers/{publisherId}/permissions":{"get":{"operationId":"GetPermissionOnPublisher","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"canEdit":{"type":"boolean"}},"type":"object"}}},"description":"A list of permissions"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve permissions the user has for a given publisher","tags":["Registry"]}},"/publishers/{publisherId}/tokens":{"get":{"operationId":"ListPersonalAccessTokens","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PersonalAccessToken"},"type":"array"}}},"description":"List of all personal access tokens"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No tokens found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Retrieve all personal access tokens for a publisher","tags":["Registry"],"x-excluded":true},"post":{"operationId":"CreatePersonalAccessToken","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalAccessToken"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"token":{"description":"The newly created personal access token.","type":"string"}},"type":"object"}}},"description":"Token created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Create a new personal access token","tags":["Registry"]}},"/publishers/{publisherId}/tokens/{tokenId}":{"delete":{"operationId":"DeletePersonalAccessToken","parameters":[{"in":"path","name":"publisherId","required":true,"schema":{"type":"string"}},{"in":"path","name":"tokenId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Token deleted successfully"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Token not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"security":[{"BearerAuth":[]}],"summary":"Delete a specific personal access token","tags":["Registry"]}},"/releases":{"get":{"description":"Fetch release notes from Strapi with caching","operationId":"GetReleaseNotes","parameters":[{"description":"The project to get release notes for","in":"query","name":"project","required":true,"schema":{"enum":["comfyui","comfyui_frontend","desktop","cloud"],"type":"string"}},{"description":"The current version to filter release notes","in":"query","name":"current_version","schema":{"type":"string"}},{"description":"The locale for the release notes","in":"query","name":"locale","schema":{"default":"en","enum":["en","es","fr","ja","ko","ru","zh"],"type":"string"}},{"description":"The platform requesting the release notes","in":"query","name":"form_factor","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ReleaseNote"},"type":"array"}}},"description":"Release notes retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Get release notes","tags":["Releases"]},"post":{"description":"Webhook endpoint to process Github release events and generate release notes","operationId":"ProcessReleaseWebhook","parameters":[{"description":"The name of the event that triggered the delivery","in":"header","name":"X-GitHub-Event","required":true,"schema":{"enum":["release"],"type":"string"}},{"description":"A globally unique identifier (GUID) to identify the event","in":"header","name":"X-GitHub-Delivery","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"The unique identifier of the webhook","in":"header","name":"X-GitHub-Hook-ID","required":true,"schema":{"type":"string"}},{"description":"HMAC hex digest of the request body using SHA-256 hash function","in":"header","name":"X-Hub-Signature-256","schema":{"type":"string"}},{"description":"The type of resource where the webhook was created","in":"header","name":"X-GitHub-Hook-Installation-Target-Type","schema":{"type":"string"}},{"description":"The unique identifier of the resource where the webhook was created","in":"header","name":"X-GitHub-Hook-Installation-Target-ID","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubReleaseWebhook"}}},"required":true},"responses":{"200":{"description":"Webhook processed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Validation failed or endpoint has been spammed"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Process Github release webhook","tags":["Releases"],"x-excluded":true}},"/security-scan":{"get":{"description":"Pull all pending node versions and conduct security scans.","operationId":"SecurityScan","parameters":[{"in":"query","name":"minAge","schema":{"type":"string","x-go-type":"time.Duration"}},{"in":"query","name":"minSecurityScanAge","schema":{"type":"string","x-go-type":"time.Duration"}},{"in":"query","name":"maxNodes","schema":{"type":"integer"}}],"responses":{"200":{"description":"Scan completed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data."},"401":{"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Security Scan","tags":["Registry"],"x-excluded":true}},"/seedance/complete":{"get":{"description":"Browser-facing landing page that BytePlus redirects the end user to after H5 liveness is complete. Logs the callback parameters and returns plain HTML the user sees in their browser. Client polls seedanceGetVisualValidateSession to observe the actual result.\n","operationId":"SeedanceVisualValidateCallback","parameters":[{"in":"query","name":"bytedToken","required":true,"schema":{"type":"string"}},{"in":"query","name":"resultCode","required":true,"schema":{"type":"string"}},{"in":"query","name":"algorithmBaseRespCode","schema":{"type":"string"}},{"in":"query","name":"reqMeasureInfoValue","schema":{"type":"string"}},{"in":"query","name":"verify_type","schema":{"type":"string"}}],"responses":{"200":{"content":{"text/html":{"schema":{"type":"string"}}},"description":"Landing page shown to the user's browser"}},"security":[],"summary":"BytePlus real-person verification callback landing page","tags":["API Nodes","Released"],"x-excluded":true}},"/upload-artifact":{"post":{"description":"Receive artifacts (output files) from the ComfyUI GitHub Action","operationId":"PostUploadArtifact","requestBody":{"content":{"application/json":{"schema":{"properties":{"author":{"description":"The author of the commit","type":"string"},"avg_vram":{"description":"The average amount of VRAM used in the run.","type":"integer"},"branch_name":{"type":"string"},"bucket_name":{"description":"The name of the bucket where the output files are stored","type":"string"},"comfy_logs_gcs_path":{"description":"The path to ComfyUI logs. eg. gs://bucket-name/logs","type":"string"},"comfy_run_flags":{"description":"The flags used in the comfy run","type":"string"},"commit_hash":{"type":"string"},"commit_message":{"description":"The commit message","type":"string"},"commit_time":{"description":"The time of the commit in the format of \"YYYY-MM-DDTHH:MM:SSZ\" (2016-10-10T00:00:00Z)","type":"string"},"cuda_version":{"description":"Cuda version.","type":"string"},"end_time":{"description":"The end time of the job as a Unix timestamp.","format":"int64","type":"integer"},"job_id":{"description":"Unique identifier for the job","type":"string"},"job_trigger_user":{"description":"The user who triggered the job","type":"string"},"machine_stats":{"$ref":"#/components/schemas/MachineStats"},"os":{"description":"Operating system used in the run","type":"string"},"output_files_gcs_paths":{"description":"A comma separated string that contains GCS path(s) to output files. eg. gs://bucket-name/output, gs://bucket-name/output2","type":"string"},"peak_vram":{"description":"The peak amount of VRAM used in the run.","type":"integer"},"pr_number":{"description":"The pull request number","type":"string"},"python_version":{"description":"The python version used in the run","type":"string"},"pytorch_version":{"description":"The pytorch version used in the run","type":"string"},"repo":{"description":"Repository name","type":"string"},"run_id":{"description":"Unique identifier for the run","type":"string"},"start_time":{"description":"The start time of the job as a Unix timestamp.","format":"int64","type":"integer"},"status":{"$ref":"#/components/schemas/WorkflowRunStatus"},"workflow_name":{"description":"The name of the workflow","type":"string"}},"required":["repo","job_id","run_id","os","commit_hash","commit_time","commit_message","branch_name","workflow_name","start_time","end_time","pr_number","python_version","job_trigger_user","author","status"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"}},"type":"object"}}},"description":"Successfully received the artifact details"},"400":{"description":"Invalid request"},"500":{"description":"Internal server error"}},"summary":"Receive artifacts (output files) from the ComfyUI GitHub Action","tags":["ComfyUI CI"],"x-excluded":true}},"/users":{"get":{"operationId":"GetUser","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"OK"},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"}},"security":[{"BearerAuth":[]}],"summary":"Get information about the calling user.","tags":["Registry"]}},"/users/publishers/":{"get":{"operationId":"ListPublishersForUser","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Publisher"},"type":"array"}}},"description":"A list of publishers"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad request, invalid input data"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve all publishers for a given user","tags":["Registry"]}},"/v2/models":{"get":{"description":"Comfy Router's model catalog - one page of the canonical model IDs that `POST /v2/models/{provider}/{model}` accepts. An SDK calls this on cold start to discover what is runnable, and the `model_not_found` suggestions come from the same catalog, so an ID listed here that then 404s on invocation would be worse than either failure alone. That agreement is structural rather than a promise: an entry's `provider` and `model` are the two path segments of the invocation route and reference the SAME schema components that route's path parameters do, and `id` is those two segments joined by `/`.\nPagination is CURSOR-based, deliberately not offset-based. The catalog is a moving list - models are added, and embargoed, between calls - and an offset walk silently skips or repeats entries when the list changes underneath it. Pass a page's `next_cursor` back as `cursor` to fetch the next page, and stop when `has_more` is false rather than when a page comes back short. A cursor is opaque: it is not an offset, not a model ID, and not stable across catalog rebuilds, so a cursor that is malformed or no longer valid is answered with a `400` from the Router error contract (`error_type: invalid_input`), never a `500`.\nA model that is deployed but NOT yet released is EXCLUDED from every page. This is a requirement of this route specifically, not something it inherits: `PartnerModelEmbargoMiddleware` gates `/proxy/*` only, and only methods that can carry a body, so a bodyless `GET` outside `/proxy/` is outside the embargo gate on both axes. Confirming that a specific unreleased model exists is precisely the disclosure `modelembargo` was built to prevent, and a catalog is the most direct way to make that confirmation - so the handler must filter the embargo set out of the page itself. An excluded model is simply absent: the catalog does not mark it, does not reserve a slot for it, and `has_more`/`limit` describe the page AFTER exclusion, so the omission is not inferable from a short page either.\nPer-model detail and the per-model input/output schemas are separate routes; this one carries only the identity of each model.","operationId":"ListRouterModels","parameters":[{"$ref":"#/components/parameters/RouterCatalogCursor"},{"$ref":"#/components/parameters/RouterCatalogLimit"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterModelListResponse"}}},"description":"OK - one page of the model catalog.","headers":{"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"400":{"$ref":"#/components/responses/RouterRequestError"},"401":{"$ref":"#/components/responses/RouterRequestError"},"403":{"$ref":"#/components/responses/RouterRequestError"},"503":{"$ref":"#/components/responses/RouterRequestError"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"List the models Comfy Router can run.","tags":["Comfy Router"]}},"/v2/models/{provider}/{model}":{"get":{"description":"Per-model detail for a single Comfy Router model, so a caller can check one model without walking the whole paginated catalog. The SDKs use it to look a model up immediately before invoking it.\nThe path is the SAME canonical model ID that `post` above invokes, on the same path template: one string addresses both routes, so there is no second ID alphabet to keep in step. `provider` and `model` are governed by the same `RouterProvider` / `RouterModel` parameters, with the same alphabet. That template is TWO segments; a catalog `id` carrying a third `variant` segment addresses neither route, because how a variant is addressed over HTTP is not settled by this contract (see `RouterProvider` and `RouterModelListEntry.id`).\nThe `200` body is a SUPERSET of the entry `GET /v2/models` returns for the same model: `RouterModelDetail` composes the list entry `RouterModelListEntry` by reference rather than restating its fields, so the listing and the detail cannot drift into two shapes for one model.\nAn ID that resolves to no model returns `404` with `error_type: model_not_found` - the same Router-owned body, the same bucket on `X-Comfy-Error-Type`, and the same fuzzy `detail` suggestions the invocation route returns for that ID. Both routes resolve through one catalog, so they cannot disagree about the same typo. Those suggestions are drawn from the models the CALLER is entitled to see: a miss on an unauthenticated or unentitled ID must not name models the caller could not otherwise enumerate. This is a requirement on the handler story (see `drip/codegen.yaml`), not something this contract can enforce.\nThe read sits behind the SAME enablement gate as `post` above, consulted before the catalog is touched: a caller Comfy Router is not switched on for gets `403` with `error_type: not_enabled` and learns nothing about which models exist - not even through a `404`'s suggestions - and a gate that could not be evaluated answers `503` with `error_type: service_unavailable`. Both carry the Router-owned body and the bucket on `X-Comfy-Error-Type`, exactly as on `post`.\nThis operation is deliberately tagged `Comfy Router` and NOT `API Nodes`, for the reason given on `post` above.","operationId":"GetRouterModel","parameters":[{"$ref":"#/components/parameters/RouterProvider"},{"$ref":"#/components/parameters/RouterModel"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterModelDetail"}}},"description":"OK - the model's catalog entry.","headers":{"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"401":{"$ref":"#/components/responses/RouterRequestError"},"403":{"$ref":"#/components/responses/RouterRequestError"},"404":{"$ref":"#/components/responses/RouterRequestError"},"503":{"$ref":"#/components/responses/RouterRequestError"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Read one partner model's catalog entry by canonical model ID.","tags":["Comfy Router"]},"post":{"description":"Comfy Router's canonical, model-ID-addressed entry point. The request body is the partner model's OWN native JSON input and the success response is that model's OWN native JSON output: Router forwards both unchanged instead of imposing a Comfy-shaped envelope, so a caller can move between the partner's API and Router by changing the host. This is the SYNCHRONOUS path: the response carries the finished result.\nThe path addresses a model by the canonical `{provider}/{model}[/{variant}]` model ID. `provider` and `model` are its first two segments and are lowercase; how the optional `variant` segment is addressed is not settled by this contract.\nFor a model whose partner API names the model in the request body, Router sets that field to the path's model; a body that names a different model is refused with `invalid_input`.\nRouter serves image results as re-hosted URLs on Comfy storage, so for an image model it OWNS the partner's `response_format` on the outbound request and coerces it to `url`. The field is still accepted for compatibility with the `/proxy/` surface and is not an error, but it does not select what a successful response carries: a `b64_json` request and a `url` request are answered identically, with URLs. Where an individual image cannot be re-hosted, its entry keeps xAI's own short-lived URL rather than a Comfy one — see the model's output schema. Naming the field twice in one body is refused with `invalid_input`, because which spelling the partner would read is not defined. The `/proxy/` routes are unaffected and honour `response_format` as written.\nThis operation is deliberately tagged `Comfy Router` and NOT `API Nodes`. The `API Nodes` tag drives ComfyUI's Partner-Node Pydantic codegen, so reusing it here would couple the Router contract to that generator.","operationId":"RunRouterModel","parameters":[{"$ref":"#/components/parameters/RouterProvider"},{"$ref":"#/components/parameters/RouterModel"},{"$ref":"#/components/parameters/RouterIdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterModelInput"}}},"description":"The partner model's native JSON input, forwarded to the provider unchanged.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterModelOutput"}}},"description":"OK - the partner model's native JSON output, returned unchanged. When this response was replayed from the record held against an `Idempotency-Key` rather than produced by running the model again, it carries `Idempotent-Replayed: true` and is not charged a second time.","headers":{"Idempotent-Replayed":{"$ref":"#/components/headers/RouterIdempotentReplayedHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"},"X-Committed-Spend-Current":{"$ref":"#/components/headers/CommittedSpendCurrentHeader"},"X-Committed-Spend-Limit":{"$ref":"#/components/headers/CommittedSpendLimitHeader"},"X-Committed-Spend-Remaining":{"$ref":"#/components/headers/CommittedSpendRemainingHeader"}}},"400":{"$ref":"#/components/responses/RouterRunRequestError"},"401":{"$ref":"#/components/responses/RouterRequestError"},"403":{"$ref":"#/components/responses/RouterRequestError"},"404":{"$ref":"#/components/responses/RouterRequestError"},"409":{"$ref":"#/components/responses/RouterIdempotencyConflict"},"413":{"$ref":"#/components/responses/RouterRequestError"},"422":{"$ref":"#/components/responses/RouterModelValidationError"},"429":{"$ref":"#/components/responses/RouterConcurrencyLimited"},"503":{"$ref":"#/components/responses/RouterRequestError"},"504":{"$ref":"#/components/responses/RouterDeadlineExceeded"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Run a partner model synchronously by canonical model ID.","tags":["Comfy Router"]}},"/v2/models/{provider}/{model}/openapi.json":{"get":{"description":"The per-model input AND output schemas for a single Comfy Router model, served as a standalone OpenAPI document, so a caller - an SDK, a codegen tool, or an agent - can discover a model's arguments, and the shape of what it returns, without reading Comfy's prose docs. It is the discovery mechanism the SDK quickstart depends on.\nThe INPUT schema served is the SAME source the server validates a call against before the request reaches the provider. That is the property that makes it worth trusting: what Comfy publishes and what Comfy enforces are one document, not two copies that drift. Both read the schema through a single accessor (`routerschema.Source.InputSchema`), so they cannot diverge without deleting it.\nThe path prefix is the SAME canonical `{provider}/{model}[/{variant}]` model ID that `POST /v2/models/{provider}/{model}` invokes, with `/openapi.json` appended - a caller reads an ID out of the catalog, appends one literal segment, and gets that model's schema. `provider` and `model` are governed by the same `RouterProvider` / `RouterModel` parameters, with the same alphabet.\nOne constraint this puts on the still-unsettled `{variant}` segment: `openapi.json` is itself a legal value under the `RouterModel` alphabet, so whatever spelling addresses a variant must not make `/v2/models/{provider}/{model}/openapi.json` ambiguous with a variant literally named `openapi.json`. Reserving that one literal is the cheapest resolution, and it is noted here rather than resolved, because how the variant segment is addressed is not settled by this contract.\nBOTH halves are described: the request body under the operation's `requestBody`, and the response body under its `200`. They do NOT promise the same thing, and the served document says which is which in its own `info.description`. The INPUT schema is ENFORCED - it is the schema the server validates against - so what is published and what is enforced cannot differ. The OUTPUT schema is DESCRIPTIVE: Router returns the provider's native result document exactly as it arrived, and never validates, narrows or re-envelopes it, so the output schema describes what the provider sends rather than constraining it. Comfy owns no output shape of its own.\nA model whose OUTPUT Comfy has not described yet is served a permissive output alongside whatever its input half is, flagged `x-comfy-output-schema-authored: false`. The two authored flags are independent: an authored input with an undescribed output is the ordinary state, and a caller must read each flag rather than either one for both.\nA model whose schema has not been authored yet is served a MINIMAL PERMISSIVE document with `200`, NOT a `404`: the model exists, `GET /v2/models/{provider}/{model}` reports it and `POST` runs it, so 404 here would have two Router routes disagreeing about whether the same model exists. The permissive document says the true thing instead - this model takes a JSON object and Comfy has not yet narrowed which fields - and flags itself with `x-comfy-input-schema-authored: false` so a caller can tell \"unconstrained\" from \"constrained to an open object\". A `404` on this route means only what it means everywhere else in Router: `model_not_found`, the ID names nothing.\nThe response is cacheable. It carries a strong `ETag` over the document bytes and honours `If-None-Match` with a `304`, because an SDK re-fetches this document far more often than the document changes.\nThis operation is deliberately tagged `Comfy Router` and NOT `API Nodes`, for the reason given on the invocation route.","operationId":"GetRouterModelInputSchema","parameters":[{"$ref":"#/components/parameters/RouterProvider"},{"$ref":"#/components/parameters/RouterModel"},{"description":"The `ETag` a caller holds from an earlier `200`. When it matches the current document (RFC 9110 weak comparison; `*` matches any current document) the answer is a bodyless `304` carrying the same `ETag`, otherwise the full document.","in":"header","name":"If-None-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterModelInputSchemaDocument"}}},"description":"OK - the model's input AND output schemas, as a standalone OpenAPI document.","headers":{"Cache-Control":{"$ref":"#/components/headers/RouterSchemaCacheControlHeader"},"ETag":{"$ref":"#/components/headers/RouterSchemaETagHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"304":{"description":"Not Modified - the document is unchanged since the `ETag` the caller sent in `If-None-Match`. No body is returned.","headers":{"Cache-Control":{"$ref":"#/components/headers/RouterSchemaCacheControlHeader"},"ETag":{"$ref":"#/components/headers/RouterSchemaETagHeader"},"X-Comfy-Request-Id":{"$ref":"#/components/headers/RouterRequestIdHeader"}}},"401":{"$ref":"#/components/responses/RouterRequestError"},"403":{"$ref":"#/components/responses/RouterRequestError"},"404":{"$ref":"#/components/responses/RouterRequestError"},"500":{"$ref":"#/components/responses/RouterRequestError"},"503":{"$ref":"#/components/responses/RouterRequestError"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Read one partner model's input and output schemas as an OpenAPI document.","tags":["Comfy Router"]}},"/versions":{"get":{"operationId":"ListAllNodeVersions","parameters":[{"in":"query","name":"nodeId","schema":{"type":"string"}},{"explode":true,"in":"query","name":"statuses","schema":{"items":{"$ref":"#/components/schemas/NodeVersionStatus"},"type":"array"},"style":"form"},{"in":"query","name":"include_status_reason","schema":{"default":false,"type":"boolean"}},{"description":"The page number to retrieve.","in":"query","name":"page","schema":{"default":1,"type":"integer"}},{"description":"The number of items to include per page.","in":"query","name":"pageSize","schema":{"default":10,"type":"integer"}},{"description":"search for status_reason, case insensitive","in":"query","name":"status_reason","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"page":{"description":"Current page number","type":"integer"},"pageSize":{"description":"Maximum number of node versions per page. Maximum is 100.","type":"integer"},"total":{"description":"Total number of node versions available","type":"integer"},"totalPages":{"description":"Total number of pages available","type":"integer"},"versions":{"items":{"$ref":"#/components/schemas/NodeVersion"},"type":"array"}},"type":"object"}}},"description":"List of all node versions"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid input, object invalid"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Node banned"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"List all node versions given some filters.","tags":["Registry"]}},"/webhook/metronome/zero-balance":{"post":{"operationId":"MetronomeZeroBalance","requestBody":{"content":{"application/json":{"schema":{"properties":{"id":{"description":"the id of the webhook","type":"string"},"properties":{"properties":{"customer_id":{"description":"the metronome customer id","type":"string"},"remaining_balance":{"description":"the customer remaining balance","type":"number"}},"type":"object"},"type":{"description":"the type of the webhook","type":"string"}},"required":["id","type","properties"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeogramGenerateResponse"}}},"description":"Webhook processed succesfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"summary":"receive alert on remaining balance is 0","tags":["Webhook","Metronome"],"x-excluded":true}},"/webhook/stripe/invoice-status":{"post":{"operationId":"StripeInvoiceStatus","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeEvent"}}},"required":true},"responses":{"200":{"description":"Webhook processed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"summary":"Handle Stripe invoice.paid webhook event","tags":["Billing","Stripe"],"x-excluded":true}},"/webhook/stripe/subscription":{"post":{"operationId":"StripeSubscriptionWebhook","requestBody":{"content":{"application/json":{"schema":{"description":"Generic Stripe webhook event payload","type":"object"}}},"required":true},"responses":{"200":{"description":"Webhook processed successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"401":{"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal Server Error (proxy or upstream issue)"}},"summary":"Handle Stripe subscription webhook events","tags":["Billing","Stripe"],"x-excluded":true}},"/workflowresult/{workflowResultId}":{"get":{"operationId":"GetWorkflowResult","parameters":[{"in":"path","name":"workflowResultId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionJobResult"}}},"description":"Commit details"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Commit not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Internal server error"}},"summary":"Retrieve a specific commit by ID","tags":["ComfyUI CI"],"x-excluded":true}}},"servers":[{"url":"https://api.comfy.org"}],"tags":[{"description":"Comfy Router's canonical, model-ID-addressed routes.","name":"Comfy Router"}]} diff --git a/comfy_cli/schemas/generate_list.json b/comfy_cli/schemas/generate_list.json index 16e63edc6..1efcd229f 100644 --- a/comfy_cli/schemas/generate_list.json +++ b/comfy_cli/schemas/generate_list.json @@ -27,7 +27,7 @@ }, "category": { "type": "string", - "description": "Model style: text-to-image, image-edit, controlnet, inpaint, outpaint, video, … Rendered as the table's 'Style' column and filterable via `--style` / `--category`." + "description": "Model style: text-to-image, image-edit, upscale, inpaint, outpaint, video, … Rendered as the table's 'Style' column and filterable via `--style` / `--category`." }, "mode": { "type": "string", diff --git a/tests/comfy_cli/command/generate/test_app.py b/tests/comfy_cli/command/generate/test_app.py index a51f2d6dc..dace1849a 100644 --- a/tests/comfy_cli/command/generate/test_app.py +++ b/tests/comfy_cli/command/generate/test_app.py @@ -211,7 +211,7 @@ def test_generate_unknown_model(runner, api_key): def test_generate_missing_required(runner, api_key): - r = runner.invoke(cli_app, ["generate", "flux-pro", "--prompt", "x"]) + r = runner.invoke(cli_app, ["generate", "flux-pro", "--width", "1", "--height", "1"]) assert r.exit_code == 1 assert "Missing required" in r.stdout @@ -319,14 +319,14 @@ def test_generate_download_no_urls(runner, api_key, monkeypatch): assert "no image urls" in r.stdout.lower() -# ─── generate: sync binary response (Stability returns bytes) ──────────── +# ─── generate: sync binary response (a partner returning raw bytes) ────── def test_generate_binary_response_with_download(runner, api_key, tmp_path, monkeypatch): resp = httpx.Response(200, content=b"\x89PNGfake", headers={"content-type": "image/png"}) monkeypatch.setattr(gen_app.client.httpx, "post", lambda *a, **kw: resp) download = str(tmp_path / "ultra.png") - r = runner.invoke(cli_app, ["generate", "stability-ultra", "--prompt", "x", "--download", download]) + r = runner.invoke(cli_app, ["generate", "dalle", "--prompt", "x", "--download", download]) assert r.exit_code == 0, r.stdout assert Path(download).exists() @@ -334,7 +334,7 @@ def test_generate_binary_response_with_download(runner, api_key, tmp_path, monke def test_generate_binary_response_no_download(runner, api_key, monkeypatch): resp = httpx.Response(200, content=b"\x89PNGfake", headers={"content-type": "image/png"}) monkeypatch.setattr(gen_app.client.httpx, "post", lambda *a, **kw: resp) - r = runner.invoke(cli_app, ["generate", "stability-ultra", "--prompt", "x"]) + r = runner.invoke(cli_app, ["generate", "dalle", "--prompt", "x"]) assert r.exit_code == 0 assert "nothing saved" in r.stdout diff --git a/tests/comfy_cli/command/generate/test_json_errors.py b/tests/comfy_cli/command/generate/test_json_errors.py index ea2da921d..d3c62dcaf 100644 --- a/tests/comfy_cli/command/generate/test_json_errors.py +++ b/tests/comfy_cli/command/generate/test_json_errors.py @@ -127,7 +127,7 @@ def test_json_unknown_model_envelope(runner, api_key): def test_json_missing_required_param_envelope(runner, api_key): - r = runner.invoke(cli_app, ["--json", "generate", "flux-pro", "--prompt", "x"]) + r = runner.invoke(cli_app, ["--json", "generate", "flux-pro", "--width", "1", "--height", "1"]) assert r.exit_code == 1 env = _sole_envelope(r) assert env["error"]["code"] == "generate_bad_args" @@ -211,7 +211,7 @@ def test_pretty_unknown_model_output_unchanged(runner, api_key): def test_pretty_missing_required_still_suggests_schema(runner, api_key): - r = runner.invoke(cli_app, ["--no-json", "generate", "flux-pro", "--prompt", "x"]) + r = runner.invoke(cli_app, ["--no-json", "generate", "flux-pro", "--width", "1", "--height", "1"]) assert r.exit_code == 1 assert "Missing required" in r.stdout assert "comfy generate schema flux-pro" in r.stdout diff --git a/tests/comfy_cli/command/generate/test_list_schema_envelope.py b/tests/comfy_cli/command/generate/test_list_schema_envelope.py index 51622fd4e..74d273162 100644 --- a/tests/comfy_cli/command/generate/test_list_schema_envelope.py +++ b/tests/comfy_cli/command/generate/test_list_schema_envelope.py @@ -203,7 +203,7 @@ def test_schema_surfaces_enum_values(): by_name = {p["name"]: p for p in data["params"]} output_format = by_name["output_format"] assert output_format["type"] == "enum" - assert output_format["enum"] == ["jpeg", "png"] + assert output_format["enum"] == ["jpeg", "png", "webp"] assert output_format["required"] is False diff --git a/tests/comfy_cli/command/generate/test_schema.py b/tests/comfy_cli/command/generate/test_schema.py index c74c65a5e..37d86cf87 100644 --- a/tests/comfy_cli/command/generate/test_schema.py +++ b/tests/comfy_cli/command/generate/test_schema.py @@ -13,7 +13,7 @@ def test_flags_for_bfl_classifies_types(): assert flags["width"].kind == "integer" assert flags["prompt_upsampling"].kind == "boolean" assert flags["output_format"].kind == "enum" - assert flags["output_format"].enum == ["jpeg", "png"] + assert flags["output_format"].enum == ["jpeg", "png", "webp"] def test_flags_for_multipart_finds_binary_fields(): @@ -65,10 +65,13 @@ def test_parse_args_rejects_bad_int(): def test_parse_args_missing_required(): + # `prompt` is the endpoint's only required field — `width`/`height` carry + # server-side defaults and are optional — so omitting it is what trips the + # check. ep = spec.get_endpoint("bfl/flux-pro-1.1/generate") flags = schema.flags_for(ep) with pytest.raises(schema.SchemaError, match="Missing required"): - schema.parse_args(flags, ["--prompt", "a"]) + schema.parse_args(flags, ["--width", "1", "--height", "1"]) def test_parse_args_enum_value_validated(): diff --git a/tests/comfy_cli/command/generate/test_spec.py b/tests/comfy_cli/command/generate/test_spec.py index 5ca785fb7..43d398bb5 100644 --- a/tests/comfy_cli/command/generate/test_spec.py +++ b/tests/comfy_cli/command/generate/test_spec.py @@ -229,7 +229,12 @@ def test_validate_spec_text_rejects_non_spec_bodies(text): def test_model_enum_from_vendored_spec(): models = spec.model_enum("byteplus/api/v3/contents/generations/tasks") assert models, "expected the byteplus tasks request schema to carry a model enum" - assert all(m.startswith("seedance-") for m in models) + # The endpoint serves the Seedance family under two upstream naming schemes + # (`seedance-*` and the newer `dreamina-seedance-*`); assert the family + # rather than one prefix, so a partner adding a variant doesn't red the + # build for a spec refresh that is working as intended. + assert all("seedance" in m for m in models) + assert any(m.startswith("seedance-") for m in models) def test_model_enum_returns_none_without_enum(): @@ -275,3 +280,54 @@ def test_find_property_descends_top_level_composition(): nested = {"anyOf": [{"oneOf": [{"properties": {"model": {"enum": ["m2"]}}}]}]} assert spec._find_property(nested, "model") == {"enum": ["m2"]} assert spec._find_property({"allOf": [{"type": "object"}]}, "model") is None + + +# ── allowlist / alias drift against the bundled spec ────────────────────── + + +def _bundled_proxy_ids(monkeypatch, tmp_path) -> set[str]: + """Endpoint ids the BUNDLED spec declares under ``/proxy/``. + + Points ``_USER_CACHE`` at a path that does not exist so ``_select_spec_path`` + falls through to the vendored copy — otherwise a developer's own + ``~/.comfy/openapi-cache.yml`` would decide whether these tests pass. + """ + monkeypatch.setattr(spec, "_USER_CACHE", tmp_path / "does-not-exist.yml") + spec.load_raw_spec.cache_clear() + spec._registry.cache_clear() + try: + assert spec.active_spec_path() == spec._BUNDLED_SPEC + paths = spec.load_raw_spec()["paths"] + return {p[len(spec.PROXY_PREFIX) :] for p in paths if p.startswith(spec.PROXY_PREFIX)} + finally: + # Don't leak the bundled-only load into tests that install their own cache. + spec.load_raw_spec.cache_clear() + spec._registry.cache_clear() + + +def test_every_allowlisted_endpoint_exists_in_vendored_spec(monkeypatch, tmp_path): + """Every curated tuple must resolve against the spec we ship. + + ``_registry()`` skips a missing node at runtime so a stale user cache can't + crash ``generate``; that ``continue`` also hid allowlist drift in both + directions — a retired proxy route stayed advertised by ``generate list`` + until someone noticed by hand. Assert it here instead, where the failure is + loud and names the offending ids. + """ + allowlisted = {endpoint_id for endpoint_id, _, _ in spec._ENDPOINT_ALLOWLIST} + declared = _bundled_proxy_ids(monkeypatch, tmp_path) + assert allowlisted <= declared, "allowlisted endpoints missing from the vendored spec: " + ", ".join( + sorted(allowlisted - declared) + ) + + +def test_every_alias_targets_an_allowlisted_endpoint(monkeypatch, tmp_path): + """An alias pointing at an id no tuple carries resolves to nothing — + ``get_endpoint`` raises `Unknown model` for a name ``generate list`` still + prints. Catch the dangling alias here.""" + allowlisted = {endpoint_id for endpoint_id, _, _ in spec._ENDPOINT_ALLOWLIST} + dangling = {alias: target for alias, target in spec._ALIASES.items() if target not in allowlisted} + assert not dangling, f"aliases targeting a non-allowlisted endpoint: {dangling}" + # And the allowlist itself only names endpoints the bundled spec declares, + # so every alias is reachable end-to-end. + assert allowlisted <= _bundled_proxy_ids(monkeypatch, tmp_path) From b489560f06949c08aef5df0ef0987c1857685490 Mon Sep 17 00:00:00 2001 From: Matt Miller Date: Fri, 4 Sep 2026 18:36:46 -0700 Subject: [PATCH 2/2] fix(generate): correct the vendored-spec refresh note and drop stale Stability prose MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The module docstring called the vendored openapi.yml "stored verbatim ... reproducible byte-for-byte" while the very next line appends the trailing newline `end-of-file-fixer` requires, so a plain `curl … | cmp` reports a spurious diff. Say what the file actually is -- the served body plus that one byte -- and carry the newline-aware comparison command next to it. The `exclude_paths:` rationale on the hygiene workflow made the same claim and is corrected the same way. Also finishes the prose sweep the alias removal started: `README.md` named Stability twice in the partner lists and `output.py`'s `save_binary_response` docstring cited it as the example of a partner answering `image/*` inline. Neither is reachable any more; the docstring now describes the behaviour without naming a retired partner. Co-Authored-By: Claude Opus 5 --- .github/workflows/public-repo-hygiene.yml | 7 ++++--- README.md | 6 +++--- comfy_cli/command/generate/output.py | 2 +- comfy_cli/command/generate/spec.py | 13 ++++++++++--- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/.github/workflows/public-repo-hygiene.yml b/.github/workflows/public-repo-hygiene.yml index 98186a7d1..397af92d9 100644 --- a/.github/workflows/public-repo-hygiene.yml +++ b/.github/workflows/public-repo-hygiene.yml @@ -46,9 +46,10 @@ jobs: # # `comfy_cli/command/generate/spec/openapi.yml` clears it. It is not # source: it is the response body of `https://api.comfy.org/openapi` - # stored verbatim, so that a refresh is a reproducible `curl` rather than - # a hand-edit (see the module docstring in - # `comfy_cli/command/generate/spec.py`). Nobody writes into it, and + # plus the one trailing newline `end-of-file-fixer` requires, so that a + # refresh is a reproducible `curl` rather than a hand-edit (see the module + # docstring in `comfy_cli/command/generate/spec.py`, which also carries the + # newline-aware command that compares the two). Nobody writes into it, and # redacting the eight tokens the checker flags — six ticket-shaped ids # written into upstream `description` prose, none of them under a # `/proxy/` path this CLI surfaces, plus two hits on an IETF language-tag diff --git a/README.md b/README.md index 29435571d..614e7683a 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ workflows, and call hosted partner image models, all from your terminal. ## Features - 🚀 One-command ComfyUI install and launch -- 🎨 Direct calls to partner image and video nodes (Flux, Ideogram, DALL·E, Recraft, Stability, Gemini/nano-banana, Kling, Luma, Runway, Pika, Vidu, Hailuo, Seedance, …) via `comfy generate`, no workflow JSON required +- 🎨 Direct calls to partner image and video nodes (Flux, Ideogram, DALL·E, Recraft, Reve, Gemini/nano-banana, Kling, Luma, Runway, Pika, Vidu, Hailuo, Seedance, …) via `comfy generate`, no workflow JSON required - 🔧 Custom node management — install, update, snapshot, bisect - 📦 Fast dependency resolution with `uv` (`--fast-deps`, `--uv-compile`) - 🗄️ Model downloads from CivitAI, Hugging Face, and direct URLs @@ -476,8 +476,8 @@ Notes: `comfy generate` calls Comfy's partner nodes directly from the terminal — no local ComfyUI or workflow JSON required. It hits the same hosted partner nodes you'd otherwise wire into a ComfyUI workflow, but as one-shot CLI calls. Image -models (Flux, Ideogram, DALL·E, Recraft, Stability, Runway, Reve, xAI Grok, -Google Gemini Flash Image aka **nano-banana**, …) and video models (Kling, +models (Flux, Ideogram, DALL·E, Recraft, Runway, Reve, xAI Grok, Google +Gemini Flash Image aka **nano-banana**, …) and video models (Kling, Luma, Runway Gen-3, Pika, Vidu, Moonvalley, Hailuo, Grok video, ByteDance **Seedance**) are all covered; video jobs run async and the CLI polls until the result is ready. diff --git a/comfy_cli/command/generate/output.py b/comfy_cli/command/generate/output.py index 2d5a7e2ba..3f3e4b934 100644 --- a/comfy_cli/command/generate/output.py +++ b/comfy_cli/command/generate/output.py @@ -94,7 +94,7 @@ def save_inline_blobs(blobs: list[tuple[str, bytes]], template: str, request_id: def save_binary_response(resp: httpx.Response, template: str, request_id: str) -> Path: - """Save a single binary response body (e.g. Stability returns image/* bytes).""" + """Save a single binary response body (some partners answer image/* inline instead of a URL).""" ext = _ext_from_response(resp) dest = _resolve_template(template, request_id, 0, ext) dest.parent.mkdir(parents=True, exist_ok=True) diff --git a/comfy_cli/command/generate/spec.py b/comfy_cli/command/generate/spec.py index e30706e0d..ca14a1443 100644 --- a/comfy_cli/command/generate/spec.py +++ b/comfy_cli/command/generate/spec.py @@ -4,13 +4,20 @@ 1. ``~/.comfy/openapi-cache.yml`` if fresher than CACHE_TTL_DAYS 2. The vendored copy under ``comfy_cli/command/generate/spec/openapi.yml`` -The vendored copy is the body ``https://api.comfy.org/openapi`` serves, stored -verbatim — that endpoint is public and needs no token, so a refresh is -reproducible byte-for-byte: +The vendored copy is the body ``https://api.comfy.org/openapi`` serves, plus one +trailing newline the repo's ``end-of-file-fixer`` pre-commit hook requires and +that the served body does not carry. That endpoint is public and needs no token, +so a refresh is a reproducible two-command download rather than a hand-edit: curl -sS https://api.comfy.org/openapi -o comfy_cli/command/generate/spec/openapi.yml printf '\n' >> comfy_cli/command/generate/spec/openapi.yml # end-of-file-fixer +Nothing else is edited into the file, so it stays comparable against upstream — +but mind the newline when you compare, or every check reports a spurious diff: + + curl -sS https://api.comfy.org/openapi | { cat; printf '\n'; } | + cmp - comfy_cli/command/generate/spec/openapi.yml + The body is minified JSON rather than block YAML despite the ``.yml`` name; JSON is a subset of YAML 1.2, so the same loader reads either, and the on-disk user cache ``comfy generate refresh`` writes is already that same JSON.