{"openapi":"3.1.0","info":{"title":"API Reference","version":"1.0.0"},"paths":{"/v1/models":{"get":{"operationId":"models_listModels","summary":"List models","description":"Returns the full model catalog. Each model includes pricing,\ncontext window, capability flags, and the full parameter\nschema. This endpoint is public and returns only\ntenant-agnostic model metadata.\n\nEvery model carries a boolean `native_inference` field, true when\nEmpirioLabs serves the model on its own managed GPU infrastructure\n(the Native Inference designation in the catalog). Filter it\ntogether with `category` to select native models, for example\nnative text models. Native models also name the exact Hugging Face\nrepository being served in `hugging_face_id`.\n\n`pricing` uses the OpenRouter convention of per-token USD strings.\nA model that is not priced per token, such as a video model priced\nper second or a speech model priced per 1,000 characters, reports\n`\"-1\"` in `prompt`, `completion` and `input_cache_read`. Its rates\nare listed in `unit_pricing`, one entry per unit and tier, and the\nfull display breakdown is in `pricing_rows`.\n","tags":["models"],"responses":{"200":{"description":"The complete model catalog.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Models_listModels_Response_200"}}}}}}},"/v1/models/{model_id}":{"get":{"operationId":"models_retrieveModel","summary":"Retrieve a model","description":"Returns the full per-model schema: pricing rows, parameter\ntable (name, type, default, min/max, allowed values, descriptions,\nconditional flags), capability flags, and modalities. Same\ndata the docs site and the playground render from. This endpoint\nis public and returns only tenant-agnostic model metadata.\n","tags":["models"],"parameters":[{"name":"model_id","in":"path","description":"Canonical model slug.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Full model schema with parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelDetail"}}}},"404":{"description":"Resource not found (model id, job id, or file path).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/chat/completions":{"post":{"operationId":"chatCompletions_createChatCompletion","summary":"Create a chat completion","description":"OpenAI-compatible chat completions. Pass any chat-capable model\nfrom the catalog as `model`. Supports streaming (SSE), tool\ncalling, vision input, audio input, JSON mode, structured\noutput, and provider-specific reasoning controls.\n\nStreaming uses Server-Sent Events with `data: ...` lines and a\nfinal `data: [DONE]`.\n`usage` arrives at the end of the stream on a chunk that also has\n`choices`. Set `stream_options.include_usage` to `true` to receive it\nthe way OpenAI sends it, in its own chunk just before `[DONE]` whose\n`choices` is an empty list; some models still report it on a chunk\nwith `choices`. Read `usage` from the last chunk that carries it.\n","tags":["chatCompletions"],"responses":{"200":{"description":"Completion (or SSE stream when `stream=true`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"400":{"description":"Invalid request; see error message for the offending parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The account cannot cover the pay-as-you-go amount required by the request. An active plan can run a request at zero balance only when the entire request is covered by remaining allowance. Partly covered requests require enough balance for the full remainder before work starts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this API key. Retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/completions":{"post":{"operationId":"completions_createCompletion","summary":"Create a completion","description":"OpenAI-compatible prompt completions for clients that send a raw\n`prompt` instead of chat `messages`. Only models that advertise\n`POST /v1/completions` in `supported_endpoints` accept this shape.\nStreaming uses Server-Sent Events.\n`usage` arrives at the end of the stream on a chunk that also has\n`choices`. Set `stream_options.include_usage` to `true` to receive it\nthe way OpenAI sends it, in its own chunk just before `[DONE]` whose\n`choices` is an empty list; some models still report it on a chunk\nwith `choices`. Read `usage` from the last chunk that carries it.\n","tags":["completions"],"responses":{"200":{"description":"Completion object or SSE stream when `stream=true`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionResponse"}}}},"400":{"description":"Invalid request; see error message for the offending parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The account cannot cover the pay-as-you-go amount required by the request. An active plan can run a request at zero balance only when the entire request is covered by remaining allowance. Partly covered requests require enough balance for the full remainder before work starts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this API key. Retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletionRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/responses":{"post":{"operationId":"responses_createResponse","summary":"Create a response","description":"OpenAI Responses-compatible endpoint for stateful conversations.","tags":["responses"],"responses":{"200":{"description":"Response object.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Responses_createResponse_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/messages":{"post":{"operationId":"messages_createMessage","summary":"Create a message (Anthropic format)","description":"Anthropic Messages-compatible endpoint. Drop-in for any\nAnthropic SDK client. The gateway translates Anthropic ↔ OpenAI\ninternally so the same model works under either shape.\n`tool_use` / `tool_result` blocks round-trip cleanly.\n","tags":["messages"],"responses":{"200":{"description":"Message response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Messages_createMessage_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1beta/models/{model}:generateContent":{"post":{"operationId":"gemini_generateContent","summary":"Generate content","description":"Google Gemini-compatible endpoint. Send a native Gemini request (`contents`, `systemInstruction`, `generationConfig`, `tools`) and receive a native `GenerateContentResponse`. Point the google-genai SDK (Python or JavaScript) or any Gemini-native client at `https://api.empiriolabs.ai` and the SDK appends this path automatically. Authenticate with your EmpirioLabs API key via the `x-goog-api-key` header (or the `?key=` query parameter). Works with any chat model, and pricing, parameters, and billing match `/v1/chat/completions`.\n","tags":["gemini"],"parameters":[{"name":"model","in":"path","description":"An EmpirioLabs chat model id, for example `qwen3-7-max`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Generated content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiGenerateContentResponse"}}}},"400":{"description":"Invalid request; see error message for the offending parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The account cannot cover the pay-as-you-go amount required by the request. An active plan can run a request at zero balance only when the entire request is covered by remaining allowance. Partly covered requests require enough balance for the full remainder before work starts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this API key. Retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiGenerateContentRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1beta/models/{model}:streamGenerateContent":{"post":{"operationId":"gemini_streamGenerateContent","summary":"Stream generate content","description":"Streaming variant of generateContent. Returns Server-Sent Events when called with `?alt=sse` (what the official SDKs use); each event is a partial `GenerateContentResponse` with the incremental text in `candidates[0].content.parts[0].text`. The final event carries `finishReason` and `usageMetadata`. There is no `[DONE]` sentinel; the stream simply ends.\n","tags":["gemini"],"parameters":[{"name":"model","in":"path","description":"An EmpirioLabs chat model id, for example `qwen3-7-max`.","required":true,"schema":{"type":"string"}},{"name":"alt","in":"query","description":"Set to `sse` for Server-Sent Events.","required":false,"schema":{"$ref":"#/components/schemas/V1BetaModelsModelStreamGenerateContentPostParametersAlt"}}],"responses":{"200":{"description":"A stream of partial GenerateContentResponse events (SSE).","content":{"text/event-stream":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request; see error message for the offending parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this API key. Retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiGenerateContentRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1beta/models/{model}:countTokens":{"post":{"operationId":"gemini_countTokens","summary":"Count tokens","description":"Return an approximate token count for a Gemini request without running the model. This is a fast estimate for pre-flight sizing, not an exact tokenization; the billed token counts on the actual response are authoritative.\n","tags":["gemini"],"parameters":[{"name":"model","in":"path","description":"An EmpirioLabs chat model id, for example `qwen3-7-max`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Token count.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Gemini_countTokens_Response_200"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeminiGenerateContentRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/files":{"post":{"operationId":"batch_createBatchFile","summary":"Upload a batch input file","description":"Upload a JSONL file of requests for the Batch API. Each line is a request object with `custom_id`, `method`, `url` (`/v1/chat/completions` or `/v1/embeddings`), and `body`. Set `purpose` to `batch`. Max 50,000 requests per file.\n","tags":["batch"],"responses":{"200":{"description":"File created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch_createBatchFile_Response_200"}}}}},"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"purpose":{"$ref":"#/components/schemas/V1FilesPostRequestBodyContentMultipartFormDataSchemaPurpose"}},"required":["file","purpose"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/batches":{"post":{"operationId":"batch_createBatch","summary":"Create a batch","description":"Create a batch from an uploaded input file. Requests are processed asynchronously within the completion window. Each line bills at its model's list price less the model's `batch_discount_pct` (`0` when the model runs batch at list price). Only batch-eligible models may be used (check `batch_supported` on `/v1/models`).\n","tags":["batch"],"responses":{"200":{"description":"Batch created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"input_file_id":{"type":"string","description":"Id of the uploaded JSONL input file."},"endpoint":{"$ref":"#/components/schemas/V1BatchesPostRequestBodyContentApplicationJsonSchemaEndpoint","default":"/v1/chat/completions","description":"API path every line of the file calls, for example `/v1/chat/completions`."},"completion_window":{"type":"string","default":"24h","description":"Time window for the batch to finish."},"metadata":{"$ref":"#/components/schemas/V1BatchesPostRequestBodyContentApplicationJsonSchemaMetadata","description":"Your own key-value labels for the batch."}},"required":["input_file_id"]}}}},"security":[{"bearerAuth":[]}]},"get":{"operationId":"batch_listBatches","summary":"List batches","tags":["batch"],"responses":{"200":{"description":"Batch list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch_listBatches_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/batches/{batch_id}":{"get":{"operationId":"batch_retrieveBatch","summary":"Retrieve a batch","description":"Poll a batch's status and result file ids.","tags":["batch"],"parameters":[{"name":"batch_id","in":"path","description":"Batch id returned when the batch was created.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Batch state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/batches/{batch_id}/cancel":{"post":{"operationId":"batch_cancelBatch","summary":"Cancel a batch","tags":["batch"],"parameters":[{"name":"batch_id","in":"path","description":"Batch id returned when the batch was created.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Batch cancelling or cancelled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/files/{file_id}/content":{"get":{"operationId":"batch_getBatchFileContent","summary":"Download a batch file","description":"Download the JSONL content of an input, output, or error file.","tags":["batch"],"parameters":[{"name":"file_id","in":"path","description":"Id of a batch input, output or error file.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JSONL file content.","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/embeddings":{"post":{"operationId":"embeddings_createEmbeddings","summary":"Create embeddings","description":"OpenAI-compatible embeddings. Batch up to 2048 inputs per call.","tags":["embeddings"],"responses":{"200":{"description":"Embedding vectors.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Embeddings_createEmbeddings_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Embedding model id, for example `text-embedding-v4`."},"input":{"$ref":"#/components/schemas/V1EmbeddingsPostRequestBodyContentApplicationJsonSchemaInput","description":"Text to embed, or an array of texts."},"encoding_format":{"$ref":"#/components/schemas/V1EmbeddingsPostRequestBodyContentApplicationJsonSchemaEncodingFormat","default":"float","description":"Vector encoding: `float` arrays or `base64` strings."}},"required":["model","input"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/reranks":{"post":{"operationId":"reranks_createReranks","summary":"Rerank documents","description":"Sort candidate `documents` by semantic relevance to a `query`. Returns each\ndocument's original index plus a 0-1 relevance score (higher = more\nrelevant). Score is relative to the request and not comparable across\nrequests.\n\nBuilt for RAG and search refinement: feed in the top-N hits from your\nvector store / BM25 / hybrid retriever, and the model returns a tighter,\nbetter-ordered shortlist.\n","tags":["reranks"],"responses":{"200":{"description":"Sorted relevance scores.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Reranks_createReranks_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Reranking model id, for example `qwen3-rerank`."},"query":{"type":"string","description":"Query text. Max 4,000 tokens."},"documents":{"type":"array","items":{"type":"string"},"description":"Candidate documents to sort. Max 500 items, each up to 4,000 tokens."},"top_n":{"type":"integer","minimum":1,"maximum":500,"description":"Number of top-ranked documents to return. Defaults to all."},"instruct":{"type":"string","description":"Custom English instruction guiding the sort. Defaults to a Q&A\nretrieval policy. Pass `\"Retrieve semantically similar text.\"` for\nsimilarity sorting.\n"},"return_documents":{"type":"boolean","default":false,"description":"When true, return the original document text alongside each result."}},"required":["model","query","documents"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/decisions":{"post":{"operationId":"decisions_createDecision","summary":"Create a decision","description":"Answer typed questions about a `state` with calibrated probabilities.\nA decision model reads the state (text, a JSON object or array, and any\nimages, audio, or video inside it) and answers each entry in\n`questions` independently. Every answer carries probabilities and a\nconfidence value; decision models never generate text.\n\n- `noul`: a yes/no question. Returns the probability of yes.\n- `choice`: 2 to 255 named options. Returns the most likely option and\n  the probability of each.\n- `score`: 2 to 10 ordered levels. Returns the expected level and the\n  probability of each level.\n- `tool`: 1 to 254 function definitions. Returns the function to call,\n  the probability of each, and a distribution for every `enum` and\n  `boolean` argument.\n\nUsage counts input tokens only: the state once, the text of each\nquestion, and each media item. `output_tokens` is always 0.\n\nFor a state longer than 131,072 tokens, `long_context` sets how it is\nread: `fast` (the default) answers faster, and `full` reads every\ntoken. Usage counts the whole state in both modes, and `long_context`\nin the response shows which one was used.\n","tags":["decisions"],"responses":{"200":{"description":"One answer per question, keyed by the question IDs from the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionResponse"}}}},"400":{"description":"A media URL cannot be used (`invalid_media_url`), or the model does not accept a media type in the state (`unsupported_media`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionError"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The account cannot cover the pay-as-you-go amount required by the request. An active plan can run a request at zero balance only when the entire request is covered by remaining allowance. Partly covered requests require enough balance for the full remainder before work starts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The `model` ID is unknown (`model_not_found`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionError"}}}},"413":{"description":"The request body is too large (`request_too_large`). Send large media as a `url` instead of inline `data`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionError"}}}},"422":{"description":"The request failed validation. `code` is `invalid_request`, `state_too_large`, `too_many_questions`, or `invalid_media`, and the message names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionError"}}}},"429":{"description":"An account rate limit was reached (`rate_limit_exceeded`). Retry after the number of seconds in the `Retry-After` header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionError"}}}},"503":{"description":"The model is temporarily unavailable (`model_unavailable`). Retry after the number of seconds in the `Retry-After` header; the request is safe to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/images/generations":{"post":{"operationId":"images_createImage","summary":"Generate an image","description":"Generate, edit, inpaint, or produce variations of images.\nOutputs are hosted CDN URLs (signed for 7 days) by default, or\ninline `b64_json` when `response_format` requests it.\n\nBy default the request is asynchronous: the response is a\n`job_id` plus polling URL, and you poll `GET /v1/jobs/<job-id>`\nfor the finished images. This is the right mode for long or\nbatched generations.\n\nPass `sync: true` to hold the request open instead and receive\nthe finished OpenAI-compatible image response (`created` +\n`data[]`) directly, with no polling. This is what OpenAI SDKs\nand OpenAI-compatible tools expect from `images.generate`. If a\nsynchronous generation runs past the wait window (about four\nminutes), the response falls back to the async `job_id`\nenvelope and the job keeps running.\n\nImage-edit flows accept `image: [\"https://...\"]` with up to the\nmodel's documented limit (3 for `qwen-image-2-0`, 9 for\n`wan2-7-image`, 14 for `seedream-5-0-lite`). Image-set modes\ngenerate cohesive image series, see each model's page for the\ntoggle.\n\nPass `template: \"<slug>\"` to apply a catalog-backed image\ntemplate. Browse image templates with `GET /v1/images/templates`\nor all generation templates with `GET /v1/templates`.\n","tags":["images"],"responses":{"200":{"description":"Async (default): a `job_id` envelope to poll. With\n`sync: true`: the finished image response.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Images_createImage_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Image model id, for example `qwen-image-2-0`. Omit it to use the default image model."},"prompt":{"type":"string","description":"Description of the image to create."},"template":{"type":"string","description":"Optional image template slug. When provided, the\ncanonical prompt blends with your `prompt`, the\nrecommended model is chosen if you don't pass one,\nand default params merge for any key you didn't set.\nSee `GET /v1/images/templates`.\n"},"aspect_ratio":{"type":"string","description":"Output aspect ratio, for example `1:1` or `16:9`."},"resolution":{"type":"string","description":"Output resolution. The supported values depend on the model."},"num_images":{"type":"integer","minimum":1,"maximum":4,"default":1,"description":"Number of images to create."},"image":{"type":"array","items":{"type":"string","format":"uri"},"description":"Reference image URLs for image-edit mode."},"response_format":{"$ref":"#/components/schemas/V1ImagesGenerationsPostRequestBodyContentApplicationJsonSchemaResponseFormat","default":"url"},"sync":{"type":"boolean","default":false,"description":"Hold the request and return the finished image\nresponse directly instead of the async `job_id`\nenvelope. Alias: `wait`. Falls back to the async\nenvelope if the generation outlasts the wait window.\n"}}}}}},"security":[{"bearerAuth":[]}]}},"/v1/images/analysis":{"post":{"operationId":"images_analyzeImage","summary":"Analyze / describe an image","description":"Vision-only endpoint for image-understanding models (Janus Pro,\nAmazon Nova Canvas variation/describe modes). For chat-style\nvision (Qwen-VL, Mistral Vision, etc.) use\n`POST /v1/chat/completions` with an `image_url` content part\ninstead.\n","tags":["images"],"responses":{"200":{"description":"Analysis result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Images_analyzeImage_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Vision model id, for example `janus-pro-deepseek`."},"image_url":{"type":"string","description":"URL or base64 of the image to analyze."},"question":{"type":"string","description":"What you want to know about the image."},"analysis_temperature":{"type":"number","format":"double","description":"Sampling temperature for the answer."},"analysis_top_p":{"type":"number","format":"double","description":"Nucleus sampling value for the answer."},"analysis_seed":{"type":"integer","description":"Random seed for a reproducible answer."}},"required":["model","image_url","question"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/images/edits":{"post":{"operationId":"images_createImageEdit","summary":"Edit an image","description":"Edits an existing image according to a text instruction with an image-edit\nmodel such as `step-image-edit-2`. Accepts the same asynchronous job\nenvelope as image generation: poll `GET /v1/jobs/{job_id}` for the signed\noutput URL.\n","tags":["images"],"responses":{"202":{"description":"Job accepted; poll `GET /v1/jobs/{job_id}`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Image-edit model id (default `step-image-edit-2`)."},"prompt":{"type":"string","description":"The edit instruction."},"image":{"type":"string","description":"The https URL of the image to edit."},"response_format":{"$ref":"#/components/schemas/V1ImagesEditsPostRequestBodyContentApplicationJsonSchemaResponseFormat","description":"Output format; `url` (default) returns signed URLs."}},"required":["prompt","image"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/templates":{"get":{"operationId":"generationTemplates_listGenerationTemplates","summary":"List generation templates","description":"Returns the catalog of image and video generation templates.\nEach template carries a canonical prompt, recommended model,\nsupported model list, default parameters, required input shape,\nmodality, and optional preview assets.\n\nNew templates land in production within a minute of being added\nto the catalog.\n","tags":["generationTemplates"],"parameters":[{"name":"category","in":"query","description":"Filter to a single category.","required":false,"schema":{"type":"string"}},{"name":"modality","in":"query","description":"Filter by template modality.","required":false,"schema":{"$ref":"#/components/schemas/V1TemplatesGetParametersModality"}},{"name":"type","in":"query","description":"Alias for `modality`.","required":false,"schema":{"$ref":"#/components/schemas/V1TemplatesGetParametersType"}},{"name":"model","in":"query","description":"Only return templates whose `supported_models` list contains this model slug.","required":false,"schema":{"type":"string"}},{"name":"featured","in":"query","description":"Set to true to filter to featured templates only.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"List of templates.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation_Templates_listGenerationTemplates_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/templates/{slug}":{"get":{"operationId":"generationTemplates_getGenerationTemplate","summary":"Get a generation template by slug","tags":["generationTemplates"],"parameters":[{"name":"slug","in":"path","description":"Template slug from the template list.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Template detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationTemplate"}}}},"404":{"description":"Template not found.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/templates":{"get":{"operationId":"videos_listVideoTemplates","summary":"List creative-effect templates","description":"Returns the catalog of video generation templates (\"creative\neffects\"). Each template carries a canonical motion/style\nprompt, a recommended model, the list of supported models,\ndefault parameters (aspect ratio, duration, etc.), and the\nrequired input shape (most templates need a reference image\nof your subject).\n\nNew templates land in production within a minute of being\nadded to the catalog.\n","tags":["videos"],"parameters":[{"name":"category","in":"query","description":"Filter to a single category.","required":false,"schema":{"$ref":"#/components/schemas/V1VideosTemplatesGetParametersCategory"}},{"name":"modality","in":"query","description":"Filter by template modality. Defaults to `video` on this endpoint.","required":false,"schema":{"$ref":"#/components/schemas/V1VideosTemplatesGetParametersModality"}},{"name":"model","in":"query","description":"Only return templates whose `supported_models` list contains this model slug.","required":false,"schema":{"type":"string"}},{"name":"featured","in":"query","description":"Set to true to filter to featured templates only.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"List of templates.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Videos_listVideoTemplates_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/templates/{slug}":{"get":{"operationId":"videos_getVideoTemplate","summary":"Get a single creative-effect template by slug","tags":["videos"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Template detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationTemplate"}}}},"404":{"description":"Template not found.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/images/templates":{"get":{"operationId":"images_listImageTemplates","summary":"List image templates","description":"Returns active templates for `/v1/images/generations`.\nThe response shape matches `GET /v1/templates`, filtered to\n`modality: \"image\"` by default.\n","tags":["images"],"parameters":[{"name":"category","in":"query","description":"Filter to a single category.","required":false,"schema":{"type":"string"}},{"name":"model","in":"query","description":"Only return templates whose `supported_models` list contains this model slug.","required":false,"schema":{"type":"string"}},{"name":"featured","in":"query","description":"Set to true to filter to featured templates only.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"List of image templates.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Images_listImageTemplates_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/images/templates/{slug}":{"get":{"operationId":"images_getImageTemplate","summary":"Get an image template by slug","tags":["images"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Template detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationTemplate"}}}},"404":{"description":"Template not found.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/compose/recipes":{"get":{"operationId":"generationTemplates_listComposeRecipes","summary":"List Compose recipes","description":"Returns the public Compose recipe catalog and available caption-style\nIDs. Recipe records include customer-safe setup metadata only: labels,\ncategories, input requirements, default aspect ratio, and recommended\nmodel options. Hidden pipeline prompts and render internals are not\nreturned.\n","tags":["generationTemplates"],"responses":{"200":{"description":"List of Compose recipes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Generation_Templates_listComposeRecipes_Response_200"}}}}}}},"/v1/videos/compose":{"post":{"operationId":"generationTemplates_createComposeVideo","summary":"Create a Compose job","description":"Starts a multi-step Compose video production. Use `mode: \"plan\"` to\ncreate an editable storyboard from a brief or script. Use\n`mode: \"render\"` with a storyboard to generate voiceover, visuals,\ncaptions, optional music, and the final MP4. Use `mode: \"edit\"` with a\nprior render manifest plus edits to rework selected scenes.\n\nThe endpoint is async and returns a job envelope immediately. Poll\n`GET /v1/jobs/{job_id}` until the job is terminal.\n","tags":["generationTemplates"],"responses":{"202":{"description":"Compose job accepted. Poll the jobs endpoint for the result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}},"400":{"description":"Invalid Compose request.","content":{"application/json":{"schema":{"description":"Any type"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient credits.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComposeRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/videos/generations":{"post":{"operationId":"videos_createVideo","summary":"Generate a video (async)","description":"Always async. Returns a `job_id` and polling URL immediately;\npoll `GET /v1/jobs/<job-id>` for the final video URL.\n\nVideo jobs typically complete in 1–15 minutes; 4K-tier video\ncan take 30+ minutes.\n\n### Templates and Extend\n\nTwo optional fields ride alongside the normal video gen payload:\n\n- `template: \"<slug>\"` applies a pre-curated creative effect\n  (canonical prompt + recommended model + default params).\n  Browse video templates with `GET /v1/videos/templates`\n  or all generation templates with `GET /v1/templates`.\n- `extend_from: { job_id | video_url }` continues a prior\n  video. Works on every supported video model; EmpirioLabs\n  handles the model-specific wiring for you.\n","tags":["videos"],"responses":{"202":{"description":"Job created. Poll the jobs endpoint for the result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Video model id from the catalog, for example `kling-3-0-turbo`."},"prompt":{"type":"string","description":"Description of the video to create."},"template":{"type":"string","description":"Optional template slug. When provided, the\ncanonical prompt blends with your `prompt`, the\nrecommended model is chosen if you don't pass\none, and default params merge for any key you\ndidn't supply. Validation 400s if the chosen\nmodel is not in `template.supported_models`.\nSee `GET /v1/videos/templates`.\n"},"extend_from":{"$ref":"#/components/schemas/V1VideosGenerationsPostRequestBodyContentApplicationJsonSchemaExtendFrom","description":"Continue a prior video. Pass exactly one of\n`job_id` (any prior async job from this account)\nor `video_url` (an http(s) URL to a video).\nWorks with every supported video model;\nEmpirioLabs handles the model-specific wiring\nfor you.\n"},"resolution":{"type":"string","description":"Output resolution. The supported values depend on the model."},"aspect_ratio":{"type":"string","description":"Output aspect ratio, for example `16:9` or `9:16`."},"duration":{"type":"integer","description":"Video length in seconds. The supported values depend on the model."},"generate_audio":{"type":"boolean","default":true,"description":"Also create an audio track, on models that support it."},"image":{"type":"string","format":"uri","description":"Reference image URL for image-to-video modes."},"image_url":{"type":"string","format":"uri","description":"Alias for `image`. Accepted on any image-to-video model."},"images":{"type":"array","items":{"type":"string","format":"uri"},"description":"Multiple input images. On a model that supports\nreference-to-video, two or more images are treated as\nreference images; a single image behaves like `image`.\n"},"reference_images":{"type":"array","items":{"type":"string","format":"uri"},"description":"Reference images for reference-to-video, on models that\nsupport it. The subjects are carried into a new scene\nrather than used as the first frame, so this cannot be\ncombined with `image`. Per-model limits (how many\nreferences, and the maximum resolution when references\nare used) are listed on the model page and in\n`GET /v1/models/{model}`.\n"},"mode":{"type":"string","description":"Generation mode on models that expose one, for example\n`t2v`, `i2v`, or `r2v`. Defaults to `auto`, which picks\nthe mode from the inputs you send. See the model page\nfor the values a given model accepts.\n"}}}}}},"security":[{"bearerAuth":[]}]}},"/v1/3d/generations":{"post":{"operationId":"3DGeneration_create3DGeneration","summary":"Generate a 3D asset (async)","description":"Image-to-3D generation. Returns a `job_id` and polling URL\nimmediately; poll `GET /v1/jobs/<job-id>` for the final signed\nGLB asset URL.\n\n`trellis-2-4b` accepts an input image plus resolution, seed,\nsampler, texture, and mesh export controls. See the model page\nfor the full parameter surface.\n","tags":["3DGeneration"],"responses":{"202":{"description":"Job created. Poll the jobs endpoint for the result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"3D model id, for example `trellis-2-4b`."},"image":{"$ref":"#/components/schemas/V13DGenerationsPostRequestBodyContentApplicationJsonSchemaImage","description":"Reference image for image-to-3D generation."},"image_url":{"type":"string","format":"uri","description":"Alias for `image` when passing a public URL."},"resolution":{"$ref":"#/components/schemas/V13DGenerationsPostRequestBodyContentApplicationJsonSchemaResolution","default":"1024","description":"Generation resolution. Higher values add detail and take longer."},"seed":{"type":"integer","minimum":0,"maximum":2147483647,"default":42,"description":"Random seed for reproducible results."},"texture_size":{"$ref":"#/components/schemas/V13DGenerationsPostRequestBodyContentApplicationJsonSchemaTextureSize","default":"2048","description":"Texture size in pixels."},"decimation_target":{"type":"integer","minimum":10000,"maximum":1000000,"default":500000,"description":"Target face count of the simplified mesh."},"remesh":{"type":"boolean","default":true,"description":"Rebuild the mesh topology before export."},"max_num_tokens":{"type":"integer","minimum":1024,"maximum":131072,"default":49152,"description":"Maximum generation tokens."},"response_format":{"$ref":"#/components/schemas/V13DGenerationsPostRequestBodyContentApplicationJsonSchemaResponseFormat","default":"url","description":"Return the asset as a `url` or as inline `b64_json`."}},"required":["model"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/speech":{"post":{"operationId":"audio_createSpeech","summary":"Generate audio (TTS, music, podcast)","description":"Text-to-speech, music generation, and multi-speaker podcast\nTTS share this endpoint. Returns a hosted URL by default; pass\n`response_format: \"b64_json\"` for inline audio bytes.\n","tags":["audio"],"responses":{"200":{"description":"Audio response (URL by default, or inline bytes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Text-to-speech model id, for example `qwen-audio-3-0-tts`."},"input":{"type":"string","description":"Script / lyrics. Use [S1] / [S2] tags for multi-speaker models."},"prompt":{"type":"string","description":"Music generation models use `prompt` instead of `input`."},"voice":{"type":"string","description":"Voice id available for the chosen model."},"output_format":{"type":"string","description":"Audio file format, for example `mp3` or `wav`."},"duration":{"type":"integer","description":"Music generation only; output length in seconds."}},"required":["model"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/speech:stream":{"post":{"operationId":"audio_createSpeechStream","summary":"Stream audio (real-time TTS)","description":"Streaming variant of `/v1/audio/speech`. Returns Server-Sent\nEvents as the model synthesizes, with sub-130ms time-to-first-byte\non Inworld TTS Mini, sub-250ms on Max. Use this for voice\nagents and other interactive playback paths.\n\nEvent types:\n  * `audio.chunk`: base64-encoded audio bytes with `seq`,\n    `format`, `sample_rate`, and `elapsed_ms` fields. Concatenate\n    client-side for progressive playback.\n  * `audio.timestamps`: emitted when `timestamp_type` is\n    `WORD` or `CHARACTER`, carrying per-token timing info.\n  * `audio.done`: final event with the assembled hosted URL,\n    total duration, and usage payload for billing.\n  * `audio.error`: only on upstream errors; followed by `[DONE]`.\n  * `[DONE]`: terminator (standard SSE).\n\nModels that stream list `POST /v1/audio/speech:stream` in\n`supported_endpoints` on `GET /v1/models/{id}`; other TTS models\nuse the synchronous `/v1/audio/speech` endpoint. Billing matches\n`/v1/audio/speech` for the same model, and a stream the client\ncancels is billed for the synthesis the model completed.\n\nOn Gemini 3.8 Flash TTS and Flash-Lite TTS, every `audio.chunk`\ncarries 16-bit PCM at 24 kHz, and `audio.done` links the complete\nfile in the requested `output_format` and `sample_rate`. `speed`\nis available on `/v1/audio/speech` only.\n","tags":["audio"],"responses":{"200":{"description":"Server-Sent Events stream (text/event-stream).","content":{"text/event-stream":{"schema":{"type":"string"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string"},"input":{"type":"string","description":"Text to synthesize. Max 3000 characters per request."},"voice":{"type":"string"},"voice_id":{"type":"string","description":"Free-form voice ID; use to address the full 271-voice catalog."},"language":{"type":"string"},"output_format":{"$ref":"#/components/schemas/V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaOutputFormat","default":"WAV"},"sample_rate":{"$ref":"#/components/schemas/V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaSampleRate","default":"24000"},"speed":{"type":"number","format":"double","default":1},"temperature":{"type":"number","format":"double","default":1},"timestamp_type":{"$ref":"#/components/schemas/V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaTimestampType","default":"NONE"}},"required":["model","input"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/generations":{"post":{"operationId":"audio_createAudioGeneration","summary":"Generate music / sound effects","description":"Music / podcast / sound-effect generation. Distinct from\n`/v1/audio/speech` (TTS): this endpoint covers Stable Audio,\nGLM TTS, MOSS, and SoulX Podcast where the prompt-to-audio\npath is generative rather than spoken-word.\n\nLong-running generations (> 60s) return `202 Accepted` with a\n`job_id` and `poll_url`; poll `/v1/jobs/{job_id}` until\ncomplete.\n","tags":["audio"],"responses":{"200":{"description":"Audio response (URL by default, or inline bytes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Music or sound model id, for example `ace-step-1-5-xl`."},"prompt":{"type":"string","description":"Natural-language description of the audio to generate."},"input":{"type":"string","description":"Script / lyrics for podcast / multi-speaker models."},"duration":{"type":"number","format":"double","description":"Output length in seconds."},"steps":{"type":"integer","description":"Number of denoising steps. Higher = better quality but slower."},"cfg_scale":{"type":"number","format":"double","description":"Prompt adherence. Higher = closer to prompt but less creative."},"seed":{"type":"integer","description":"Random seed for reproducibility."},"output_format":{"$ref":"#/components/schemas/V1AudioGenerationsPostRequestBodyContentApplicationJsonSchemaOutputFormat","description":"Audio file format."}},"required":["model"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/realtime/client_secrets":{"post":{"operationId":"audio_createRealtimeClientSecret","summary":"Create a realtime client secret","description":"Creates a short-lived client secret for opening a\n[Realtime Voice API](/realtime) session from a web page. Call this\nendpoint from your server with your API key, then give the returned\n`value` and `url` to the page. The page never receives your API key.\n\nThe page opens `url` with two WebSocket subprotocols,\n`empirio.realtime.v1` and `empirio-token.<value>`:\n\n```js\nconst ws = new WebSocket(secret.url, [\"empirio.realtime.v1\", `empirio-token.${secret.value}`]);\n```\n\nA client secret works only for the model it was created for. It can\nopen sessions until `expires_at`, and a session that is already open\ncontinues after that time. Sessions bill to your account and appear in\nusage under the API key that created the secret. Deactivating or\ndeleting that key stops its client secrets from opening new sessions.\nCreating a client secret counts as one request toward your account\nrate limit.\n","tags":["audio"],"responses":{"200":{"description":"The client secret and the WebSocket URL to open with it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RealtimeClientSecret"}}}},"400":{"description":"Invalid request; see error message for the offending parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (model id, job id, or file path).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded for this API key. Retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"The realtime model the secret is for. Required unless `session.model` is set."},"expires_after":{"$ref":"#/components/schemas/V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaExpiresAfter","description":"How long the secret can open new sessions."},"session":{"$ref":"#/components/schemas/V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaSession","description":"Accepted for clients that send the model as `session.model`. Other session settings are refused here; the page sends them in a `session.update` event after the socket opens."}}}}}},"security":[{"bearerAuth":[]}]}},"/v1/voices":{"get":{"operationId":"audio_listVoices","summary":"List available TTS voices","description":"Returns the voice catalog for a TTS model. Models that serve this\nendpoint list `GET /v1/voices` in `supported_endpoints` on\n`GET /v1/models/{id}`. Use the returned voice id on\n`/v1/audio/speech` or `/v1/audio/speech:stream`.\n\n`model` is required. Voice catalogs are per-model and differ in both\ncontents and response shape, so the request must say which TTS model\nto list. Omitting it returns 400 `missing_required_parameter`.\n\nThe response is shaped by the model that serves it, since each provider\ndescribes its voices differently. Qwen Audio 3.0 TTS returns `id`,\n`name`, `gender`, `age`, `trait`, `scenario`, `language`, `kind`\n(`base` or `system`), and `tiers` (which of `plus` / `flash` can use\nthe voice), plus a `total` count and the resolved `model`. Gemini 3.8\nFlash TTS and Flash-Lite TTS return `id`, `name`, `language` (the\nvoice's BCP-47 locale), `region`, `accent`, `persona`, `context`,\n`gender`, `pitch`, `description`, and `multilingual` (true for the 30\nvoices that speak every supported language), plus a `total` count.\nRead the model's own documentation page for its exact fields.\n","tags":["audio"],"parameters":[{"name":"model","in":"query","description":"TTS model whose voice catalog to return, for example\n`qwen-audio-3-0-tts`, `inworld-tts-max`, or `gemini-3-8-flash-tts`.\n","required":true,"schema":{"type":"string"}},{"name":"language","in":"query","description":"Filter by language. Qwen Audio 3.0 TTS matches it\ncase-insensitively as a substring of the language name, for\nexample `english`. Gemini 3.8 Flash TTS and Flash-Lite TTS match\na BCP-47 locale or its language prefix, for example `fr-CA` or\n`fr`.\n","required":false,"schema":{"type":"string"}},{"name":"gender","in":"query","description":"Filter by voice gender, for example `female`. Supported by Qwen Audio 3.0 TTS and Gemini 3.8 Flash TTS and Flash-Lite TTS.","required":false,"schema":{"type":"string"}},{"name":"tier","in":"query","description":"Filter to voices usable by one tier of a tiered model, for example\n`flash`. Supported by Qwen Audio 3.0 TTS.\n","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Free-text search. Qwen Audio 3.0 TTS searches voice id, name,\ntrait, and use case; Gemini 3.8 Flash TTS and Flash-Lite TTS\nsearch id, name, accent, persona, context, and description.\n","required":false,"schema":{"type":"string"}},{"name":"pitch","in":"query","description":"Filter by voice pitch: `low`, `medium`, or `high`. Supported by\nGemini 3.8 Flash TTS and Flash-Lite TTS.\n","required":false,"schema":{"type":"string"}},{"name":"multilingual","in":"query","description":"`true` returns only the 30 voices that speak every supported\nlanguage; `false` excludes them. Supported by Gemini 3.8 Flash\nTTS and Flash-Lite TTS.\n","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Voice catalog. Field names vary by model; the example below is\nQwen Audio 3.0 TTS.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Audio_listVoices_Response_200"}}}},"400":{"description":"`model` was not supplied.\n","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/audio/transcriptions":{"post":{"operationId":"transcription_createTranscription","summary":"Transcribe an audio file","description":"Speech-to-text with any transcription model in the catalog.\nAccepts either a multipart `file` upload OR a JSON body with\n`file_url`. Every request returns `202` with a `job_id`, whatever\nthe length of the recording: poll `GET /v1/jobs/{job_id}` until\n`status` is `completed`, then read the transcript from `result`.\n","tags":["transcription"],"responses":{"202":{"description":"Accepted. Poll `/v1/jobs/{job_id}` until `status` is `completed`. The job's `result` holds the transcript as `text`, with `language`, `duration`, `segments` and `words` where the model returns them.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}}},"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Speech-to-text model id, for example `deepgram-nova-3`."},"file":{"type":"string","format":"binary"},"response_format":{"$ref":"#/components/schemas/V1AudioTranscriptionsPostRequestBodyContentMultipartFormDataSchemaResponseFormat","default":"json"},"timestamp_granularities":{"type":"string"},"language":{"type":"string"},"translate":{"type":"boolean","default":false}},"required":["model","file"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/search":{"post":{"operationId":"search_createSearch","summary":"Search and research","description":"Unified surface for retrieval-style models: Exa, Tavily,\nLinkup, Perplexity Search. Each model has a different parameter\nsurface; see the per-model docs for the full schema (e.g.\n`exa-search` exposes 28 params including `category`, `livecrawl`,\n`subpages`, `summary_query`, `code_tokens`).\n","tags":["search"],"responses":{"200":{"description":"Sources / answer / structured data depending on model.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Search_createSearch_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Search model id, for example `tavily-search` or `exa-search`."},"query":{"type":"string","description":"What to search for."}},"required":["model","query"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/research":{"post":{"operationId":"search_createResearch","summary":"Long-running research with citations","description":"Deep research models: Tavily Research, Exa Research, Perplexity\nDeep Research, Perplexity Advanced Deep Research. The model\nplans search queries, fetches pages, synthesizes a multi-section\nreport with inline citations. Typical runtime 30s-15min depending\non `reasoning_effort`.\n\nReturns `202 Accepted` with a `job_id` and `poll_url`; poll\n`/v1/jobs/{job_id}` until complete. For streaming progress\n(`*Thinking...*` blockquote of search steps + sources + answer),\ncall `POST /v1/chat/completions` with `stream: true` on the same\nmodel instead; the gateway routes both surfaces to the same\nworker.\n","tags":["search"],"responses":{"200":{"description":"Research report (when run synchronously and short enough).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Search_createResearch_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Research model id, for example `tavily-research`."},"query":{"type":"string","description":"The research question."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/V1ResearchPostRequestBodyContentApplicationJsonSchemaMessagesItems"},"description":"Alternative to `query`; pass a chat-style messages array for multi-turn research."},"reasoning_effort":{"$ref":"#/components/schemas/V1ResearchPostRequestBodyContentApplicationJsonSchemaReasoningEffort","default":"high","description":"How much research to do: `low`, `medium` or `high`."},"max_output_tokens":{"type":"integer","default":10000,"description":"Maximum length of the report in tokens."},"search_domain_filter":{"type":"string","description":"Comma-separated domains. Prefix with '-' to exclude. Max 20."},"search_recency_filter":{"$ref":"#/components/schemas/V1ResearchPostRequestBodyContentApplicationJsonSchemaSearchRecencyFilter","description":"Only use sources from the last hour, day, week, month or year."},"disable_formatting":{"type":"boolean","default":false,"description":"Skip EmpirioLabs Markdown formatting and return the raw upstream payload."}},"required":["model"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/answer":{"post":{"operationId":"search_createAnswer","summary":"One-shot grounded answer","description":"Single-call grounded answer endpoint. Currently powers Exa Answer\nand similar models that return a synthesized answer with inline\ncitations in one round-trip (no streaming, no separate fetch /\ncrawl steps). For multi-step research use `/v1/research`; for\nraw retrieval use `/v1/search`.\n","tags":["search"],"responses":{"200":{"description":"Synthesized answer with citations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Search_createAnswer_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Grounded answer model id, for example `exa-answer`."},"query":{"type":"string","description":"The question to answer."},"stream":{"type":"boolean","default":false,"description":"Stream the answer text as it's generated (SSE)."}},"required":["model","query"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/agents/run":{"post":{"operationId":"agents_runAgent","summary":"Start an agent task or send a follow-up message","description":"Submits work to an autonomous, long-running agent (file browsing,\nresearch, code execution, document drafting). Currently powers\nManus.\n\nOne endpoint covers both creating a new task and continuing an\nexisting one:\n\n  - Omit `task_id` to start a fresh task. The response carries\n    the new `task_id` you can poll later.\n  - Include `task_id` to send a follow-up message to a task\n    that is already running. The agent picks up the new input\n    on its next reasoning step.\n\nLifecycle for a typical interactive flow:\n  1. `POST /v1/agents/run` with `input` → `{ task_id }`.\n  2. Poll `GET /v1/agents/{task_id}` until `status` reaches a\n     terminal state (`completed`, `failed`, `stopped`), or\n     stream the response by passing `stream: true` on the\n     initial call.\n  3. To send a follow-up message: `POST /v1/agents/run` again\n     with the same `task_id` plus the new `input`.\n  4. To inspect intermediate reasoning: `GET /v1/agents/{task_id}/messages`.\n  5. To cancel early: `POST /v1/agents/{task_id}/stop`.\n\nBilling accumulates as the agent runs. Partial work is still\ncharged on stop or failure.\n","tags":["agents"],"responses":{"202":{"description":"Task accepted. Poll `/v1/agents/{task_id}` for status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agents_runAgent_Response_202"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Agent model id, for example `manus`."},"input":{"type":"string","description":"Instruction for the agent. For a new task this is the initial prompt; for a follow-up (when `task_id` is set) this is the new message added mid-run."},"task_id":{"type":"string","description":"Optional. When set, the call sends `input` as a follow-up message to this existing task instead of creating a new one."},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/V1AgentsRunPostRequestBodyContentApplicationJsonSchemaAttachmentsItems"},"description":"Files for the agent to work with (any type, audio, video, images, documents, data). Each item is a URL string or an object with url, filename, and mime_type. Files are placed in the agent's workspace before the task starts. Up to 10 files per message."},"stream":{"type":"boolean","default":true,"description":"Stream Server-Sent Events as the agent works. When false, the call blocks until the task reaches a terminal state or `max_wait_seconds` elapses."},"agent_profile":{"type":"string","default":"standard","description":"Capability profile for the task. Manus accepts `standard` (default) for most work, `lite` for quicker, lower-cost tasks, and `max` for the most complex work. A follow-up sent with `task_id` can switch profiles."},"poll_interval_seconds":{"type":"number","format":"double","minimum":1,"maximum":30,"default":3,"description":"How often the worker polls upstream while waiting on the task. Only relevant when `stream` is false."},"max_wait_seconds":{"type":"number","format":"double","minimum":5,"maximum":1800,"default":900,"description":"Maximum time the worker will block on a non-streaming call before returning the in-progress task status."},"share_visibility":{"type":"string","default":"public","description":"Manus share-link visibility (`public` or `private`)."},"disable_formatting":{"type":"boolean","default":false,"description":"Skip the EmpirioLabs Markdown wrapper around the agent run. Aliases `raw`, `passthrough`, `raw_response`."}},"required":["model","input"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/agents/{task_id}":{"get":{"operationId":"agents_getAgentTask","summary":"Get agent task status + output","tags":["agents"],"parameters":[{"name":"task_id","in":"path","description":"Agent task id returned when the task started.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current task state, accumulated output, and tool calls so far.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agents_getAgentTask_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/agents/{task_id}/messages":{"get":{"operationId":"agents_listAgentMessages","summary":"List agent task messages","description":"Return every step-by-step message the agent has emitted while\nworking on this task. Combine with `GET /v1/agents/{task_id}`\nfor the final result. Polled by clients that want to render a\nlive reasoning trace.\n","tags":["agents"],"parameters":[{"name":"task_id","in":"path","description":"Agent task id returned when the task started.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Messages collected so far.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agents_listAgentMessages_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/agents/{task_id}/stop":{"post":{"operationId":"agents_stopAgentTask","summary":"Stop a running agent task","tags":["agents"],"parameters":[{"name":"task_id","in":"path","description":"Agent task id returned when the task started.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Task stopped. Final state and partial output included in the response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agents_stopAgentTask_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/detect":{"post":{"operationId":"detection_createDetection","summary":"Text classification / detection","description":"Specialized endpoint for classification-style models that don't\nfit chat / search / image. Currently powers GPTZero (AI text\ndetection, bibliography scan, source analysis). Each model's\n`scan_type` enum controls the detection mode.\nsee the per-model docs for the full parameter surface.\n\nNote: GPTZero is also reachable via `POST /v1/chat/completions`\nand `POST /v1/responses`: pass the text on the message body\nand the gateway adapts the call.\n","tags":["detection"],"responses":{"200":{"description":"Detection result with per-sentence breakdown and overall scores.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Detection_createDetection_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Detection model id, for example `gptzero`."},"input":{"type":"string","description":"Text or document to analyze (max 50,000 chars per document, 50 docs / 15 MB total per request)."},"scan_type":{"$ref":"#/components/schemas/V1DetectPostRequestBodyContentApplicationJsonSchemaScanType","default":"ai_detection","description":"What to check: `ai_detection` (the default), `bibliography` or `fact_check`."},"multilingual":{"type":"boolean","default":false,"description":"Enable multilingual model (FR / ES on top of EN)."},"version":{"type":"string","default":"__latest__","description":"Detector version. The latest version is used by default."}},"required":["model","input"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/volumes":{"get":{"operationId":"gpuCloud_listGpuVolumes","summary":"List your volumes","tags":["gpuCloud"],"responses":{"200":{"description":"Volumes and current storage pricing for your account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_listGpuVolumes_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"gpuCloud_createGpuVolume","summary":"Create a volume","description":"Create an empty volume. Pass kind=object for an S3-compatible bucket mounted at /mnt/<name>, or kind=network for a /workspace shared by compatible GPU instances and cluster nodes. Workspace and network volumes are billed by configured size; object buckets bill at least the selected size, with stored usage above it rounded up to whole GB. Storage is prorated per second using a 730-hour month.","tags":["gpuCloud"],"responses":{"201":{"description":"Volume created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_createGpuVolume_Response_201"}}}},"400":{"description":"Invalid volume name or size.","content":{"application/json":{"schema":{"description":"Any type"}}}},"402":{"description":"Add credits before creating a volume.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"The volume limit has been reached.","content":{"application/json":{"schema":{"description":"Any type"}}}},"503":{"description":"The selected storage type is temporarily unavailable.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z0-9][a-z0-9\\-]*[a-z0-9]$","minLength":2,"maxLength":32,"description":"Uppercase letters are converted to lowercase before validation."},"size_gb":{"type":"integer","minimum":1,"maximum":4000,"description":"Volume size in GB, from 1 to 4,000."},"kind":{"$ref":"#/components/schemas/V1GpuVolumesPostRequestBodyContentApplicationJsonSchemaKind","default":"workspace","description":"workspace saves /workspace on stop and restores it on the next attach. object is an S3-compatible bucket mounted at /mnt/<name> and read in place. network shares /workspace across compatible instances and cluster nodes, with the same returned per-GB rate."}},"required":["name","size_gb"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/volumes/{volume_id}":{"get":{"operationId":"gpuCloud_getGpuVolume","summary":"Get a volume","tags":["gpuCloud"],"parameters":[{"name":"volume_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Volume size, status and last successful save.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_getGpuVolume_Response_200"}}}},"404":{"description":"Volume not found.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"gpuCloud_deleteGpuVolume","summary":"Delete a volume","description":"Permanently delete an unattached volume and end storage billing. Stop all attached instances first. Deleted files cannot be recovered. A 202 response means deletion is in progress; poll the volume until it is deleted.","tags":["gpuCloud"],"parameters":[{"name":"volume_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Volume deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_deleteGpuVolume_Response_200"}}}},"404":{"description":"Volume not found.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"The volume is still attached.","content":{"application/json":{"schema":{"description":"Any type"}}}},"503":{"description":"Deletion could not finish. Retry the request.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/catalog":{"get":{"operationId":"gpuCloud_listGpuTypes","summary":"List GPU types","description":"Returns the GPU Cloud catalog with hourly pricing, VRAM, region,\nand the current available count. Prices and availability update as\ncapacity changes.\n","tags":["gpuCloud"],"responses":{"200":{"description":"List of GPU types.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_listGpuTypes_Response_200"}}}},"503":{"description":"Availability could not be loaded. Retry later.","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/v1/gpu/catalog/{slug}":{"get":{"operationId":"gpuCloud_getGpuType","summary":"Get a GPU type","tags":["gpuCloud"],"parameters":[{"name":"slug","in":"path","description":"GPU type slug, for example `h100`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"GPU type detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuType"}}}},"404":{"description":"GPU type not found.","content":{"application/json":{"schema":{"description":"Any type"}}}},"503":{"description":"Availability could not be loaded. Retry later.","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/v1/gpu/instances":{"get":{"operationId":"gpuCloud_listGpuInstances","summary":"List your GPU instances","description":"List your GPU instances, or supply `order_key` to recover one deployment\nfrom this account. Recovery returns `instance`, `order_key` and\n`order_state` instead of the instance list. A key belonging to another\naccount is not found. This lookup does not submit a deployment.\n","tags":["gpuCloud"],"parameters":[{"name":"order_key","in":"query","description":"The deployment key to look up in your account.","required":false,"schema":{"$ref":"#/components/schemas/GpuDeployOrderKey"}}],"responses":{"200":{"description":"Your GPU instances, or the existing deployment when order_key is supplied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_listGpuInstances_Response_200"}}}},"400":{"description":"The deployment key is invalid.","content":{"application/json":{"schema":{"description":"Any type"}}}},"404":{"description":"No deployment with this key was found in your account.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"This deployment was refused. The response includes the instance, key, order_state failed and an error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuDeployOrderResult"}}}},"503":{"description":"The deployment could not be confirmed. Keep its key and check again.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"gpuCloud_deployGpuInstance","summary":"Deploy a GPU","description":"Start a GPU Cloud instance. Choose a curated model, paste any Hugging Face\nrepo id (served with vLLM, OpenAI-compatible at `/v1`), pick a\ntemplate (JupyterLab, ComfyUI, Web Terminal, Ollama), or run a custom\nDocker image. Billing starts when the instance is allocated to you,\nwhich includes the time it takes to start up, and is metered by the\nsecond against your credit balance. Your account's\ncurrent GPU limit is enforced at deploy and start time.\n\nFor retry safety, choose a unique `order_key` in the body or send it as\n`Idempotency-Key`. If both are supplied, they must match exactly.\nReuse the same key and unchanged settings for an explicit retry.\nWithout a key, every POST starts a new deployment.\n\nThe key belongs to your account and continues to identify the same\ndeployment after its instance stops or is destroyed. Different settings\nwith the same key return `409 order_payload_conflict`. After a lost or\nunreadable response, first check `GET /v1/gpu/instances?order_key=...`.\nA pending deployment returns 202 with `order_state: reserved`; an issued\ndeployment returns 200 with `order_state: issued`. Read `instance.status`\nfor runtime readiness. A recorded refusal returns 409 with\n`order_state: failed`; starting another deployment requires a new key.\nIf the result remains unconfirmed, keep the key and contact support\nbefore starting a new deployment.\n","tags":["gpuCloud"],"parameters":[{"name":"Idempotency-Key","in":"header","description":"Alternative to body order_key. If both are supplied, their values must match exactly.","required":false,"schema":{"$ref":"#/components/schemas/GpuDeployOrderKey"}}],"responses":{"200":{"description":"Deployment issued or recovered. Read instance.status for its current runtime state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuDeployOrderResult"}}}},"400":{"description":"Invalid request or deployment key, including conflicting header and body keys.","content":{"application/json":{"schema":{"description":"Any type"}}}},"402":{"description":"Add credits before starting a GPU.","content":{"application/json":{"schema":{"description":"Any type"}}}},"404":{"description":"GPU type or instance route not found.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"The GPU is unavailable, the account GPU limit is reached, the price changed, or this key has different settings (order_payload_conflict). A recorded deployment refusal includes order_state failed and its instance.","content":{"application/json":{"schema":{"description":"Any type"}}}},"422":{"description":"The GPU count or workload settings are not valid for the selected GPU.","content":{"application/json":{"schema":{"description":"Any type"}}}},"503":{"description":"The deployment could not be confirmed. Keep the same key and check GET /v1/gpu/instances?order_key=... before retrying.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuDeployRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/instances/{instance_id}":{"get":{"operationId":"gpuCloud_getGpuInstance","summary":"Get a GPU instance","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","description":"GPU instance id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Instance detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_getGpuInstance_Response_200"}}}},"404":{"description":"Instance not found.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"gpuCloud_destroyGpuInstance","summary":"Destroy a GPU instance","description":"Save the selected volume, then permanently release the GPU and end runtime billing. The volume remains available and continues storage billing until deleted.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","description":"GPU instance id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Destruction requested. Poll until the instance is destroyed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_destroyGpuInstance_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/instances/{instance_id}/{action}":{"post":{"operationId":"gpuCloud_actionGpuInstance","summary":"Stop, start, or refresh a GPU instance","description":"`stop` saves the selected volume and releases the running allocation.\nRuntime billing continues until release. `start` redeploys the saved instance\nspec and restores its selected volume into `/workspace`. `refresh` re-syncs live status.\n","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","description":"GPU instance id.","required":true,"schema":{"type":"string"}},{"name":"action","in":"path","description":"`stop`, `start` or `refresh` the instance.","required":true,"schema":{"$ref":"#/components/schemas/V1GpuInstancesInstanceIdActionPostParametersAction"}}],"responses":{"200":{"description":"Action applied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_actionGpuInstance_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/instances/{instance_id}/exec":{"post":{"operationId":"gpuCloud_runGpuCommand","summary":"Run a command","description":"Run one command inside the running instance's workload container, as root,\nand receive its output. Each call starts a fresh `/bin/sh`, so chain steps\nwith `&&` or run a script. Stdout and stderr are returned up to 1 MiB each;\n`stdout_truncated` or `stderr_truncated` is set when output was cut.\n\nA command stops after `timeout_seconds` (default 60, up to 300). Up to 2\ncommands run at once per instance and 4 per account. Running commands has\nno separate charge.\n","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","description":"GPU instance id.","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{16}$"}}],"responses":{"200":{"description":"The command ran. A non-zero `exit_code` is the command's own result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_runGpuCommand_Response_200"}}}},"400":{"description":"The command or timeout is not valid.","content":{"application/json":{"schema":{"description":"Any type"}}}},"404":{"description":"GPU instance not found.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"The instance is not running, or its workload does not accept commands.","content":{"application/json":{"schema":{"description":"Any type"}}}},"413":{"description":"The command is too large.","content":{"application/json":{"schema":{"description":"Any type"}}}},"429":{"description":"Too many commands are running on this account or instance.","content":{"application/json":{"schema":{"description":"Any type"}}}},"503":{"description":"Commands are temporarily unavailable.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"command":{"type":"string","minLength":1,"maxLength":16384,"description":"The shell command to run, up to 16384 bytes."},"timeout_seconds":{"type":"integer","minimum":1,"maximum":300,"default":60,"description":"Seconds before the command is stopped."}},"required":["command"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/instances/{instance_id}/ssh":{"post":{"operationId":"gpuCloud_prepareGpuSsh","summary":"Connect to a GPU with SSH","description":"Add your public key to the account (like `POST /v1/gpu/ssh-keys`), prepare\nSSH inside this running instance's workload with it, and receive the command\nto connect: `ssh -J ssh.empiriolabs.ai:<port> root@gpu-<instance_id>`.\n\nThis call is optional. Any key on your account connects with that command\ndirectly; the first connection to an instance then takes a minute longer\nwhile SSH is prepared. SSH has no separate charge. Agent, X11, and port\nforwarding are disabled.\n","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","description":"GPU instance id.","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{16}$"}}],"responses":{"200":{"description":"SSH is prepared. Run `command` to connect.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_prepareGpuSsh_Response_200"}}}},"400":{"description":"The public key or request is not valid.","content":{"application/json":{"schema":{"description":"Any type"}}}},"404":{"description":"GPU instance not found.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"The instance is not running, or the account has reached its SSH key limit.","content":{"application/json":{"schema":{"description":"Any type"}}}},"413":{"description":"The request is too large.","content":{"application/json":{"schema":{"description":"Any type"}}}},"422":{"description":"SSH setup could not complete. Use Debian, Ubuntu, or Alpine with a working package manager.","content":{"application/json":{"schema":{"description":"Any type"}}}},"429":{"description":"Too many SSH sessions. Close an existing session and retry.","content":{"application/json":{"schema":{"description":"Any type"}}}},"503":{"description":"SSH is temporarily unavailable.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"public_key":{"type":"string","maxLength":8192,"description":"A single-line ssh-ed25519 or ssh-rsa public key, without options or line breaks. RSA keys must be 2048 to 8192 bits."}},"required":["public_key"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/ssh-keys":{"get":{"operationId":"gpuCloud_listGpuSshKeys","summary":"List SSH keys","description":"List the SSH public keys on your account. Every key listed here can open\n`ssh -J ssh.empiriolabs.ai:<port> root@gpu-<instance_id>` to any of your\nrunning GPU instances; each instance returns its exact command as `ssh.command`.\n","tags":["gpuCloud"],"responses":{"200":{"description":"The account's SSH keys, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_listGpuSshKeys_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"gpuCloud_createGpuSshKey","summary":"Add an SSH key","description":"Add an SSH public key to your account. Send the contents of a `.pub` file,\nfor example `~/.ssh/id_ed25519.pub`; the private key stays on your computer.\nAdding a key that is already on the account returns it unchanged with `200`.\n\nWith `generate: true` the key pair is created for you and the response\ncarries the private key once, as `private_key`. It is not stored and\ncannot be shown again. Save it to a file with permissions `600` and use\nit for both hosts of the SSH command:\n`ssh -i <key> -o ProxyCommand=\"ssh -i <key> -p <port> -W %h:%p ssh.empiriolabs.ai\" root@gpu-<instance_id>`.\n\nThere is no charge for SSH keys.\n","tags":["gpuCloud"],"responses":{"200":{"description":"The key was already on the account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_createGpuSshKey_Response_200"}}}},"400":{"description":"The public key or request is not valid.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"The account has reached its SSH key limit. Delete a key you no longer use.","content":{"application/json":{"schema":{"description":"Any type"}}}},"413":{"description":"The request is too large.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"public_key":{"type":"string","maxLength":8192,"description":"One ssh-ed25519 or ssh-rsa public key (RSA 2048 to 8192 bits), without options or line breaks. A trailing comment is used as the default name. Send this or `generate`, not both."},"generate":{"type":"boolean","description":"Create a new Ed25519 key pair instead of sending one. The response carries `private_key` once and it is not stored, so save it before you close the response."},"name":{"type":"string","maxLength":64,"description":"A label for the key. Defaults to the key's comment."}}}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/ssh-keys/{key_id}":{"delete":{"operationId":"gpuCloud_deleteGpuSshKey","summary":"Delete an SSH key","description":"Delete an SSH key from your account. New connections with the key are refused; connections already open stay open until they end.","tags":["gpuCloud"],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Key deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_deleteGpuSshKey_Response_200"}}}},"404":{"description":"SSH key not found.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/connect/{instance_id}/{path}":{"get":{"operationId":"gpuCloud_connectGpuInstance","summary":"Connect to a running GPU","description":"Call the service running on your GPU Cloud instance through an authenticated\nEmpirioLabs API path. For a model deploy this is the\nOpenAI-compatible base: send `POST /v1/gpu/connect/{instance_id}/v1/chat/completions`.\nFor a JupyterLab, ComfyUI, Web Terminal, or Ollama template, call the\nservice through the same connect path.\nSupports GET, POST, PUT, PATCH, DELETE, and streaming responses.\n","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","description":"The path on your GPU service to reach, e.g. `v1/chat/completions`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response from your GPU service.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstance_Response_200"}}}},"502":{"description":"The GPU instance is not reachable right now.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"gpuCloud_connectGpuInstancePost","summary":"Connect to a running GPU (POST)","description":"The same authenticated connect path with the POST method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstancePost_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"put":{"operationId":"gpuCloud_connectGpuInstancePut","summary":"Connect to a running GPU (PUT)","description":"The same authenticated connect path with the PUT method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstancePut_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"operationId":"gpuCloud_connectGpuInstancePatch","summary":"Connect to a running GPU (PATCH)","description":"The same authenticated connect path with the PATCH method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstancePatch_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"gpuCloud_connectGpuInstanceDelete","summary":"Connect to a running GPU (DELETE)","description":"The same authenticated connect path with the DELETE method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstanceDelete_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/clusters":{"get":{"operationId":"gpuCloud_listGpuClusters","summary":"List GPU clusters","description":"Returns multi-node GPU clusters for distributed training.\nCheck `ordering_enabled` before placing an order. `updated_at` is the\nUnix timestamp of the latest inventory refresh. An empty list means\nno cluster is currently available.\n\nOrder a cluster with `POST /v1/gpu/clusters`. Set `nodes` to choose\nhow many nodes to reserve.\n","tags":["gpuCloud"],"responses":{"200":{"description":"List of available clusters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_listGpuClusters_Response_200"}}}},"503":{"description":"Availability could not be loaded. Retry later.","content":{"application/json":{"schema":{"description":"Any type"}}}}}},"post":{"operationId":"gpuCloud_deployGpuCluster","summary":"Order a cluster","description":"Reserve a cluster. Every node is allocated together or none is, and the\nnodes are billed as one unit from the moment the group is created.\n\nSend the `id` of a cluster from `GET /v1/gpu/clusters`. Use `nodes` to\ntake part of it, from 2 up to the `nodes` in the offer; omit it to take\nall of them. Set `max_price_hourly` to the price of the size you are\nordering: `price_hourly / nodes` in the offer, times the count you send.\nThe order is refused above that figure, so you are never charged more\nthan you saw.\n\nCluster storage is one shared object bucket or network volume across all nodes. `volume_id`\nis optional, and must be an object bucket or network volume when supplied. Workspace\nvolumes cannot be attached to a cluster.\n","tags":["gpuCloud"],"responses":{"200":{"description":"The cluster was ordered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_deployGpuCluster_Response_200"}}}},"402":{"description":"Not enough credit to start the cluster.","content":{"application/json":{"schema":{"description":"Any type"}}}},"409":{"description":"The cluster is no longer available, its price moved, or the bucket was taken.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"cluster_id":{"type":"string","description":"The `id` from `GET /v1/gpu/clusters`."},"template":{"type":"string","description":"Multi-node workload to run on every node."},"nodes":{"type":"integer","minimum":2,"description":"How many of the offered nodes to reserve. Defaults to all of them."},"volume_id":{"type":"string","description":"Optional object bucket mounted at `/mnt/<name>`, or network volume mounted at `/workspace`, shared by every node."},"max_price_hourly":{"type":"number","format":"double","description":"Total $/hr you accepted for the size you are ordering. The order is refused above it."}},"required":["cluster_id","template"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/gpu/connect/{instance_id}":{"get":{"operationId":"gpuCloud_connectGpuInstanceRoot","summary":"Connect to a running GPU at its root","description":"The same authenticated connect path with no sub-path. This is how you\nreach a service that serves its own UI at `/`: JupyterLab, the Web\nTerminal, and ComfyUI. A model deploy uses the sub-path form below.\n\nAuthentication for the service is handled for you.\n","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstanceRoot_Response_200"}}}},"503":{"description":"The instance is not running yet.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"gpuCloud_connectGpuInstanceRootPost","summary":"Connect to a running GPU (POST)","description":"The same authenticated connect path with the POST method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstanceRootPost_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"put":{"operationId":"gpuCloud_connectGpuInstanceRootPut","summary":"Connect to a running GPU (PUT)","description":"The same authenticated connect path with the PUT method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstanceRootPut_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"operationId":"gpuCloud_connectGpuInstanceRootPatch","summary":"Connect to a running GPU (PATCH)","description":"The same authenticated connect path with the PATCH method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstanceRootPatch_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"gpuCloud_connectGpuInstanceRootDelete","summary":"Connect to a running GPU (DELETE)","description":"The same authenticated connect path with the DELETE method.","tags":["gpuCloud"],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The response from the service running on your instance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPU_Cloud_connectGpuInstanceRootDelete_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/health":{"get":{"operationId":"hostedAgents_health","summary":"Hosted agents health","tags":["hostedAgents"],"responses":{"200":{"description":"Hosted agents health response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_health_Response_200"}}}}}}},"/v1/hosted-agents/config":{"get":{"operationId":"hostedAgents_getHostedAgentsConfig","summary":"Get hosted-agent plans and runtime presets","tags":["hostedAgents"],"responses":{"200":{"description":"Plans, runtime presets, account limits, balance, and Poe setup metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedAgentsConfig"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances":{"get":{"operationId":"hostedAgents_listHostedAgentInstances","summary":"List hosted agents","tags":["hostedAgents"],"responses":{"200":{"description":"Your hosted agent instances.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_listHostedAgentInstances_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"hostedAgents_createHostedAgentInstance","summary":"Create a hosted agent","description":"Create an isolated OpenClaw or Hermes Agent runtime. The selected\nmonthly plan is charged from your account credit balance when the\nruntime is accepted. Your account's current hosted-agent limit is\nenforced when the runtime is accepted.\n","tags":["hostedAgents"],"responses":{"201":{"description":"Hosted agent created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_createHostedAgentInstance_Response_201"}}}},"402":{"description":"Add credits before creating the hosted agent.","content":{"application/json":{"schema":{"description":"Any type"}}}},"403":{"description":"Hosted-agent account limit reached.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedAgentCreateRequest"}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}":{"get":{"operationId":"hostedAgents_getHostedAgentInstance","summary":"Get a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Hosted agent detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_getHostedAgentInstance_Response_200"}}}},"404":{"description":"Hosted agent not found.","content":{"application/json":{"schema":{"description":"Any type"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"operationId":"hostedAgents_renameHostedAgentInstance","summary":"Rename a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Hosted agent renamed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_renameHostedAgentInstance_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New display name."}},"required":["name"]}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"hostedAgents_destroyHostedAgentInstance","summary":"Destroy a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Hosted agent destroyed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_destroyHostedAgentInstance_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/{action}":{"post":{"operationId":"hostedAgents_actionHostedAgentInstance","summary":"Start, stop, restart, or refresh a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}},{"name":"action","in":"path","description":"`start`, `stop`, `restart` or `refresh` the agent.","required":true,"schema":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdActionPostParametersAction"}}],"responses":{"200":{"description":"Action applied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_actionHostedAgentInstance_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/message":{"post":{"operationId":"hostedAgents_messageHostedAgentInstance","summary":"Send a message to a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Hosted agent response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_messageHostedAgentInstance_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","items":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdMessagePostRequestBodyContentApplicationJsonSchemaMessagesItems"},"description":"Messages to send, as `role` and `content` objects."}},"required":["messages"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/model":{"post":{"operationId":"hostedAgents_setHostedAgentModel","summary":"Change a hosted agent's model or provider","description":"Switches the agent's model in place (no redeploy). Use `provider` to point the agent at EmpirioLabs, your connected Poe or OpenRouter account, or a custom OpenAI/Anthropic-compatible public HTTPS endpoint. With `openrouter`, `model` is an OpenRouter model ID such as `openrouter/auto`.","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Model changed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_setHostedAgentModel_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdModelPostRequestBodyContentApplicationJsonSchemaProvider","description":"Model provider. `empirio` uses EmpirioLabs models."},"model":{"type":"string","description":"Model id to use."},"custom_provider":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdModelPostRequestBodyContentApplicationJsonSchemaCustomProvider","description":"Required when provider is custom. The public HTTPS base URL, model, API key, and protocol of your endpoint."}},"required":["provider","model"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/access":{"post":{"operationId":"hostedAgents_setHostedAgentAccess","summary":"Set who can message a hosted agent","description":"`mode` is `open` (anyone) or `restricted` (only allowed messaging IDs). With `restricted` and no IDs, the first person to message becomes the owner.","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Access policy updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_setHostedAgentAccess_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaKind","description":"Optional connected channel kind to update when sent in the JSON body."},"mode":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaMode","description":"`open` or `restricted` (only the users in `allow`)."},"allow":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaAllow","description":"Per-channel allowlist of messaging IDs, e.g. { \"telegram\": [\"123456\"] }."}},"required":["mode"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/skills":{"get":{"operationId":"hostedAgents_listHostedAgentSkills","summary":"List a hosted agent's skills","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Installed skill refs and any custom skills.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_listHostedAgentSkills_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"hostedAgents_addHostedAgentSkill","summary":"Add a skill to a hosted agent","description":"Add an official registry skill by ref (OpenClaw: `clawhub:<slug>`, Hermes: `hermes:<id>`), a git repo (`ocgit:<repo>`), a public HTTPS SKILL.md URL (`url:<https-url>`), or paste your own with `custom`.","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Skill added; returns the updated installed list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_addHostedAgentSkill_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","description":"A skill ref (clawhub:, hermes:, ocgit:, or url:)."},"custom":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdSkillsPostRequestBodyContentApplicationJsonSchemaCustom","description":"A pasted skill: name plus SKILL.md body."}}}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"hostedAgents_removeHostedAgentSkill","summary":"Remove a skill from a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}},{"name":"slug","in":"query","description":"The skill ref to remove.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Skill removed; returns the updated installed list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_removeHostedAgentSkill_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/mcp":{"get":{"operationId":"hostedAgents_listHostedAgentMcp","summary":"List a hosted agent's MCP connectors","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Connected MCP servers (host-only; credentials are never returned).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_listHostedAgentMcp_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"hostedAgents_addHostedAgentMcp","summary":"Attach a remote MCP connector to a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Connector attached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_addHostedAgentMcp_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Connector name, unique for the agent."},"url":{"type":"string","description":"A public HTTPS remote MCP server URL."},"transport":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdMcpPostRequestBodyContentApplicationJsonSchemaTransport","description":"`streamable-http` or `sse`."},"header_name":{"type":"string","description":"Optional HTTP header sent to the MCP server, for example `Authorization`."},"header_value":{"type":"string","description":"Value of that header."},"tool_include":{"type":"array","items":{"type":"string"},"description":"Only offer these tool names from the server."}},"required":["name","url"]}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"hostedAgents_removeHostedAgentMcp","summary":"Remove an MCP connector from a hosted agent","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}},{"name":"name","in":"query","description":"The connector name to remove.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Connector removed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_removeHostedAgentMcp_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/integrations":{"get":{"operationId":"hostedAgents_listHostedAgentIntegrations","summary":"List hosted-agent integrations","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Integration list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_listHostedAgentIntegrations_Response_200"}}}}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"hostedAgents_saveHostedAgentIntegration","summary":"Save a hosted-agent integration","description":"Saves a token-based integration. Telegram, Discord, Slack, and Matrix work on OpenClaw and Hermes agents. Mattermost and Microsoft Teams are OpenClaw-only. WhatsApp is paired from the dashboard with a QR code instead of this endpoint. `openrouter_api_key` connects your OpenRouter account and switches the agent to it; the key is checked with OpenRouter first and is never returned.","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Integration saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_saveHostedAgentIntegration_Response_201"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdIntegrationsPostRequestBodyContentApplicationJsonSchemaKind","description":"Integration to save."},"secret":{"type":"string","description":"Integration secret, API key, token, or webhook credential."},"config":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdIntegrationsPostRequestBodyContentApplicationJsonSchemaConfig","description":"Settings for the integration."}},"required":["kind"]}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/integrations/{kind}":{"delete":{"operationId":"hostedAgents_disconnectHostedAgentIntegration","summary":"Disconnect a hosted-agent integration","description":"Disconnecting `poe` or `openrouter` while it is the agent's active provider moves the agent to EmpirioLabs models.","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}},{"name":"kind","in":"path","description":"Integration to disconnect.","required":true,"schema":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdIntegrationsKindDeleteParametersKind"}}],"responses":{"200":{"description":"Integration disconnected.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_disconnectHostedAgentIntegration_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/integrations/{kind}/behavior":{"post":{"operationId":"hostedAgents_setHostedAgentIntegrationBehavior","summary":"Set messaging channel behavior","description":"Controls per-connector chat signals for a connected messaging channel. Typing indicators and minimal processing reactions are on by default; read receipts and live reply preview are off by default. Live reply preview is opt-in on supported channels and separate from model API streaming.","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}},{"name":"kind","in":"path","description":"Messaging channel to configure.","required":true,"schema":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdIntegrationsKindBehaviorPostParametersKind"}}],"responses":{"200":{"description":"Channel behavior updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hosted_Agents_setHostedAgentIntegrationBehavior_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"behavior":{"$ref":"#/components/schemas/HostedAgentChannelBehavior"}}}}}},"security":[{"bearerAuth":[]}]}},"/v1/hosted-agents/instances/{instance_id}/stats":{"get":{"operationId":"hostedAgents_getHostedAgentStats","summary":"Get a hosted agent's activity stats","description":"Activity counts for one hosted agent (messages, tool calls, and similar totals).","tags":["hostedAgents"],"parameters":[{"name":"instance_id","in":"path","description":"Hosted agent id.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Activity counts for the agent.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"description":"Any type"}}}}}},"security":[{"bearerAuth":[]}]}},"/v1/account/usage":{"get":{"operationId":"account_retrieveAccountUsage","summary":"Retrieve account usage and balance","description":"Returns the current credit balance, a per-product spend breakdown\n(model and API usage, Compose, GPU Cloud, and Hosted Agents), plus recent\nusage events for the account attached to the API key. Each event has a\n`source` (`api`, `playground`, `compose`, `gpu_cloud`, `hosted_agents`,\nor `template`) plus\nusage counters, request costs, status, model, endpoint, latency, request\nID, and generated media URLs. Token-billed rows report token counts.\nGPU Cloud runtime rows keep the stable `tokens` object with zero counts\nand put runtime details such as `seconds`, `price_hourly`, and\n`gpu_display` in `metadata`. For an event made by a Hosted Agent, the\n`metadata` object also identifies the agent (`agent_type`,\n`agent_name`, `agent_instance_id`). Models that bill per-tool\nsurcharges surface a per-event `tool_breakdown` array. The `summary`\nobject aggregates requests, tokens, cost, errors, latency, and\n`cache_hit_rate` across the whole query window (the same `from`, `to`,\n`model`, `status`, and `source` filters as the events), not just the\nreturned page, so its counts are true totals rather than the page size.\nThe `spend` totals honor the `from` and `to` window, or are all-time\nwhen neither is set.\n","tags":["account"],"parameters":[{"name":"limit","in":"query","description":"Number of usage events to return.","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":100}},{"name":"before","in":"query","description":"Return events created before this timestamp. Use `next_cursor` for pagination.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"from","in":"query","description":"Include events created at or after this timestamp.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","description":"Include events created at or before this timestamp.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"source","in":"query","description":"Filter events by source: `api` (direct API requests), `playground`, `compose` (Compose video productions), `gpu_cloud` (GPU Cloud rentals), or `hosted_agents` (calls made by a Hosted Agent).","required":false,"schema":{"$ref":"#/components/schemas/V1AccountUsageGetParametersSource"}},{"name":"model","in":"query","description":"Filter to one model ID.","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Filter by request status.","required":false,"schema":{"$ref":"#/components/schemas/V1AccountUsageGetParametersStatus"}}],"responses":{"200":{"description":"Account balance, summary, and usage events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUsageResponse"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/playground/conversations":{"get":{"operationId":"playground_listPlaygroundConversations","summary":"List saved Playground conversations","description":"Lists saved Playground conversations for the account attached to\nthe API key. This endpoint is read-only; save and delete chats in\nthe dashboard Playground.\n","tags":["playground"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"before","in":"query","description":"Return conversations updated before this timestamp.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"model","in":"query","description":"Filter to saved chats for one model ID.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Saved Playground conversations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaygroundConversationList"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/playground/conversations/{conversation_id}":{"get":{"operationId":"playground_retrievePlaygroundConversation","summary":"Retrieve a saved Playground conversation","description":"Returns one saved Playground conversation, including messages.","tags":["playground"],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Saved Playground conversation with messages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaygroundConversation"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (model id, job id, or file path).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/jobs":{"get":{"operationId":"jobs_listJobs","summary":"List recent jobs","description":"List your last 100 async jobs (rolling 1-hour window).","tags":["jobs"],"parameters":[{"name":"status","in":"query","description":"Only jobs in this status.","required":false,"schema":{"$ref":"#/components/schemas/V1JobsGetParametersStatus"}},{"name":"limit","in":"query","description":"Maximum number of jobs to return.","required":false,"schema":{"type":"integer","maximum":100,"default":25}}],"responses":{"200":{"description":"Job list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Jobs_listJobs_Response_200"}}}}},"security":[{"bearerAuth":[]}]}},"/v1/jobs/{job_id}":{"get":{"operationId":"jobs_retrieveJob","summary":"Retrieve a job","description":"Poll a job's status and final result.","tags":["jobs"],"parameters":[{"name":"job_id","in":"path","description":"Job id returned by a generation request.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"404":{"description":"Resource not found (model id, job id, or file path).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"operationId":"jobs_cancelJob","summary":"Cancel a job","description":"Best-effort cancel. Cancelling marks the job `cancelled`, stops\nresult delivery, and removes it from `status=processing` polling.\nIt does not abort a generation that is already executing, so a job\nthat completes after you cancel is still billed at the normal\nrate. If the job is already `completed` or `failed`, this is a\nno-op.\n","tags":["jobs"],"parameters":[{"name":"job_id","in":"path","description":"Job id returned by a generation request.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cancellation acknowledged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}}},"security":[{"bearerAuth":[]}]}}},"tags":[{"name":"models"},{"name":"chatCompletions"},{"name":"completions"},{"name":"responses"},{"name":"messages"},{"name":"gemini"},{"name":"batch"},{"name":"embeddings"},{"name":"reranks"},{"name":"decisions"},{"name":"images"},{"name":"generationTemplates"},{"name":"videos"},{"name":"3DGeneration"},{"name":"audio"},{"name":"transcription"},{"name":"search"},{"name":"agents"},{"name":"detection"},{"name":"gpuCloud"},{"name":"hostedAgents"},{"name":"account"},{"name":"playground"},{"name":"jobs"}],"servers":[{"url":"https://api.empiriolabs.ai","description":"Production"}],"components":{"schemas":{"ModelType":{"type":"string","enum":["chat","reasoning","stt","tts","generation","search","research","agent","tool"],"description":"Technical model type.","title":"ModelType"},"ModelCategory":{"type":"string","enum":["text","image","video","audio","transcription","embedding","reranker","research","tools","3d"],"description":"Catalog grouping the model is filtered under.","title":"ModelCategory"},"ModelCapabilities":{"type":"object","properties":{"streaming":{"type":"boolean"},"system_prompt":{"type":"boolean"},"web_search":{"type":"boolean"},"images":{"type":"boolean"},"audio":{"type":"boolean"},"video":{"type":"boolean"},"three_d":{"type":"boolean"},"reasoning":{"type":"boolean"}},"description":"Boolean capability flags for quick feature checks.","title":"ModelCapabilities"},"PricingTier":{"type":"object","properties":{"prompt":{"type":"string","description":"Per-token input cost in USD, or `\"-1\"` when the model is not priced per token."},"completion":{"type":"string","description":"Per-token output cost in USD, or `\"-1\"` when the model is not priced per token."},"image":{"type":"string","description":"Per-image cost (only on tier 0)."},"request":{"type":"string","description":"Flat per-request cost (only on tier 0)."},"input_cache_read":{"type":"string","description":"Per-token cost for cache-read input tokens. Equals `prompt` when the model has no cache discount, and `\"-1\"` when the model is not priced per token."},"min_context":{"type":"integer","description":"Present on every entry after the first in a tiered array. The input-token count at which this tier becomes active."}},"description":"OpenRouter-style pricing tier. Values are strings in USD. `\"-1\"` in `prompt`, `completion` and `input_cache_read` means the model is not priced per token: read `unit_pricing`, or `pricing_rows` for the full breakdown.","title":"PricingTier"},"ModelPricing1":{"type":"array","items":{"$ref":"#/components/schemas/PricingTier"},"title":"ModelPricing1"},"ModelPricing":{"oneOf":[{"$ref":"#/components/schemas/PricingTier"},{"$ref":"#/components/schemas/ModelPricing1"}],"description":"OpenRouter-style pricing. Single object for flat-rate models, or\nan array with one entry per context tier for context-tiered chat\nmodels: the first entry is the base rate, and each later entry\napplies from its `min_context` input tokens. All values are\nUSD strings. Per-token fields (`prompt`, `completion`,\n`input_cache_read`) are per-token, not per-million; flat fields\n(`image`, `request`) are per-event. `\"-1\"` in `prompt`,\n`completion` and `input_cache_read` means the model is not\npriced per token (for example per second, per minute or per\n1,000 characters): read its rates from `unit_pricing`, or the\nfull breakdown in `pricing_rows`.\n","title":"ModelPricing"},"ModelPricingRowsItems":{"type":"object","properties":{"label":{"type":"string"},"spec":{"type":"string"},"value":{"type":"string"}},"title":"ModelPricingRowsItems"},"UnitPrice":{"type":"object","properties":{"unit":{"type":"string","description":"What one `usd` buys: a single unit (`second`, `minute`, `hour`, `image`, `video`, `request`, `call`, `search`, `task`, `step`, `token`, `character`, `word`, `page`, `url`) or a count of them written `<count>_<units>`, where `k` is a thousand and `m` a million (`1m_tokens`, `1k_characters`, `10k_characters`, `1m_characters`, `1k_words`, `5_urls`, `10_pages`)."},"usd":{"type":"string","description":"Price of one `unit` in USD, as a decimal string. `\"0\"` means free."},"label":{"type":"string","description":"The row's label, which names the tier or charge (for example `720p`, `Input` or `Web search`)."}},"required":["unit","usd","label"],"description":"One machine-readable price from a model's `pricing_rows`.","title":"UnitPrice"},"ModelDiscount":{"type":"object","properties":{"label":{"type":"string"},"percent":{"type":"number","format":"double"}},"description":"Display discount summary. When present, `label` uses the `Save up to X%` format and `percent` is the maximum advertised savings for the model.","title":"ModelDiscount"},"Model":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"display_name":{"type":"string"},"author":{"type":"string","description":"Lowercase slug of the organization that made the model. This is who authored it, not who serves the request: EmpirioLabs runs some of these models on its own infrastructure."},"provider":{"type":"string","description":"Alias of `author`, emitted on every model and retained permanently for existing integrations. Prefer `author`."},"description":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"},"description":"Alternate model ids the API also accepts for this model, such as legacy dotted versions (\"deepseek-v3.2\"), provider-prefixed forms (\"deepseek/deepseek-v4-pro\"), and upstream ids. Requests, billing, and `GET /v1/models/{model}` all resolve them to the canonical `id`. Empty for models with no alternate ids."},"type":{"$ref":"#/components/schemas/ModelType","description":"Technical model type."},"category":{"$ref":"#/components/schemas/ModelCategory","description":"Catalog grouping the model is filtered under."},"native_inference":{"type":"boolean","description":"True when EmpirioLabs serves the model on its own managed GPU infrastructure (the Native Inference designation shown in the catalog). Always present. Combine it with `category` to select native models, for example native text models."},"weight_precision":{"type":["string","null"],"description":"Exact served weight precision, verbatim from the catalog and identical to the value shown on the model's documentation page (for example \"FP8 weights + FP8 KV\"). Null when unknown or not applicable."},"hugging_face_id":{"type":["string","null"],"description":"Hugging Face repository of the exact weights EmpirioLabs serves for this model (for example \"Qwen/Qwen3.5-9B\"). For a quantized build it names the quantized repository. Set on native models (`native_inference` true) and null otherwise."},"context_window":{"type":["integer","null"]},"context_length":{"type":["integer","null"],"description":"OpenRouter-convention alias of `context_window`. Same value, surfaced under the field name third-party tools look for."},"modalities":{"type":"array","items":{"type":"string"},"description":"Combined input plus output modality labels."},"input_modalities":{"type":"array","items":{"type":"string"}},"output_modalities":{"type":"array","items":{"type":"string"}},"features":{"type":"array","items":{"type":"string"},"description":"Capability tags such as `reasoning`, `vision`, or `video_generation`."},"max_output_tokens":{"type":["integer","null"]},"capabilities":{"$ref":"#/components/schemas/ModelCapabilities","description":"Boolean capability flags for quick feature checks."},"supported_endpoints":{"type":"array","items":{"type":"string"},"description":"API routes this model accepts, for example `POST /v1/chat/completions`."},"pricing":{"$ref":"#/components/schemas/ModelPricing","description":"OpenRouter-style pricing. Single object for flat-rate models, or\nan array with one entry per context tier for context-tiered chat\nmodels: the first entry is the base rate, and each later entry\napplies from its `min_context` input tokens. All values are\nUSD strings. Per-token fields (`prompt`, `completion`,\n`input_cache_read`) are per-token, not per-million; flat fields\n(`image`, `request`) are per-event. `\"-1\"` in `prompt`,\n`completion` and `input_cache_read` means the model is not\npriced per token (for example per second, per minute or per\n1,000 characters): read its rates from `unit_pricing`, or the\nfull breakdown in `pricing_rows`.\n"},"pricing_rows":{"type":"array","items":{"$ref":"#/components/schemas/ModelPricingRowsItems"},"description":"EmpirioLabs' display-friendly breakdown including tool fees, per-image/second/minute rates, and full tier ladders. Use this when you need the complete picture."},"unit_pricing":{"type":"array","items":{"$ref":"#/components/schemas/UnitPrice"},"description":"The model's prices in machine-readable form: one entry for each `pricing_rows` row whose unit and price can be read exactly, in the same order, with the price shown on that row. A row that states a range, an estimate, several prices (such as context tiers) or a condition on its unit is not listed; read `pricing_rows` for those. Empty when no row can be read exactly."},"logo":{"type":"string","format":"uri"},"model_released_at":{"type":["string","null"],"format":"date","description":"Exact public release date of the underlying model when verified. Null when the date has not been verified yet."},"deprecation_date":{"type":"string","format":"date","description":"Scheduled retirement date. Present only when a retirement has been scheduled; the model is removed from the catalog and stops routing on this date. Absent means no retirement is planned. Poll this field to migrate before a model you depend on goes away."},"deprecated":{"type":"boolean","description":"Present and true only alongside `deprecation_date`. Absent for every model with no scheduled retirement."},"is_new":{"type":"boolean"},"discount":{"oneOf":[{"$ref":"#/components/schemas/ModelDiscount"},{"type":"null"}],"description":"Display discount summary. When present, `label` uses the `Save up to X%` format and `percent` is the maximum advertised savings for the model."}},"title":"Model"},"Models_listModels_Response_200":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Model"}}},"title":"Models_listModels_Response_200"},"ModelDetailType":{"type":"string","enum":["chat","reasoning","stt","tts","generation","search","research","agent","tool"],"description":"Technical model type.","title":"ModelDetailType"},"ModelDetailCategory":{"type":"string","enum":["text","image","video","audio","transcription","embedding","reranker","research","tools","3d"],"description":"Catalog grouping the model is filtered under.","title":"ModelDetailCategory"},"ModelDetailCapabilities":{"type":"object","properties":{"streaming":{"type":"boolean"},"system_prompt":{"type":"boolean"},"web_search":{"type":"boolean"},"images":{"type":"boolean"},"audio":{"type":"boolean"},"video":{"type":"boolean"},"three_d":{"type":"boolean"},"reasoning":{"type":"boolean"}},"description":"Boolean capability flags for quick feature checks.","title":"ModelDetailCapabilities"},"ModelDetailPricing1":{"type":"array","items":{"$ref":"#/components/schemas/PricingTier"},"title":"ModelDetailPricing1"},"ModelDetailPricing":{"oneOf":[{"$ref":"#/components/schemas/PricingTier"},{"$ref":"#/components/schemas/ModelDetailPricing1"}],"description":"OpenRouter-style pricing. Single object for flat-rate models, or\nan array with one entry per context tier for context-tiered chat\nmodels: the first entry is the base rate, and each later entry\napplies from its `min_context` input tokens. All values are\nUSD strings. Per-token fields (`prompt`, `completion`,\n`input_cache_read`) are per-token, not per-million; flat fields\n(`image`, `request`) are per-event. `\"-1\"` in `prompt`,\n`completion` and `input_cache_read` means the model is not\npriced per token (for example per second, per minute or per\n1,000 characters): read its rates from `unit_pricing`, or the\nfull breakdown in `pricing_rows`.\n","title":"ModelDetailPricing"},"ModelDetailPricingRowsItems":{"type":"object","properties":{"label":{"type":"string"},"spec":{"type":"string"},"value":{"type":"string"}},"title":"ModelDetailPricingRowsItems"},"ModelDetailDiscount":{"type":"object","properties":{"label":{"type":"string"},"percent":{"type":"number","format":"double"}},"description":"Display discount summary. When present, `label` uses the `Save up to X%` format and `percent` is the maximum advertised savings for the model.","title":"ModelDetailDiscount"},"ModelDetailParametersItemsType":{"type":"string","enum":["string","number","integer","boolean","enum","array","object","file","image","video","audio"],"title":"ModelDetailParametersItemsType"},"ModelDetailParametersItems":{"type":"object","properties":{"name":{"type":"string"},"type":{"$ref":"#/components/schemas/ModelDetailParametersItemsType"},"required":{"type":"boolean"},"description":{"type":"string"},"default":{"description":"Any type"},"min":{"type":"number","format":"double"},"max":{"type":"number","format":"double"},"allowed_values":{"type":"array","items":{"description":"Any type"}}},"title":"ModelDetailParametersItems"},"ModelDetail":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"display_name":{"type":"string"},"author":{"type":"string","description":"Lowercase slug of the organization that made the model. This is who authored it, not who serves the request: EmpirioLabs runs some of these models on its own infrastructure."},"provider":{"type":"string","description":"Alias of `author`, emitted on every model and retained permanently for existing integrations. Prefer `author`."},"description":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"},"description":"Alternate model ids the API also accepts for this model, such as legacy dotted versions (\"deepseek-v3.2\"), provider-prefixed forms (\"deepseek/deepseek-v4-pro\"), and upstream ids. Requests, billing, and `GET /v1/models/{model}` all resolve them to the canonical `id`. Empty for models with no alternate ids."},"type":{"$ref":"#/components/schemas/ModelDetailType","description":"Technical model type."},"category":{"$ref":"#/components/schemas/ModelDetailCategory","description":"Catalog grouping the model is filtered under."},"native_inference":{"type":"boolean","description":"True when EmpirioLabs serves the model on its own managed GPU infrastructure (the Native Inference designation shown in the catalog). Always present. Combine it with `category` to select native models, for example native text models."},"weight_precision":{"type":["string","null"],"description":"Exact served weight precision, verbatim from the catalog and identical to the value shown on the model's documentation page (for example \"FP8 weights + FP8 KV\"). Null when unknown or not applicable."},"hugging_face_id":{"type":["string","null"],"description":"Hugging Face repository of the exact weights EmpirioLabs serves for this model (for example \"Qwen/Qwen3.5-9B\"). For a quantized build it names the quantized repository. Set on native models (`native_inference` true) and null otherwise."},"context_window":{"type":["integer","null"]},"context_length":{"type":["integer","null"],"description":"OpenRouter-convention alias of `context_window`. Same value, surfaced under the field name third-party tools look for."},"modalities":{"type":"array","items":{"type":"string"},"description":"Combined input plus output modality labels."},"input_modalities":{"type":"array","items":{"type":"string"}},"output_modalities":{"type":"array","items":{"type":"string"}},"features":{"type":"array","items":{"type":"string"},"description":"Capability tags such as `reasoning`, `vision`, or `video_generation`."},"max_output_tokens":{"type":["integer","null"]},"capabilities":{"$ref":"#/components/schemas/ModelDetailCapabilities","description":"Boolean capability flags for quick feature checks."},"supported_endpoints":{"type":"array","items":{"type":"string"},"description":"API routes this model accepts, for example `POST /v1/chat/completions`."},"pricing":{"$ref":"#/components/schemas/ModelDetailPricing","description":"OpenRouter-style pricing. Single object for flat-rate models, or\nan array with one entry per context tier for context-tiered chat\nmodels: the first entry is the base rate, and each later entry\napplies from its `min_context` input tokens. All values are\nUSD strings. Per-token fields (`prompt`, `completion`,\n`input_cache_read`) are per-token, not per-million; flat fields\n(`image`, `request`) are per-event. `\"-1\"` in `prompt`,\n`completion` and `input_cache_read` means the model is not\npriced per token (for example per second, per minute or per\n1,000 characters): read its rates from `unit_pricing`, or the\nfull breakdown in `pricing_rows`.\n"},"pricing_rows":{"type":"array","items":{"$ref":"#/components/schemas/ModelDetailPricingRowsItems"},"description":"EmpirioLabs' display-friendly breakdown including tool fees, per-image/second/minute rates, and full tier ladders. Use this when you need the complete picture."},"unit_pricing":{"type":"array","items":{"$ref":"#/components/schemas/UnitPrice"},"description":"Machine-readable prices from `pricing_rows`, as on the list route."},"logo":{"type":"string","format":"uri"},"model_released_at":{"type":["string","null"],"format":"date","description":"Exact public release date of the underlying model when verified. Null when the date has not been verified yet."},"deprecation_date":{"type":"string","format":"date","description":"Scheduled retirement date. Present only when a retirement has been scheduled; the model is removed from the catalog and stops routing on this date. Absent means no retirement is planned. Poll this field to migrate before a model you depend on goes away."},"deprecated":{"type":"boolean","description":"Present and true only alongside `deprecation_date`. Absent for every model with no scheduled retirement."},"is_new":{"type":"boolean"},"discount":{"oneOf":[{"$ref":"#/components/schemas/ModelDetailDiscount"},{"type":"null"}],"description":"Display discount summary. When present, `label` uses the `Save up to X%` format and `percent` is the maximum advertised savings for the model."},"parameters":{"type":"array","items":{"$ref":"#/components/schemas/ModelDetailParametersItems"}}},"title":"ModelDetail"},"ErrorError":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"param":{"type":"string"}},"title":"ErrorError"},"Error":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/ErrorError"}},"title":"Error"},"ChatRequestMessagesItemsRole":{"type":"string","enum":["system","user","assistant","tool"],"title":"ChatRequestMessagesItemsRole"},"ChatRequestMessagesItemsContentOneOf1Items":{"type":"object","properties":{},"title":"ChatRequestMessagesItemsContentOneOf1Items"},"ChatRequestMessagesItemsContent1":{"type":"array","items":{"$ref":"#/components/schemas/ChatRequestMessagesItemsContentOneOf1Items"},"title":"ChatRequestMessagesItemsContent1"},"ChatRequestMessagesItemsContent":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ChatRequestMessagesItemsContent1"}],"title":"ChatRequestMessagesItemsContent"},"ChatRequestMessagesItems":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/ChatRequestMessagesItemsRole"},"content":{"$ref":"#/components/schemas/ChatRequestMessagesItemsContent"}},"title":"ChatRequestMessagesItems"},"ChatRequestStreamOptions":{"type":"object","properties":{"include_usage":{"type":"boolean","default":false}},"description":"Streaming options, used with `stream: true`. Without them, `usage` arrives at the end of the stream on a chunk that also has `choices`. Set `include_usage` to `true` to receive it the way OpenAI sends it: in its own chunk just before `data: [DONE]`, whose `choices` is an empty list. Some models still report it on a chunk with `choices`.","title":"ChatRequestStreamOptions"},"ChatRequestToolsItems":{"type":"object","properties":{},"title":"ChatRequestToolsItems"},"ChatRequestToolChoice0":{"type":"string","enum":["auto","none","required"],"title":"ChatRequestToolChoice0"},"ChatRequestToolChoice":{"oneOf":[{"$ref":"#/components/schemas/ChatRequestToolChoice0"},{"type":"object","additionalProperties":{"description":"Any type"}}],"description":"How the model uses `tools`: `auto`, `none`, `required`, or an object naming one function.","title":"ChatRequestToolChoice"},"ChatRequestResponseFormatType":{"type":"string","enum":["text","json_object","json_schema"],"description":"Output format. `text` (default, unconstrained), `json_object` (any valid JSON object), or `json_schema` (schema-enforced).","title":"ChatRequestResponseFormatType"},"ChatRequestResponseFormatJsonSchemaSchema":{"type":"object","properties":{},"description":"A JSON Schema object describing the required output shape.","title":"ChatRequestResponseFormatJsonSchemaSchema"},"ChatRequestResponseFormatJsonSchema":{"type":"object","properties":{"name":{"type":"string","description":"A name for the schema."},"strict":{"type":"boolean","description":"Enforce strict conformance to the schema."},"schema":{"$ref":"#/components/schemas/ChatRequestResponseFormatJsonSchemaSchema","description":"A JSON Schema object describing the required output shape."}},"description":"Required when `type` is `json_schema`. Names the schema the output must match.","title":"ChatRequestResponseFormatJsonSchema"},"ChatRequestResponseFormat":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ChatRequestResponseFormatType","description":"Output format. `text` (default, unconstrained), `json_object` (any valid JSON object), or `json_schema` (schema-enforced)."},"json_schema":{"$ref":"#/components/schemas/ChatRequestResponseFormatJsonSchema","description":"Required when `type` is `json_schema`. Names the schema the output must match."}},"description":"Constrain the output format on models that advertise structured output. Omit it for normal text. Set `{ \"type\": \"json_object\" }` to force a valid JSON object (JSON mode). Set `{ \"type\": \"json_schema\", \"json_schema\": { \"name\": \"...\", \"strict\": true, \"schema\": { ... } } }` to force output that conforms to a JSON Schema. Support is per model: check the `structured_output` field and the \"Structured Outputs\" capability on `GET /v1/models/{model}`. Sending it to a model that does not support the requested format returns a 400.","title":"ChatRequestResponseFormat"},"ChatRequest":{"type":"object","properties":{"model":{"type":"string","description":"Chat model id from the catalog, for example `qwen3-7-max`."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ChatRequestMessagesItems"},"description":"The conversation so far, as `role` and `content` messages."},"stream":{"type":"boolean","default":false},"stream_options":{"$ref":"#/components/schemas/ChatRequestStreamOptions","description":"Streaming options, used with `stream: true`. Without them, `usage` arrives at the end of the stream on a chunk that also has `choices`. Set `include_usage` to `true` to receive it the way OpenAI sends it: in its own chunk just before `data: [DONE]`, whose `choices` is an empty list. Some models still report it on a chunk with `choices`."},"temperature":{"type":"number","format":"double","minimum":0,"maximum":2,"description":"Sampling temperature. Lower values give more focused output, higher values more varied output."},"max_tokens":{"type":"integer","description":"Maximum number of tokens to generate."},"tools":{"type":"array","items":{"$ref":"#/components/schemas/ChatRequestToolsItems"},"description":"Function definitions the model may call, in the OpenAI tools format."},"tool_choice":{"$ref":"#/components/schemas/ChatRequestToolChoice","description":"How the model uses `tools`: `auto`, `none`, `required`, or an object naming one function."},"response_format":{"$ref":"#/components/schemas/ChatRequestResponseFormat","description":"Constrain the output format on models that advertise structured output. Omit it for normal text. Set `{ \"type\": \"json_object\" }` to force a valid JSON object (JSON mode). Set `{ \"type\": \"json_schema\", \"json_schema\": { \"name\": \"...\", \"strict\": true, \"schema\": { ... } } }` to force output that conforms to a JSON Schema. Support is per model: check the `structured_output` field and the \"Structured Outputs\" capability on `GET /v1/models/{model}`. Sending it to a model that does not support the requested format returns a 400."},"enable_thinking":{"type":"boolean","description":"Enable model reasoning on models that advertise this parameter."},"thinking_budget":{"type":"integer","minimum":1,"description":"Maximum tokens reserved for model reasoning on models that advertise this parameter."},"disable_formatting":{"type":"boolean","default":false,"description":"Return raw upstream response with no server-side formatting."}},"required":["model","messages"],"title":"ChatRequest"},"ChatResponseChoicesItemsMessageToolCallsItems":{"type":"object","properties":{},"title":"ChatResponseChoicesItemsMessageToolCallsItems"},"ChatResponseChoicesItemsMessage":{"type":"object","properties":{"role":{"type":"string"},"content":{"type":"string"},"tool_calls":{"type":"array","items":{"$ref":"#/components/schemas/ChatResponseChoicesItemsMessageToolCallsItems"}}},"title":"ChatResponseChoicesItemsMessage"},"ChatResponseChoicesItemsFinishReason":{"type":"string","enum":["stop","length","tool_calls","content_filter"],"title":"ChatResponseChoicesItemsFinishReason"},"ChatResponseChoicesItems":{"type":"object","properties":{"index":{"type":"integer"},"message":{"$ref":"#/components/schemas/ChatResponseChoicesItemsMessage"},"finish_reason":{"$ref":"#/components/schemas/ChatResponseChoicesItemsFinishReason"}},"title":"ChatResponseChoicesItems"},"Usage":{"type":"object","properties":{"prompt_tokens":{"type":"integer"},"completion_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}},"title":"Usage"},"ChatResponse":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"created":{"type":"integer"},"model":{"type":"string"},"choices":{"type":"array","items":{"$ref":"#/components/schemas/ChatResponseChoicesItems"}},"usage":{"$ref":"#/components/schemas/Usage"}},"title":"ChatResponse"},"CompletionRequestPrompt":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"title":"CompletionRequestPrompt"},"CompletionRequestStreamOptions":{"type":"object","properties":{"include_usage":{"type":"boolean","default":false}},"description":"Streaming options, used with `stream: true`. Without them, `usage` arrives at the end of the stream on a chunk that also has `choices`. Set `include_usage` to `true` to receive it the way OpenAI sends it: in its own chunk just before `data: [DONE]`, whose `choices` is an empty list. Some models still report it on a chunk with `choices`.","title":"CompletionRequestStreamOptions"},"CompletionRequestStop":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"title":"CompletionRequestStop"},"CompletionRequest":{"type":"object","properties":{"model":{"type":"string"},"prompt":{"$ref":"#/components/schemas/CompletionRequestPrompt"},"stream":{"type":"boolean","default":false},"stream_options":{"$ref":"#/components/schemas/CompletionRequestStreamOptions","description":"Streaming options, used with `stream: true`. Without them, `usage` arrives at the end of the stream on a chunk that also has `choices`. Set `include_usage` to `true` to receive it the way OpenAI sends it: in its own chunk just before `data: [DONE]`, whose `choices` is an empty list. Some models still report it on a chunk with `choices`."},"temperature":{"type":"number","format":"double","minimum":0,"maximum":2},"max_tokens":{"type":"integer"},"top_p":{"type":"number","format":"double","minimum":0,"maximum":1},"stop":{"$ref":"#/components/schemas/CompletionRequestStop"},"logit_bias":{"type":"object","additionalProperties":{"type":"number","format":"double"},"description":"Bias token IDs by adding positive or negative values before sampling."}},"required":["model","prompt"],"title":"CompletionRequest"},"CompletionResponseChoicesItemsFinishReason":{"type":"string","enum":["stop","length","content_filter"],"title":"CompletionResponseChoicesItemsFinishReason"},"CompletionResponseChoicesItems":{"type":"object","properties":{"text":{"type":"string"},"index":{"type":"integer"},"finish_reason":{"$ref":"#/components/schemas/CompletionResponseChoicesItemsFinishReason"}},"title":"CompletionResponseChoicesItems"},"CompletionResponse":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"created":{"type":"integer"},"model":{"type":"string"},"choices":{"type":"array","items":{"$ref":"#/components/schemas/CompletionResponseChoicesItems"}},"usage":{"$ref":"#/components/schemas/Usage"}},"title":"CompletionResponse"},"ResponseRequestInputOneOf1Items":{"type":"object","properties":{},"title":"ResponseRequestInputOneOf1Items"},"ResponseRequestInput1":{"type":"array","items":{"$ref":"#/components/schemas/ResponseRequestInputOneOf1Items"},"title":"ResponseRequestInput1"},"ResponseRequestInput":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ResponseRequestInput1"}],"title":"ResponseRequestInput"},"ResponseRequest":{"type":"object","properties":{"model":{"type":"string"},"input":{"$ref":"#/components/schemas/ResponseRequestInput"},"enable_thinking":{"type":"boolean","description":"Enable model reasoning on models that advertise this parameter."},"thinking_budget":{"type":"integer","minimum":1,"description":"Maximum tokens reserved for model reasoning on models that advertise this parameter."}},"required":["model","input"],"title":"ResponseRequest"},"Responses_createResponse_Response_200":{"type":"object","properties":{},"title":"Responses_createResponse_Response_200"},"MessageRequestThinkingType":{"type":"string","enum":["enabled","disabled"],"title":"MessageRequestThinkingType"},"MessageRequestThinking":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/MessageRequestThinkingType"},"budget_tokens":{"type":"integer","minimum":1}},"description":"Anthropic-style thinking control. `budget_tokens` maps to `thinking_budget` for supported models.","title":"MessageRequestThinking"},"MessageRequestSystemOneOf1Items":{"type":"object","properties":{},"title":"MessageRequestSystemOneOf1Items"},"MessageRequestSystem1":{"type":"array","items":{"$ref":"#/components/schemas/MessageRequestSystemOneOf1Items"},"title":"MessageRequestSystem1"},"MessageRequestSystem":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/MessageRequestSystem1"}],"title":"MessageRequestSystem"},"MessageRequestMessagesItems":{"type":"object","properties":{},"title":"MessageRequestMessagesItems"},"MessageRequest":{"type":"object","properties":{"model":{"type":"string"},"max_tokens":{"type":"integer"},"enable_thinking":{"type":"boolean","description":"Enable model reasoning on models that advertise this parameter."},"thinking_budget":{"type":"integer","minimum":1,"description":"Maximum tokens reserved for model reasoning on models that advertise this parameter."},"thinking":{"$ref":"#/components/schemas/MessageRequestThinking","description":"Anthropic-style thinking control. `budget_tokens` maps to `thinking_budget` for supported models."},"system":{"$ref":"#/components/schemas/MessageRequestSystem"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/MessageRequestMessagesItems"}}},"required":["model","max_tokens","messages"],"title":"MessageRequest"},"Messages_createMessage_Response_200":{"type":"object","properties":{},"title":"Messages_createMessage_Response_200"},"GeminiContentRole":{"type":"string","enum":["user","model"],"title":"GeminiContentRole"},"GeminiPartInlineData":{"type":"object","properties":{"mimeType":{"type":"string"},"data":{"type":"string","description":"Base64-encoded bytes."}},"title":"GeminiPartInlineData"},"GeminiPartFileData":{"type":"object","properties":{"mimeType":{"type":"string"},"fileUri":{"type":"string"}},"title":"GeminiPartFileData"},"GeminiPartFunctionCallArgs":{"type":"object","properties":{},"title":"GeminiPartFunctionCallArgs"},"GeminiPartFunctionCall":{"type":"object","properties":{"name":{"type":"string"},"args":{"$ref":"#/components/schemas/GeminiPartFunctionCallArgs"}},"title":"GeminiPartFunctionCall"},"GeminiPartFunctionResponseResponse":{"type":"object","properties":{},"title":"GeminiPartFunctionResponseResponse"},"GeminiPartFunctionResponse":{"type":"object","properties":{"name":{"type":"string"},"response":{"$ref":"#/components/schemas/GeminiPartFunctionResponseResponse"}},"title":"GeminiPartFunctionResponse"},"GeminiPart":{"type":"object","properties":{"text":{"type":"string"},"inlineData":{"$ref":"#/components/schemas/GeminiPartInlineData"},"fileData":{"$ref":"#/components/schemas/GeminiPartFileData"},"functionCall":{"$ref":"#/components/schemas/GeminiPartFunctionCall"},"functionResponse":{"$ref":"#/components/schemas/GeminiPartFunctionResponse"}},"description":"A content part. Exactly one field is set per part.","title":"GeminiPart"},"GeminiContent":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/GeminiContentRole"},"parts":{"type":"array","items":{"$ref":"#/components/schemas/GeminiPart"}}},"title":"GeminiContent"},"GeminiGenerateContentRequestGenerationConfigResponseSchema":{"type":"object","properties":{},"title":"GeminiGenerateContentRequestGenerationConfigResponseSchema"},"GeminiGenerateContentRequestGenerationConfigThinkingConfig":{"type":"object","properties":{"thinkingBudget":{"type":"integer"},"includeThoughts":{"type":"boolean"}},"title":"GeminiGenerateContentRequestGenerationConfigThinkingConfig"},"GeminiGenerateContentRequestGenerationConfig":{"type":"object","properties":{"temperature":{"type":"number","format":"double"},"topP":{"type":"number","format":"double"},"topK":{"type":"integer"},"maxOutputTokens":{"type":"integer"},"stopSequences":{"type":"array","items":{"type":"string"}},"candidateCount":{"type":"integer"},"responseMimeType":{"type":"string"},"responseSchema":{"$ref":"#/components/schemas/GeminiGenerateContentRequestGenerationConfigResponseSchema"},"thinkingConfig":{"$ref":"#/components/schemas/GeminiGenerateContentRequestGenerationConfigThinkingConfig"}},"title":"GeminiGenerateContentRequestGenerationConfig"},"GeminiGenerateContentRequestToolsItemsFunctionDeclarationsItemsParameters":{"type":"object","properties":{},"title":"GeminiGenerateContentRequestToolsItemsFunctionDeclarationsItemsParameters"},"GeminiGenerateContentRequestToolsItemsFunctionDeclarationsItems":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"$ref":"#/components/schemas/GeminiGenerateContentRequestToolsItemsFunctionDeclarationsItemsParameters"}},"title":"GeminiGenerateContentRequestToolsItemsFunctionDeclarationsItems"},"GeminiGenerateContentRequestToolsItems":{"type":"object","properties":{"functionDeclarations":{"type":"array","items":{"$ref":"#/components/schemas/GeminiGenerateContentRequestToolsItemsFunctionDeclarationsItems"}}},"title":"GeminiGenerateContentRequestToolsItems"},"GeminiGenerateContentRequestToolConfigFunctionCallingConfigMode":{"type":"string","enum":["AUTO","ANY","NONE"],"title":"GeminiGenerateContentRequestToolConfigFunctionCallingConfigMode"},"GeminiGenerateContentRequestToolConfigFunctionCallingConfig":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/GeminiGenerateContentRequestToolConfigFunctionCallingConfigMode"},"allowedFunctionNames":{"type":"array","items":{"type":"string"}}},"title":"GeminiGenerateContentRequestToolConfigFunctionCallingConfig"},"GeminiGenerateContentRequestToolConfig":{"type":"object","properties":{"functionCallingConfig":{"$ref":"#/components/schemas/GeminiGenerateContentRequestToolConfigFunctionCallingConfig"}},"title":"GeminiGenerateContentRequestToolConfig"},"GeminiGenerateContentRequestSafetySettingsItems":{"type":"object","properties":{},"title":"GeminiGenerateContentRequestSafetySettingsItems"},"GeminiGenerateContentRequest":{"type":"object","properties":{"contents":{"type":"array","items":{"$ref":"#/components/schemas/GeminiContent"},"description":"Conversation turns. Roles are `user` and `model`."},"systemInstruction":{"$ref":"#/components/schemas/GeminiContent"},"generationConfig":{"$ref":"#/components/schemas/GeminiGenerateContentRequestGenerationConfig"},"tools":{"type":"array","items":{"$ref":"#/components/schemas/GeminiGenerateContentRequestToolsItems"}},"toolConfig":{"$ref":"#/components/schemas/GeminiGenerateContentRequestToolConfig"},"safetySettings":{"type":"array","items":{"$ref":"#/components/schemas/GeminiGenerateContentRequestSafetySettingsItems"},"description":"Accepted for compatibility."}},"required":["contents"],"description":"Native Google Gemini generateContent request body.","title":"GeminiGenerateContentRequest"},"GeminiGenerateContentResponseCandidatesItems":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/GeminiContent"},"finishReason":{"type":"string"},"index":{"type":"integer"}},"title":"GeminiGenerateContentResponseCandidatesItems"},"GeminiGenerateContentResponseUsageMetadata":{"type":"object","properties":{"promptTokenCount":{"type":"integer"},"candidatesTokenCount":{"type":"integer"},"totalTokenCount":{"type":"integer"},"thoughtsTokenCount":{"type":"integer"},"cachedContentTokenCount":{"type":"integer"}},"title":"GeminiGenerateContentResponseUsageMetadata"},"GeminiGenerateContentResponse":{"type":"object","properties":{"candidates":{"type":"array","items":{"$ref":"#/components/schemas/GeminiGenerateContentResponseCandidatesItems"}},"usageMetadata":{"$ref":"#/components/schemas/GeminiGenerateContentResponseUsageMetadata"},"modelVersion":{"type":"string"},"responseId":{"type":"string"}},"title":"GeminiGenerateContentResponse"},"V1BetaModelsModelStreamGenerateContentPostParametersAlt":{"type":"string","enum":["sse"],"title":"V1BetaModelsModelStreamGenerateContentPostParametersAlt"},"Gemini_countTokens_Response_200":{"type":"object","properties":{"totalTokens":{"type":"integer","description":"Approximate total token count (estimate"}},"title":"Gemini_countTokens_Response_200"},"V1FilesPostRequestBodyContentMultipartFormDataSchemaPurpose":{"type":"string","enum":["batch"],"title":"V1FilesPostRequestBodyContentMultipartFormDataSchemaPurpose"},"Batch_createBatchFile_Response_200":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"bytes":{"type":"integer"},"filename":{"type":"string"},"purpose":{"type":"string"},"line_count":{"type":"integer"},"created_at":{"type":"integer"}},"title":"Batch_createBatchFile_Response_200"},"V1BatchesPostRequestBodyContentApplicationJsonSchemaEndpoint":{"type":"string","enum":["/v1/chat/completions","/v1/embeddings"],"default":"/v1/chat/completions","description":"API path every line of the file calls, for example `/v1/chat/completions`.","title":"V1BatchesPostRequestBodyContentApplicationJsonSchemaEndpoint"},"V1BatchesPostRequestBodyContentApplicationJsonSchemaMetadata":{"type":"object","properties":{},"description":"Your own key-value labels for the batch.","title":"V1BatchesPostRequestBodyContentApplicationJsonSchemaMetadata"},"BatchStatus":{"type":"string","enum":["validating","in_progress","finalizing","completed","failed","expired","cancelling","cancelled"],"title":"BatchStatus"},"BatchRequestCounts":{"type":"object","properties":{"total":{"type":"integer"},"completed":{"type":"integer"},"failed":{"type":"integer"}},"title":"BatchRequestCounts"},"BatchMetadata":{"type":"object","properties":{},"title":"BatchMetadata"},"Batch":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"endpoint":{"type":"string"},"input_file_id":{"type":"string"},"completion_window":{"type":"string"},"status":{"$ref":"#/components/schemas/BatchStatus"},"output_file_id":{"type":["string","null"]},"error_file_id":{"type":["string","null"]},"request_counts":{"$ref":"#/components/schemas/BatchRequestCounts"},"metadata":{"oneOf":[{"$ref":"#/components/schemas/BatchMetadata"},{"type":"null"}]},"created_at":{"type":["integer","null"]},"completed_at":{"type":["integer","null"]},"expires_at":{"type":["integer","null"]}},"title":"Batch"},"Batch_listBatches_Response_200":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Batch"}}},"title":"Batch_listBatches_Response_200"},"V1EmbeddingsPostRequestBodyContentApplicationJsonSchemaInput":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Text to embed, or an array of texts.","title":"V1EmbeddingsPostRequestBodyContentApplicationJsonSchemaInput"},"V1EmbeddingsPostRequestBodyContentApplicationJsonSchemaEncodingFormat":{"type":"string","enum":["float","base64"],"default":"float","description":"Vector encoding: `float` arrays or `base64` strings.","title":"V1EmbeddingsPostRequestBodyContentApplicationJsonSchemaEncodingFormat"},"V1EmbeddingsPostResponsesContentApplicationJsonSchemaDataItems":{"type":"object","properties":{"object":{"type":"string"},"index":{"type":"integer"},"embedding":{"type":"array","items":{"type":"number","format":"double"}}},"title":"V1EmbeddingsPostResponsesContentApplicationJsonSchemaDataItems"},"Embeddings_createEmbeddings_Response_200":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/V1EmbeddingsPostResponsesContentApplicationJsonSchemaDataItems"}},"model":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"}},"title":"Embeddings_createEmbeddings_Response_200"},"V1ReranksPostResponsesContentApplicationJsonSchemaOutputResultsItemsDocument":{"type":"object","properties":{"text":{"type":"string"}},"description":"Returned only when `return_documents` is true.","title":"V1ReranksPostResponsesContentApplicationJsonSchemaOutputResultsItemsDocument"},"V1ReranksPostResponsesContentApplicationJsonSchemaOutputResultsItems":{"type":"object","properties":{"index":{"type":"integer","description":"Original index of the document in the input array."},"relevance_score":{"type":"number","format":"double","description":"0-1 score; higher = more relevant. Not comparable across requests."},"document":{"$ref":"#/components/schemas/V1ReranksPostResponsesContentApplicationJsonSchemaOutputResultsItemsDocument","description":"Returned only when `return_documents` is true."}},"title":"V1ReranksPostResponsesContentApplicationJsonSchemaOutputResultsItems"},"V1ReranksPostResponsesContentApplicationJsonSchemaOutput":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/V1ReranksPostResponsesContentApplicationJsonSchemaOutputResultsItems"}}},"title":"V1ReranksPostResponsesContentApplicationJsonSchemaOutput"},"Reranks_createReranks_Response_200":{"type":"object","properties":{"output":{"$ref":"#/components/schemas/V1ReranksPostResponsesContentApplicationJsonSchemaOutput"},"usage":{"$ref":"#/components/schemas/Usage"},"request_id":{"type":"string"}},"title":"Reranks_createReranks_Response_200"},"DecisionMediaNodeType":{"type":"string","enum":["image","audio","video"],"title":"DecisionMediaNodeType"},"DecisionMediaNode":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionMediaNodeType"},"url":{"type":"string","format":"uri","description":"Public `https://` URL of the file. Send either `url`, or `data` with `mime`."},"data":{"type":"string","description":"The file as base64. Requires `mime`."},"mime":{"type":"string","description":"MIME type of `data`, for example `image/png`."}},"required":["type"],"description":"An image, audio clip, or video inside `state`. Send a public `https://` URL in `url`, or the file as base64 in `data` with its MIME type in `mime`.","title":"DecisionMediaNode"},"DecisionRequestState":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/DecisionMediaNode"},{"type":"object","additionalProperties":{"description":"Any type"}},{"type":"array","items":{"description":"Any type"}}],"description":"The content to decide about: text, a JSON object, or a JSON array. Put images, audio, or video anywhere inside it as media nodes, for example `{\"type\": \"image\", \"url\": \"https://example.com/photo.png\"}`.\n\nThe state is counted once per request, however many questions refer to it.\n","title":"DecisionRequestState"},"DecisionNoulQuestionType":{"type":"string","enum":["noul"],"title":"DecisionNoulQuestionType"},"DecisionInstructions":{"oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"description":"Any type"}},{"type":"array","items":{"description":"Any type"}}],"description":"The question to answer. Usually text; an object or array can hold the question in one field and the data it refers to in others.","title":"DecisionInstructions"},"DecisionNoulQuestionCriteria":{"type":"object","properties":{"true":{"type":"string","description":"What counts as yes."},"false":{"type":"string","description":"What counts as no."}},"description":"Optional descriptions of what counts as yes and what counts as no.","title":"DecisionNoulQuestionCriteria"},"DecisionChoiceQuestionType":{"type":"string","enum":["choice"],"title":"DecisionChoiceQuestionType"},"DecisionScoreQuestionType":{"type":"string","enum":["score"],"title":"DecisionScoreQuestionType"},"DecisionToolQuestionType":{"type":"string","enum":["tool"],"title":"DecisionToolQuestionType"},"DecisionFunctionToolType":{"type":"string","enum":["function"],"title":"DecisionFunctionToolType"},"DecisionFunctionToolFunctionParameters":{"type":"object","properties":{},"description":"JSON Schema for the function arguments. Every `enum` and `boolean` argument gets its own distribution in the answer; other arguments are listed in `open_arguments`.","title":"DecisionFunctionToolFunctionParameters"},"DecisionFunctionToolFunction":{"type":"object","properties":{"name":{"type":"string","description":"Function name. Answers refer to the function by this name."},"description":{"type":"string","description":"What the function does. Used when choosing between functions."},"parameters":{"$ref":"#/components/schemas/DecisionFunctionToolFunctionParameters","description":"JSON Schema for the function arguments. Every `enum` and `boolean` argument gets its own distribution in the answer; other arguments are listed in `open_arguments`."}},"required":["name"],"title":"DecisionFunctionToolFunction"},"DecisionFunctionTool":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionFunctionToolType"},"function":{"$ref":"#/components/schemas/DecisionFunctionToolFunction"}},"required":["type","function"],"title":"DecisionFunctionTool"},"DecisionQuestion":{"oneOf":[{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionNoulQuestionType"},"instructions":{"$ref":"#/components/schemas/DecisionInstructions"},"criteria":{"$ref":"#/components/schemas/DecisionNoulQuestionCriteria","description":"Optional descriptions of what counts as yes and what counts as no."},"abstain":{"type":"boolean","default":false,"description":"When true, the answer also carries `abstain`, the probability that the state does not contain what the question needs; the rest of the answer assumes that it does."}},"required":["type","instructions"],"description":"A yes/no question. The answer is the probability of yes."},{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionChoiceQuestionType"},"instructions":{"$ref":"#/components/schemas/DecisionInstructions"},"criteria":{"type":"object","additionalProperties":{"type":"string"},"description":"2 to 255 options. Each key is an option name, returned unchanged in the answer; each value describes the option, or is null when the name is enough. A choice between exactly two yes/no options, such as `yes` and `no`, returns the same probability as the equivalent `noul` question."},"abstain":{"type":"boolean","default":false,"description":"When true, the answer also carries `abstain`, the probability that the state does not contain what the question needs; the rest of the answer assumes that it does. A `choice` with `abstain` takes at most 254 options."}},"required":["type","instructions","criteria"],"description":"A question with named options. The answer is the most likely option and the probability of each."},{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionScoreQuestionType"},"instructions":{"$ref":"#/components/schemas/DecisionInstructions"},"criteria":{"type":"array","items":{"type":"string"},"description":"2 to 10 level descriptions, lowest first. Levels are numbered from 0 in this order."},"abstain":{"type":"boolean","default":false,"description":"When true, the answer also carries `abstain`, the probability that the state does not contain what the question needs; the rest of the answer assumes that it does."}},"required":["type","instructions","criteria"],"description":"A question on an ordered scale. The answer is the expected level and the probability of each level."},{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionToolQuestionType"},"instructions":{"$ref":"#/components/schemas/DecisionInstructions"},"tools":{"type":"array","items":{"$ref":"#/components/schemas/DecisionFunctionTool"},"description":"1 to 254 function definitions, in the same format as `tools` on the Chat Completions endpoint."},"allow_none":{"type":"boolean","default":true,"description":"When true, `none` is added as an option, and `tool` in the answer is null when `none` is the most likely option."}},"required":["type","instructions","tools"],"description":"Which function to call. The answer is the most likely function, the probability of each, and a distribution for every `enum` and `boolean` argument."}],"discriminator":{"propertyName":"type"},"description":"A question about the state. `type` selects the question variant.","title":"DecisionQuestion"},"DecisionRequestLongContext":{"type":"string","enum":["fast","full"],"default":"fast","description":"How a state longer than 131,072 tokens is read. `fast` answers faster. `full` reads every token of the state; use it when an answer can depend on details anywhere in a long state. Images, audio, and video are read in full in both modes.\n\nA state of 131,072 tokens or fewer is always read in full. Usage counts the whole state in both modes.\n","title":"DecisionRequestLongContext"},"DecisionRequest":{"type":"object","properties":{"model":{"type":"string","description":"Decision model ID, for example `aplomb-1`. An unknown ID returns `404 model_not_found`."},"state":{"$ref":"#/components/schemas/DecisionRequestState","description":"The content to decide about: text, a JSON object, or a JSON array. Put images, audio, or video anywhere inside it as media nodes, for example `{\"type\": \"image\", \"url\": \"https://example.com/photo.png\"}`.\n\nThe state is counted once per request, however many questions refer to it.\n"},"questions":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DecisionQuestion"},"description":"Questions keyed by an ID you choose, 1 to 128 per request. Each question has a `type` (`noul`, `choice`, `score`, or `tool`) and `instructions`. A `choice` question takes `criteria` as an object of option name to description or null, a `score` question takes `criteria` as an array of 2 to 10 ordered levels, and a `tool` question takes `tools`, a list of function definitions.\n\nIDs cannot contain control characters. A request evaluates at most 512 questions in total, where each `tool` question counts as one plus one per `enum` or `boolean` argument.\n\nEach question is answered independently, and answers come back under the same IDs. IDs are not shown to the model.\n"},"long_context":{"$ref":"#/components/schemas/DecisionRequestLongContext","default":"fast","description":"How a state longer than 131,072 tokens is read. `fast` answers faster. `full` reads every token of the state; use it when an answer can depend on details anywhere in a long state. Images, audio, and video are read in full in both modes.\n\nA state of 131,072 tokens or fewer is always read in full. Usage counts the whole state in both modes.\n"}},"required":["model","state","questions"],"title":"DecisionRequest"},"DecisionNoulAnswerType":{"type":"string","enum":["noul"],"title":"DecisionNoulAnswerType"},"DecisionConfidence":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"How concentrated the distribution is, from 0 (every option equally likely) to 1 (all probability on one option). For n options whose highest probability is p, confidence is `(n * p - 1) / (n - 1)`; for a `noul` answer it is `|2p - 1|`.","title":"DecisionConfidence"},"DecisionChoiceAnswerType":{"type":"string","enum":["choice"],"title":"DecisionChoiceAnswerType"},"DecisionProbabilities":{"type":"object","additionalProperties":{"type":"number","format":"double"},"description":"Probability of each option, keyed by option. Values are rounded to at most 8 decimal places. The total is 1, including any separate `none_probability` on a tool answer.","title":"DecisionProbabilities"},"DecisionScoreAnswerType":{"type":"string","enum":["score"],"title":"DecisionScoreAnswerType"},"DecisionToolAnswerType":{"type":"string","enum":["tool"],"title":"DecisionToolAnswerType"},"DecisionArgumentAnswerValue":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The most likely value.","title":"DecisionArgumentAnswerValue"},"DecisionArgumentAnswer":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/DecisionArgumentAnswerValue","description":"The most likely value."},"probabilities":{"$ref":"#/components/schemas/DecisionProbabilities"},"probability_true":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Probability that the argument is true. Present for `boolean` arguments."},"confidence":{"$ref":"#/components/schemas/DecisionConfidence"}},"required":["value","confidence"],"description":"The answer for one argument. `enum` arguments carry `probabilities`; `boolean` arguments carry `probability_true`.","title":"DecisionArgumentAnswer"},"DecisionAnswer":{"oneOf":[{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionNoulAnswerType"},"noul":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Probability that the answer is yes."},"confidence":{"$ref":"#/components/schemas/DecisionConfidence"},"abstain":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Present when the question set `abstain` to true: the probability that the state does not contain what the question needs."}},"required":["type","noul","confidence"],"description":"noul variant"},{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionChoiceAnswerType"},"choice":{"type":"string","description":"The most likely option."},"probabilities":{"$ref":"#/components/schemas/DecisionProbabilities"},"confidence":{"$ref":"#/components/schemas/DecisionConfidence"},"abstain":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Present when the question set `abstain` to true: the probability that the state does not contain what the question needs."}},"required":["type","choice","probabilities","confidence"],"description":"choice variant"},{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionScoreAnswerType"},"score":{"type":"number","format":"double","description":"Expected level, from 0 up to the number of levels minus 1."},"legend":{"type":"object","additionalProperties":{"type":"string"},"description":"Each level number mapped to its description from `criteria`."},"probabilities":{"$ref":"#/components/schemas/DecisionProbabilities"},"confidence":{"$ref":"#/components/schemas/DecisionConfidence"},"abstain":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Present when the question set `abstain` to true: the probability that the state does not contain what the question needs."}},"required":["type","score","legend","probabilities","confidence"],"description":"score variant"},{"type":"object","properties":{"type":{"$ref":"#/components/schemas/DecisionToolAnswerType"},"tool":{"type":["string","null"],"description":"The most likely function name, returned unchanged, or null when no function applies. A function may be named `none`."},"probabilities":{"$ref":"#/components/schemas/DecisionProbabilities"},"none_probability":{"type":"number","format":"double","minimum":0,"maximum":1,"description":"Present when a supplied function is named `none` and `allow_none` is true. This is the probability that no function applies; `probabilities.none` then belongs to the actual function. Together these probabilities sum to 1."},"confidence":{"$ref":"#/components/schemas/DecisionConfidence"},"arguments":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DecisionArgumentAnswer"}},"description":"For each function, a distribution for every `enum` and `boolean` argument: which value the argument should take if that function is called. Keyed by function name, then argument name."},"open_arguments":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"For each function, the arguments that are not `enum` or `boolean`, such as free text. Decision models do not fill these; produce them separately if you need them."}},"required":["type","tool","probabilities","confidence","arguments","open_arguments"],"description":"tool variant"}],"discriminator":{"propertyName":"type"},"description":"The answer to one question. `type` matches the question type.","title":"DecisionAnswer"},"DecisionUsageInputTokensDetails":{"type":"object","properties":{"text_tokens":{"type":"integer","description":"Tokens for the text of the state and the questions."},"image_tokens":{"type":"integer","description":"Tokens for images, at most 640 per image."},"audio_tokens":{"type":"integer","description":"Tokens for audio, about 13 per second."},"video_tokens":{"type":"integer","description":"Tokens for video, at most 256 per frame."}},"description":"Input tokens by modality.","title":"DecisionUsageInputTokensDetails"},"DecisionUsage":{"type":"object","properties":{"input_tokens":{"type":"integer","description":"Total input tokens for the request, the sum of `input_tokens_details`."},"output_tokens":{"type":"integer","description":"Always 0. Decision models do not generate text."},"input_tokens_details":{"$ref":"#/components/schemas/DecisionUsageInputTokensDetails","description":"Input tokens by modality."}},"required":["input_tokens","output_tokens","input_tokens_details"],"description":"Tokens counted for a decision request. Only input is counted: the state once, the text of each question, and each media item. There are no output tokens.","title":"DecisionUsage"},"DecisionResponseLongContext":{"type":"string","enum":["fast","full"],"description":"How the state was read: `fast` or `full`. A state of 131,072 tokens or fewer is always read in full, and a `fast` request can also be read in full.","title":"DecisionResponseLongContext"},"DecisionResponse":{"type":"object","properties":{"model":{"type":"string","description":"The model ID from the request."},"answers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DecisionAnswer"},"description":"One answer per question, keyed by the question IDs from the request."},"usage":{"$ref":"#/components/schemas/DecisionUsage"},"long_context":{"$ref":"#/components/schemas/DecisionResponseLongContext","description":"How the state was read: `fast` or `full`. A state of 131,072 tokens or fewer is always read in full, and a `fast` request can also be read in full."}},"required":["model","answers","usage","long_context"],"title":"DecisionResponse"},"DecisionErrorError":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code, for example `invalid_request` or `model_unavailable`."},"message":{"type":"string","description":"Explanation of the error. Validation errors name the offending field."}},"required":["code","message"],"title":"DecisionErrorError"},"DecisionError":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/DecisionErrorError"}},"required":["error"],"title":"DecisionError"},"V1ImagesGenerationsPostRequestBodyContentApplicationJsonSchemaResponseFormat":{"type":"string","enum":["url","b64_json"],"default":"url","title":"V1ImagesGenerationsPostRequestBodyContentApplicationJsonSchemaResponseFormat"},"JobAcceptedStatus":{"type":"string","enum":["processing","completed","failed"],"title":"JobAcceptedStatus"},"JobAccepted":{"type":"object","properties":{"job_id":{"type":"string"},"status":{"$ref":"#/components/schemas/JobAcceptedStatus"},"poll_url":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"title":"JobAccepted"},"ImageResponseDataItems":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"b64_json":{"type":"string","description":"Inline base64-encoded image bytes (only when response_format=b64_json)."}},"title":"ImageResponseDataItems"},"ImageResponse":{"type":"object","properties":{"created":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ImageResponseDataItems"}}},"title":"ImageResponse"},"Images_createImage_Response_200":{"oneOf":[{"$ref":"#/components/schemas/JobAccepted"},{"$ref":"#/components/schemas/ImageResponse"}],"title":"Images_createImage_Response_200"},"Images_analyzeImage_Response_200":{"type":"object","properties":{"answer":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"}},"title":"Images_analyzeImage_Response_200"},"V1ImagesEditsPostRequestBodyContentApplicationJsonSchemaResponseFormat":{"type":"string","enum":["url","b64_json"],"description":"Output format; `url` (default) returns signed URLs.","title":"V1ImagesEditsPostRequestBodyContentApplicationJsonSchemaResponseFormat"},"JobStatus":{"type":"string","enum":["processing","completed","failed","cancelled"],"title":"JobStatus"},"JobResult":{"type":"object","properties":{},"title":"JobResult"},"JobError":{"type":"object","properties":{},"title":"JobError"},"Job":{"type":"object","properties":{"job_id":{"type":"string"},"status":{"$ref":"#/components/schemas/JobStatus"},"created_at":{"type":"integer","description":"Unix timestamp (seconds) when the job was accepted."},"completed_at":{"type":"integer","description":"Unix timestamp (seconds) when the job finished. Present once the job is completed, failed or cancelled."},"endpoint":{"type":["string","null"],"description":"The endpoint that accepted the job, for example `/v1/videos/generations`."},"model":{"type":["string","null"],"description":"The model the job runs."},"partial":{"type":"boolean","description":"Present and `true` while a running job already returns part of its result in `result`."},"result":{"oneOf":[{"$ref":"#/components/schemas/JobResult"},{"type":"null"}]},"error":{"oneOf":[{"$ref":"#/components/schemas/JobError"},{"type":"null"}]}},"title":"Job"},"V1TemplatesGetParametersModality":{"type":"string","enum":["video","image"],"title":"V1TemplatesGetParametersModality"},"V1TemplatesGetParametersType":{"type":"string","enum":["video","image"],"title":"V1TemplatesGetParametersType"},"GenerationTemplateCategory":{"type":"string","enum":["viral","cinematic","motion","transform","social","extend","product","edit","portrait"],"title":"GenerationTemplateCategory"},"GenerationTemplateRequiredInputs":{"type":"object","properties":{"image":{"type":"boolean"},"video":{"type":"boolean"},"min_images":{"type":"integer"},"max_images":{"type":"integer"},"text_allowed":{"type":"boolean"}},"title":"GenerationTemplateRequiredInputs"},"GenerationTemplateModality":{"type":"string","enum":["video","image"],"title":"GenerationTemplateModality"},"GenerationTemplate":{"type":"object","properties":{"slug":{"type":"string"},"display_name":{"type":"string"},"category":{"$ref":"#/components/schemas/GenerationTemplateCategory"},"description":{"type":"string"},"recommended_model":{"type":"string"},"supported_models":{"type":"array","items":{"type":"string"}},"default_params":{"type":"object","additionalProperties":{"description":"Any type"}},"required_inputs":{"$ref":"#/components/schemas/GenerationTemplateRequiredInputs"},"metadata":{"type":"object","additionalProperties":{"description":"Any type"},"description":"Template-level UI hints (cover positioning, suggested prompts, picker labels). Fields are customer-safe."},"cover_image_url":{"type":["string","null"]},"preview_video_url":{"type":["string","null"]},"modality":{"$ref":"#/components/schemas/GenerationTemplateModality"},"is_featured":{"type":"boolean"},"display_order":{"type":"integer"},"updated_at":{"type":"string","format":"date-time"}},"description":"A creative-effect template for `/v1/images/generations` or\n`/v1/videos/generations`. Apply by passing `template: \"<slug>\"`\non the matching generation endpoint.\n","title":"GenerationTemplate"},"Generation_Templates_listGenerationTemplates_Response_200":{"type":"object","properties":{"object":{"type":"string"},"template_count":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GenerationTemplate"}}},"title":"Generation Templates_listGenerationTemplates_Response_200"},"V1VideosTemplatesGetParametersCategory":{"type":"string","enum":["viral","cinematic","motion","transform","social","extend"],"title":"V1VideosTemplatesGetParametersCategory"},"V1VideosTemplatesGetParametersModality":{"type":"string","enum":["video","image"],"title":"V1VideosTemplatesGetParametersModality"},"Videos_listVideoTemplates_Response_200":{"type":"object","properties":{"object":{"type":"string"},"template_count":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GenerationTemplate"}}},"title":"Videos_listVideoTemplates_Response_200"},"Images_listImageTemplates_Response_200":{"type":"object","properties":{"object":{"type":"string"},"template_count":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GenerationTemplate"}}},"title":"Images_listImageTemplates_Response_200"},"ComposeRecipeVisualMode":{"type":"string","enum":["auto","video","image","gameplay","lip_sync"],"title":"ComposeRecipeVisualMode"},"ComposeRecipeAudioMode":{"type":"string","enum":["voiceover","lip_sync","music","none"],"title":"ComposeRecipeAudioMode"},"ComposeRecipeModels":{"type":"object","properties":{"recommended":{"type":["string","null"]},"options":{"type":"array","items":{"type":"string"}}},"title":"ComposeRecipeModels"},"ComposeRecipe":{"type":"object","properties":{"slug":{"type":"string"},"display_name":{"type":"string"},"category":{"type":"string"},"single_segment":{"type":"boolean"},"visual_mode":{"$ref":"#/components/schemas/ComposeRecipeVisualMode"},"audio_mode":{"$ref":"#/components/schemas/ComposeRecipeAudioMode"},"scene_count":{"type":["integer","null"]},"aspect_ratios":{"type":"array","items":{"type":"string"}},"default_aspect_ratio":{"type":"string"},"default_caption_style":{"type":"string"},"requires_face_image":{"type":"boolean"},"accepts_product_image":{"type":"boolean"},"input_modes":{"type":"array","items":{"type":"string"}},"models":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ComposeRecipeModels"},"description":"Recommended and allowed model options by Compose stage."}},"description":"Customer-safe metadata for one Compose production recipe.","title":"ComposeRecipe"},"Generation_Templates_listComposeRecipes_Response_200":{"type":"object","properties":{"object":{"type":"string"},"recipe_count":{"type":"integer"},"caption_styles":{"type":"array","items":{"type":"string"}},"data":{"type":"array","items":{"$ref":"#/components/schemas/ComposeRecipe"}}},"title":"Generation Templates_listComposeRecipes_Response_200"},"ComposeRequestMode":{"type":"string","enum":["plan","render","edit"],"default":"plan","description":"`plan` writes a storyboard, `render` produces the video from a storyboard, `edit` changes a rendered video.","title":"ComposeRequestMode"},"ComposeScene":{"type":"object","properties":{"index":{"type":"integer"},"narration":{"type":"string"},"visual_prompt":{"type":"string"},"caption":{"type":"string"},"duration_seconds":{"type":"number","format":"double"},"image_url":{"type":"string","format":"uri"},"video_url":{"type":"string","format":"uri"}},"title":"ComposeScene"},"ComposeStoryboard":{"type":"object","properties":{"title":{"type":"string"},"aspect_ratio":{"type":"string"},"resolution":{"type":"string","description":"Resolution the scene videos are generated at; a request's `resolution` takes precedence."},"caption_style":{"type":"string"},"scenes":{"type":"array","items":{"$ref":"#/components/schemas/ComposeScene"}}},"description":"Storyboard returned by plan mode and accepted by render mode.","title":"ComposeStoryboard"},"ComposeRequestEditsItems":{"type":"object","properties":{"scene_index":{"type":"integer"},"instruction":{"type":"string"}},"title":"ComposeRequestEditsItems"},"ComposeRequestInputMode":{"type":"string","enum":["topic","script"],"default":"topic","description":"Plan mode: `topic` writes a script from the brief; `script` reads your text as the narration.","title":"ComposeRequestInputMode"},"ComposeRequestVisualMode":{"type":"string","enum":["auto","image","video"],"description":"Plan mode (the storyboard carries it to render): `video` makes every scene a video clip, `image` uses still images, and `auto` lets the plan choose per scene. Defaults to the recipe's `visual_mode`.","title":"ComposeRequestVisualMode"},"ComposeRequestAudioMode":{"type":"string","enum":["voiceover","music"],"description":"Plan mode (the storyboard carries it to render): `voiceover` narrates the script; `music` makes a montage with no narration, set to music. Defaults to the recipe's `audio_mode`.","title":"ComposeRequestAudioMode"},"ComposeRequest":{"type":"object","properties":{"recipe":{"type":"string","description":"Compose recipe slug from `GET /v1/videos/compose/recipes`."},"mode":{"$ref":"#/components/schemas/ComposeRequestMode","description":"`plan` writes a storyboard, `render` produces the video from a storyboard, `edit` changes a rendered video."},"brief":{"type":"string","description":"Topic, product idea, or direction for `mode: \"plan\"`."},"script":{"type":"string","description":"Optional script text for plan mode."},"storyboard":{"$ref":"#/components/schemas/ComposeStoryboard"},"manifest":{"type":"object","additionalProperties":{"description":"Any type"},"description":"Prior render manifest for edit mode."},"edits":{"type":"array","items":{"$ref":"#/components/schemas/ComposeRequestEditsItems"},"description":"Scene-level edit instructions for edit mode."},"aspect_ratio":{"type":"string","description":"Output aspect ratio, for example `9:16` or `16:9`."},"scene_count":{"type":"integer","minimum":1,"maximum":12,"description":"Number of scenes."},"input_mode":{"$ref":"#/components/schemas/ComposeRequestInputMode","default":"topic","description":"Plan mode: `topic` writes a script from the brief; `script` reads your text as the narration."},"resolution":{"type":"string","default":"720p","description":"Render mode (or the storyboard's `resolution`): the resolution the scene videos are generated at, for example `720p` or `1080p`. The options are the `resolution` parameter of the recipe's video model on `GET /v1/models/{model}`; a value that model does not offer uses `720p` where it is offered. Higher resolutions cost more per scene."},"visual_mode":{"$ref":"#/components/schemas/ComposeRequestVisualMode","description":"Plan mode (the storyboard carries it to render): `video` makes every scene a video clip, `image` uses still images, and `auto` lets the plan choose per scene. Defaults to the recipe's `visual_mode`."},"audio_mode":{"$ref":"#/components/schemas/ComposeRequestAudioMode","description":"Plan mode (the storyboard carries it to render): `voiceover` narrates the script; `music` makes a montage with no narration, set to music. Defaults to the recipe's `audio_mode`."},"aesthetic":{"type":"string","description":"Optional Generation Template look applied to every scene, for example `dark-fantasy`, `dreamcore` or `frutiger-aero`. That template's recommended model generates the scenes, and a template with its own music track plays it under a `music` montage."},"caption_style":{"type":"string","description":"Caption style preset for the recipe."},"music":{"type":"string","description":"Optional music direction or preset."},"voice":{"type":"string","description":"Optional voice preset or voice ID for narration."},"product_image":{"type":"string","format":"uri","description":"Optional product reference image (http(s) URL) for recipes that accept one. Pass a URL the service can fetch; this endpoint does not accept file uploads."},"face_image":{"type":"string","format":"uri","description":"Optional presenter / face reference (http(s) URL) for recipes that require one (Talking Head, AI Avatar Explainer, etc.). Pass a URL the service can fetch; this endpoint does not accept file uploads."},"character_image_url":{"type":"string","format":"uri","description":"Optional character reference frame (http(s) URL) for character recipes; it overrides the generated character. URL only, the API does not accept uploads."},"gameplay_style":{"type":"string","description":"Optional gameplay background style when a recipe supports gameplay variants."},"video":{"type":"string","format":"uri","description":"For the Auto Captions recipe (`recipe: \"auto-captions\"`): the http(s) URL of the video to caption. Send a URL the service can fetch (for example a signed link or any publicly reachable URL). This endpoint does not accept multipart file uploads, so host the file and pass its URL. Aliases: `video_url`, `input_video`."},"language":{"type":"string","default":"auto","description":"Auto Captions: the spoken language of the video, or `auto` to detect it."},"translate_to":{"type":"string","description":"Auto Captions (optional): a target language to add a translation line under each spoken caption. Omit or use `none` for the original language only."},"speakers":{"type":"boolean","default":true,"description":"Auto Captions: give each detected speaker its own caption color."},"model_overrides":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional per-stage model overrides. Values must be listed in the recipe's model options."},"script_model":{"type":"string","description":"Shortcut for `model_overrides.script`."},"visual_model":{"type":"string","description":"Shortcut for `model_overrides.visual`."},"image_model":{"type":"string","description":"Shortcut for `model_overrides.image`."},"voice_model":{"type":"string","description":"Shortcut for `model_overrides.voice`."},"music_model":{"type":"string","description":"Shortcut for `model_overrides.music`."}},"required":["recipe","mode"],"title":"ComposeRequest"},"V1VideosGenerationsPostRequestBodyContentApplicationJsonSchemaExtendFrom":{"type":"object","properties":{"job_id":{"type":"string"},"video_url":{"type":"string","format":"uri"}},"description":"Continue a prior video. Pass exactly one of\n`job_id` (any prior async job from this account)\nor `video_url` (an http(s) URL to a video).\nWorks with every supported video model;\nEmpirioLabs handles the model-specific wiring\nfor you.\n","title":"V1VideosGenerationsPostRequestBodyContentApplicationJsonSchemaExtendFrom"},"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaImage":{"oneOf":[{"type":"string","format":"uri"},{"type":"string"}],"description":"Reference image for image-to-3D generation.","title":"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaImage"},"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaResolution":{"type":"string","enum":["512","1024","1536"],"default":"1024","description":"Generation resolution. Higher values add detail and take longer.","title":"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaResolution"},"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaTextureSize":{"type":"string","enum":["1024","2048","4096"],"default":"2048","description":"Texture size in pixels.","title":"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaTextureSize"},"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaResponseFormat":{"type":"string","enum":["url","b64_json"],"default":"url","description":"Return the asset as a `url` or as inline `b64_json`.","title":"V13DGenerationsPostRequestBodyContentApplicationJsonSchemaResponseFormat"},"AudioResponseDataItems":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"duration":{"type":"number","format":"double","description":"Output duration in seconds."},"format":{"type":"string"}},"title":"AudioResponseDataItems"},"AudioResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AudioResponseDataItems"}}},"title":"AudioResponse"},"V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaOutputFormat":{"type":"string","enum":["WAV","MP3","OGG_OPUS","FLAC","PCM"],"default":"WAV","title":"V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaOutputFormat"},"V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaSampleRate":{"type":"string","enum":["8000","16000","22050","24000","32000","44100","48000"],"default":"24000","title":"V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaSampleRate"},"V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaTimestampType":{"type":"string","enum":["NONE","WORD","CHARACTER"],"default":"NONE","title":"V1AudioSpeechStreamPostRequestBodyContentApplicationJsonSchemaTimestampType"},"V1AudioGenerationsPostRequestBodyContentApplicationJsonSchemaOutputFormat":{"type":"string","enum":["mp3","wav","flac","ogg"],"description":"Audio file format.","title":"V1AudioGenerationsPostRequestBodyContentApplicationJsonSchemaOutputFormat"},"V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaExpiresAfterAnchor":{"type":"string","enum":["created_at"],"default":"created_at","title":"V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaExpiresAfterAnchor"},"V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaExpiresAfter":{"type":"object","properties":{"anchor":{"$ref":"#/components/schemas/V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaExpiresAfterAnchor","default":"created_at"},"seconds":{"type":"integer","minimum":10,"maximum":7200,"default":600,"description":"Seconds from creation until the secret can no longer open a session."}},"description":"How long the secret can open new sessions.","title":"V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaExpiresAfter"},"V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaSession":{"type":"object","properties":{"type":{"type":"string"},"model":{"type":"string"}},"description":"Accepted for clients that send the model as `session.model`. Other session settings are refused here; the page sends them in a `session.update` event after the socket opens.","title":"V1RealtimeClientSecretsPostRequestBodyContentApplicationJsonSchemaSession"},"RealtimeClientSecretObject":{"type":"string","enum":["realtime.client_secret"],"title":"RealtimeClientSecretObject"},"RealtimeClientSecret":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/RealtimeClientSecretObject"},"value":{"type":"string","description":"The client secret. The page offers it as the `empirio-token.<value>` subprotocol."},"expires_at":{"type":"integer","description":"Unix time in seconds after which the secret can no longer open a session."},"model":{"type":"string","description":"The model the secret is for."},"url":{"type":"string","description":"The WebSocket URL to open with the secret."}},"title":"RealtimeClientSecret"},"V1VoicesGetResponsesContentApplicationJsonSchemaDataItemsKind":{"type":"string","enum":["base","system"],"title":"V1VoicesGetResponsesContentApplicationJsonSchemaDataItemsKind"},"V1VoicesGetResponsesContentApplicationJsonSchemaDataItems":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"gender":{"type":"string"},"age":{"type":"integer"},"trait":{"type":"string"},"scenario":{"type":"string"},"language":{"type":"string"},"kind":{"$ref":"#/components/schemas/V1VoicesGetResponsesContentApplicationJsonSchemaDataItemsKind"},"tiers":{"type":"array","items":{"type":"string"}}},"title":"V1VoicesGetResponsesContentApplicationJsonSchemaDataItems"},"Audio_listVoices_Response_200":{"type":"object","properties":{"object":{"type":"string"},"model":{"type":"string"},"total":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#/components/schemas/V1VoicesGetResponsesContentApplicationJsonSchemaDataItems"}}},"title":"Audio_listVoices_Response_200"},"V1AudioTranscriptionsPostRequestBodyContentMultipartFormDataSchemaResponseFormat":{"type":"string","enum":["json","text","srt","verbose_json","vtt"],"default":"json","title":"V1AudioTranscriptionsPostRequestBodyContentMultipartFormDataSchemaResponseFormat"},"Search_createSearch_Response_200":{"type":"object","properties":{},"title":"Search_createSearch_Response_200"},"V1ResearchPostRequestBodyContentApplicationJsonSchemaMessagesItems":{"type":"object","properties":{},"title":"V1ResearchPostRequestBodyContentApplicationJsonSchemaMessagesItems"},"V1ResearchPostRequestBodyContentApplicationJsonSchemaReasoningEffort":{"type":"string","enum":["low","medium","high"],"default":"high","description":"How much research to do: `low`, `medium` or `high`.","title":"V1ResearchPostRequestBodyContentApplicationJsonSchemaReasoningEffort"},"V1ResearchPostRequestBodyContentApplicationJsonSchemaSearchRecencyFilter":{"type":"string","enum":["hour","day","week","month","year"],"description":"Only use sources from the last hour, day, week, month or year.","title":"V1ResearchPostRequestBodyContentApplicationJsonSchemaSearchRecencyFilter"},"Search_createResearch_Response_200":{"type":"object","properties":{},"title":"Search_createResearch_Response_200"},"V1AnswerPostResponsesContentApplicationJsonSchemaCitationsItems":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"snippet":{"type":"string"}},"title":"V1AnswerPostResponsesContentApplicationJsonSchemaCitationsItems"},"Search_createAnswer_Response_200":{"type":"object","properties":{"answer":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/components/schemas/V1AnswerPostResponsesContentApplicationJsonSchemaCitationsItems"}},"usage":{"$ref":"#/components/schemas/Usage"}},"title":"Search_createAnswer_Response_200"},"V1AgentsRunPostRequestBodyContentApplicationJsonSchemaAttachmentsItems1":{"type":"object","properties":{"url":{"type":"string","description":"Publicly reachable file URL or data URI."},"filename":{"type":"string","description":"Name the agent sees for the file."},"mime_type":{"type":"string","description":"MIME type of the file."}},"title":"V1AgentsRunPostRequestBodyContentApplicationJsonSchemaAttachmentsItems1"},"V1AgentsRunPostRequestBodyContentApplicationJsonSchemaAttachmentsItems":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/V1AgentsRunPostRequestBodyContentApplicationJsonSchemaAttachmentsItems1"}],"title":"V1AgentsRunPostRequestBodyContentApplicationJsonSchemaAttachmentsItems"},"Agents_runAgent_Response_202":{"type":"object","properties":{"task_id":{"type":"string"},"status":{"type":"string"},"poll_url":{"type":"string"}},"title":"Agents_runAgent_Response_202"},"V1AgentsTaskIdGetResponsesContentApplicationJsonSchemaStatus":{"type":"string","enum":["queued","running","completed","failed","stopped"],"title":"V1AgentsTaskIdGetResponsesContentApplicationJsonSchemaStatus"},"V1AgentsTaskIdGetResponsesContentApplicationJsonSchemaArtifactsItems":{"type":"object","properties":{"type":{"type":"string"},"url":{"type":"string"}},"title":"V1AgentsTaskIdGetResponsesContentApplicationJsonSchemaArtifactsItems"},"Agents_getAgentTask_Response_200":{"type":"object","properties":{"task_id":{"type":"string"},"status":{"$ref":"#/components/schemas/V1AgentsTaskIdGetResponsesContentApplicationJsonSchemaStatus"},"output":{"type":"string"},"artifacts":{"type":"array","items":{"$ref":"#/components/schemas/V1AgentsTaskIdGetResponsesContentApplicationJsonSchemaArtifactsItems"}},"usage":{"$ref":"#/components/schemas/Usage"}},"title":"Agents_getAgentTask_Response_200"},"V1AgentsTaskIdMessagesGetResponsesContentApplicationJsonSchemaResult":{"type":"object","properties":{},"description":"Upstream agent step list (raw + extracted).","title":"V1AgentsTaskIdMessagesGetResponsesContentApplicationJsonSchemaResult"},"Agents_listAgentMessages_Response_200":{"type":"object","properties":{"object":{"type":"string"},"model":{"type":"string"},"task_id":{"type":"string"},"result":{"$ref":"#/components/schemas/V1AgentsTaskIdMessagesGetResponsesContentApplicationJsonSchemaResult","description":"Upstream agent step list (raw + extracted)."}},"title":"Agents_listAgentMessages_Response_200"},"Agents_stopAgentTask_Response_200":{"type":"object","properties":{"task_id":{"type":"string"},"status":{"type":"string"},"output":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"}},"title":"Agents_stopAgentTask_Response_200"},"V1DetectPostRequestBodyContentApplicationJsonSchemaScanType":{"type":"string","enum":["ai_detection","bibliography","fact_check"],"default":"ai_detection","description":"What to check: `ai_detection` (the default), `bibliography` or `fact_check`.","title":"V1DetectPostRequestBodyContentApplicationJsonSchemaScanType"},"Detection_createDetection_Response_200":{"type":"object","properties":{},"title":"Detection_createDetection_Response_200"},"V1GpuVolumesGetResponsesContentApplicationJsonSchemaObject":{"type":"string","enum":["list"],"title":"V1GpuVolumesGetResponsesContentApplicationJsonSchemaObject"},"GpuVolumeKind":{"type":"string","enum":["workspace","object","network"],"description":"workspace restores /workspace on attach; object is mounted at /mnt/<name>; network shares /workspace across compatible instances.","title":"GpuVolumeKind"},"GpuVolumeStatus":{"type":"string","enum":["creating","available","attached","syncing","error","deleting","deleted"],"title":"GpuVolumeStatus"},"GpuVolume":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"kind":{"$ref":"#/components/schemas/GpuVolumeKind","description":"workspace restores /workspace on attach; object is mounted at /mnt/<name>; network shares /workspace across compatible instances."},"size_gb":{"type":"integer"},"billable_gb":{"type":"number","format":"double","description":"Current quantity used for storage billing. Object buckets bill the greater of the selected size and stored usage rounded up to whole GB."},"bytes_used":{"type":"integer","format":"int64","description":"Stored usage. Workspace usage includes archive framing."},"status":{"$ref":"#/components/schemas/GpuVolumeStatus"},"attached_instance_id":{"type":["string","null"]},"attachment_count":{"type":"integer","description":"Current attachments"},"max_attachments":{"type":"integer","description":"Maximum simultaneous attachments for this volume."},"inode_limit":{"type":["integer","null"],"format":"int64","description":"Network-volume limit for files and directories."},"inodes_used":{"type":["integer","null"],"format":"int64","description":"Current network-volume file and directory usage."},"price_gb_month":{"type":"number","format":"double","description":"Storage rate locked when the volume was created."},"effective_price_gb_month":{"type":"number","format":"double","description":"Storage rate after current account discounts."},"billed_amount":{"type":"number","format":"double"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"last_synced_at":{"type":["string","null"],"format":"date-time"},"arrears_seconds":{"type":["integer","null"],"description":"Storage time carried on this volume that has not been paid for yet, in seconds. Zero or absent when the balance is settled. Add credits to clear it."},"arrears_since":{"type":["string","null"],"format":"date-time","description":"When the unpaid storage time above started accruing."},"error":{"type":["string","null"]}},"title":"GpuVolume"},"V1GpuVolumesGetResponsesContentApplicationJsonSchemaPricing":{"type":"object","properties":{"price_gb_month":{"type":"number","format":"double"},"effective_price_gb_month":{"type":"number","format":"double"}},"title":"V1GpuVolumesGetResponsesContentApplicationJsonSchemaPricing"},"V1GpuVolumesGetResponsesContentApplicationJsonSchemaLimits":{"type":"object","properties":{"max_volumes":{"type":"integer"},"max_total_size_gb":{"type":"integer"},"volume_count":{"type":"integer"},"total_size_gb":{"type":"integer"}},"title":"V1GpuVolumesGetResponsesContentApplicationJsonSchemaLimits"},"GpuStoragePolicyNamePolicyNormalization":{"type":"string","enum":["lowercase"],"title":"GpuStoragePolicyNamePolicyNormalization"},"GpuStoragePolicyNamePolicy":{"type":"object","properties":{"min_length":{"type":"integer"},"max_length":{"type":"integer"},"pattern":{"type":"string"},"normalization":{"$ref":"#/components/schemas/GpuStoragePolicyNamePolicyNormalization"}},"title":"GpuStoragePolicyNamePolicy"},"GpuStoragePolicy":{"type":"object","properties":{"max_volume_gb":{"type":"integer"},"network_max_attachments":{"type":"integer"},"network_inodes_per_gb":{"type":"integer","description":"Files and directories per GB for newly created network volumes. Each existing volume reports its effective total in inode_limit."},"name_policy":{"$ref":"#/components/schemas/GpuStoragePolicyNamePolicy"}},"description":"Current storage creation rules. Existing volumes report their own effective attachment allowance.","title":"GpuStoragePolicy"},"V1GpuVolumesGetResponsesContentApplicationJsonSchemaCapabilities":{"type":"object","properties":{"object_storage":{"type":"boolean"},"object_gpu_slugs":{"type":"array","items":{"type":"string"},"description":"GPU types with compatible object-bucket machine sizes."},"object_gpu_boxes":{"type":"object","additionalProperties":{"type":"array","items":{"type":"integer","minimum":1}},"description":"Compatible num_gpus values for each GPU slug when deploying with an object bucket."},"object_cluster_ids":{"type":"array","items":{"type":"string"},"description":"Cluster offers currently compatible with object buckets."},"network_storage":{"type":"boolean","description":"Whether network volumes can currently be created."},"network_gpu_slugs":{"type":"array","items":{"type":"string"},"description":"GPU types currently available for network-volume deployments."},"network_gpu_boxes":{"type":"object","additionalProperties":{"type":"array","items":{"type":"integer","minimum":1}},"description":"Compatible num_gpus values for each GPU slug when deploying with a network volume."},"network_cluster_ids":{"type":"array","items":{"type":"string"},"description":"Cluster offers currently compatible with network volumes."}},"title":"V1GpuVolumesGetResponsesContentApplicationJsonSchemaCapabilities"},"GPU_Cloud_listGpuVolumes_Response_200":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/V1GpuVolumesGetResponsesContentApplicationJsonSchemaObject"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GpuVolume"}},"pricing":{"$ref":"#/components/schemas/V1GpuVolumesGetResponsesContentApplicationJsonSchemaPricing"},"limits":{"$ref":"#/components/schemas/V1GpuVolumesGetResponsesContentApplicationJsonSchemaLimits"},"policy":{"$ref":"#/components/schemas/GpuStoragePolicy"},"capabilities":{"$ref":"#/components/schemas/V1GpuVolumesGetResponsesContentApplicationJsonSchemaCapabilities"}},"title":"GPU Cloud_listGpuVolumes_Response_200"},"V1GpuVolumesPostRequestBodyContentApplicationJsonSchemaKind":{"type":"string","enum":["workspace","object","network"],"default":"workspace","description":"workspace saves /workspace on stop and restores it on the next attach. object is an S3-compatible bucket mounted at /mnt/<name> and read in place. network shares /workspace across compatible instances and cluster nodes, with the same returned per-GB rate.","title":"V1GpuVolumesPostRequestBodyContentApplicationJsonSchemaKind"},"GPU_Cloud_createGpuVolume_Response_201":{"type":"object","properties":{"volume":{"$ref":"#/components/schemas/GpuVolume"}},"title":"GPU Cloud_createGpuVolume_Response_201"},"GPU_Cloud_getGpuVolume_Response_200":{"type":"object","properties":{"volume":{"$ref":"#/components/schemas/GpuVolume"}},"title":"GPU Cloud_getGpuVolume_Response_200"},"GPU_Cloud_deleteGpuVolume_Response_200":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"deleted":{"type":"boolean"}},"title":"GPU Cloud_deleteGpuVolume_Response_200"},"GpuBox":{"type":"object","properties":{"n":{"type":"integer","description":"GPUs in this box."},"price_hourly":{"type":"number","format":"double","description":"Total hourly price for the whole box, already multiplied by `n`. Each box size is priced independently, so this is not always the single-GPU price times `n`."},"vram_gb":{"type":["integer","null"],"description":"Combined VRAM across the box."},"available_count":{"type":["integer","null"],"description":"Boxes of this size currently available. A conservative lower bound, not an inventory guarantee: a source that is offerable but publishes no exact count contributes at least one."},"runtime_specs":{"type":["object","null"],"additionalProperties":{"description":"Any type"},"description":"Machine facts for this box: combined GPU memory, CPU cores, system memory, and runtime storage in GB."}},"description":"One real machine size for a GPU type. A multi-GPU box is a single machine holding that many GPUs, not several separate instances, so the GPUs share a host and can run tensor-parallel workloads.","title":"GpuBox"},"GpuType":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"vram_gb":{"type":"integer"},"price_hourly":{"type":"number","format":"double","description":"Listed price for the cheapest available box of this GPU, billed by the second. For a GPU sold only as a multi-GPU node this is that node's total price, so compare it against the matching entry in `gpu_boxes`."},"available":{"type":"boolean","description":"Whether capacity is currently sourceable for this GPU."},"available_count":{"type":"integer","description":"Units currently available for the headline box size. A conservative lower bound, not an inventory guarantee."},"max_gpus":{"type":"integer","description":"Maximum GPUs of this type in a single GPU Cloud instance."},"gpu_counts":{"type":"array","items":{"type":"integer"},"description":"Machine sizes actually offered for this GPU, smallest first. Deploy with `num_gpus` set to one of these values."},"gpu_boxes":{"type":"array","items":{"$ref":"#/components/schemas/GpuBox"},"description":"Price, combined VRAM, and availability for each machine size."},"regions":{"type":"array","items":{"type":"string"}}},"title":"GpuType"},"GpuRuntimeDiskPolicy":{"type":"object","properties":{"min_gb":{"type":"integer","description":"Smallest runtime disk a deploy can request."},"max_gb":{"type":"integer","description":"Largest runtime disk a deploy can request."},"default_gb":{"type":"integer","description":"Runtime disk used when `disk_gb` is omitted."}},"description":"Accepted range and default for `disk_gb` on a deploy. Read these values rather than copying them into your client: a deploy outside the range is refused, and omitting `disk_gb` uses `default_gb`.","title":"GpuRuntimeDiskPolicy"},"GPU_Cloud_listGpuTypes_Response_200":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GpuType"}},"runtime_disk_policy":{"$ref":"#/components/schemas/GpuRuntimeDiskPolicy"}},"title":"GPU Cloud_listGpuTypes_Response_200"},"GpuDeployOrderKey":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$","minLength":8,"maxLength":128,"description":"A unique deployment key. Start with a letter or number; use letters, numbers, dots, colons, underscores or hyphens. Reuse it only for the same deployment and unchanged settings.","title":"GpuDeployOrderKey"},"GpuInstanceStatus":{"type":"string","enum":["provisioning","loading","running","stopping","stopped","error","destroyed"],"description":"Current lifecycle status for the GPU Cloud instance.","title":"GpuInstanceStatus"},"GpuSshAccessUser":{"type":"string","enum":["root"],"title":"GpuSshAccessUser"},"GpuSshAccess":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer"},"user":{"$ref":"#/components/schemas/GpuSshAccessUser"},"command":{"type":"string"}},"description":"How to connect to the instance with OpenSSH while it is running.","title":"GpuSshAccess"},"GpuInstance":{"type":"object","properties":{"id":{"type":"string"},"volume_id":{"type":["string","null"],"format":"uuid"},"status":{"$ref":"#/components/schemas/GpuInstanceStatus","description":"Current lifecycle status for the GPU Cloud instance."},"gpu_slug":{"type":"string"},"gpu_display":{"type":"string"},"num_gpus":{"type":"integer"},"image":{"type":["string","null"]},"label":{"type":["string","null"]},"disk_gb":{"type":["integer","null"]},"price_hourly":{"type":"number","format":"double","description":"Listed hourly price for this instance."},"connect_path":{"type":["string","null"],"description":"Default connect path for the workload."},"billed_amount":{"type":"number","format":"double","description":"Total spent on this GPU Cloud instance so far."},"region":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"stopped_at":{"type":["string","null"],"format":"date-time"},"metadata":{"type":["object","null"],"additionalProperties":{"description":"Any type"},"description":"Deployment details such as the template or model served."},"error":{"type":["string","null"]},"cluster_id":{"type":["string","null"],"description":"Set when the instance is one node of a multi-node cluster."},"cluster_rank":{"type":["integer","null"],"description":"This node's rank within its cluster, starting at 0."},"ssh":{"oneOf":[{"$ref":"#/components/schemas/GpuSshAccess"},{"type":"null"}],"description":"How to connect with OpenSSH. Null when SSH is not available for this instance."}},"title":"GpuInstance"},"GpuCloudListGpuInstancesResponse2000":{"type":"object","properties":{"instances":{"type":"array","items":{"$ref":"#/components/schemas/GpuInstance"}},"gpu_limit":{"type":"integer","description":"Your current GPU limit, when available."}},"required":["instances"],"title":"GpuCloudListGpuInstancesResponse2000"},"GpuDeployOrderResultOrderState":{"type":"string","enum":["reserved","issued","failed"],"description":"reserved is pending (202), issued identifies the existing deployment (200), and failed is a recorded refusal (409). Read instance.status for runtime readiness.","title":"GpuDeployOrderResultOrderState"},"GpuDeployOrderResultError":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"title":"GpuDeployOrderResultError"},"GpuDeployOrderResult":{"type":"object","properties":{"instance":{"$ref":"#/components/schemas/GpuInstance"},"order_key":{"$ref":"#/components/schemas/GpuDeployOrderKey"},"order_state":{"$ref":"#/components/schemas/GpuDeployOrderResultOrderState","description":"reserved is pending (202), issued identifies the existing deployment (200), and failed is a recorded refusal (409). Read instance.status for runtime readiness."},"error":{"$ref":"#/components/schemas/GpuDeployOrderResultError"}},"required":["instance","order_key","order_state"],"title":"GpuDeployOrderResult"},"GPU_Cloud_listGpuInstances_Response_200":{"oneOf":[{"$ref":"#/components/schemas/GpuCloudListGpuInstancesResponse2000"},{"$ref":"#/components/schemas/GpuDeployOrderResult"}],"title":"GPU Cloud_listGpuInstances_Response_200"},"GpuDeployRequestMode":{"type":"string","enum":["model","template","custom"],"description":"How to provision the GPU.","title":"GpuDeployRequestMode"},"GpuDeployRequest":{"type":"object","properties":{"order_key":{"$ref":"#/components/schemas/GpuDeployOrderKey"},"volume_id":{"type":["string","null"],"format":"uuid","description":"An available volume you own. Its directory is restored into /workspace before startup and saved before stop or destruction."},"gpu_slug":{"type":"string","description":"The GPU type to deploy from the catalog."},"mode":{"$ref":"#/components/schemas/GpuDeployRequestMode","description":"How to provision the GPU."},"hf_id":{"type":"string","description":"A Hugging Face repo id to serve with vLLM (mode `model`). Set `HF_TOKEN` in `env` for gated repos."},"template_slug":{"type":"string","description":"A curated model or template slug (mode `model` or `template`)."},"image":{"type":"string","description":"A CUDA Docker image to run (mode `custom`)."},"ports":{"type":"array","items":{"type":"integer"},"description":"Ports the workload listens on (mode `custom`)."},"env":{"type":"object","additionalProperties":{"type":"string"},"description":"Environment variables for the workload."},"num_gpus":{"type":"integer","minimum":1,"maximum":64,"default":1,"description":"Number of GPUs in the machine, one of the GPU's `gpu_counts`; any other value is refused with `invalid_gpu_count` (422). Your current account limit is enforced at deploy and start time."},"disk_gb":{"type":"integer","minimum":100,"maximum":300,"default":150,"description":"Requested runtime disk in GB (100-300). A value outside the range is set to the nearest limit."},"onstart":{"type":"string","maxLength":6000,"description":"Shell command to run inside the container (mode `custom`). Runs in place of the image's own start command."},"min_vram_gb":{"type":"number","format":"double","description":"Minimum combined VRAM the box must have, in GB. Used to reject a machine too small for the workload before it is allocated."},"name":{"type":"string","description":"Optional label for the GPU Cloud instance."}},"required":["gpu_slug"],"title":"GpuDeployRequest"},"GPU_Cloud_getGpuInstance_Response_200":{"type":"object","properties":{"instance":{"$ref":"#/components/schemas/GpuInstance"}},"title":"GPU Cloud_getGpuInstance_Response_200"},"GPU_Cloud_destroyGpuInstance_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_destroyGpuInstance_Response_200"},"V1GpuInstancesInstanceIdActionPostParametersAction":{"type":"string","enum":["stop","start","refresh"],"title":"V1GpuInstancesInstanceIdActionPostParametersAction"},"GPU_Cloud_actionGpuInstance_Response_200":{"type":"object","properties":{"instance":{"$ref":"#/components/schemas/GpuInstance"}},"title":"GPU Cloud_actionGpuInstance_Response_200"},"GPU_Cloud_runGpuCommand_Response_200":{"type":"object","properties":{"exit_code":{"type":["integer","null"],"description":"The command's exit status, or null when it was stopped at the deadline."},"stdout":{"type":"string"},"stderr":{"type":"string"},"stdout_truncated":{"type":"boolean"},"stderr_truncated":{"type":"boolean"},"timed_out":{"type":"boolean"},"duration_ms":{"type":"integer"}},"title":"GPU Cloud_runGpuCommand_Response_200"},"V1GpuInstancesInstanceIdSshPostResponsesContentApplicationJsonSchemaKey":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"fingerprint":{"type":"string"}},"description":"The account key this call added or found.","title":"V1GpuInstancesInstanceIdSshPostResponsesContentApplicationJsonSchemaKey"},"GPU_Cloud_prepareGpuSsh_Response_200":{"type":"object","properties":{"command":{"type":"string","description":"The OpenSSH command for this instance."},"ssh":{"$ref":"#/components/schemas/GpuSshAccess"},"key":{"$ref":"#/components/schemas/V1GpuInstancesInstanceIdSshPostResponsesContentApplicationJsonSchemaKey","description":"The account key this call added or found."},"ticket":{"type":"string","description":"Retained for existing integrations of the earlier WebSocket transport. Use `command`.","deprecated":true},"expires_in":{"type":"integer","minimum":1,"maximum":120,"description":"Lifetime of `ticket` in seconds.","deprecated":true}},"required":["command","ssh","key"],"title":"GPU Cloud_prepareGpuSsh_Response_200"},"GpuSshKeyKeyType":{"type":"string","enum":["ssh-ed25519","ssh-rsa"],"title":"GpuSshKeyKeyType"},"GpuSshKey":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"key_type":{"$ref":"#/components/schemas/GpuSshKeyKeyType"},"fingerprint":{"type":"string","description":"The key's SHA256 fingerprint, as `ssh-keygen -l` prints it."},"public_key":{"type":"string","description":"The public key, without its comment."},"created_at":{"type":"string","format":"date-time"},"last_used_at":{"type":["string","null"],"format":"date-time","description":"When the key last opened a connection."}},"title":"GpuSshKey"},"GPU_Cloud_listGpuSshKeys_Response_200":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/GpuSshKey"}}},"required":["keys"],"title":"GPU Cloud_listGpuSshKeys_Response_200"},"GPU_Cloud_createGpuSshKey_Response_200":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/GpuSshKey"}},"title":"GPU Cloud_createGpuSshKey_Response_200"},"GPU_Cloud_deleteGpuSshKey_Response_200":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"deleted":{"type":"boolean"}},"title":"GPU Cloud_deleteGpuSshKey_Response_200"},"GPU_Cloud_connectGpuInstance_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstance_Response_200"},"GpuClusterInterconnect":{"type":"string","enum":["InfiniBand","RoCE","High-speed network"],"description":"Interconnect type. `High-speed network` means the interconnect is high-speed and no specific technology is published; such a cluster reports no link rate.","title":"GpuClusterInterconnect"},"GpuCluster":{"type":"object","properties":{"id":{"type":"string","description":"Stable handle for this cluster. Quote it to support when asking for a reservation."},"gpu":{"type":"string"},"gpu_display":{"type":"string"},"nodes":{"type":"integer","description":"Machines in the cluster."},"gpus_per_node":{"type":"integer"},"total_gpus":{"type":"integer","description":"nodes x gpus_per_node."},"vram_gb":{"type":"number","format":"double","description":"VRAM of one GPU."},"total_vram_gb":{"type":"number","format":"double","description":"Combined VRAM across every GPU in the cluster, which is the figure that decides whether a model fits at all."},"interconnect":{"$ref":"#/components/schemas/GpuClusterInterconnect","description":"Interconnect type. `High-speed network` means the interconnect is high-speed and no specific technology is published; such a cluster reports no link rate."},"interconnect_gbps":{"type":["number","null"],"format":"double","description":"Link speed in Gbit/s, or null when no rate is quoted. Null does not mean a slow interconnect; treat it as unspecified."},"interconnect_measured":{"type":"boolean","description":"True when `interconnect_gbps` is a measured speed rather than a nameplate figure. Treat a nameplate number as an upper bound."},"available_count":{"type":["integer","null"],"description":"How many complete clusters of this exact shape are free right now. A real count, never an estimate: a source that cannot give one reports null. Usually 1, because a fabric's machines cannot also form a second cluster."},"cpu_cores_per_node":{"type":["integer","null"],"description":"vCPU on the smallest machine in the cluster."},"memory_gb_per_node":{"type":["integer","null"]},"storage_gb_per_node":{"type":["integer","null"]},"region":{"type":["string","null"]},"reliability":{"type":["number","null"],"format":"double","description":"Historical uptime of the least reliable machine, 0 to 1."},"price_hourly":{"type":"number","format":"double","description":"Listed price for the ENTIRE cluster per hour, not per node and not per GPU. Billed by the second for the duration reserved."}},"title":"GpuCluster"},"GPU_Cloud_listGpuClusters_Response_200":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GpuCluster"}},"ordering_enabled":{"type":"boolean","description":"Whether cluster orders are currently accepted."},"updated_at":{"type":"number","format":"double","description":"Unix timestamp of the latest inventory refresh."}},"title":"GPU Cloud_listGpuClusters_Response_200"},"GPU_Cloud_deployGpuCluster_Response_200":{"type":"object","properties":{"cluster_id":{"type":"string"},"nodes":{"type":"integer"},"price_hourly":{"type":"number","format":"double"},"storage":{"type":["string","null"]},"instances":{"type":"array","items":{"type":"string"},"description":"One instance id per node. Each behaves like an ordinary GPU instance."}},"title":"GPU Cloud_deployGpuCluster_Response_200"},"GPU_Cloud_connectGpuInstanceRoot_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstanceRoot_Response_200"},"GPU_Cloud_connectGpuInstanceRootPost_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstanceRootPost_Response_200"},"GPU_Cloud_connectGpuInstanceRootPut_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstanceRootPut_Response_200"},"GPU_Cloud_connectGpuInstanceRootPatch_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstanceRootPatch_Response_200"},"GPU_Cloud_connectGpuInstanceRootDelete_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstanceRootDelete_Response_200"},"GPU_Cloud_connectGpuInstancePost_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstancePost_Response_200"},"GPU_Cloud_connectGpuInstancePut_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstancePut_Response_200"},"GPU_Cloud_connectGpuInstancePatch_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstancePatch_Response_200"},"GPU_Cloud_connectGpuInstanceDelete_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"GPU Cloud_connectGpuInstanceDelete_Response_200"},"Hosted_Agents_health_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_health_Response_200"},"HostedAgentPlan":{"type":"object","properties":{"slug":{"type":"string"},"display_name":{"type":"string"},"description":{"type":"string"},"monthly_price_usd":{"type":"number","format":"double"},"included_messages_monthly":{"type":"integer"},"default_replica_min":{"type":"integer"},"default_replica_max":{"type":"integer"}},"title":"HostedAgentPlan"},"HostedAgentRuntimeSlug":{"type":"string","enum":["openclaw","hermes"],"title":"HostedAgentRuntimeSlug"},"HostedAgentRuntimeDefaultProvider":{"type":"string","enum":["empirio","poe"],"title":"HostedAgentRuntimeDefaultProvider"},"HostedAgentRuntime":{"type":"object","properties":{"slug":{"$ref":"#/components/schemas/HostedAgentRuntimeSlug"},"display_name":{"type":"string"},"default_plan_slug":{"type":"string"},"default_model":{"type":"string"},"default_provider":{"$ref":"#/components/schemas/HostedAgentRuntimeDefaultProvider"}},"title":"HostedAgentRuntime"},"HostedAgentsConfig":{"type":"object","properties":{"plans":{"type":"array","items":{"$ref":"#/components/schemas/HostedAgentPlan"}},"runtimes":{"type":"array","items":{"$ref":"#/components/schemas/HostedAgentRuntime"}},"limit":{"type":"integer","description":"Effective hosted-agent limit for the account."},"deployed":{"type":"integer","description":"Current deployed hosted-agent count."},"balance":{"type":"number","format":"double"},"agentSpend":{"type":"number","format":"double"}},"title":"HostedAgentsConfig"},"HostedAgentInstanceAgentType":{"type":"string","enum":["openclaw","hermes"],"title":"HostedAgentInstanceAgentType"},"HostedAgentInstanceStatus":{"type":"string","enum":["draft","provisioning","running","stopping","stopped","error","destroyed"],"title":"HostedAgentInstanceStatus"},"HostedAgentInstanceDefaultProvider":{"type":"string","enum":["empirio","poe","openrouter","custom"],"title":"HostedAgentInstanceDefaultProvider"},"HostedAgentInstance":{"type":"object","properties":{"id":{"type":"string"},"agent_type":{"$ref":"#/components/schemas/HostedAgentInstanceAgentType"},"name":{"type":"string"},"plan_slug":{"type":"string"},"status":{"$ref":"#/components/schemas/HostedAgentInstanceStatus"},"default_provider":{"$ref":"#/components/schemas/HostedAgentInstanceDefaultProvider"},"billing_status":{"type":"string"},"connect_path":{"type":"string"},"api_base_path":{"type":"string"},"replica_min":{"type":"integer"},"replica_max":{"type":"integer"},"replica_current":{"type":"integer"},"next_billing_at":{"type":"string","format":"date-time"},"billed_amount":{"type":"number","format":"double"},"messages_used_current_period":{"type":"integer"}},"title":"HostedAgentInstance"},"Hosted_Agents_listHostedAgentInstances_Response_200":{"type":"object","properties":{"instances":{"type":"array","items":{"$ref":"#/components/schemas/HostedAgentInstance"}}},"title":"Hosted Agents_listHostedAgentInstances_Response_200"},"HostedAgentCreateRequestAgentType":{"type":"string","enum":["openclaw","hermes"],"description":"Agent runtime: `openclaw` or `hermes`.","title":"HostedAgentCreateRequestAgentType"},"HostedAgentCreateRequestDefaultProvider":{"type":"string","enum":["empirio","poe","openrouter","custom"],"default":"empirio","description":"Model provider for the agent. `empirio` uses EmpirioLabs models.","title":"HostedAgentCreateRequestDefaultProvider"},"HostedAgentCreateRequestConfig":{"type":"object","properties":{},"description":"Non-secret agent configuration.","title":"HostedAgentCreateRequestConfig"},"HostedAgentCreateRequestImportConfig":{"oneOf":[{"type":"object","additionalProperties":{"description":"Any type"}},{"type":"string"}],"description":"Existing OpenClaw or Hermes Agent config to import.","title":"HostedAgentCreateRequestImportConfig"},"HostedAgentCreateRequest":{"type":"object","properties":{"agent_type":{"$ref":"#/components/schemas/HostedAgentCreateRequestAgentType","description":"Agent runtime: `openclaw` or `hermes`."},"name":{"type":"string","description":"Display name for the agent."},"plan_slug":{"type":"string","description":"Hosted agent plan slug."},"default_provider":{"$ref":"#/components/schemas/HostedAgentCreateRequestDefaultProvider","default":"empirio","description":"Model provider for the agent. `empirio` uses EmpirioLabs models."},"default_model":{"type":"string","description":"Default model id for the agent."},"config":{"$ref":"#/components/schemas/HostedAgentCreateRequestConfig","description":"Non-secret agent configuration."},"import_config":{"$ref":"#/components/schemas/HostedAgentCreateRequestImportConfig","description":"Existing OpenClaw or Hermes Agent config to import."}},"required":["agent_type"],"title":"HostedAgentCreateRequest"},"Hosted_Agents_createHostedAgentInstance_Response_201":{"type":"object","properties":{"ok":{"type":"boolean"},"instance":{"$ref":"#/components/schemas/HostedAgentInstance"}},"title":"Hosted Agents_createHostedAgentInstance_Response_201"},"Hosted_Agents_getHostedAgentInstance_Response_200":{"type":"object","properties":{"instance":{"$ref":"#/components/schemas/HostedAgentInstance"}},"title":"Hosted Agents_getHostedAgentInstance_Response_200"},"Hosted_Agents_renameHostedAgentInstance_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_renameHostedAgentInstance_Response_200"},"Hosted_Agents_destroyHostedAgentInstance_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_destroyHostedAgentInstance_Response_200"},"V1HostedAgentsInstancesInstanceIdActionPostParametersAction":{"type":"string","enum":["start","stop","restart","refresh"],"title":"V1HostedAgentsInstancesInstanceIdActionPostParametersAction"},"Hosted_Agents_actionHostedAgentInstance_Response_200":{"type":"object","properties":{"instance":{"$ref":"#/components/schemas/HostedAgentInstance"}},"title":"Hosted Agents_actionHostedAgentInstance_Response_200"},"V1HostedAgentsInstancesInstanceIdMessagePostRequestBodyContentApplicationJsonSchemaMessagesItems":{"type":"object","properties":{},"title":"V1HostedAgentsInstancesInstanceIdMessagePostRequestBodyContentApplicationJsonSchemaMessagesItems"},"Hosted_Agents_messageHostedAgentInstance_Response_200":{"type":"object","properties":{"request_id":{"type":"string"},"status":{"type":"string"},"content":{"type":"string"}},"title":"Hosted Agents_messageHostedAgentInstance_Response_200"},"V1HostedAgentsInstancesInstanceIdModelPostRequestBodyContentApplicationJsonSchemaProvider":{"type":"string","enum":["empirio","poe","openrouter","custom"],"description":"Model provider. `empirio` uses EmpirioLabs models.","title":"V1HostedAgentsInstancesInstanceIdModelPostRequestBodyContentApplicationJsonSchemaProvider"},"V1HostedAgentsInstancesInstanceIdModelPostRequestBodyContentApplicationJsonSchemaCustomProvider":{"type":"object","properties":{},"description":"Required when provider is custom. The public HTTPS base URL, model, API key, and protocol of your endpoint.","title":"V1HostedAgentsInstancesInstanceIdModelPostRequestBodyContentApplicationJsonSchemaCustomProvider"},"Hosted_Agents_setHostedAgentModel_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_setHostedAgentModel_Response_200"},"V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaKind":{"type":"string","enum":["telegram","discord","slack","matrix","mattermost","msteams","whatsapp"],"description":"Optional connected channel kind to update when sent in the JSON body.","title":"V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaKind"},"V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaMode":{"type":"string","enum":["open","restricted"],"description":"`open` or `restricted` (only the users in `allow`).","title":"V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaMode"},"V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaAllow":{"type":"object","properties":{},"description":"Per-channel allowlist of messaging IDs, e.g. { \"telegram\": [\"123456\"] }.","title":"V1HostedAgentsInstancesInstanceIdAccessPostRequestBodyContentApplicationJsonSchemaAllow"},"Hosted_Agents_setHostedAgentAccess_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_setHostedAgentAccess_Response_200"},"V1HostedAgentsInstancesInstanceIdSkillsGetResponsesContentApplicationJsonSchemaCustomSkills":{"type":"object","properties":{},"title":"V1HostedAgentsInstancesInstanceIdSkillsGetResponsesContentApplicationJsonSchemaCustomSkills"},"Hosted_Agents_listHostedAgentSkills_Response_200":{"type":"object","properties":{"installed":{"type":"array","items":{"type":"string"}},"customSkills":{"$ref":"#/components/schemas/V1HostedAgentsInstancesInstanceIdSkillsGetResponsesContentApplicationJsonSchemaCustomSkills"}},"title":"Hosted Agents_listHostedAgentSkills_Response_200"},"V1HostedAgentsInstancesInstanceIdSkillsPostRequestBodyContentApplicationJsonSchemaCustom":{"type":"object","properties":{},"description":"A pasted skill: name plus SKILL.md body.","title":"V1HostedAgentsInstancesInstanceIdSkillsPostRequestBodyContentApplicationJsonSchemaCustom"},"Hosted_Agents_addHostedAgentSkill_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_addHostedAgentSkill_Response_200"},"Hosted_Agents_removeHostedAgentSkill_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_removeHostedAgentSkill_Response_200"},"Hosted_Agents_listHostedAgentMcp_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_listHostedAgentMcp_Response_200"},"V1HostedAgentsInstancesInstanceIdMcpPostRequestBodyContentApplicationJsonSchemaTransport":{"type":"string","enum":["streamable-http","sse"],"description":"`streamable-http` or `sse`.","title":"V1HostedAgentsInstancesInstanceIdMcpPostRequestBodyContentApplicationJsonSchemaTransport"},"Hosted_Agents_addHostedAgentMcp_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_addHostedAgentMcp_Response_200"},"Hosted_Agents_removeHostedAgentMcp_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_removeHostedAgentMcp_Response_200"},"Hosted_Agents_listHostedAgentIntegrations_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_listHostedAgentIntegrations_Response_200"},"V1HostedAgentsInstancesInstanceIdIntegrationsPostRequestBodyContentApplicationJsonSchemaKind":{"type":"string","enum":["poe_api_key","openrouter_api_key","telegram","discord","slack","matrix","mattermost","msteams"],"description":"Integration to save.","title":"V1HostedAgentsInstancesInstanceIdIntegrationsPostRequestBodyContentApplicationJsonSchemaKind"},"V1HostedAgentsInstancesInstanceIdIntegrationsPostRequestBodyContentApplicationJsonSchemaConfig":{"type":"object","properties":{},"description":"Settings for the integration.","title":"V1HostedAgentsInstancesInstanceIdIntegrationsPostRequestBodyContentApplicationJsonSchemaConfig"},"Hosted_Agents_saveHostedAgentIntegration_Response_201":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_saveHostedAgentIntegration_Response_201"},"V1HostedAgentsInstancesInstanceIdIntegrationsKindDeleteParametersKind":{"type":"string","enum":["poe","openrouter","telegram","discord","slack","matrix","mattermost","msteams","whatsapp"],"title":"V1HostedAgentsInstancesInstanceIdIntegrationsKindDeleteParametersKind"},"Hosted_Agents_disconnectHostedAgentIntegration_Response_200":{"type":"object","properties":{},"description":"Empty response body","title":"Hosted Agents_disconnectHostedAgentIntegration_Response_200"},"V1HostedAgentsInstancesInstanceIdIntegrationsKindBehaviorPostParametersKind":{"type":"string","enum":["telegram","discord","slack","matrix","mattermost","msteams","whatsapp"],"title":"V1HostedAgentsInstancesInstanceIdIntegrationsKindBehaviorPostParametersKind"},"HostedAgentChannelBehaviorReactionLevel":{"type":"string","enum":["off","ack","minimal","extensive"],"default":"minimal","description":"How actively the agent uses platform reactions while working.","title":"HostedAgentChannelBehaviorReactionLevel"},"HostedAgentChannelBehavior":{"type":"object","properties":{"reactions":{"type":"boolean","default":true,"description":"Whether the agent sends lightweight processing reactions."},"reaction_level":{"$ref":"#/components/schemas/HostedAgentChannelBehaviorReactionLevel","default":"minimal","description":"How actively the agent uses platform reactions while working."},"typing":{"type":"boolean","default":true,"description":"Whether supported platforms should show typing while the agent is working."},"read_receipts":{"type":"boolean","default":false,"description":"Whether supported platforms should send read receipts. Telegram bots do not expose read receipts."},"streaming":{"type":"boolean","default":false,"description":"Whether supported channels should show live reply previews with platform-native edit or draft preview support where available."}},"description":"Per-channel chat signal settings. `streaming` controls live reply preview on supported messaging channels, not model API streaming.","title":"HostedAgentChannelBehavior"},"Hosted_Agents_setHostedAgentIntegrationBehavior_Response_200":{"type":"object","properties":{"ok":{"type":"boolean"},"channel_behavior":{"$ref":"#/components/schemas/HostedAgentChannelBehavior"}},"title":"Hosted Agents_setHostedAgentIntegrationBehavior_Response_200"},"V1AccountUsageGetParametersSource":{"type":"string","enum":["api","playground","compose","gpu_cloud","hosted_agents"],"title":"V1AccountUsageGetParametersSource"},"V1AccountUsageGetParametersStatus":{"type":"string","enum":["success","error"],"title":"V1AccountUsageGetParametersStatus"},"AccountUsageResponseBalance":{"type":"object","properties":{"amount":{"type":"number","format":"double"},"currency":{"type":"string"},"auto_topup_enabled":{"type":"boolean"},"auto_topup_threshold":{"type":["number","null"],"format":"double"},"auto_topup_amount":{"type":["number","null"],"format":"double"},"updated_at":{"type":["string","null"],"format":"date-time"}},"title":"AccountUsageResponseBalance"},"AccountUsageResponsePlanSlug":{"type":"string","enum":["lite","pro","max"],"title":"AccountUsageResponsePlanSlug"},"AccountUsageResponsePlanStatus":{"type":"string","enum":["active","past_due"],"title":"AccountUsageResponsePlanStatus"},"AccountUsageResponsePlanBillingCadence":{"type":"string","enum":["weekly","monthly","yearly"],"title":"AccountUsageResponsePlanBillingCadence"},"AccountUsageResponsePlanWindow":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"}},"title":"AccountUsageResponsePlanWindow"},"AccountUsageResponsePlan":{"type":"object","properties":{"slug":{"$ref":"#/components/schemas/AccountUsageResponsePlanSlug"},"display_name":{"type":"string"},"status":{"$ref":"#/components/schemas/AccountUsageResponsePlanStatus"},"billing_cadence":{"$ref":"#/components/schemas/AccountUsageResponsePlanBillingCadence"},"current_period_end":{"type":["string","null"],"format":"date-time"},"cancel_at_period_end":{"type":"boolean"},"window":{"$ref":"#/components/schemas/AccountUsageResponsePlanWindow"}},"description":"Current subscription state. Present for an account with a current active or past-due subscription. A past-due plan grants no plan access. Allowance limits are intentionally shown on the Billing and pricing pages rather than frozen into this API schema.","title":"AccountUsageResponsePlan"},"AccountUsageResponseSummary":{"type":"object","properties":{"requests":{"type":"integer"},"total_cost":{"type":"number","format":"double"},"total_tokens":{"type":"integer"},"input_tokens":{"type":"integer"},"output_tokens":{"type":"integer"},"cache_read_tokens":{"type":"integer"},"cache_write_tokens":{"type":"integer"},"cache_hit_rate":{"type":["number","null"],"format":"double","description":"Share of input tokens served from prompt cache across the returned page (`cache_read / input`, 0 to 1). Null when the page has no input tokens. Filter by `model` for a per-model rate."},"errors":{"type":"integer"},"avg_latency_ms":{"type":["integer","null"]}},"title":"AccountUsageResponseSummary"},"AccountUsageResponseSpend":{"type":"object","properties":{"currency":{"type":"string"},"total":{"type":"number","format":"double","description":"Total spend across all products."},"model":{"type":"number","format":"double","description":"Model and API usage (chat, embeddings, media, search, and other endpoints)."},"compose":{"type":"number","format":"double","description":"Compose video production spend."},"gpu_cloud":{"type":"number","format":"double","description":"GPU Cloud rental spend."},"hosted_agents":{"type":"number","format":"double","description":"Hosted Agents subscription spend."},"from":{"type":["string","null"],"format":"date-time"},"to":{"type":["string","null"],"format":"date-time"}},"description":"Account-level spend split by product over the requested window\n(`from` / `to`), or all-time when neither is set. This is distinct\nfrom `summary`, which only covers the returned page of usage events.\n","title":"AccountUsageResponseSpend"},"UsageEventSource":{"type":"string","enum":["api","playground","compose","gpu_cloud","hosted_agents","template"],"description":"Where the usage came from: `api` (direct API), `playground`, `compose` (a Compose production), `gpu_cloud` (a GPU Cloud rental), `hosted_agents` (a call made by one of your Hosted Agents), or `template` (a generation that used an effect template). The `source` query filter accepts the first five values.","title":"UsageEventSource"},"UsageEventTokens":{"type":"object","properties":{"input":{"type":"integer"},"output":{"type":"integer"},"cache_read":{"type":"integer"},"cache_write":{"type":"integer"},"total":{"type":"integer"}},"description":"Token counters for token-billed usage. Non-token-billed events, such as GPU Cloud runtime rows, return zero counts and place runtime details in `metadata`.","title":"UsageEventTokens"},"UsageEventCostPlan":{"type":"string","enum":["lite","pro","max"],"description":"The plan tier on the account when this request settled. Historical rows do not change after a plan change.","title":"UsageEventCostPlan"},"UsageEventCost":{"type":"object","properties":{"amount":{"type":"number","format":"double"},"currency":{"type":"string"},"included":{"type":"boolean","description":"True only when a subscription plan covered the whole request and amount is zero."},"partial":{"type":"boolean","description":"True only when a plan covered part of the request and amount is the pay-as-you-go remainder."},"plan":{"$ref":"#/components/schemas/UsageEventCostPlan","description":"The plan tier on the account when this request settled. Historical rows do not change after a plan change."}},"title":"UsageEventCost"},"UsageEventToolBreakdownItems":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"unit_cost_usd":{"type":["number","null"],"format":"double"},"subtotal_usd":{"type":["number","null"],"format":"double"}},"title":"UsageEventToolBreakdownItems"},"UsageEventMetadataCategory":{"type":"string","enum":["gpu_cloud","agents","compose","playground","template"],"description":"Product category for the event, when not a plain API call. Drives the `source` field (`agents` maps to `hosted_agents`).","title":"UsageEventMetadataCategory"},"UsageEventMetadataAgentType":{"type":"string","enum":["openclaw","hermes"],"description":"For a Hosted Agent call, the agent runtime.","title":"UsageEventMetadataAgentType"},"UsageEventMetadata":{"type":"object","properties":{"category":{"$ref":"#/components/schemas/UsageEventMetadataCategory","description":"Product category for the event, when not a plain API call. Drives the `source` field (`agents` maps to `hosted_agents`)."},"tool_usage":{"type":"object","additionalProperties":{"type":"integer"},"description":"Map of tool name to invocation count when the model billed per-tool surcharges. Only present when at least one tool fired."},"worker_usage":{"type":"object","additionalProperties":{"description":"Any type"},"description":"Usage details the model service reported, including tier labels such as `pricing_tier_label` and per-dimension counters."},"template":{"type":"string","description":"For a generation that used an effect template, the template slug."},"compose":{"type":"object","additionalProperties":{"description":"Any type"},"description":"For a Compose parent row, the recipe, mode, phase, total cost, and generated model legs."},"agent_type":{"$ref":"#/components/schemas/UsageEventMetadataAgentType","description":"For a Hosted Agent call, the agent runtime."},"agent_name":{"type":"string","description":"For a Hosted Agent call, the agent's display name."},"agent_instance_id":{"type":"string","description":"For a Hosted Agent call, the agent instance id."},"gpu_slug":{"type":"string","description":"For a GPU Cloud event, the GPU SKU identifier."},"gpu_display":{"type":"string","description":"For a GPU Cloud event, the customer-facing GPU name."},"seconds":{"type":"number","format":"double","description":"For a GPU Cloud runtime event, the billed runtime in seconds."},"price_hourly":{"type":"number","format":"double","description":"For a GPU Cloud runtime event, the hourly price in USD."},"num_gpus":{"type":"number","format":"double","description":"For a GPU Cloud runtime event, the number of GPUs billed."},"conversation_id":{"type":"string","description":"For a Playground request, the saved conversation id, when applicable."}},"description":"Extra, non-sensitive context for the event. Internal audit fields (IP, user agent) and cost-internals are never included. Common keys are documented below; additional keys may be present.","title":"UsageEventMetadata"},"UsageEvent":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"source":{"$ref":"#/components/schemas/UsageEventSource","description":"Where the usage came from: `api` (direct API), `playground`, `compose` (a Compose production), `gpu_cloud` (a GPU Cloud rental), `hosted_agents` (a call made by one of your Hosted Agents), or `template` (a generation that used an effect template). The `source` query filter accepts the first five values."},"model":{"type":["string","null"]},"endpoint":{"type":["string","null"]},"status":{"type":["string","null"]},"status_code":{"type":["integer","null"]},"error":{"type":["string","null"]},"request_id":{"type":["string","null"]},"latency_ms":{"type":["integer","null"]},"tokens":{"$ref":"#/components/schemas/UsageEventTokens","description":"Token counters for token-billed usage. Non-token-billed events, such as GPU Cloud runtime rows, return zero counts and place runtime details in `metadata`."},"cost":{"$ref":"#/components/schemas/UsageEventCost"},"tool_breakdown":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UsageEventToolBreakdownItems"},"description":"Per-tool billing breakdown when the model billed per-call tool surcharges (web search, code interpreter, and similar) and the catalog knows the per-tool rate. Null when no tools fired. The request `cost` already includes these subtotals."},"output_urls":{"type":"array","items":{"type":"string","format":"uri"}},"metadata":{"oneOf":[{"$ref":"#/components/schemas/UsageEventMetadata"},{"type":"null"}],"description":"Extra, non-sensitive context for the event. Internal audit fields (IP, user agent) and cost-internals are never included. Common keys are documented below; additional keys may be present."}},"title":"UsageEvent"},"AccountUsageResponse":{"type":"object","properties":{"object":{"type":"string"},"balance":{"$ref":"#/components/schemas/AccountUsageResponseBalance"},"plan":{"$ref":"#/components/schemas/AccountUsageResponsePlan","description":"Current subscription state. Present for an account with a current active or past-due subscription. A past-due plan grants no plan access. Allowance limits are intentionally shown on the Billing and pricing pages rather than frozen into this API schema."},"summary":{"$ref":"#/components/schemas/AccountUsageResponseSummary"},"spend":{"$ref":"#/components/schemas/AccountUsageResponseSpend","description":"Account-level spend split by product over the requested window\n(`from` / `to`), or all-time when neither is set. This is distinct\nfrom `summary`, which only covers the returned page of usage events.\n"},"data":{"type":"array","items":{"$ref":"#/components/schemas/UsageEvent"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"],"format":"date-time"}},"title":"AccountUsageResponse"},"PlaygroundConversationSummary":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"model":{"type":"string"},"title":{"type":"string"},"message_count":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"title":"PlaygroundConversationSummary"},"PlaygroundConversationList":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/PlaygroundConversationSummary"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"],"format":"date-time"}},"title":"PlaygroundConversationList"},"PlaygroundConversationMessagesItems":{"type":"object","properties":{},"title":"PlaygroundConversationMessagesItems"},"PlaygroundConversation":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"model":{"type":"string"},"title":{"type":"string"},"message_count":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/PlaygroundConversationMessagesItems"}}},"title":"PlaygroundConversation"},"V1JobsGetParametersStatus":{"type":"string","enum":["processing","completed","failed"],"title":"V1JobsGetParametersStatus"},"Jobs_listJobs_Response_200":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}},"title":"Jobs_listJobs_Response_200"}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Pass your EmpirioLabs API key as a bearer token. The Anthropic-style\n`x-api-key` header is also accepted on every endpoint.\n"}}}}