components: parameters: {} schemas: AABenchmarkEntry: description: 'Artificial Analysis benchmark index scores.' example: agentic_index: 55.8 coding_index: 63.2 intelligence_index: 71.4 properties: agentic_index: description: 'Artificial Analysis Agentic Index score' example: 55.8 format: 'double' type: - 'number' - 'null' coding_index: description: 'Artificial Analysis Coding Index score' example: 63.2 format: 'double' type: - 'number' - 'null' intelligence_index: description: 'Artificial Analysis Intelligence Index score' example: 71.4 format: 'double' type: - 'number' - 'null' required: - 'intelligence_index' - 'coding_index' - 'agentic_index' type: 'object' ActivityItem: example: byok_usage_inference: 0.012 completion_tokens: 125 date: '2025-08-24' endpoint_id: '550e8400-e29b-41d4-a716-446655440000' model: 'openai/gpt-4.1' model_permaslug: 'openai/gpt-4.1-2025-04-14' prompt_tokens: 50 provider_name: 'OpenAI' reasoning_tokens: 25 requests: 5 usage: 0.015 properties: byok_usage_inference: description: 'BYOK inference cost in USD (external credits spent)' example: 0.012 format: 'double' type: 'number' completion_tokens: description: 'Total completion tokens generated' example: 125 type: 'integer' date: description: 'Date of the activity (YYYY-MM-DD format)' example: '2025-08-24' type: 'string' endpoint_id: description: 'Unique identifier for the endpoint' example: '550e8400-e29b-41d4-a716-446655440000' type: 'string' model: description: 'Model slug (e.g., "openai/gpt-4.1")' example: 'openai/gpt-4.1' type: 'string' model_permaslug: description: 'Model permaslug (e.g., "openai/gpt-4.1-2025-04-14")' example: 'openai/gpt-4.1-2025-04-14' type: 'string' prompt_tokens: description: 'Total prompt tokens used' example: 50 type: 'integer' provider_name: description: 'Name of the provider serving this endpoint' example: 'OpenAI' type: 'string' reasoning_tokens: description: 'Total reasoning tokens used' example: 25 type: 'integer' requests: description: 'Number of requests made' example: 5 type: 'integer' usage: description: 'Total cost in USD (OpenRouter credits spent)' example: 0.015 format: 'double' type: 'number' required: - 'date' - 'model' - 'model_permaslug' - 'endpoint_id' - 'provider_name' - 'usage' - 'byok_usage_inference' - 'requests' - 'prompt_tokens' - 'completion_tokens' - 'reasoning_tokens' type: 'object' ActivityResponse: example: data: - byok_usage_inference: 0.012 completion_tokens: 125 date: '2025-08-24' endpoint_id: '550e8400-e29b-41d4-a716-446655440000' model: 'openai/gpt-4.1' model_permaslug: 'openai/gpt-4.1-2025-04-14' prompt_tokens: 50 provider_name: 'OpenAI' reasoning_tokens: 25 requests: 5 usage: 0.015 properties: data: description: 'List of activity items' items: $ref: '#/components/schemas/ActivityItem' type: 'array' required: - 'data' type: 'object' AdditionalToolsItem: description: 'Additional tools made available to the model at this point in the input' example: role: 'developer' tools: - name: 'get_weather' parameters: properties: location: type: 'string' type: 'object' type: 'function' type: 'additional_tools' properties: id: type: - 'string' - 'null' role: enum: - 'unknown' - 'user' - 'assistant' - 'system' - 'critic' - 'discriminator' - 'developer' - 'tool' type: 'string' tools: items: anyOf: - allOf: - $ref: '#/components/schemas/FunctionTool' - properties: {} type: 'object' description: 'Function tool definition' example: description: 'Get the current weather in a location' name: 'get_weather' parameters: properties: location: description: 'The city and state' type: 'string' unit: enum: - 'celsius' - 'fahrenheit' type: 'string' required: - 'location' type: 'object' type: 'function' - $ref: '#/components/schemas/Preview_WebSearchServerTool' - $ref: '#/components/schemas/Preview_20250311_WebSearchServerTool' - $ref: '#/components/schemas/Legacy_WebSearchServerTool' - $ref: '#/components/schemas/WebSearchServerTool' - $ref: '#/components/schemas/FileSearchServerTool' - $ref: '#/components/schemas/ComputerUseServerTool' - $ref: '#/components/schemas/CodeInterpreterServerTool' - $ref: '#/components/schemas/McpServerTool' - $ref: '#/components/schemas/ImageGenerationServerTool' - $ref: '#/components/schemas/CodexLocalShellTool' - $ref: '#/components/schemas/ShellServerTool' - $ref: '#/components/schemas/ApplyPatchServerTool' - $ref: '#/components/schemas/CustomTool' - $ref: '#/components/schemas/NamespaceTool' - $ref: '#/components/schemas/AdvisorServerTool_OpenRouter' - $ref: '#/components/schemas/SubagentServerTool_OpenRouter' - $ref: '#/components/schemas/DatetimeServerTool' - $ref: '#/components/schemas/FilesServerTool' - $ref: '#/components/schemas/FusionServerTool_OpenRouter' - $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter' - $ref: '#/components/schemas/SearchModelsServerTool_OpenRouter' - $ref: '#/components/schemas/WebFetchServerTool' - $ref: '#/components/schemas/WebSearchServerTool_OpenRouter' - $ref: '#/components/schemas/ApplyPatchServerTool_OpenRouter' - $ref: '#/components/schemas/BashServerTool' - $ref: '#/components/schemas/ShellServerTool_OpenRouter' - additionalProperties: {} properties: type: type: 'string' required: - 'type' type: 'object' type: 'array' type: enum: - 'additional_tools' type: 'string' required: - 'type' - 'role' - 'tools' type: 'object' AdvisorNestedTool: additionalProperties: {} description: 'A tool made available to the advisor sub-agent. Only OpenRouter server tools (e.g. openrouter:web_search) are supported; function tools are rejected because the advisor has no way to execute them. The advisor tool may not list itself.' example: type: 'openrouter:web_search' properties: parameters: additionalProperties: {} type: 'object' type: type: 'string' required: - 'type' type: 'object' AdvisorReasoning: description: 'Reasoning configuration forwarded to the advisor call. Use this to control reasoning effort and token budget for models that support extended thinking.' example: effort: 'high' properties: effort: description: 'Reasoning effort level for the advisor call.' enum: - 'max' - 'xhigh' - 'high' - 'medium' - 'low' - 'minimal' - 'none' type: 'string' max_tokens: description: 'Maximum number of reasoning tokens the advisor may use.' type: 'integer' type: 'object' AdvisorServerTool_OpenRouter: description: 'OpenRouter built-in server tool: consults a higher-intelligence advisor model (any OpenRouter model) for guidance mid-generation and returns its response. The advisor may run as a sub-agent with its own tools. Include multiple entries to offer several named advisors; at most one entry may omit `name` to act as the default advisor.' example: parameters: model: '~anthropic/claude-opus-latest' name: 'reviewer' type: 'openrouter:advisor' properties: parameters: $ref: '#/components/schemas/AdvisorServerToolConfig' type: enum: - 'openrouter:advisor' type: 'string' required: - 'type' type: 'object' AdvisorServerToolConfig: description: 'Configuration for one openrouter:advisor server tool entry.' example: model: '~anthropic/claude-opus-latest' name: 'reviewer' properties: forward_transcript: description: 'When true, the full parent conversation is forwarded to the advisor so it sees the same context the executor does (and the tool-call `prompt`, if given, is appended as a final user turn). When false or omitted, the advisor receives only the `prompt` the executor passes in the tool call.' example: false type: 'boolean' instructions: description: 'System instructions for the advisor sub-agent. When omitted, the advisor responds with no system prompt of its own.' example: 'You are a senior staff engineer. Give a focused, decisive plan.' type: 'string' max_completion_tokens: description: 'Maximum number of output tokens (including reasoning) the advisor may produce. When omitted, the provider''s default applies.' example: 2048 type: 'integer' max_tool_calls: description: 'Maximum number of tool-calling steps the advisor sub-agent may take during its agentic loop. Capped at 25. Only relevant when the advisor is given tools.' example: 5 maximum: 25 minimum: 1 type: 'integer' model: description: 'Slug of the advisor model to consult (any OpenRouter model). When omitted, the executor can choose it via the tool call''s `model` argument; if neither is set, the model from the outer API request is used. The advisor tool itself cannot be the advisor model.' example: '~anthropic/claude-opus-latest' type: 'string' name: description: 'Optional name for this advisor. The model sees one tool per named advisor (and one default for an unnamed entry). Names must be unique across advisor entries. Letters, digits, spaces, underscores, and dashes; trimmed; 1–64 chars.' example: 'reviewer' maxLength: 64 minLength: 1 pattern: '^[a-zA-Z0-9 _-]+$' type: 'string' reasoning: $ref: '#/components/schemas/AdvisorReasoning' stream: description: 'When true, the advisor''s advice streams incrementally as it is produced. In the Responses API this emits `response.output_text.delta` events targeting the advisor output item; the final `advice` field is still set on the completed item. Has no effect on the Chat Completions API (where the advice arrives only as the final tool result). When false or omitted, the advice arrives only as the final result.' example: false type: 'boolean' temperature: description: 'Sampling temperature forwarded to the advisor call. When omitted, the provider''s default applies.' example: 0.7 format: 'double' type: 'number' tools: description: 'Tools the advisor sub-agent may use while forming its advice. The advisor runs as an agentic sub-agent over these tools, then returns its text. Only OpenRouter server tools are supported — function tools are rejected — and the list must not include the advisor tool itself.' items: $ref: '#/components/schemas/AdvisorNestedTool' type: 'array' type: 'object' AgentMessageItem: additionalProperties: {} description: 'A message routed between agents in a multi-agent session' example: author: '/root/worker' content: - text: 'Task complete.' type: 'input_text' recipient: '/root' type: 'agent_message' properties: agent: additionalProperties: {} properties: agent_name: type: 'string' required: - 'agent_name' type: - 'object' - 'null' author: type: 'string' content: items: oneOf: - $ref: '#/components/schemas/InputText' - allOf: - $ref: '#/components/schemas/InputImage' - properties: {} type: 'object' description: 'Image input content item' example: detail: 'auto' image_url: 'https://example.com/image.jpg' type: 'input_image' - additionalProperties: {} properties: encrypted_content: type: 'string' type: enum: - 'encrypted_content' type: 'string' required: - 'type' - 'encrypted_content' type: 'object' type: 'array' id: type: - 'string' - 'null' recipient: type: 'string' type: enum: - 'agent_message' type: 'string' required: - 'type' - 'author' - 'recipient' - 'content' type: 'object' AnnotationAddedEvent: allOf: - $ref: '#/components/schemas/BaseAnnotationAddedEvent' - properties: {} type: 'object' description: 'Event emitted when a text annotation is added to output' example: annotation: end_index: 7 start_index: 0 title: 'Example' type: 'url_citation' url: 'https://example.com' annotation_index: 0 content_index: 0 item_id: 'item-1' output_index: 0 sequence_number: 5 type: 'response.output_text.annotation.added' AnthropicAdvisorMessageUsageIteration: allOf: - $ref: '#/components/schemas/AnthropicBaseUsageIteration' - properties: model: type: 'string' type: enum: - 'advisor_message' type: 'string' required: - 'type' - 'model' type: 'object' example: cache_creation: null cache_creation_input_tokens: 0 cache_read_input_tokens: 0 input_tokens: 823 model: 'claude-opus-4-6' output_tokens: 1612 type: 'advisor_message' AnthropicAdvisorToolResult: example: content: text: 'Advisor response text' type: 'advisor_result' tool_use_id: 'srvtoolu_01abc' type: 'advisor_tool_result' properties: content: additionalProperties: {} type: 'object' tool_use_id: type: 'string' type: enum: - 'advisor_tool_result' type: 'string' required: - 'type' - 'tool_use_id' - 'content' type: 'object' AnthropicAllowedCallers: example: - 'direct' items: enum: - 'direct' - 'code_execution_20250825' - 'code_execution_20260120' type: 'string' type: 'array' AnthropicBase64ImageSource: example: data: '/9j/4AAQ...' media_type: 'image/jpeg' type: 'base64' properties: data: type: 'string' media_type: $ref: '#/components/schemas/AnthropicImageMimeType' type: enum: - 'base64' type: 'string' required: - 'type' - 'media_type' - 'data' type: 'object' AnthropicBase64PdfSource: example: data: 'JVBERi0x...' media_type: 'application/pdf' type: 'base64' properties: data: type: 'string' media_type: enum: - 'application/pdf' type: 'string' type: enum: - 'base64' type: 'string' required: - 'type' - 'media_type' - 'data' type: 'object' AnthropicBaseUsageIteration: example: cache_creation: null cache_creation_input_tokens: 0 cache_read_input_tokens: 0 input_tokens: 100 output_tokens: 50 properties: cache_creation: $ref: '#/components/schemas/AnthropicIterationCacheCreation' cache_creation_input_tokens: type: 'integer' cache_read_input_tokens: type: 'integer' input_tokens: type: 'integer' output_tokens: type: 'integer' type: 'object' AnthropicBashCodeExecutionContent: discriminator: mapping: bash_code_execution_result: '#/components/schemas/AnthropicBashCodeExecutionResult' bash_code_execution_tool_result_error: '#/components/schemas/AnthropicBashCodeExecutionToolResultError' propertyName: 'type' example: content: [] return_code: 0 stderr: '' stdout: 'Hello' type: 'bash_code_execution_result' oneOf: - $ref: '#/components/schemas/AnthropicBashCodeExecutionToolResultError' - $ref: '#/components/schemas/AnthropicBashCodeExecutionResult' AnthropicBashCodeExecutionOutput: example: file_id: 'file_01abc' type: 'bash_code_execution_output' properties: file_id: type: 'string' type: enum: - 'bash_code_execution_output' type: 'string' required: - 'file_id' - 'type' type: 'object' AnthropicBashCodeExecutionResult: example: content: [] return_code: 0 stderr: '' stdout: 'Hello' type: 'bash_code_execution_result' properties: content: items: $ref: '#/components/schemas/AnthropicBashCodeExecutionOutput' type: 'array' return_code: type: 'integer' stderr: type: 'string' stdout: type: 'string' type: enum: - 'bash_code_execution_result' type: 'string' required: - 'content' - 'return_code' - 'stderr' - 'stdout' - 'type' type: 'object' AnthropicBashCodeExecutionToolResult: example: content: content: [] return_code: 0 stderr: '' stdout: 'Hello' type: 'bash_code_execution_result' tool_use_id: 'srvtoolu_01abc' type: 'bash_code_execution_tool_result' properties: content: $ref: '#/components/schemas/AnthropicBashCodeExecutionContent' tool_use_id: type: 'string' type: enum: - 'bash_code_execution_tool_result' type: 'string' required: - 'type' - 'content' - 'tool_use_id' type: 'object' AnthropicBashCodeExecutionToolResultError: example: error_code: 'unavailable' type: 'bash_code_execution_tool_result_error' properties: error_code: enum: - 'invalid_tool_input' - 'unavailable' - 'too_many_requests' - 'execution_time_exceeded' - 'output_file_too_large' type: 'string' type: enum: - 'bash_code_execution_tool_result_error' type: 'string' required: - 'error_code' - 'type' type: 'object' AnthropicCacheControlDirective: description: 'Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. When set on an individual content block, it marks an explicit cache breakpoint; block-level markers also work on OpenAI models that support explicit prompt caching — OpenRouter converts them to the provider''s native format.' example: type: 'ephemeral' properties: ttl: $ref: '#/components/schemas/AnthropicCacheControlTtl' type: enum: - 'ephemeral' type: 'string' required: - 'type' type: 'object' AnthropicCacheControlTtl: enum: - '5m' - '1h' example: '5m' type: 'string' AnthropicCacheCreation: example: ephemeral_1h_input_tokens: 0 ephemeral_5m_input_tokens: 100 properties: ephemeral_1h_input_tokens: type: 'integer' ephemeral_5m_input_tokens: type: 'integer' required: - 'ephemeral_5m_input_tokens' - 'ephemeral_1h_input_tokens' type: - 'object' - 'null' AnthropicCaller: discriminator: mapping: code_execution_20250825: '#/components/schemas/AnthropicCodeExecution20250825Caller' code_execution_20260120: '#/components/schemas/AnthropicCodeExecution20260120Caller' direct: '#/components/schemas/AnthropicDirectCaller' propertyName: 'type' example: type: 'direct' oneOf: - $ref: '#/components/schemas/AnthropicDirectCaller' - $ref: '#/components/schemas/AnthropicCodeExecution20250825Caller' - $ref: '#/components/schemas/AnthropicCodeExecution20260120Caller' AnthropicCitationCharLocation: example: cited_text: 'Example cited text' document_index: 0 document_title: null end_char_index: 18 file_id: null start_char_index: 0 type: 'char_location' properties: cited_text: type: 'string' document_index: type: 'integer' document_title: type: - 'string' - 'null' end_char_index: type: 'integer' file_id: type: - 'string' - 'null' start_char_index: type: 'integer' type: enum: - 'char_location' type: 'string' required: - 'type' - 'cited_text' - 'document_index' - 'document_title' - 'start_char_index' - 'end_char_index' - 'file_id' type: 'object' AnthropicCitationCharLocationParam: example: cited_text: 'Example cited text' document_index: 0 document_title: null end_char_index: 18 start_char_index: 0 type: 'char_location' properties: cited_text: type: 'string' document_index: type: 'integer' document_title: type: - 'string' - 'null' end_char_index: type: 'integer' start_char_index: type: 'integer' type: enum: - 'char_location' type: 'string' required: - 'type' - 'cited_text' - 'document_index' - 'document_title' - 'start_char_index' - 'end_char_index' type: 'object' AnthropicCitationContentBlockLocation: example: cited_text: 'Example cited text' document_index: 0 document_title: null end_block_index: 1 file_id: null start_block_index: 0 type: 'content_block_location' properties: cited_text: type: 'string' document_index: type: 'integer' document_title: type: - 'string' - 'null' end_block_index: type: 'integer' file_id: type: - 'string' - 'null' start_block_index: type: 'integer' type: enum: - 'content_block_location' type: 'string' required: - 'type' - 'cited_text' - 'document_index' - 'document_title' - 'start_block_index' - 'end_block_index' - 'file_id' type: 'object' AnthropicCitationContentBlockLocationParam: example: cited_text: 'Example cited text' document_index: 0 document_title: null end_block_index: 1 start_block_index: 0 type: 'content_block_location' properties: cited_text: type: 'string' document_index: type: 'integer' document_title: type: - 'string' - 'null' end_block_index: type: 'integer' start_block_index: type: 'integer' type: enum: - 'content_block_location' type: 'string' required: - 'type' - 'cited_text' - 'document_index' - 'document_title' - 'start_block_index' - 'end_block_index' type: 'object' AnthropicCitationPageLocation: example: cited_text: 'Example cited text' document_index: 0 document_title: null end_page_number: 2 file_id: null start_page_number: 1 type: 'page_location' properties: cited_text: type: 'string' document_index: type: 'integer' document_title: type: - 'string' - 'null' end_page_number: type: 'integer' file_id: type: - 'string' - 'null' start_page_number: type: 'integer' type: enum: - 'page_location' type: 'string' required: - 'type' - 'cited_text' - 'document_index' - 'document_title' - 'start_page_number' - 'end_page_number' - 'file_id' type: 'object' AnthropicCitationPageLocationParam: example: cited_text: 'Example cited text' document_index: 0 document_title: null end_page_number: 2 start_page_number: 1 type: 'page_location' properties: cited_text: type: 'string' document_index: type: 'integer' document_title: type: - 'string' - 'null' end_page_number: type: 'integer' start_page_number: type: 'integer' type: enum: - 'page_location' type: 'string' required: - 'type' - 'cited_text' - 'document_index' - 'document_title' - 'start_page_number' - 'end_page_number' type: 'object' AnthropicCitationsConfig: default: null example: enabled: true properties: enabled: type: 'boolean' required: - 'enabled' type: - 'object' - 'null' AnthropicCitationSearchResultLocation: example: cited_text: 'Example cited text' end_block_index: 1 search_result_index: 0 source: 'example_source' start_block_index: 0 title: 'Example Result' type: 'search_result_location' properties: cited_text: type: 'string' end_block_index: type: 'integer' search_result_index: type: 'integer' source: type: 'string' start_block_index: type: 'integer' title: type: - 'string' - 'null' type: enum: - 'search_result_location' type: 'string' required: - 'type' - 'cited_text' - 'search_result_index' - 'source' - 'title' - 'start_block_index' - 'end_block_index' type: 'object' AnthropicCitationSearchResultLocationParam: example: cited_text: 'Example cited text' end_block_index: 1 search_result_index: 0 source: 'example_source' start_block_index: 0 title: 'Example Result' type: 'search_result_location' properties: cited_text: type: 'string' end_block_index: type: 'integer' search_result_index: type: 'integer' source: type: 'string' start_block_index: type: 'integer' title: type: - 'string' - 'null' type: enum: - 'search_result_location' type: 'string' required: - 'type' - 'cited_text' - 'search_result_index' - 'source' - 'title' - 'start_block_index' - 'end_block_index' type: 'object' AnthropicCitationWebSearchResultLocation: example: cited_text: 'Example cited text' encrypted_index: 'enc_idx_0' title: 'Example Page' type: 'web_search_result_location' url: 'https://example.com' properties: cited_text: type: 'string' encrypted_index: type: 'string' title: type: - 'string' - 'null' type: enum: - 'web_search_result_location' type: 'string' url: type: 'string' required: - 'type' - 'cited_text' - 'encrypted_index' - 'title' - 'url' type: 'object' AnthropicCitationWebSearchResultLocationParam: example: cited_text: 'Example cited text' encrypted_index: 'enc_idx_0' title: 'Example Page' type: 'web_search_result_location' url: 'https://example.com' properties: cited_text: type: 'string' encrypted_index: type: 'string' title: type: - 'string' - 'null' type: enum: - 'web_search_result_location' type: 'string' url: type: 'string' required: - 'type' - 'cited_text' - 'encrypted_index' - 'title' - 'url' type: 'object' AnthropicCodeExecution20250825Caller: example: tool_id: 'toolu_01abc' type: 'code_execution_20250825' properties: tool_id: type: 'string' type: enum: - 'code_execution_20250825' type: 'string' required: - 'type' - 'tool_id' type: 'object' AnthropicCodeExecution20260120Caller: example: tool_id: 'toolu_01abc' type: 'code_execution_20260120' properties: tool_id: type: 'string' type: enum: - 'code_execution_20260120' type: 'string' required: - 'type' - 'tool_id' type: 'object' AnthropicCodeExecutionContent: discriminator: mapping: code_execution_result: '#/components/schemas/AnthropicCodeExecutionResult' code_execution_tool_result_error: '#/components/schemas/AnthropicCodeExecutionToolResultError' encrypted_code_execution_result: '#/components/schemas/AnthropicEncryptedCodeExecutionResult' propertyName: 'type' example: content: [] return_code: 0 stderr: '' stdout: 'Hello' type: 'code_execution_result' oneOf: - $ref: '#/components/schemas/AnthropicCodeExecutionToolResultError' - $ref: '#/components/schemas/AnthropicCodeExecutionResult' - $ref: '#/components/schemas/AnthropicEncryptedCodeExecutionResult' AnthropicCodeExecutionOutput: example: file_id: 'file_01abc' type: 'code_execution_output' properties: file_id: type: 'string' type: enum: - 'code_execution_output' type: 'string' required: - 'file_id' - 'type' type: 'object' AnthropicCodeExecutionResult: example: content: [] return_code: 0 stderr: '' stdout: 'Hello' type: 'code_execution_result' properties: content: items: $ref: '#/components/schemas/AnthropicCodeExecutionOutput' type: 'array' return_code: type: 'integer' stderr: type: 'string' stdout: type: 'string' type: enum: - 'code_execution_result' type: 'string' required: - 'content' - 'return_code' - 'stderr' - 'stdout' - 'type' type: 'object' AnthropicCodeExecutionToolResult: example: content: content: [] return_code: 0 stderr: '' stdout: 'Hello' type: 'code_execution_result' tool_use_id: 'srvtoolu_01abc' type: 'code_execution_tool_result' properties: content: $ref: '#/components/schemas/AnthropicCodeExecutionContent' tool_use_id: type: 'string' type: enum: - 'code_execution_tool_result' type: 'string' required: - 'type' - 'content' - 'tool_use_id' type: 'object' AnthropicCodeExecutionToolResultError: example: error_code: 'unavailable' type: 'code_execution_tool_result_error' properties: error_code: $ref: '#/components/schemas/AnthropicServerToolErrorCode' type: enum: - 'code_execution_tool_result_error' type: 'string' required: - 'error_code' - 'type' type: 'object' AnthropicCompactionBlock: example: content: 'Compacted summary of conversation.' type: 'compaction' properties: content: type: - 'string' - 'null' encrypted_content: type: - 'string' - 'null' type: enum: - 'compaction' type: 'string' required: - 'type' - 'content' type: 'object' AnthropicCompactionUsageIteration: allOf: - $ref: '#/components/schemas/AnthropicBaseUsageIteration' - properties: type: enum: - 'compaction' type: 'string' required: - 'type' type: 'object' example: cache_creation: null cache_creation_input_tokens: 0 cache_read_input_tokens: 0 input_tokens: 50 output_tokens: 25 type: 'compaction' AnthropicContainer: example: expires_at: '2026-04-08T00:00:00Z' id: 'ctr_01abc' properties: expires_at: type: 'string' id: type: 'string' required: - 'id' - 'expires_at' type: - 'object' - 'null' AnthropicContainerUpload: example: file_id: 'file_01abc' type: 'container_upload' properties: file_id: type: 'string' type: enum: - 'container_upload' type: 'string' required: - 'type' - 'file_id' type: 'object' AnthropicDirectCaller: example: type: 'direct' properties: type: enum: - 'direct' type: 'string' required: - 'type' type: 'object' AnthropicDocumentBlock: example: citations: null source: data: 'Hello, world!' media_type: 'text/plain' type: 'text' title: null type: 'document' properties: citations: $ref: '#/components/schemas/AnthropicCitationsConfig' source: anyOf: - $ref: '#/components/schemas/AnthropicBase64PdfSource' - $ref: '#/components/schemas/AnthropicPlainTextSource' title: type: - 'string' - 'null' type: enum: - 'document' type: 'string' required: - 'source' - 'title' - 'type' type: 'object' AnthropicDocumentBlockParam: example: source: data: 'Hello, world!' media_type: 'text/plain' type: 'text' type: 'document' properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' citations: properties: enabled: type: 'boolean' type: - 'object' - 'null' context: type: - 'string' - 'null' source: oneOf: - $ref: '#/components/schemas/AnthropicBase64PdfSource' - $ref: '#/components/schemas/AnthropicPlainTextSource' - properties: content: anyOf: - type: 'string' - items: discriminator: mapping: image: '#/components/schemas/AnthropicImageBlockParam' text: '#/components/schemas/AnthropicTextBlockParam' propertyName: 'type' oneOf: - $ref: '#/components/schemas/AnthropicTextBlockParam' - $ref: '#/components/schemas/AnthropicImageBlockParam' type: 'array' type: enum: - 'content' type: 'string' required: - 'type' - 'content' type: 'object' - $ref: '#/components/schemas/AnthropicUrlPdfSource' - $ref: '#/components/schemas/AnthropicFileDocumentSource' title: type: - 'string' - 'null' type: enum: - 'document' type: 'string' required: - 'type' - 'source' type: 'object' AnthropicEncryptedCodeExecutionResult: example: content: [] encrypted_stdout: 'enc_stdout' return_code: 0 stderr: '' type: 'encrypted_code_execution_result' properties: content: items: $ref: '#/components/schemas/AnthropicCodeExecutionOutput' type: 'array' encrypted_stdout: type: 'string' return_code: type: 'integer' stderr: type: 'string' type: enum: - 'encrypted_code_execution_result' type: 'string' required: - 'content' - 'encrypted_stdout' - 'return_code' - 'stderr' - 'type' type: 'object' AnthropicFile: description: 'A stored file in Anthropic''s Files API shape.' example: _shape: 'anthropic' created_at: '2025-01-01T00:00:00Z' downloadable: false filename: 'document.pdf' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' mime_type: 'application/pdf' size_bytes: 1024000 type: 'file' properties: _shape: enum: - 'anthropic' type: 'string' created_at: type: 'string' downloadable: type: 'boolean' filename: type: 'string' id: type: 'string' mime_type: type: 'string' size_bytes: type: 'integer' type: enum: - 'file' type: 'string' required: - '_shape' - 'id' - 'type' - 'filename' - 'mime_type' - 'size_bytes' - 'created_at' - 'downloadable' type: 'object' AnthropicFileDeleted: description: 'Deletion result in Anthropic''s shape.' example: _shape: 'anthropic' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'file_deleted' properties: _shape: enum: - 'anthropic' type: 'string' id: type: 'string' type: enum: - 'file_deleted' type: 'string' required: - '_shape' - 'id' - 'type' type: 'object' AnthropicFileDocumentSource: example: file_id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'file' properties: file_id: type: 'string' type: enum: - 'file' type: 'string' required: - 'type' - 'file_id' type: 'object' AnthropicFileList: description: 'A page of files in Anthropic''s shape.' example: _shape: 'anthropic' data: [] first_id: null has_more: false last_id: null properties: _shape: enum: - 'anthropic' type: 'string' data: items: $ref: '#/components/schemas/AnthropicFile' type: 'array' first_id: type: - 'string' - 'null' has_more: type: 'boolean' last_id: type: - 'string' - 'null' required: - '_shape' - 'data' - 'has_more' - 'first_id' - 'last_id' type: 'object' AnthropicImageBlockParam: example: source: data: '/9j/4AAQ...' media_type: 'image/jpeg' type: 'base64' type: 'image' properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' source: discriminator: mapping: base64: '#/components/schemas/AnthropicBase64ImageSource' url: '#/components/schemas/AnthropicUrlImageSource' propertyName: 'type' oneOf: - $ref: '#/components/schemas/AnthropicBase64ImageSource' - $ref: '#/components/schemas/AnthropicUrlImageSource' type: enum: - 'image' type: 'string' required: - 'type' - 'source' type: 'object' AnthropicImageMimeType: enum: - 'image/jpeg' - 'image/png' - 'image/gif' - 'image/webp' example: 'image/jpeg' type: 'string' AnthropicInputTokensClearAtLeast: example: type: 'input_tokens' value: 50000 properties: type: enum: - 'input_tokens' type: 'string' value: type: 'integer' required: - 'type' - 'value' type: - 'object' - 'null' AnthropicInputTokensTrigger: example: type: 'input_tokens' value: 100000 properties: type: enum: - 'input_tokens' type: 'string' value: type: 'integer' required: - 'type' - 'value' type: 'object' AnthropicIterationCacheCreation: default: null example: ephemeral_1h_input_tokens: 0 ephemeral_5m_input_tokens: 0 properties: ephemeral_1h_input_tokens: type: 'integer' ephemeral_5m_input_tokens: type: 'integer' type: - 'object' - 'null' AnthropicMessageUsageIteration: allOf: - $ref: '#/components/schemas/AnthropicBaseUsageIteration' - properties: model: type: 'string' type: enum: - 'message' type: 'string' required: - 'type' type: 'object' example: cache_creation: null cache_creation_input_tokens: 0 cache_read_input_tokens: 0 input_tokens: 100 output_tokens: 50 type: 'message' AnthropicOutputTokensDetails: example: thinking_tokens: 0 properties: thinking_tokens: type: 'integer' required: - 'thinking_tokens' type: - 'object' - 'null' AnthropicPlainTextSource: example: data: 'Hello, world!' media_type: 'text/plain' type: 'text' properties: data: type: 'string' media_type: enum: - 'text/plain' type: 'string' type: enum: - 'text' type: 'string' required: - 'type' - 'media_type' - 'data' type: 'object' AnthropicRedactedThinkingBlock: example: data: 'cmVkYWN0ZWQ=' type: 'redacted_thinking' properties: data: type: 'string' type: enum: - 'redacted_thinking' type: 'string' required: - 'type' - 'data' type: 'object' AnthropicRefusalStopDetails: description: 'Structured information about a refusal' example: category: 'cyber' explanation: 'The request was refused due to policy.' type: 'refusal' properties: category: enum: - 'cyber' - 'bio' - null type: - 'string' - 'null' explanation: type: - 'string' - 'null' type: enum: - 'refusal' type: 'string' required: - 'type' - 'category' - 'explanation' type: - 'object' - 'null' AnthropicSearchResultBlockParam: example: content: - text: 'Result content' type: 'text' source: 'example_source' title: 'Example Result' type: 'search_result' properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' citations: properties: enabled: type: 'boolean' type: 'object' content: items: $ref: '#/components/schemas/AnthropicTextBlockParam' type: 'array' source: type: 'string' title: type: 'string' type: enum: - 'search_result' type: 'string' required: - 'type' - 'source' - 'title' - 'content' type: 'object' AnthropicServerToolErrorCode: enum: - 'invalid_tool_input' - 'unavailable' - 'too_many_requests' - 'execution_time_exceeded' example: 'unavailable' type: 'string' AnthropicServerToolUsage: example: web_fetch_requests: 0 web_search_requests: 1 properties: web_fetch_requests: type: 'integer' web_search_requests: type: 'integer' required: - 'web_search_requests' - 'web_fetch_requests' type: - 'object' - 'null' AnthropicServiceTier: enum: - 'standard' - 'priority' - 'batch' - null example: 'standard' type: - 'string' - 'null' AnthropicSpeed: enum: - 'fast' - 'standard' - null example: 'standard' type: - 'string' - 'null' AnthropicTextBlock: example: citations: null text: 'Hello, world!' type: 'text' properties: citations: items: $ref: '#/components/schemas/AnthropicTextCitation' type: - 'array' - 'null' text: type: 'string' type: enum: - 'text' type: 'string' required: - 'type' - 'text' - 'citations' type: 'object' AnthropicTextBlockParam: example: text: 'Hello, world!' type: 'text' properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' citations: items: discriminator: mapping: char_location: '#/components/schemas/AnthropicCitationCharLocationParam' content_block_location: '#/components/schemas/AnthropicCitationContentBlockLocationParam' page_location: '#/components/schemas/AnthropicCitationPageLocationParam' search_result_location: '#/components/schemas/AnthropicCitationSearchResultLocationParam' web_search_result_location: '#/components/schemas/AnthropicCitationWebSearchResultLocationParam' propertyName: 'type' oneOf: - $ref: '#/components/schemas/AnthropicCitationCharLocationParam' - $ref: '#/components/schemas/AnthropicCitationPageLocationParam' - $ref: '#/components/schemas/AnthropicCitationContentBlockLocationParam' - $ref: '#/components/schemas/AnthropicCitationWebSearchResultLocationParam' - $ref: '#/components/schemas/AnthropicCitationSearchResultLocationParam' type: - 'array' - 'null' text: type: 'string' type: enum: - 'text' type: 'string' required: - 'type' - 'text' type: 'object' AnthropicTextCitation: discriminator: mapping: char_location: '#/components/schemas/AnthropicCitationCharLocation' content_block_location: '#/components/schemas/AnthropicCitationContentBlockLocation' page_location: '#/components/schemas/AnthropicCitationPageLocation' search_result_location: '#/components/schemas/AnthropicCitationSearchResultLocation' web_search_result_location: '#/components/schemas/AnthropicCitationWebSearchResultLocation' propertyName: 'type' example: cited_text: 'Example text' document_index: 0 document_title: null end_char_index: 10 file_id: null start_char_index: 0 type: 'char_location' oneOf: - $ref: '#/components/schemas/AnthropicCitationCharLocation' - $ref: '#/components/schemas/AnthropicCitationPageLocation' - $ref: '#/components/schemas/AnthropicCitationContentBlockLocation' - $ref: '#/components/schemas/AnthropicCitationWebSearchResultLocation' - $ref: '#/components/schemas/AnthropicCitationSearchResultLocation' AnthropicTextEditorCodeExecutionContent: discriminator: mapping: text_editor_code_execution_create_result: '#/components/schemas/AnthropicTextEditorCodeExecutionCreateResult' text_editor_code_execution_str_replace_result: '#/components/schemas/AnthropicTextEditorCodeExecutionStrReplaceResult' text_editor_code_execution_tool_result_error: '#/components/schemas/AnthropicTextEditorCodeExecutionToolResultError' text_editor_code_execution_view_result: '#/components/schemas/AnthropicTextEditorCodeExecutionViewResult' propertyName: 'type' example: content: 'file content' file_type: 'text' num_lines: 10 start_line: 1 total_lines: 10 type: 'text_editor_code_execution_view_result' oneOf: - $ref: '#/components/schemas/AnthropicTextEditorCodeExecutionToolResultError' - $ref: '#/components/schemas/AnthropicTextEditorCodeExecutionViewResult' - $ref: '#/components/schemas/AnthropicTextEditorCodeExecutionCreateResult' - $ref: '#/components/schemas/AnthropicTextEditorCodeExecutionStrReplaceResult' AnthropicTextEditorCodeExecutionCreateResult: example: is_file_update: false type: 'text_editor_code_execution_create_result' properties: is_file_update: type: 'boolean' type: enum: - 'text_editor_code_execution_create_result' type: 'string' required: - 'is_file_update' - 'type' type: 'object' AnthropicTextEditorCodeExecutionStrReplaceResult: example: lines: null new_lines: null new_start: null old_lines: null old_start: null type: 'text_editor_code_execution_str_replace_result' properties: lines: items: type: 'string' type: - 'array' - 'null' new_lines: type: - 'integer' - 'null' new_start: type: - 'integer' - 'null' old_lines: type: - 'integer' - 'null' old_start: type: - 'integer' - 'null' type: enum: - 'text_editor_code_execution_str_replace_result' type: 'string' required: - 'lines' - 'new_lines' - 'new_start' - 'old_lines' - 'old_start' - 'type' type: 'object' AnthropicTextEditorCodeExecutionToolResult: example: content: content: 'file content' file_type: 'text' num_lines: 10 start_line: 1 total_lines: 10 type: 'text_editor_code_execution_view_result' tool_use_id: 'srvtoolu_01abc' type: 'text_editor_code_execution_tool_result' properties: content: $ref: '#/components/schemas/AnthropicTextEditorCodeExecutionContent' tool_use_id: type: 'string' type: enum: - 'text_editor_code_execution_tool_result' type: 'string' required: - 'type' - 'content' - 'tool_use_id' type: 'object' AnthropicTextEditorCodeExecutionToolResultError: example: error_code: 'unavailable' error_message: null type: 'text_editor_code_execution_tool_result_error' properties: error_code: enum: - 'invalid_tool_input' - 'unavailable' - 'too_many_requests' - 'execution_time_exceeded' - 'file_not_found' type: 'string' error_message: type: - 'string' - 'null' type: enum: - 'text_editor_code_execution_tool_result_error' type: 'string' required: - 'error_code' - 'error_message' - 'type' type: 'object' AnthropicTextEditorCodeExecutionViewResult: example: content: 'file content' file_type: 'text' num_lines: 10 start_line: 1 total_lines: 10 type: 'text_editor_code_execution_view_result' properties: content: type: 'string' file_type: enum: - 'text' - 'image' - 'pdf' type: 'string' num_lines: type: - 'integer' - 'null' start_line: type: - 'integer' - 'null' total_lines: type: - 'integer' - 'null' type: enum: - 'text_editor_code_execution_view_result' type: 'string' required: - 'content' - 'file_type' - 'num_lines' - 'start_line' - 'total_lines' - 'type' type: 'object' AnthropicThinkingBlock: example: signature: 'sig_abc123' thinking: 'Let me think about this...' type: 'thinking' properties: signature: type: 'string' thinking: type: 'string' type: enum: - 'thinking' type: 'string' required: - 'type' - 'thinking' - 'signature' type: 'object' AnthropicThinkingDisplay: enum: - 'summarized' - 'omitted' - null example: 'summarized' type: - 'string' - 'null' AnthropicThinkingTurns: example: type: 'thinking_turns' value: 3 properties: type: enum: - 'thinking_turns' type: 'string' value: type: 'integer' required: - 'type' - 'value' type: 'object' AnthropicToolReference: example: tool_name: 'my_tool' type: 'tool_reference' properties: tool_name: type: 'string' type: enum: - 'tool_reference' type: 'string' required: - 'tool_name' - 'type' type: 'object' AnthropicToolSearchContent: discriminator: mapping: tool_search_tool_result_error: '#/components/schemas/AnthropicToolSearchResultError' tool_search_tool_search_result: '#/components/schemas/AnthropicToolSearchResult' propertyName: 'type' example: tool_references: - tool_name: 'my_tool' type: 'tool_reference' type: 'tool_search_tool_search_result' oneOf: - $ref: '#/components/schemas/AnthropicToolSearchResultError' - $ref: '#/components/schemas/AnthropicToolSearchResult' AnthropicToolSearchResult: example: tool_references: - tool_name: 'my_tool' type: 'tool_reference' type: 'tool_search_tool_search_result' properties: tool_references: items: $ref: '#/components/schemas/AnthropicToolReference' type: 'array' type: enum: - 'tool_search_tool_search_result' type: 'string' required: - 'tool_references' - 'type' type: 'object' AnthropicToolSearchResultError: example: error_code: 'unavailable' error_message: null type: 'tool_search_tool_result_error' properties: error_code: $ref: '#/components/schemas/AnthropicServerToolErrorCode' error_message: type: - 'string' - 'null' type: enum: - 'tool_search_tool_result_error' type: 'string' required: - 'error_code' - 'error_message' - 'type' type: 'object' AnthropicToolSearchToolBm25: properties: allowed_callers: $ref: '#/components/schemas/AnthropicAllowedCallers' cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' defer_loading: type: 'boolean' name: enum: - 'tool_search_tool_bm25' type: 'string' strict: type: 'boolean' type: enum: - 'tool_search_tool_bm25_20251119' - 'tool_search_tool_bm25' type: 'string' required: - 'type' - 'name' type: 'object' AnthropicToolSearchToolRegex: properties: allowed_callers: $ref: '#/components/schemas/AnthropicAllowedCallers' cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' defer_loading: type: 'boolean' name: enum: - 'tool_search_tool_regex' type: 'string' strict: type: 'boolean' type: enum: - 'tool_search_tool_regex_20251119' - 'tool_search_tool_regex' type: 'string' required: - 'type' - 'name' type: 'object' AnthropicToolSearchToolResult: example: content: tool_references: - tool_name: 'my_tool' type: 'tool_reference' type: 'tool_search_tool_search_result' tool_use_id: 'srvtoolu_01abc' type: 'tool_search_tool_result' properties: content: $ref: '#/components/schemas/AnthropicToolSearchContent' tool_use_id: type: 'string' type: enum: - 'tool_search_tool_result' type: 'string' required: - 'type' - 'content' - 'tool_use_id' type: 'object' AnthropicToolUseBlock: example: caller: type: 'direct' id: 'toolu_01abc' input: location: 'San Francisco' name: 'get_weather' type: 'tool_use' properties: caller: $ref: '#/components/schemas/AnthropicCaller' id: type: 'string' input: {} name: type: 'string' type: enum: - 'tool_use' type: 'string' required: - 'type' - 'id' - 'caller' - 'name' type: 'object' AnthropicToolUsesKeep: example: type: 'tool_uses' value: 5 properties: type: enum: - 'tool_uses' type: 'string' value: type: 'integer' required: - 'type' - 'value' type: 'object' AnthropicToolUsesTrigger: example: type: 'tool_uses' value: 10 properties: type: enum: - 'tool_uses' type: 'string' value: type: 'integer' required: - 'type' - 'value' type: 'object' AnthropicUnknownUsageIteration: allOf: - $ref: '#/components/schemas/AnthropicBaseUsageIteration' - properties: type: type: 'string' required: - 'type' type: 'object' example: cache_creation: null cache_creation_input_tokens: 0 cache_read_input_tokens: 0 input_tokens: 100 output_tokens: 50 type: 'unknown' AnthropicUrlImageSource: example: type: 'url' url: 'https://example.com/image.jpg' properties: type: enum: - 'url' type: 'string' url: type: 'string' required: - 'type' - 'url' type: 'object' AnthropicUrlPdfSource: example: type: 'url' url: 'https://example.com/document.pdf' properties: type: enum: - 'url' type: 'string' url: type: 'string' required: - 'type' - 'url' type: 'object' AnthropicUsage: example: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 100 output_tokens: 50 output_tokens_details: null server_tool_use: null service_tier: 'standard' properties: cache_creation: $ref: '#/components/schemas/AnthropicCacheCreation' cache_creation_input_tokens: type: - 'integer' - 'null' cache_read_input_tokens: type: - 'integer' - 'null' inference_geo: type: - 'string' - 'null' input_tokens: type: 'integer' output_tokens: type: 'integer' output_tokens_details: $ref: '#/components/schemas/AnthropicOutputTokensDetails' server_tool_use: $ref: '#/components/schemas/AnthropicServerToolUsage' service_tier: $ref: '#/components/schemas/AnthropicServiceTier' required: - 'input_tokens' - 'output_tokens' - 'output_tokens_details' - 'cache_creation_input_tokens' - 'cache_read_input_tokens' - 'cache_creation' - 'inference_geo' - 'server_tool_use' - 'service_tier' type: 'object' AnthropicUsageIteration: anyOf: - $ref: '#/components/schemas/AnthropicCompactionUsageIteration' - $ref: '#/components/schemas/AnthropicMessageUsageIteration' - $ref: '#/components/schemas/AnthropicAdvisorMessageUsageIteration' - $ref: '#/components/schemas/AnthropicUnknownUsageIteration' example: cache_creation: null cache_creation_input_tokens: 0 cache_read_input_tokens: 0 input_tokens: 100 output_tokens: 50 type: 'message' AnthropicWebFetchBlock: example: content: citations: null source: data: '' media_type: 'text/plain' type: 'text' title: null type: 'document' retrieved_at: null type: 'web_fetch_result' url: 'https://example.com' properties: content: $ref: '#/components/schemas/AnthropicDocumentBlock' retrieved_at: type: - 'string' - 'null' type: enum: - 'web_fetch_result' type: 'string' url: type: 'string' required: - 'content' - 'retrieved_at' - 'type' - 'url' type: 'object' AnthropicWebFetchContent: discriminator: mapping: web_fetch_result: '#/components/schemas/AnthropicWebFetchBlock' web_fetch_tool_result_error: '#/components/schemas/AnthropicWebFetchToolResultError' propertyName: 'type' example: content: citations: null source: data: '' media_type: 'text/plain' type: 'text' title: null type: 'document' retrieved_at: null type: 'web_fetch_result' url: 'https://example.com' oneOf: - $ref: '#/components/schemas/AnthropicWebFetchToolResultError' - $ref: '#/components/schemas/AnthropicWebFetchBlock' AnthropicWebFetchToolResult: example: caller: type: 'direct' content: content: citations: null source: data: '' media_type: 'text/plain' type: 'text' title: null type: 'document' retrieved_at: null type: 'web_fetch_result' url: 'https://example.com' tool_use_id: 'srvtoolu_01abc' type: 'web_fetch_tool_result' properties: caller: $ref: '#/components/schemas/AnthropicCaller' content: $ref: '#/components/schemas/AnthropicWebFetchContent' tool_use_id: type: 'string' type: enum: - 'web_fetch_tool_result' type: 'string' required: - 'type' - 'caller' - 'content' - 'tool_use_id' type: 'object' AnthropicWebFetchToolResultError: example: error_code: 'unavailable' type: 'web_fetch_tool_result_error' properties: error_code: enum: - 'invalid_tool_input' - 'url_too_long' - 'url_not_allowed' - 'url_not_accessible' - 'unsupported_content_type' - 'too_many_requests' - 'max_uses_exceeded' - 'unavailable' type: 'string' type: enum: - 'web_fetch_tool_result_error' type: 'string' required: - 'type' - 'error_code' type: 'object' AnthropicWebSearchResult: example: encrypted_content: 'enc_content_0' page_age: null title: 'Example Page' type: 'web_search_result' url: 'https://example.com' properties: encrypted_content: type: 'string' page_age: type: - 'string' - 'null' title: type: 'string' type: enum: - 'web_search_result' type: 'string' url: type: 'string' required: - 'type' - 'encrypted_content' - 'page_age' - 'title' - 'url' type: 'object' AnthropicWebSearchResultBlockParam: example: encrypted_content: 'enc_content_0' title: 'Example Page' type: 'web_search_result' url: 'https://example.com' properties: encrypted_content: type: 'string' page_age: type: - 'string' - 'null' title: type: 'string' type: enum: - 'web_search_result' type: 'string' url: type: 'string' required: - 'type' - 'encrypted_content' - 'title' - 'url' type: 'object' AnthropicWebSearchToolResult: example: caller: type: 'direct' content: [] tool_use_id: 'srvtoolu_01abc' type: 'web_search_tool_result' properties: caller: $ref: '#/components/schemas/AnthropicCaller' content: anyOf: - items: $ref: '#/components/schemas/AnthropicWebSearchResult' type: 'array' - $ref: '#/components/schemas/AnthropicWebSearchToolResultError' tool_use_id: type: 'string' type: enum: - 'web_search_tool_result' type: 'string' required: - 'type' - 'caller' - 'tool_use_id' - 'content' type: 'object' AnthropicWebSearchToolResultError: example: error_code: 'unavailable' type: 'web_search_tool_result_error' properties: error_code: enum: - 'invalid_tool_input' - 'unavailable' - 'max_uses_exceeded' - 'too_many_requests' - 'query_too_long' - 'request_too_large' type: 'string' type: enum: - 'web_search_tool_result_error' type: 'string' required: - 'type' - 'error_code' type: 'object' AnthropicWebSearchToolUserLocation: example: city: 'San Francisco' country: 'US' region: 'California' timezone: 'America/Los_Angeles' type: 'approximate' properties: city: type: - 'string' - 'null' country: type: - 'string' - 'null' region: type: - 'string' - 'null' timezone: type: - 'string' - 'null' type: enum: - 'approximate' type: 'string' required: - 'type' type: - 'object' - 'null' ApiErrorType: description: 'Canonical OpenRouter error type, stable across all API formats' enum: - 'context_length_exceeded' - 'max_tokens_exceeded' - 'token_limit_exceeded' - 'string_too_long' - 'authentication' - 'permission_denied' - 'payment_required' - 'rate_limit_exceeded' - 'provider_overloaded' - 'provider_unavailable' - 'invalid_request' - 'invalid_prompt' - 'not_found' - 'precondition_failed' - 'payload_too_large' - 'unprocessable' - 'content_policy_violation' - 'refusal' - 'invalid_image' - 'image_too_large' - 'image_too_small' - 'unsupported_image_format' - 'image_not_found' - 'image_download_failed' - 'server' - 'timeout' - 'unmapped' example: 'rate_limit_exceeded' type: 'string' ApplyPatchCallItem: description: 'A tool call emitted by the model requesting a V4A patch operation. The client applies the patch and echoes an `apply_patch_call_output` on the next turn.' example: call_id: 'call_abc123' id: 'apc_abc123' operation: diff: "@@ function main() {\n+ console.log(\"hi\");\n }" path: '/src/main.ts' type: 'update_file' status: 'completed' type: 'apply_patch_call' properties: call_id: type: 'string' id: type: - 'string' - 'null' operation: $ref: '#/components/schemas/ApplyPatchCallOperation' status: $ref: '#/components/schemas/ApplyPatchCallStatus' type: enum: - 'apply_patch_call' type: 'string' required: - 'type' - 'call_id' - 'status' - 'operation' type: 'object' ApplyPatchCallOperation: description: 'The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it.' discriminator: mapping: create_file: '#/components/schemas/ApplyPatchCreateFileOperation' delete_file: '#/components/schemas/ApplyPatchDeleteFileOperation' update_file: '#/components/schemas/ApplyPatchUpdateFileOperation' propertyName: 'type' example: diff: "@@ function main() {\n+ console.log(\"hi\");\n }" path: '/src/main.ts' type: 'update_file' oneOf: - $ref: '#/components/schemas/ApplyPatchCreateFileOperation' - $ref: '#/components/schemas/ApplyPatchUpdateFileOperation' - $ref: '#/components/schemas/ApplyPatchDeleteFileOperation' ApplyPatchCallOperationDiffDeltaEvent: description: 'Incremental chunk of `operation.diff` for an `apply_patch_call`. Matches OpenAI''s streaming shape.' example: delta: "+console.log(\"hi\");\n" item_id: 'apc_abc123' output_index: 0 sequence_number: 5 type: 'response.apply_patch_call_operation_diff.delta' properties: delta: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.apply_patch_call_operation_diff.delta' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'delta' - 'sequence_number' type: 'object' ApplyPatchCallOperationDiffDoneEvent: description: 'Emitted when `operation.diff` streaming completes for an `apply_patch_call`.' example: diff: "@@\n+console.log(\"hi\");\n" item_id: 'apc_abc123' output_index: 0 sequence_number: 12 type: 'response.apply_patch_call_operation_diff.done' properties: diff: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.apply_patch_call_operation_diff.done' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'diff' - 'sequence_number' type: 'object' ApplyPatchCallOutputItem: description: 'The client''s echo of an `apply_patch_call` after applying the patch. `output` is an optional human-readable log; `status` is `completed` when the patch was applied successfully, `failed` otherwise.' example: call_id: 'call_abc123' output: 'Applied patch to /src/main.ts' status: 'completed' type: 'apply_patch_call_output' properties: call_id: type: 'string' id: type: - 'string' - 'null' output: type: - 'string' - 'null' status: enum: - 'completed' - 'failed' type: 'string' type: enum: - 'apply_patch_call_output' type: 'string' required: - 'type' - 'call_id' - 'status' type: 'object' ApplyPatchCallStatus: description: 'Lifecycle state of an `apply_patch_call` output item.' enum: - 'in_progress' - 'completed' example: 'completed' type: 'string' ApplyPatchCreateFileOperation: description: 'The `create_file` variant of an `apply_patch_call.operation`. Carries a V4A diff describing the new file contents.' example: diff: "@@\n+console.log(\"hi\");\n" path: '/src/main.ts' type: 'create_file' properties: diff: type: 'string' path: type: 'string' type: enum: - 'create_file' type: 'string' required: - 'type' - 'path' - 'diff' type: 'object' ApplyPatchDeleteFileOperation: description: 'The `delete_file` variant of an `apply_patch_call.operation`. Identifies the file to remove; no diff is required.' example: path: '/src/main.ts' type: 'delete_file' properties: path: type: 'string' type: enum: - 'delete_file' type: 'string' required: - 'type' - 'path' type: 'object' ApplyPatchEngineEnum: description: 'Which apply_patch engine to use. "auto" (default) uses native passthrough when the endpoint advertises native apply_patch support, otherwise falls back to OpenRouter''s HITL validator. "native" forces native passthrough — when the endpoint does not support native, the request falls back to HITL. "openrouter" always runs the HITL validator. Native passthrough streams the diff incrementally via `apply_patch_call_operation_diff.delta` events; HITL buffers the diff for atomic delivery as a single delta.' enum: - 'auto' - 'native' - 'openrouter' example: 'auto' type: 'string' ApplyPatchServerTool: description: 'Apply patch tool configuration' example: type: 'apply_patch' properties: type: enum: - 'apply_patch' type: 'string' required: - 'type' type: 'object' ApplyPatchServerTool_OpenRouter: description: 'OpenRouter built-in server tool: validates V4A diff patches for file operations (create, update, delete). Restricted to the Responses API.' example: type: 'openrouter:apply_patch' properties: parameters: $ref: '#/components/schemas/ApplyPatchServerToolConfig' type: enum: - 'openrouter:apply_patch' type: 'string' required: - 'type' type: 'object' ApplyPatchServerToolConfig: description: 'Configuration for the openrouter:apply_patch server tool' example: engine: 'auto' properties: engine: $ref: '#/components/schemas/ApplyPatchEngineEnum' type: 'object' ApplyPatchUpdateFileOperation: description: 'The `update_file` variant of an `apply_patch_call.operation`. Carries a V4A diff describing edits to an existing file.' example: diff: "@@ function main() {\n+ console.log(\"hi\");\n }" path: '/src/main.ts' type: 'update_file' properties: diff: type: 'string' path: type: 'string' type: enum: - 'update_file' type: 'string' required: - 'type' - 'path' - 'diff' type: 'object' AppRankingsItem: example: app_id: 12345 app_name: 'Cline' rank: 1 total_requests: 4321 total_tokens: '12345678' properties: app_id: description: 'Stable numeric identifier of the app on OpenRouter.' example: 12345 type: 'integer' app_name: description: 'Public display name of the app.' example: 'Cline' type: 'string' rank: description: '1-based position of the app within this response, per the requested `sort`.' example: 1 type: 'integer' total_requests: description: 'Number of requests attributed to the app inside the date window.' example: 4321 type: 'integer' total_tokens: description: 'Sum of `prompt_tokens + completion_tokens` attributed to the app inside the date window, returned as a decimal string so 64-bit values are not truncated.' example: '12345678' type: 'string' required: - 'rank' - 'app_id' - 'app_name' - 'total_tokens' - 'total_requests' type: 'object' AppRankingsResponse: example: data: - app_id: 12345 app_name: 'Cline' rank: 1 total_requests: 4321 total_tokens: '12345678' - app_id: 67890 app_name: 'Roo Code' rank: 2 total_requests: 2109 total_tokens: '9876543' meta: as_of: '2026-05-12T02:00:00Z' end_date: '2026-05-11' start_date: '2026-04-12' version: 'v1' properties: data: description: 'Apps ranked per the requested `sort`, re-numbered 1..N after category filtering. `popular` sorts by `total_tokens` descending; `trending` sorts by absolute excess token growth descending and may return fewer than `limit` rows when few apps are growing.' items: $ref: '#/components/schemas/AppRankingsItem' type: 'array' meta: $ref: '#/components/schemas/RankingsDailyMeta' required: - 'data' - 'meta' type: 'object' AutoBetaRouterPlugin: example: allowed_models: - 'anthropic/*' - 'openai/*' cost_tier: 'low' enabled: true excluded_models: - 'openai/gpt-4o' id: 'auto-beta-router' properties: allowed_models: description: 'List of model patterns to filter which models the auto-beta-router can route between. Supports wildcards (e.g., "anthropic/*" matches all Anthropic models). When not specified, uses the default supported models list.' example: - 'anthropic/*' - 'openai/gpt-4o' - 'google/*' items: type: 'string' type: 'array' cost_quality_tradeoff: deprecated: true description: 'Deprecated: Use cost_tier instead. Balances routing between cost and quality on a 0-10 scale. The auto-beta-router ranks models for the classified task type by community spend share, then filters candidates by their average cost per generation for that task. Higher values favor cheaper models: 10 keeps only models around the cheapest 10th percentile, while 0 permits models up to the 90th percentile for cost. Defaults to 9. Numeric cost_quality_tradeoff remains supported, retains ceiling behavior, and takes precedence over cost_tier when both are provided.' example: 9 maximum: 10 minimum: 0 type: 'integer' cost_tier: description: 'Named cost/quality setting. For auto-beta-router, tiers select cost-percentile bands: low = [0, 20), medium = [20, 40), high = [40, 60), xhigh = [60, 80), and max = [80, 100]. Numeric cost_quality_tradeoff takes precedence and retains ceiling behavior.' enum: - 'low' - 'medium' - 'high' - 'xhigh' - 'max' example: 'low' type: 'string' enabled: description: 'Set to false to disable the auto-beta-router plugin for this request. Defaults to true.' type: 'boolean' excluded_models: description: 'List of model patterns to exclude from auto-beta-router selection. Supports wildcards (e.g., "meta-llama/*" excludes all Llama models). Applied after allowed_models, so an excluded pattern always wins over an allowed one.' example: - 'openai/gpt-4o' - 'meta-llama/*' items: type: 'string' type: 'array' id: enum: - 'auto-beta-router' type: 'string' required: - 'id' type: 'object' AutoRouterPlugin: example: allowed_models: - 'anthropic/*' - 'openai/*' cost_tier: 'medium' enabled: true excluded_models: - 'openai/gpt-4o' id: 'auto-router' pin_model: false properties: allowed_models: description: 'List of model patterns to filter which models the auto-router can route between. Supports wildcards (e.g., "anthropic/*" matches all Anthropic models). When not specified, uses the default supported models list.' example: - 'anthropic/*' - 'openai/gpt-4o' - 'google/*' items: type: 'string' type: 'array' cost_quality_tradeoff: deprecated: true description: 'Deprecated: Use cost_tier instead. Controls cost vs. quality routing tradeoff (0–10). 0 = pure quality (best model regardless of cost), 10 = maximize for cost (cheapest model wins). Intermediate values blend quality and cost signals continuously. Defaults to 7. Numeric cost_quality_tradeoff remains supported and takes precedence over cost_tier when both are provided.' example: 7 maximum: 10 minimum: 0 type: 'integer' cost_tier: description: 'Shorthand for cost_quality_tradeoff. Higher tiers spend more on better models: low = 9, medium = 7, high = 5, xhigh = 3, and max = 1. Numeric cost_quality_tradeoff takes precedence when both are provided.' enum: - 'low' - 'medium' - 'high' - 'xhigh' - 'max' example: 'medium' type: 'string' enabled: description: 'Set to false to disable the auto-router plugin for this request. Defaults to true.' type: 'boolean' excluded_models: description: 'List of model patterns to exclude from auto-router selection. Supports wildcards (e.g., "meta-llama/*" excludes all Llama models). Applied after allowed_models, so an excluded pattern always wins over an allowed one.' example: - 'openai/gpt-4o' - 'meta-llama/*' items: type: 'string' type: 'array' id: enum: - 'auto-router' type: 'string' pin_model: description: 'When true, reuses the model from the most recent assistant message''s `model` attribute for subsequent turns. Defaults to false.' example: false type: 'boolean' required: - 'id' type: 'object' BadGatewayResponse: description: 'Bad Gateway - Provider/upstream API failure' example: error: code: 502 message: 'Provider returned error' properties: error: $ref: '#/components/schemas/BadGatewayResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' BadGatewayResponseErrorData: description: 'Error data for BadGatewayResponse' example: code: 502 message: 'Provider returned error' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' BadRequestResponse: description: 'Bad Request - Invalid request parameters or malformed input' example: error: code: 400 message: 'Invalid request parameters' properties: error: $ref: '#/components/schemas/BadRequestResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' BadRequestResponseErrorData: description: 'Error data for BadRequestResponse' example: code: 400 message: 'Invalid request parameters' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' BaseAnnotationAddedEvent: description: 'Event emitted when a text annotation is added to output' example: annotation: end_index: 7 start_index: 0 title: 'Example' type: 'url_citation' url: 'https://example.com' annotation_index: 0 content_index: 0 item_id: 'item-1' output_index: 0 sequence_number: 5 type: 'response.output_text.annotation.added' properties: annotation: $ref: '#/components/schemas/OpenAIResponsesAnnotation' annotation_index: type: 'integer' content_index: type: 'integer' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.output_text.annotation.added' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'sequence_number' - 'annotation_index' - 'annotation' type: 'object' BaseContentPartAddedEvent: description: 'Event emitted when a new content part is added to an output item' example: content_index: 0 item_id: 'item-1' output_index: 0 part: annotations: [] text: '' type: 'output_text' sequence_number: 3 type: 'response.content_part.added' properties: content_index: type: 'integer' item_id: type: 'string' output_index: type: 'integer' part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' sequence_number: type: 'integer' type: enum: - 'response.content_part.added' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'part' - 'sequence_number' type: 'object' BaseContentPartDoneEvent: description: 'Event emitted when a content part is complete' example: content_index: 0 item_id: 'item-1' output_index: 0 part: annotations: [] text: 'Hello! How can I help you?' type: 'output_text' sequence_number: 7 type: 'response.content_part.done' properties: content_index: type: 'integer' item_id: type: 'string' output_index: type: 'integer' part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' sequence_number: type: 'integer' type: enum: - 'response.content_part.done' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'part' - 'sequence_number' type: 'object' BaseCustomToolCallInputDeltaEvent: description: 'Event emitted when a custom tool call''s freeform input is being streamed. Mirrors `response.function_call_arguments.delta` but for `custom` tools whose input is opaque text rather than JSON arguments.' example: delta: '*** Begin Patch' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.custom_tool_call_input.delta' properties: delta: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.custom_tool_call_input.delta' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'delta' - 'sequence_number' type: 'object' BaseCustomToolCallInputDoneEvent: description: 'Event emitted when a custom tool call''s freeform input streaming is complete. Mirrors `response.function_call_arguments.done` but for `custom` tools.' example: input: "*** Begin Patch\n*** End Patch" item_id: 'item-1' output_index: 0 sequence_number: 6 type: 'response.custom_tool_call_input.done' properties: input: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.custom_tool_call_input.done' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'input' - 'sequence_number' type: 'object' BaseErrorEvent: description: 'Event emitted when an error occurs during streaming' example: code: 'rate_limit_exceeded' message: 'Rate limit exceeded. Please try again later.' param: null sequence_number: 2 type: 'error' properties: code: type: - 'string' - 'null' message: type: 'string' param: type: - 'string' - 'null' sequence_number: type: 'integer' type: enum: - 'error' type: 'string' required: - 'type' - 'code' - 'message' - 'param' - 'sequence_number' type: 'object' BaseFunctionCallArgsDeltaEvent: description: 'Event emitted when function call arguments are being streamed' example: delta: '{"city": "..."}' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.function_call_arguments.delta' properties: delta: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.function_call_arguments.delta' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'delta' - 'sequence_number' type: 'object' BaseFunctionCallArgsDoneEvent: description: 'Event emitted when function call arguments streaming is complete' example: arguments: '{"city": "San Francisco", "units": "celsius"}' item_id: 'item-1' name: 'get_weather' output_index: 0 sequence_number: 6 type: 'response.function_call_arguments.done' properties: arguments: type: 'string' item_id: type: 'string' name: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.function_call_arguments.done' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'name' - 'arguments' - 'sequence_number' type: 'object' BaseInputs: anyOf: - type: 'string' - items: anyOf: - properties: content: anyOf: - items: discriminator: mapping: input_audio: '#/components/schemas/InputAudio' input_file: '#/components/schemas/InputFile' input_image: '#/components/schemas/InputImage' input_text: '#/components/schemas/InputText' propertyName: 'type' oneOf: - $ref: '#/components/schemas/InputText' - $ref: '#/components/schemas/InputImage' - $ref: '#/components/schemas/InputFile' - $ref: '#/components/schemas/InputAudio' type: 'array' - type: 'string' phase: anyOf: - enum: - 'commentary' type: 'string' - enum: - 'final_answer' type: 'string' - type: 'null' role: anyOf: - enum: - 'user' type: 'string' - enum: - 'system' type: 'string' - enum: - 'assistant' type: 'string' - enum: - 'developer' type: 'string' type: enum: - 'message' type: 'string' required: - 'role' - 'content' type: 'object' - $ref: '#/components/schemas/OpenAIResponseInputMessageItem' - $ref: '#/components/schemas/OpenAIResponseFunctionToolCallOutput' - $ref: '#/components/schemas/OpenAIResponseFunctionToolCall' - $ref: '#/components/schemas/OutputItemImageGenerationCall' - $ref: '#/components/schemas/OutputMessage' - $ref: '#/components/schemas/OpenAIResponseCustomToolCall' - $ref: '#/components/schemas/OpenAIResponseCustomToolCallOutput' - $ref: '#/components/schemas/ApplyPatchCallItem' - $ref: '#/components/schemas/ApplyPatchCallOutputItem' type: 'array' - type: 'null' example: - content: 'What is the weather today?' role: 'user' BaseMessagesResult: description: 'Base Anthropic Messages API response before OpenRouter extensions' example: container: null content: - citations: [] text: 'Hello!' type: 'text' id: 'msg_01XFDUDYJgAACzvnptvVoYEL' model: 'claude-sonnet-4-5-20250929' role: 'assistant' stop_details: null stop_reason: 'end_turn' stop_sequence: null type: 'message' usage: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 12 output_tokens: 8 output_tokens_details: null server_tool_use: null service_tier: 'standard' properties: container: $ref: '#/components/schemas/AnthropicContainer' content: items: $ref: '#/components/schemas/ORAnthropicContentBlock' type: 'array' id: type: 'string' model: type: 'string' role: enum: - 'assistant' type: 'string' stop_details: $ref: '#/components/schemas/AnthropicRefusalStopDetails' stop_reason: $ref: '#/components/schemas/ORAnthropicStopReason' stop_sequence: type: - 'string' - 'null' type: enum: - 'message' type: 'string' usage: allOf: - $ref: '#/components/schemas/AnthropicUsage' - properties: iterations: items: $ref: '#/components/schemas/AnthropicUsageIteration' type: 'array' speed: $ref: '#/components/schemas/AnthropicSpeed' type: 'object' example: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 100 output_tokens: 50 output_tokens_details: null server_tool_use: null service_tier: 'standard' required: - 'id' - 'type' - 'role' - 'container' - 'content' - 'model' - 'stop_reason' - 'stop_details' - 'stop_sequence' - 'usage' type: 'object' BaseReasoningConfig: example: effort: 'medium' summary: 'auto' properties: context: $ref: '#/components/schemas/ReasoningContext' effort: $ref: '#/components/schemas/ReasoningEffort' mode: $ref: '#/components/schemas/ReasoningMode' summary: $ref: '#/components/schemas/ReasoningSummaryVerbosity' type: - 'object' - 'null' BaseReasoningDeltaEvent: description: 'Event emitted when reasoning text delta is streamed' example: content_index: 0 delta: 'First, we need' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.reasoning_text.delta' properties: content_index: type: 'integer' delta: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.reasoning_text.delta' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'delta' - 'sequence_number' type: 'object' BaseReasoningDoneEvent: description: 'Event emitted when reasoning text streaming is complete' example: content_index: 0 item_id: 'item-1' output_index: 0 sequence_number: 6 text: 'First, we need to identify the key components and then combine them logically.' type: 'response.reasoning_text.done' properties: content_index: type: 'integer' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' text: type: 'string' type: enum: - 'response.reasoning_text.done' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'text' - 'sequence_number' type: 'object' BaseReasoningSummaryPartAddedEvent: description: 'Event emitted when a reasoning summary part is added' example: item_id: 'item-1' output_index: 0 part: text: '' type: 'summary_text' sequence_number: 3 summary_index: 0 type: 'response.reasoning_summary_part.added' properties: item_id: type: 'string' output_index: type: 'integer' part: $ref: '#/components/schemas/ReasoningSummaryText' sequence_number: type: 'integer' summary_index: type: 'integer' type: enum: - 'response.reasoning_summary_part.added' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'summary_index' - 'part' - 'sequence_number' type: 'object' BaseReasoningSummaryPartDoneEvent: description: 'Event emitted when a reasoning summary part is complete' example: item_id: 'item-1' output_index: 0 part: text: 'Analyzing the problem step by step to find the optimal solution.' type: 'summary_text' sequence_number: 7 summary_index: 0 type: 'response.reasoning_summary_part.done' properties: item_id: type: 'string' output_index: type: 'integer' part: $ref: '#/components/schemas/ReasoningSummaryText' sequence_number: type: 'integer' summary_index: type: 'integer' type: enum: - 'response.reasoning_summary_part.done' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'summary_index' - 'part' - 'sequence_number' type: 'object' BaseReasoningSummaryTextDeltaEvent: description: 'Event emitted when reasoning summary text delta is streamed' example: delta: 'Analyzing' item_id: 'item-1' output_index: 0 sequence_number: 4 summary_index: 0 type: 'response.reasoning_summary_text.delta' properties: delta: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' summary_index: type: 'integer' type: enum: - 'response.reasoning_summary_text.delta' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'summary_index' - 'delta' - 'sequence_number' type: 'object' BaseReasoningSummaryTextDoneEvent: description: 'Event emitted when reasoning summary text streaming is complete' example: item_id: 'item-1' output_index: 0 sequence_number: 6 summary_index: 0 text: 'Analyzing the problem step by step to find the optimal solution.' type: 'response.reasoning_summary_text.done' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' summary_index: type: 'integer' text: type: 'string' type: enum: - 'response.reasoning_summary_text.done' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'summary_index' - 'text' - 'sequence_number' type: 'object' BaseRefusalDeltaEvent: description: 'Event emitted when a refusal delta is streamed' example: content_index: 0 delta: 'I''m sorry' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.refusal.delta' properties: content_index: type: 'integer' delta: type: 'string' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.refusal.delta' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'delta' - 'sequence_number' type: 'object' BaseRefusalDoneEvent: description: 'Event emitted when refusal streaming is complete' example: content_index: 0 item_id: 'item-1' output_index: 0 refusal: 'I''m sorry, but I can''t assist with that request.' sequence_number: 6 type: 'response.refusal.done' properties: content_index: type: 'integer' item_id: type: 'string' output_index: type: 'integer' refusal: type: 'string' sequence_number: type: 'integer' type: enum: - 'response.refusal.done' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'refusal' - 'sequence_number' type: 'object' BaseResponsesResult: example: completed_at: 1704067210 created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'completed' temperature: null tool_choice: 'auto' tools: [] top_p: null properties: background: type: - 'boolean' - 'null' completed_at: type: - 'integer' - 'null' created_at: type: 'integer' error: $ref: '#/components/schemas/ResponsesErrorField' frequency_penalty: format: 'double' type: - 'number' - 'null' id: type: 'string' incomplete_details: $ref: '#/components/schemas/IncompleteDetails' instructions: $ref: '#/components/schemas/BaseInputs' max_output_tokens: type: - 'integer' - 'null' max_tool_calls: type: - 'integer' - 'null' metadata: $ref: '#/components/schemas/RequestMetadata' model: type: 'string' object: enum: - 'response' type: 'string' output: items: discriminator: mapping: apply_patch_call: '#/components/schemas/OutputItemApplyPatchCall' custom_tool_call: '#/components/schemas/OutputItemCustomToolCall' file_search_call: '#/components/schemas/OutputItemFileSearchCall' function_call: '#/components/schemas/OutputItemFunctionCall' image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' message: '#/components/schemas/OutputMessage' reasoning: '#/components/schemas/OutputItemReasoning' web_search_call: '#/components/schemas/OutputItemWebSearchCall' propertyName: 'type' oneOf: - $ref: '#/components/schemas/OutputMessage' - $ref: '#/components/schemas/OutputItemReasoning' - $ref: '#/components/schemas/OutputItemFunctionCall' - $ref: '#/components/schemas/OutputItemCustomToolCall' - $ref: '#/components/schemas/OutputItemWebSearchCall' - $ref: '#/components/schemas/OutputItemFileSearchCall' - $ref: '#/components/schemas/OutputItemImageGenerationCall' - $ref: '#/components/schemas/OutputItemApplyPatchCall' type: 'array' output_text: type: 'string' parallel_tool_calls: type: 'boolean' presence_penalty: format: 'double' type: - 'number' - 'null' previous_response_id: type: - 'string' - 'null' prompt: $ref: '#/components/schemas/StoredPromptTemplate' prompt_cache_key: type: - 'string' - 'null' prompt_cache_options: $ref: '#/components/schemas/PromptCacheOptions' reasoning: $ref: '#/components/schemas/BaseReasoningConfig' safety_identifier: type: - 'string' - 'null' service_tier: $ref: '#/components/schemas/ServiceTier' status: $ref: '#/components/schemas/OpenAIResponsesResponseStatus' store: type: 'boolean' temperature: format: 'double' type: - 'number' - 'null' text: $ref: '#/components/schemas/TextConfig' tool_choice: $ref: '#/components/schemas/OpenAIResponsesToolChoice' tools: items: oneOf: - allOf: - $ref: '#/components/schemas/FunctionTool' - properties: {} type: 'object' description: 'Function tool definition' example: description: 'Get the current weather in a location' name: 'get_weather' parameters: properties: location: description: 'The city and state' type: 'string' unit: enum: - 'celsius' - 'fahrenheit' type: 'string' required: - 'location' type: 'object' type: 'function' - $ref: '#/components/schemas/Preview_WebSearchServerTool' - $ref: '#/components/schemas/Preview_20250311_WebSearchServerTool' - $ref: '#/components/schemas/Legacy_WebSearchServerTool' - $ref: '#/components/schemas/WebSearchServerTool' - $ref: '#/components/schemas/FileSearchServerTool' - $ref: '#/components/schemas/ComputerUseServerTool' - $ref: '#/components/schemas/CodeInterpreterServerTool' - $ref: '#/components/schemas/McpServerTool' - $ref: '#/components/schemas/ImageGenerationServerTool' - $ref: '#/components/schemas/CodexLocalShellTool' - $ref: '#/components/schemas/ShellServerTool' - $ref: '#/components/schemas/ApplyPatchServerTool' - $ref: '#/components/schemas/CustomTool' - $ref: '#/components/schemas/NamespaceTool' type: 'array' top_logprobs: type: 'integer' top_p: format: 'double' type: - 'number' - 'null' truncation: $ref: '#/components/schemas/Truncation' usage: $ref: '#/components/schemas/OpenAIResponsesUsage' user: type: - 'string' - 'null' required: - 'id' - 'object' - 'created_at' - 'model' - 'status' - 'completed_at' - 'output' - 'error' - 'incomplete_details' - 'temperature' - 'top_p' - 'presence_penalty' - 'frequency_penalty' - 'instructions' - 'metadata' - 'tools' - 'tool_choice' - 'parallel_tool_calls' type: 'object' BaseTextDeltaEvent: description: 'Event emitted when a text delta is streamed' example: content_index: 0 delta: 'Hello' item_id: 'item-1' logprobs: [] output_index: 0 sequence_number: 4 type: 'response.output_text.delta' properties: content_index: type: 'integer' delta: type: 'string' item_id: type: 'string' logprobs: items: $ref: '#/components/schemas/OpenResponsesLogProbs' type: 'array' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.output_text.delta' type: 'string' required: - 'type' - 'logprobs' - 'output_index' - 'item_id' - 'content_index' - 'delta' - 'sequence_number' type: 'object' BaseTextDoneEvent: description: 'Event emitted when text streaming is complete' example: content_index: 0 item_id: 'item-1' logprobs: [] output_index: 0 sequence_number: 6 text: 'Hello! How can I help you?' type: 'response.output_text.done' properties: content_index: type: 'integer' item_id: type: 'string' logprobs: items: $ref: '#/components/schemas/OpenResponsesLogProbs' type: 'array' output_index: type: 'integer' sequence_number: type: 'integer' text: type: 'string' type: enum: - 'response.output_text.done' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'content_index' - 'text' - 'sequence_number' - 'logprobs' type: 'object' BashServerTool: description: 'OpenRouter built-in server tool: runs shell commands server-side in a sandboxed container' example: parameters: environment: type: 'container_auto' type: 'openrouter:bash' properties: parameters: $ref: '#/components/schemas/BashServerToolConfig' type: enum: - 'openrouter:bash' type: 'string' required: - 'type' type: 'object' BashServerToolConfig: description: 'Configuration for the openrouter:bash server tool' example: environment: type: 'container_auto' properties: engine: $ref: '#/components/schemas/BashServerToolEngine' environment: $ref: '#/components/schemas/BashServerToolEnvironment' sleep_after_seconds: $ref: '#/components/schemas/SandboxSleepAfterSeconds' type: 'object' BashServerToolEngine: description: 'Which bash engine to use. "openrouter" runs commands server-side in the OpenRouter sandbox. "auto" (default) and "native" use native passthrough, returning the tool call to your application to run client-side; OpenRouter does not execute the commands.' enum: - 'auto' - 'native' - 'openrouter' example: 'auto' type: 'string' BashServerToolEnvironment: description: 'Execution environment for the bash server tool.' discriminator: mapping: container_auto: '#/components/schemas/ContainerAutoEnvironment' container_reference: '#/components/schemas/ContainerReferenceEnvironment' propertyName: 'type' example: type: 'container_auto' oneOf: - $ref: '#/components/schemas/ContainerAutoEnvironment' - $ref: '#/components/schemas/ContainerReferenceEnvironment' BooleanCapability: description: 'A supported-or-not flag. Present means the parameter is accepted.' example: type: 'boolean' properties: type: enum: - 'boolean' type: 'string' required: - 'type' type: 'object' BulkAddWorkspaceMembersRequest: example: user_ids: - 'user_abc123' - 'user_def456' properties: user_ids: description: 'List of user IDs to add to the workspace. Members are assigned the same role they hold in the organization.' example: - 'user_abc123' - 'user_def456' items: type: 'string' maxItems: 100 minItems: 1 type: 'array' required: - 'user_ids' type: 'object' BulkAddWorkspaceMembersResponse: example: added_count: 1 data: - created_at: '2025-08-24T10:30:00Z' id: '660e8400-e29b-41d4-a716-446655440000' role: 'member' user_id: 'user_abc123' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: added_count: description: 'Number of workspace memberships created or updated' example: 2 type: 'integer' data: description: 'List of added workspace memberships' items: $ref: '#/components/schemas/WorkspaceMember' type: 'array' required: - 'data' - 'added_count' type: 'object' BulkAssignKeysRequest: example: key_hashes: - 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' properties: key_hashes: description: 'Array of API key hashes to assign to the guardrail' example: - 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' items: minLength: 1 type: 'string' minItems: 1 type: 'array' required: - 'key_hashes' type: 'object' BulkAssignKeysResponse: example: assigned_count: 3 properties: assigned_count: description: 'Number of keys successfully assigned' example: 3 type: 'integer' required: - 'assigned_count' type: 'object' BulkAssignMembersRequest: example: member_user_ids: - 'user_abc123' - 'user_def456' properties: member_user_ids: description: 'Array of member user IDs to assign to the guardrail' example: - 'user_abc123' - 'user_def456' items: minLength: 1 type: 'string' minItems: 1 type: 'array' required: - 'member_user_ids' type: 'object' BulkAssignMembersResponse: example: assigned_count: 2 properties: assigned_count: description: 'Number of members successfully assigned' example: 2 type: 'integer' required: - 'assigned_count' type: 'object' BulkRemoveWorkspaceMembersRequest: example: user_ids: - 'user_abc123' - 'user_def456' properties: user_ids: description: 'List of user IDs to remove from the workspace' example: - 'user_abc123' - 'user_def456' items: type: 'string' maxItems: 100 minItems: 1 type: 'array' required: - 'user_ids' type: 'object' BulkRemoveWorkspaceMembersResponse: example: removed_count: 2 properties: removed_count: description: 'Number of members removed' example: 2 type: 'integer' required: - 'removed_count' type: 'object' BulkUnassignKeysRequest: example: key_hashes: - 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' properties: key_hashes: description: 'Array of API key hashes to unassign from the guardrail' example: - 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' items: minLength: 1 type: 'string' minItems: 1 type: 'array' required: - 'key_hashes' type: 'object' BulkUnassignKeysResponse: example: unassigned_count: 3 properties: unassigned_count: description: 'Number of keys successfully unassigned' example: 3 type: 'integer' required: - 'unassigned_count' type: 'object' BulkUnassignMembersRequest: example: member_user_ids: - 'user_abc123' - 'user_def456' properties: member_user_ids: description: 'Array of member user IDs to unassign from the guardrail' example: - 'user_abc123' - 'user_def456' items: minLength: 1 type: 'string' minItems: 1 type: 'array' required: - 'member_user_ids' type: 'object' BulkUnassignMembersResponse: example: unassigned_count: 2 properties: unassigned_count: description: 'Number of members successfully unassigned' example: 2 type: 'integer' required: - 'unassigned_count' type: 'object' BYOKKey: example: allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Production OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: allowed_api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) that may use this credential. `null` means no restriction.' example: - 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' items: type: 'string' maxItems: 100 type: - 'array' - 'null' allowed_models: description: 'Optional allowlist of model slugs this credential may be used for. `null` means no restriction.' example: null items: type: 'string' maxItems: 100 type: - 'array' - 'null' allowed_user_ids: description: 'Optional allowlist of user IDs that may use this credential. `null` means no restriction.' example: null items: type: 'string' maxItems: 100 type: - 'array' - 'null' created_at: description: 'ISO timestamp of when the credential was created.' example: '2025-08-24T10:30:00Z' type: 'string' disabled: description: 'Whether this credential is currently disabled.' example: false type: 'boolean' id: description: 'Stable public identifier for this BYOK credential.' example: '11111111-2222-3333-4444-555555555555' format: 'uuid' type: 'string' is_fallback: description: 'Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried.' example: false type: 'boolean' label: description: 'Short masked snippet of the key (e.g. the first/last few characters) used to identify it in the UI.' example: 'sk-...AbCd' type: 'string' name: description: 'Optional human-readable name for the credential.' example: 'Production OpenAI Key' type: - 'string' - 'null' provider: $ref: '#/components/schemas/BYOKProviderSlug' sort_order: description: 'Position within the provider — credentials are tried in ascending sort order.' example: 0 type: 'integer' workspace_id: description: 'ID of the workspace this credential belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'provider' - 'workspace_id' - 'label' - 'disabled' - 'is_fallback' - 'allowed_models' - 'allowed_api_key_hashes' - 'allowed_user_ids' - 'sort_order' - 'created_at' type: 'object' BYOKProviderSlug: description: 'The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`).' enum: - 'ai21' - 'aion-labs' - 'akashml' - 'alibaba' - 'amazon-bedrock' - 'amazon-nova' - 'ambient' - 'anthropic' - 'arcee-ai' - 'atlas-cloud' - 'avian' - 'azure' - 'baidu' - 'baseten' - 'black-forest-labs' - 'byteplus' - 'cerebras' - 'chutes' - 'cirrascale' - 'clarifai' - 'cloudflare' - 'cohere' - 'coreweave' - 'crusoe' - 'darkbloom' - 'decart' - 'deepgram' - 'deepinfra' - 'deepseek' - 'dekallm' - 'digitalocean' - 'featherless' - 'fireworks' - 'fish-audio' - 'friendli' - 'gmicloud' - 'google-ai-studio' - 'google-vertex' - 'groq' - 'heygen' - 'inception' - 'inceptron' - 'inferact-vllm' - 'inference-net' - 'infermatic' - 'inflection' - 'io-net' - 'ionstream' - 'krea' - 'liquid' - 'mancer' - 'mara' - 'meta' - 'minimax' - 'mistral' - 'modal' - 'modelrun' - 'modular' - 'moonshotai' - 'morph' - 'ncompass' - 'nebius' - 'nex-agi' - 'nextbit' - 'novita' - 'nvidia' - 'open-inference' - 'openai' - 'parasail' - 'perceptron' - 'perplexity' - 'phala' - 'poolside' - 'quiver' - 'recraft' - 'reka' - 'relace' - 'runway' - 'sail-research' - 'sakana' - 'sakana-ai' - 'sambanova' - 'seed' - 'siliconflow' - 'sourceful' - 'stepfun' - 'streamlake' - 'switchpoint' - 'tencent' - 'tenstorrent' - 'thinkingmachines' - 'together' - 'upstage' - 'venice' - 'wafer' - 'wandb' - 'wandb-legacy' - 'xai' - 'xiaomi' - 'z-ai' example: 'openai' type: 'string' CapabilityDescriptor: description: 'A typed descriptor for one supported request parameter.' discriminator: mapping: boolean: '#/components/schemas/BooleanCapability' enum: '#/components/schemas/EnumCapability' range: '#/components/schemas/RangeCapability' propertyName: 'type' example: type: 'enum' values: - '1K' - '2K' - '4K' oneOf: - $ref: '#/components/schemas/EnumCapability' - $ref: '#/components/schemas/RangeCapability' - $ref: '#/components/schemas/BooleanCapability' ChatAssistantImages: description: 'Generated images from image generation models' example: - image_url: url: 'data:image/png;base64,iVBORw0KGgo...' items: properties: image_url: properties: url: description: 'URL or base64-encoded data of the generated image' type: 'string' required: - 'url' type: 'object' required: - 'image_url' type: 'object' type: 'array' ChatAssistantMessage: description: 'Assistant message for requests and responses' example: content: 'The capital of France is Paris.' model: 'openai/gpt-4o' role: 'assistant' properties: audio: $ref: '#/components/schemas/ChatAudioOutput' content: anyOf: - type: 'string' - items: $ref: '#/components/schemas/ChatContentItems' type: 'array' - type: 'null' description: 'Assistant message content' images: $ref: '#/components/schemas/ChatAssistantImages' model: description: 'Model that generated this assistant message' example: 'openai/gpt-4o' type: 'string' name: description: 'Optional name for the assistant' type: 'string' reasoning: description: 'Reasoning output' type: - 'string' - 'null' reasoning_details: $ref: '#/components/schemas/ChatReasoningDetails' refusal: description: 'Refusal message if content was refused' type: - 'string' - 'null' role: enum: - 'assistant' type: 'string' tool_calls: description: 'Tool calls made by the assistant' items: $ref: '#/components/schemas/ChatToolCall' type: 'array' required: - 'role' type: 'object' ChatAudioOutput: description: 'Audio output data or reference' example: data: 'UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1f' expires_at: 1677652400 id: 'audio_abc123' transcript: 'Hello! How can I help you today?' properties: data: description: 'Base64 encoded audio data' type: 'string' expires_at: description: 'Audio expiration timestamp' type: 'integer' id: description: 'Audio output identifier' type: 'string' transcript: description: 'Audio transcript' type: 'string' type: 'object' ChatChoice: description: 'Chat completion choice' example: finish_reason: 'stop' index: 0 logprobs: null message: content: 'The capital of France is Paris.' role: 'assistant' properties: finish_reason: $ref: '#/components/schemas/ChatFinishReasonEnum' index: description: 'Choice index' example: 0 type: 'integer' logprobs: $ref: '#/components/schemas/ChatTokenLogprobs' message: $ref: '#/components/schemas/ChatAssistantMessage' required: - 'finish_reason' - 'index' - 'message' type: 'object' ChatContentAudio: description: 'Audio input content part. Supported audio formats vary by provider.' example: input_audio: data: 'SGVsbG8gV29ybGQ=' format: 'wav' type: 'input_audio' properties: input_audio: properties: data: description: 'Base64 encoded audio data' type: 'string' format: description: 'Audio format (e.g., wav, mp3, flac, m4a, ogg, aiff, aac, pcm16, pcm24). Supported formats vary by provider.' type: 'string' required: - 'data' - 'format' type: 'object' type: enum: - 'input_audio' type: 'string' required: - 'type' - 'input_audio' type: 'object' ChatContentCacheControl: allOf: - $ref: '#/components/schemas/AnthropicCacheControlDirective' - properties: {} type: 'object' description: 'Anthropic-style cache breakpoint for the content part. Interchangeable with the OpenAI-style `prompt_cache_breakpoint` marker: OpenRouter converts between the two based on the provider serving the request.' example: ttl: '5m' type: 'ephemeral' ChatContentFile: description: 'File content part for document processing' example: file: file_data: 'https://example.com/document.pdf' filename: 'document.pdf' type: 'file' properties: file: properties: file_data: description: 'File content as base64 data URL or URL' type: 'string' file_id: description: 'File ID for previously uploaded files' type: 'string' filename: description: 'Original filename' type: 'string' type: 'object' type: enum: - 'file' type: 'string' required: - 'type' - 'file' type: 'object' ChatContentImage: description: 'Image content part for vision models' example: image_url: detail: 'auto' url: 'https://example.com/image.jpg' type: 'image_url' properties: image_url: properties: detail: description: 'Image detail level for vision models. `original` is an OpenRouter extension (not in the OpenAI Chat Completions spec) requesting true original-resolution media; it is downgraded to `high` for providers that lack an original-resolution tier.' enum: - 'auto' - 'low' - 'high' - 'original' type: 'string' url: description: 'URL of the image (data: URLs supported)' type: 'string' required: - 'url' type: 'object' type: enum: - 'image_url' type: 'string' required: - 'type' - 'image_url' type: 'object' ChatContentItems: description: 'Content part for chat completion messages' discriminator: mapping: file: '#/components/schemas/ChatContentFile' image_url: '#/components/schemas/ChatContentImage' input_audio: '#/components/schemas/ChatContentAudio' input_video: '#/components/schemas/Legacy_ChatContentVideo' text: '#/components/schemas/ChatContentText' video_url: '#/components/schemas/ChatContentVideo' propertyName: 'type' example: text: 'Hello, world!' type: 'text' oneOf: - $ref: '#/components/schemas/ChatContentText' - $ref: '#/components/schemas/ChatContentImage' - $ref: '#/components/schemas/ChatContentAudio' - $ref: '#/components/schemas/Legacy_ChatContentVideo' - $ref: '#/components/schemas/ChatContentVideo' - $ref: '#/components/schemas/ChatContentFile' ChatContentText: description: 'Text content part' example: text: 'Hello, world!' type: 'text' properties: cache_control: $ref: '#/components/schemas/ChatContentCacheControl' prompt_cache_breakpoint: $ref: '#/components/schemas/PromptCacheBreakpoint' text: type: 'string' type: enum: - 'text' type: 'string' required: - 'type' - 'text' type: 'object' ChatContentVideo: description: 'Video input content part' example: type: 'video_url' video_url: url: 'https://example.com/video.mp4' properties: type: enum: - 'video_url' type: 'string' video_url: $ref: '#/components/schemas/ChatContentVideoInput' required: - 'type' - 'video_url' type: 'object' ChatContentVideoInput: description: 'Video input object' example: url: 'https://example.com/video.mp4' properties: url: description: 'URL of the video (data: URLs supported)' type: 'string' required: - 'url' type: 'object' ChatDebugOptions: description: 'Debug options for inspecting request transformations (streaming only)' example: echo_upstream_body: true properties: echo_upstream_body: description: 'If true, includes the transformed upstream request body in a debug chunk at the start of the stream. Only works with streaming mode.' example: true type: 'boolean' type: 'object' ChatDeveloperMessage: description: 'Developer message' example: content: 'This is a message from the developer.' role: 'developer' properties: content: anyOf: - type: 'string' - items: $ref: '#/components/schemas/ChatContentText' type: 'array' description: 'Developer message content' example: 'This is a message from the developer.' name: description: 'Optional name for the developer message' example: 'Developer' type: 'string' role: enum: - 'developer' type: 'string' required: - 'role' - 'content' type: 'object' ChatFinishReasonEnum: enum: - 'tool_calls' - 'stop' - 'length' - 'content_filter' - 'error' - null example: 'stop' type: - 'string' - 'null' ChatFormatGrammarConfig: description: 'Custom grammar response format' example: grammar: 'root ::= "yes" | "no"' type: 'grammar' properties: grammar: description: 'Custom grammar for text generation' example: 'root ::= "yes" | "no"' type: 'string' type: enum: - 'grammar' type: 'string' required: - 'type' - 'grammar' type: 'object' ChatFormatJsonObjectConfig: description: 'JSON object response format' example: type: 'json_object' properties: type: enum: - 'json_object' type: 'string' required: - 'type' type: 'object' ChatFormatJsonSchemaConfig: description: 'JSON Schema response format for structured outputs' example: json_schema: name: 'math_response' schema: properties: answer: type: 'number' required: - 'answer' type: 'object' type: 'json_schema' properties: json_schema: $ref: '#/components/schemas/ChatJsonSchemaConfig' type: enum: - 'json_schema' type: 'string' required: - 'type' - 'json_schema' type: 'object' ChatFormatPythonConfig: description: 'Python code response format' example: type: 'python' properties: type: enum: - 'python' type: 'string' required: - 'type' type: 'object' ChatFormatTextConfig: description: 'Default text response format' example: type: 'text' properties: type: enum: - 'text' type: 'string' required: - 'type' type: 'object' ChatFunctionTool: anyOf: - properties: cache_control: $ref: '#/components/schemas/ChatContentCacheControl' function: description: 'Function definition for tool calling' example: description: 'Get the current weather for a location' name: 'get_weather' parameters: properties: location: description: 'City name' type: 'string' required: - 'location' type: 'object' properties: description: description: 'Function description for the model' example: 'Get the current weather for a location' type: 'string' name: description: 'Function name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars)' example: 'get_weather' maxLength: 64 type: 'string' parameters: additionalProperties: {} description: 'Function parameters as JSON Schema object' example: properties: location: description: 'City name' type: 'string' required: - 'location' type: 'object' type: 'object' strict: description: 'Enable strict schema adherence' example: false type: - 'boolean' - 'null' required: - 'name' type: 'object' type: enum: - 'function' type: 'string' required: - 'type' - 'function' type: 'object' - $ref: '#/components/schemas/AdvisorServerTool_OpenRouter' - $ref: '#/components/schemas/BashServerTool' - $ref: '#/components/schemas/DatetimeServerTool' - $ref: '#/components/schemas/FilesServerTool' - $ref: '#/components/schemas/FusionServerTool_OpenRouter' - $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter' - $ref: '#/components/schemas/ChatSearchModelsServerTool' - $ref: '#/components/schemas/SubagentServerTool_OpenRouter' - $ref: '#/components/schemas/WebFetchServerTool' - $ref: '#/components/schemas/OpenRouterWebSearchServerTool' - $ref: '#/components/schemas/ChatWebSearchShorthand' description: 'Tool definition for function calling (regular function or OpenRouter built-in server tool)' example: function: description: 'Get the current weather for a location' name: 'get_weather' parameters: properties: location: description: 'City name' type: 'string' unit: enum: - 'celsius' - 'fahrenheit' type: 'string' required: - 'location' type: 'object' type: 'function' ChatJsonSchemaConfig: description: 'JSON Schema configuration object' example: description: 'A mathematical response' name: 'math_response' schema: properties: answer: type: 'number' required: - 'answer' type: 'object' strict: true properties: description: description: 'Schema description for the model' example: 'A mathematical response' type: 'string' name: description: 'Schema name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars)' example: 'math_response' maxLength: 64 type: 'string' schema: additionalProperties: {} description: 'JSON Schema object' example: properties: answer: type: 'number' required: - 'answer' type: 'object' type: 'object' strict: description: 'Enable strict schema adherence' example: false type: - 'boolean' - 'null' required: - 'name' type: 'object' ChatMessages: description: 'Chat completion message with role-based discrimination' discriminator: mapping: assistant: '#/components/schemas/ChatAssistantMessage' developer: '#/components/schemas/ChatDeveloperMessage' system: '#/components/schemas/ChatSystemMessage' tool: '#/components/schemas/ChatToolMessage' user: '#/components/schemas/ChatUserMessage' propertyName: 'role' example: content: 'What is the capital of France?' role: 'user' oneOf: - $ref: '#/components/schemas/ChatSystemMessage' - $ref: '#/components/schemas/ChatUserMessage' - $ref: '#/components/schemas/ChatDeveloperMessage' - $ref: '#/components/schemas/ChatAssistantMessage' - $ref: '#/components/schemas/ChatToolMessage' ChatModelNames: description: 'Models to use for completion' example: - 'openai/gpt-4' - 'openai/gpt-4o' items: allOf: - $ref: '#/components/schemas/ModelName' - description: 'Available OpenRouter chat completion models' type: 'array' ChatNamedToolChoice: description: 'Named tool choice for specific function' example: function: name: 'get_weather' type: 'function' properties: function: properties: name: description: 'Function name to call' example: 'get_weather' type: 'string' required: - 'name' type: 'object' type: enum: - 'function' type: 'string' required: - 'type' - 'function' type: 'object' ChatReasoningDetails: description: 'Reasoning details for extended thinking models' example: - text: 'Let me work through this step by step...' type: 'reasoning.text' items: $ref: '#/components/schemas/ReasoningDetailUnion' type: 'array' ChatReasoningSummaryVerbosityEnum: enum: - 'auto' - 'concise' - 'detailed' - null example: 'concise' type: - 'string' - 'null' ChatRequest: description: 'Chat completion request parameters' example: max_tokens: 150 messages: - content: 'You are a helpful assistant.' role: 'system' - content: 'What is the capital of France?' role: 'user' model: 'openai/gpt-4' temperature: 0.7 properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' debug: $ref: '#/components/schemas/ChatDebugOptions' frequency_penalty: description: 'Frequency penalty (-2.0 to 2.0)' example: 0 format: 'double' type: - 'number' - 'null' image_config: $ref: '#/components/schemas/ImageConfig' logit_bias: additionalProperties: format: 'double' type: 'number' description: 'Token logit bias adjustments' example: '50256': -100 type: - 'object' - 'null' logprobs: description: 'Return log probabilities' example: false type: - 'boolean' - 'null' max_completion_tokens: description: 'Maximum tokens in completion' example: 100 type: - 'integer' - 'null' max_tokens: description: 'Maximum tokens (deprecated, use max_completion_tokens). Note: some providers enforce a minimum of 16.' example: 100 type: - 'integer' - 'null' messages: description: 'List of messages for the conversation' example: - content: 'Hello!' role: 'user' items: $ref: '#/components/schemas/ChatMessages' minItems: 1 type: 'array' metadata: additionalProperties: type: 'string' description: 'Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values)' example: session_id: 'session-456' user_id: 'user-123' type: 'object' min_p: description: 'Minimum probability threshold relative to the most likely token. Tokens with probability below min_p * (probability of top token) are filtered out. Not all providers support this parameter.' example: 0.1 format: 'double' type: - 'number' - 'null' modalities: description: 'Output modalities for the response. Supported values are "text", "image", and "audio".' example: - 'text' - 'image' items: enum: - 'text' - 'image' - 'audio' type: 'string' type: 'array' model: $ref: '#/components/schemas/ModelName' models: $ref: '#/components/schemas/ChatModelNames' parallel_tool_calls: description: 'Whether to enable parallel function calling during tool use. When true, the model may generate multiple tool calls in a single response.' example: true type: - 'boolean' - 'null' plugins: description: 'Plugins you want to enable for this request, including their settings.' items: discriminator: mapping: auto-beta-router: '#/components/schemas/AutoBetaRouterPlugin' auto-router: '#/components/schemas/AutoRouterPlugin' context-compression: '#/components/schemas/ContextCompressionPlugin' file-parser: '#/components/schemas/FileParserPlugin' fusion: '#/components/schemas/FusionPlugin' moderation: '#/components/schemas/ModerationPlugin' pareto-router: '#/components/schemas/ParetoRouterPlugin' response-healing: '#/components/schemas/ResponseHealingPlugin' web: '#/components/schemas/WebSearchPlugin' web-fetch: '#/components/schemas/WebFetchPlugin' propertyName: 'id' oneOf: - $ref: '#/components/schemas/AutoRouterPlugin' - $ref: '#/components/schemas/AutoBetaRouterPlugin' - $ref: '#/components/schemas/ModerationPlugin' - $ref: '#/components/schemas/WebSearchPlugin' - $ref: '#/components/schemas/WebFetchPlugin' - $ref: '#/components/schemas/FileParserPlugin' - $ref: '#/components/schemas/ResponseHealingPlugin' - $ref: '#/components/schemas/ContextCompressionPlugin' - $ref: '#/components/schemas/ParetoRouterPlugin' - $ref: '#/components/schemas/FusionPlugin' type: 'array' prediction: $ref: '#/components/schemas/Prediction' presence_penalty: description: 'Presence penalty (-2.0 to 2.0)' example: 0 format: 'double' type: - 'number' - 'null' prompt_cache_key: type: - 'string' - 'null' prompt_cache_options: $ref: '#/components/schemas/PromptCacheOptions' provider: $ref: '#/components/schemas/ProviderPreferences' reasoning: description: 'Configuration options for reasoning models' example: effort: 'medium' summary: 'concise' properties: effort: description: 'Constrains effort on reasoning for reasoning models' enum: - 'max' - 'xhigh' - 'high' - 'medium' - 'low' - 'minimal' - 'none' - null example: 'medium' type: - 'string' - 'null' summary: $ref: '#/components/schemas/ChatReasoningSummaryVerbosityEnum' type: 'object' reasoning_effort: description: 'Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ.' enum: - 'max' - 'xhigh' - 'high' - 'medium' - 'low' - 'minimal' - 'none' - null example: 'medium' type: - 'string' - 'null' repetition_penalty: description: 'Penalizes tokens based on how much they have already appeared in the text. A value of 1.0 means no penalty. Values above 1.0 penalize repeated tokens more strongly. Not all providers support this parameter.' example: 1 format: 'double' type: - 'number' - 'null' response_format: description: 'Response format configuration' discriminator: mapping: grammar: '#/components/schemas/ChatFormatGrammarConfig' json_object: '#/components/schemas/ChatFormatJsonObjectConfig' json_schema: '#/components/schemas/ChatFormatJsonSchemaConfig' python: '#/components/schemas/ChatFormatPythonConfig' text: '#/components/schemas/ChatFormatTextConfig' propertyName: 'type' example: type: 'json_object' oneOf: - $ref: '#/components/schemas/ChatFormatTextConfig' - $ref: '#/components/schemas/ChatFormatJsonObjectConfig' - $ref: '#/components/schemas/ChatFormatJsonSchemaConfig' - $ref: '#/components/schemas/ChatFormatGrammarConfig' - $ref: '#/components/schemas/ChatFormatPythonConfig' route: $ref: '#/components/schemas/DeprecatedRoute' seed: description: 'Random seed for deterministic outputs' example: 42 type: - 'integer' - 'null' service_tier: description: 'The service tier to use for processing this request. `fast` is accepted as an alias for `priority`.' enum: - 'auto' - 'default' - 'fast' - 'flex' - 'priority' - 'scale' - null example: 'auto' type: - 'string' - 'null' session_id: description: 'A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.' maxLength: 256 type: 'string' stop: anyOf: - type: 'string' - items: type: 'string' maxItems: 4 type: 'array' - type: 'null' description: 'Stop sequences (up to 4)' example: - "\n" stop_server_tools_when: $ref: '#/components/schemas/StopServerToolsWhen' stream: default: false description: 'Enable streaming response' example: false type: 'boolean' stream_options: $ref: '#/components/schemas/ChatStreamOptions' temperature: description: 'Sampling temperature (0-2)' example: 0.7 format: 'double' type: - 'number' - 'null' tool_choice: $ref: '#/components/schemas/ChatToolChoice' tools: description: 'Available tools for function calling' example: - function: description: 'Get weather' name: 'get_weather' type: 'function' items: $ref: '#/components/schemas/ChatFunctionTool' type: 'array' top_a: description: 'Consider only tokens with "sufficiently high" probabilities based on the probability of the most likely token. Not all providers support this parameter.' example: 0 format: 'double' type: - 'number' - 'null' top_k: description: 'Limits the model to choose from the top K most likely tokens at each step. A value of 1 means the model will always pick the most likely next token. Not all providers support this parameter.' example: 40 type: - 'integer' - 'null' top_logprobs: description: 'Number of top log probabilities to return (0-20)' example: 5 type: - 'integer' - 'null' top_p: description: 'Nucleus sampling parameter (0-1)' example: 1 format: 'double' type: - 'number' - 'null' trace: $ref: '#/components/schemas/TraceConfig' user: description: 'Per-end-user identifier for abuse isolation. Use a stable ID, hash, or pseudonym. When a provider requires a user identity, OpenRouter folds it into the hashed identity sent upstream and never forwards it raw. If omitted, requests use an account-level identity, so provider policy blocks can affect the whole account.' example: 'user-123' type: 'string' required: - 'messages' type: 'object' ChatResult: description: 'Chat completion response' example: choices: - finish_reason: 'stop' index: 0 message: content: 'The capital of France is Paris.' role: 'assistant' created: 1677652288 id: 'chatcmpl-123' model: 'openai/gpt-4' object: 'chat.completion' system_fingerprint: 'fp_44709d6fcb' usage: completion_tokens: 15 prompt_tokens: 10 total_tokens: 25 properties: choices: description: 'List of completion choices' items: $ref: '#/components/schemas/ChatChoice' type: 'array' created: description: 'Unix timestamp of creation' example: 1677652288 type: 'integer' id: description: 'Unique completion identifier' example: 'chatcmpl-123' type: 'string' model: description: 'Model used for completion' example: 'openai/gpt-4' type: 'string' object: enum: - 'chat.completion' type: 'string' openrouter_metadata: $ref: '#/components/schemas/OpenRouterMetadata' service_tier: description: 'The service tier used by the upstream provider for this request' example: 'default' type: - 'string' - 'null' system_fingerprint: description: 'System fingerprint' example: 'fp_44709d6fcb' type: - 'string' - 'null' usage: $ref: '#/components/schemas/ChatUsage' required: - 'id' - 'choices' - 'created' - 'model' - 'object' - 'system_fingerprint' type: 'object' ChatSearchModelsServerTool: description: 'OpenRouter built-in server tool: searches and filters AI models available on OpenRouter' example: parameters: max_results: 5 type: 'openrouter:experimental__search_models' properties: parameters: $ref: '#/components/schemas/SearchModelsServerToolConfig' type: enum: - 'openrouter:experimental__search_models' type: 'string' required: - 'type' type: 'object' ChatServerToolChoice: description: 'OpenRouter extension: force a specific server tool by naming it directly in `tool_choice.type` instead of wrapping it in `{ type: "function", function: { name } }`.' example: type: 'openrouter:web_search' properties: type: description: 'OpenRouter server-tool type to force (e.g. `openrouter:web_search`, `web_search`, `web_search_preview`).' example: 'openrouter:web_search' type: 'string' required: - 'type' type: 'object' ChatStreamChoice: description: 'Streaming completion choice chunk' example: delta: content: 'Hello' role: 'assistant' finish_reason: null index: 0 properties: delta: $ref: '#/components/schemas/ChatStreamDelta' finish_reason: $ref: '#/components/schemas/ChatFinishReasonEnum' index: description: 'Choice index' example: 0 type: 'integer' logprobs: $ref: '#/components/schemas/ChatTokenLogprobs' required: - 'delta' - 'finish_reason' - 'index' type: 'object' ChatStreamChunk: description: 'Streaming chat completion chunk' example: choices: - delta: content: 'Hello' role: 'assistant' finish_reason: null index: 0 created: 1677652288 id: 'chatcmpl-123' model: 'openai/gpt-4' object: 'chat.completion.chunk' properties: choices: description: 'List of streaming chunk choices' items: $ref: '#/components/schemas/ChatStreamChoice' type: 'array' created: description: 'Unix timestamp of creation' example: 1677652288 type: 'integer' error: description: 'Error information' example: code: 429 message: 'Rate limit exceeded' metadata: error_type: 'rate_limit_exceeded' properties: code: description: 'Error code' example: 429 format: 'int32' type: 'integer' message: description: 'Error message' example: 'Rate limit exceeded' type: 'string' metadata: description: 'Structured error metadata' properties: error_type: $ref: '#/components/schemas/ApiErrorType' provider_code: description: 'Upstream provider-specific error code, when available' type: 'string' required: - 'error_type' type: 'object' required: - 'message' - 'code' type: 'object' id: description: 'Unique chunk identifier' example: 'chatcmpl-123' type: 'string' model: description: 'Model used for completion' example: 'openai/gpt-4' type: 'string' object: enum: - 'chat.completion.chunk' type: 'string' openrouter_metadata: $ref: '#/components/schemas/OpenRouterMetadata' service_tier: description: 'The service tier used by the upstream provider for this request' example: 'default' type: - 'string' - 'null' system_fingerprint: description: 'System fingerprint' example: 'fp_44709d6fcb' type: 'string' usage: $ref: '#/components/schemas/ChatUsage' required: - 'id' - 'choices' - 'created' - 'model' - 'object' type: 'object' x-speakeasy-entity: 'ChatStreamChunk' ChatStreamDelta: description: 'Delta changes in streaming response' example: content: 'Hello' role: 'assistant' properties: audio: allOf: - $ref: '#/components/schemas/ChatAudioOutput' - description: 'Audio output data' content: description: 'Message content delta' example: 'Hello' type: - 'string' - 'null' reasoning: description: 'Reasoning content delta' example: 'I need to' type: - 'string' - 'null' reasoning_details: $ref: '#/components/schemas/ChatStreamReasoningDetails' refusal: description: 'Refusal message delta' example: null type: - 'string' - 'null' role: description: 'The role of the message author' enum: - 'assistant' example: 'assistant' type: 'string' tool_calls: description: 'Tool calls delta' items: $ref: '#/components/schemas/ChatStreamToolCall' type: 'array' type: 'object' ChatStreamingResponse: example: data: choices: - delta: content: 'Hello' role: 'assistant' finish_reason: null index: 0 created: 1677652288 id: 'chatcmpl-123' model: 'openai/gpt-4' object: 'chat.completion.chunk' properties: data: $ref: '#/components/schemas/ChatStreamChunk' required: - 'data' type: 'object' ChatStreamOptions: description: 'Streaming configuration options' example: include_usage: true properties: include_usage: deprecated: true description: 'Deprecated: This field has no effect. Full usage details are always included.' example: true type: 'boolean' type: - 'object' - 'null' ChatStreamReasoningDetails: description: 'Reasoning details for extended thinking models' example: - text: 'Let me think about this...' type: 'reasoning.text' items: $ref: '#/components/schemas/ReasoningDetailUnion' type: 'array' ChatStreamToolCall: description: 'Tool call delta for streaming responses' example: function: arguments: '{"location": "..."}' name: 'get_weather' id: 'call_abc123' index: 0 type: 'function' properties: function: description: 'Function call details' properties: arguments: description: 'Function arguments as JSON string' example: '{"location": "..."}' type: 'string' name: description: 'Function name' example: 'get_weather' type: 'string' type: 'object' id: description: 'Tool call identifier' example: 'call_abc123' type: 'string' index: description: 'Tool call index in the array' example: 0 type: 'integer' type: description: 'Tool call type' enum: - 'function' example: 'function' type: 'string' required: - 'index' type: 'object' ChatSystemMessage: description: 'System message for setting behavior' example: content: 'You are a helpful assistant.' name: 'Assistant Config' role: 'system' properties: content: anyOf: - type: 'string' - items: $ref: '#/components/schemas/ChatContentText' type: 'array' description: 'System message content' example: 'You are a helpful assistant.' name: description: 'Optional name for the system message' example: 'Assistant Config' type: 'string' role: enum: - 'system' type: 'string' required: - 'role' - 'content' type: 'object' ChatTokenLogprob: description: 'Token log probability information' example: bytes: null logprob: -0.612345 token: ' Hello' top_logprobs: - bytes: null logprob: -0.612345 token: ' Hello' properties: bytes: description: 'UTF-8 bytes of the token' items: type: 'integer' type: - 'array' - 'null' logprob: description: 'Log probability of the token' format: 'double' type: 'number' token: description: 'The token' type: 'string' top_logprobs: description: 'Top alternative tokens with probabilities' items: properties: bytes: items: type: 'integer' type: - 'array' - 'null' logprob: format: 'double' type: 'number' token: type: 'string' required: - 'token' - 'logprob' - 'bytes' type: 'object' type: 'array' required: - 'token' - 'logprob' - 'bytes' - 'top_logprobs' type: 'object' ChatTokenLogprobs: description: 'Log probabilities for the completion' example: content: - bytes: null logprob: -0.612345 token: ' Hello' top_logprobs: [] refusal: null properties: content: description: 'Log probabilities for content tokens' items: $ref: '#/components/schemas/ChatTokenLogprob' type: - 'array' - 'null' refusal: description: 'Log probabilities for refusal tokens' items: $ref: '#/components/schemas/ChatTokenLogprob' type: - 'array' - 'null' required: - 'content' type: - 'object' - 'null' ChatToolCall: description: 'Tool call made by the assistant' example: function: arguments: '{"location": "Boston, MA"}' name: 'get_current_weather' id: 'call_abc123' type: 'function' properties: function: properties: arguments: description: 'Function arguments as JSON string' type: 'string' name: description: 'Function name to call' type: 'string' required: - 'name' - 'arguments' type: 'object' id: description: 'Tool call identifier' type: 'string' type: enum: - 'function' type: 'string' required: - 'id' - 'type' - 'function' type: 'object' ChatToolChoice: anyOf: - enum: - 'none' type: 'string' - enum: - 'auto' type: 'string' - enum: - 'required' type: 'string' - $ref: '#/components/schemas/ChatNamedToolChoice' - $ref: '#/components/schemas/ChatServerToolChoice' description: 'Tool choice configuration' example: 'auto' ChatToolMessage: description: 'Tool response message' example: content: 'The weather in San Francisco is 72°F and sunny.' role: 'tool' tool_call_id: 'call_abc123' properties: content: anyOf: - type: 'string' - items: $ref: '#/components/schemas/ChatContentItems' type: 'array' description: 'Tool response content' example: 'The weather in San Francisco is 72°F and sunny.' role: enum: - 'tool' type: 'string' tool_call_id: description: 'ID of the assistant message tool call this message responds to' example: 'call_abc123' type: 'string' required: - 'role' - 'content' - 'tool_call_id' type: 'object' ChatUsage: description: 'Token usage statistics' example: completion_tokens: 15 completion_tokens_details: reasoning_tokens: 5 cost: 0.0012 cost_details: upstream_inference_completions_cost: 0.0004 upstream_inference_cost: null upstream_inference_prompt_cost: 0.0008 is_byok: false prompt_tokens: 10 prompt_tokens_details: cached_tokens: 2 server_tool_use_details: tool_calls_executed: 2 tool_calls_requested: 2 total_tokens: 25 properties: completion_tokens: description: 'Number of tokens in the completion' type: 'integer' completion_tokens_details: description: 'Detailed completion token usage' properties: accepted_prediction_tokens: description: 'Accepted prediction tokens' type: - 'integer' - 'null' audio_tokens: description: 'Tokens used for audio output' type: - 'integer' - 'null' reasoning_tokens: description: 'Tokens used for reasoning' type: - 'integer' - 'null' rejected_prediction_tokens: description: 'Rejected prediction tokens' type: - 'integer' - 'null' type: - 'object' - 'null' cost: description: 'Cost of the completion' format: 'double' type: - 'number' - 'null' cost_details: $ref: '#/components/schemas/CostDetails' is_byok: description: 'Whether a request was made using a Bring Your Own Key configuration' type: 'boolean' prompt_tokens: description: 'Number of tokens in the prompt' type: 'integer' prompt_tokens_details: description: 'Detailed prompt token usage' properties: audio_tokens: description: 'Audio input tokens' type: 'integer' cache_write_tokens: description: 'Tokens written to cache. Only returned for models with explicit caching and cache write pricing.' type: 'integer' cached_tokens: description: 'Cached prompt tokens' type: 'integer' video_tokens: description: 'Video input tokens' type: 'integer' type: - 'object' - 'null' server_tool_use_details: $ref: '#/components/schemas/ServerToolUseDetails' total_tokens: description: 'Total number of tokens' type: 'integer' required: - 'completion_tokens' - 'prompt_tokens' - 'total_tokens' type: 'object' ChatUserMessage: description: 'User message' example: content: 'What is the capital of France?' role: 'user' properties: content: anyOf: - type: 'string' - items: $ref: '#/components/schemas/ChatContentItems' type: 'array' description: 'User message content' example: 'What is the capital of France?' name: description: 'Optional name for the user' example: 'User' type: 'string' role: enum: - 'user' type: 'string' required: - 'role' - 'content' type: 'object' ChatWebSearchShorthand: description: 'Web search tool using OpenAI Responses API syntax. Automatically converted to openrouter:web_search.' example: type: 'web_search_preview' properties: allowed_domains: description: 'Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains.' items: type: 'string' type: 'array' engine: $ref: '#/components/schemas/WebSearchEngineEnum' excluded_domains: description: 'Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, Anthropic, OpenAI, and xAI. Cannot be used with allowed_domains.' items: type: 'string' type: 'array' max_characters: description: 'Exact maximum number of characters of content per search result. Applies to the Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, caps highlight content per result. For Parallel, caps excerpt content per result (default 1,500 when omitted). For Perplexity, maps to the native `max_tokens_per_page` parameter (converted from characters to tokens) and trims the response to the exact character cap. When both `max_characters` and `search_context_size` are set, `max_characters` takes precedence. When omitted, falls back to `search_context_size` mapping (Exa) or engine defaults (Parallel, Perplexity).' example: 2000 type: 'integer' max_results: description: 'Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped.' example: 5 type: 'integer' max_total_results: description: 'Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified.' example: 50 type: 'integer' max_uses: description: 'Maximum number of web searches the model may perform in a single request. Once reached, further search calls return an error result instead of executing. Applies to the Exa, Firecrawl, Parallel, and Perplexity engines. With native provider search, forwarded only to Anthropic (as `max_uses`); other native search providers have no equivalent parameter and ignore it.' example: 3 type: 'integer' parameters: $ref: '#/components/schemas/WebSearchConfig' search_context_size: $ref: '#/components/schemas/SearchQualityLevel' type: enum: - 'web_search' - 'web_search_preview' - 'web_search_preview_2025_03_11' - 'web_search_2025_08_26' type: 'string' user_location: $ref: '#/components/schemas/WebSearchUserLocationServerTool' required: - 'type' type: 'object' CodeInterpreterCallItem: description: 'A code interpreter execution call with outputs' example: code: 'print("Hello, World!")' container_id: 'container-xyz789' id: 'code-abc123' outputs: - logs: 'Hello, World!' type: 'logs' status: 'completed' type: 'code_interpreter_call' properties: code: type: - 'string' - 'null' container_id: type: 'string' id: type: 'string' outputs: items: anyOf: - properties: type: enum: - 'image' type: 'string' url: type: 'string' required: - 'type' - 'url' type: 'object' - properties: logs: type: 'string' type: enum: - 'logs' type: 'string' required: - 'type' - 'logs' type: 'object' type: - 'array' - 'null' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'code_interpreter_call' type: 'string' required: - 'type' - 'id' - 'code' - 'outputs' - 'status' - 'container_id' type: 'object' CodeInterpreterServerTool: description: 'Code interpreter tool configuration' example: container: 'auto' type: 'code_interpreter' properties: container: anyOf: - type: 'string' - properties: file_ids: items: type: 'string' type: 'array' memory_limit: enum: - '1g' - '4g' - '16g' - '64g' - null type: - 'string' - 'null' type: enum: - 'auto' type: 'string' required: - 'type' type: 'object' type: enum: - 'code_interpreter' type: 'string' required: - 'type' - 'container' type: 'object' CodexLocalShellTool: description: 'Local shell tool configuration' example: type: 'local_shell' properties: type: enum: - 'local_shell' type: 'string' required: - 'type' type: 'object' CompactionItem: additionalProperties: {} description: 'A context compaction marker with encrypted summary' example: encrypted_content: 'enc_abc123...' type: 'compaction' properties: encrypted_content: type: 'string' id: type: - 'string' - 'null' type: enum: - 'compaction' type: 'string' required: - 'type' - 'encrypted_content' type: 'object' CompletedEvent: description: 'Event emitted when a response has completed successfully' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: - content: - annotations: [] text: 'Hello! How can I help you?' type: 'output_text' id: 'item-1' role: 'assistant' status: 'completed' type: 'message' parallel_tool_calls: true presence_penalty: null status: 'completed' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 10 type: 'response.completed' properties: response: $ref: '#/components/schemas/BaseResponsesResult' sequence_number: type: 'integer' type: enum: - 'response.completed' type: 'string' required: - 'type' - 'response' - 'sequence_number' type: 'object' CompoundFilter: description: 'A compound filter that combines multiple comparison or compound filters' example: filters: - key: 'author' type: 'eq' value: 'Alice' type: 'and' properties: filters: items: additionalProperties: {} type: 'object' type: 'array' type: enum: - 'and' - 'or' type: 'string' required: - 'type' - 'filters' type: 'object' ComputerUseServerTool: description: 'Computer use preview tool configuration' example: display_height: 768 display_width: 1024 environment: 'linux' type: 'computer_use_preview' properties: display_height: type: 'integer' display_width: type: 'integer' environment: enum: - 'windows' - 'mac' - 'linux' - 'ubuntu' - 'browser' type: 'string' type: enum: - 'computer_use_preview' type: 'string' required: - 'type' - 'display_height' - 'display_width' - 'environment' type: 'object' ConflictResponse: description: 'Conflict - Resource conflict or concurrent modification' example: error: code: 409 message: 'Resource conflict. Please try again later.' properties: error: $ref: '#/components/schemas/ConflictResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' ConflictResponseErrorData: description: 'Error data for ConflictResponse' example: code: 409 message: 'Resource conflict. Please try again later.' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' ContainerAutoEnvironment: description: 'An OpenRouter-managed, auto-provisioned ephemeral container.' example: type: 'container_auto' properties: type: enum: - 'container_auto' type: 'string' required: - 'type' type: 'object' ContainerReferenceEnvironment: description: 'Reference to a previously created container to reuse.' example: container_id: 'cntr_abc123' type: 'container_reference' properties: container_id: description: 'Identifier of an existing container to reuse (max 20 characters).' example: 'cntr_abc123' maxLength: 20 minLength: 1 pattern: '^[\w-]+$' type: 'string' type: enum: - 'container_reference' type: 'string' required: - 'type' - 'container_id' type: 'object' ContentFilterAction: description: 'Action taken when the pattern matches' enum: - 'redact' - 'block' - 'flag' example: 'block' type: 'string' ContentFilterBuiltinAction: description: 'Action taken when the builtin filter triggers' enum: - 'redact' - 'block' - 'flag' example: 'block' type: 'string' ContentFilterBuiltinEntry: description: 'A builtin content filter entry. Builtin filters include PII detectors and the regex-based prompt injection detector.' example: action: 'redact' label: '[EMAIL]' slug: 'email' properties: action: $ref: '#/components/schemas/ContentFilterBuiltinAction' label: description: 'Read-only, system-assigned redaction placeholder derived from the slug (e.g. "[EMAIL]", "[PHONE]"). Not settable by the caller.' example: '[EMAIL]' maxLength: 100 type: 'string' scan_scope: $ref: '#/components/schemas/PromptInjectionScanScope' slug: $ref: '#/components/schemas/ContentFilterBuiltinSlug' required: - 'slug' - 'action' type: 'object' ContentFilterBuiltinEntryInput: description: 'A builtin content filter entry for create/update requests. Labels are system-assigned and cannot be set by the caller.' example: action: 'redact' slug: 'email' properties: action: $ref: '#/components/schemas/ContentFilterBuiltinAction' label: deprecated: true description: 'Deprecated: labels are system-assigned and cannot be set by the caller. Accepted for backward compatibility but silently ignored.' maxLength: 100 type: 'string' scan_scope: $ref: '#/components/schemas/PromptInjectionScanScope' slug: $ref: '#/components/schemas/ContentFilterBuiltinSlug' required: - 'slug' - 'action' type: 'object' ContentFilterBuiltinSlug: description: 'The builtin filter identifier' enum: - 'email' - 'phone' - 'ssn' - 'credit-card' - 'ip-address' - 'person-name' - 'address' - 'regex-prompt-injection' example: 'regex-prompt-injection' type: 'string' ContentFilterEntry: description: 'A custom regex content filter that scans request messages for matching patterns.' example: action: 'redact' label: '[API_KEY]' pattern: '\b(sk-[a-zA-Z0-9]{48})\b' properties: action: $ref: '#/components/schemas/ContentFilterAction' label: description: 'Optional label used in redaction placeholders or error messages' example: '[API_KEY]' maxLength: 100 type: - 'string' - 'null' pattern: description: 'A regex pattern to match against request content' example: '\b(sk-[a-zA-Z0-9]{48})\b' minLength: 1 type: 'string' required: - 'pattern' - 'action' type: 'object' ContentPartAddedEvent: allOf: - $ref: '#/components/schemas/BaseContentPartAddedEvent' - properties: part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/ReasoningTextContent' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' type: 'object' description: 'Event emitted when a new content part is added to an output item' example: content_index: 0 item_id: 'item-1' output_index: 0 part: annotations: [] text: '' type: 'output_text' sequence_number: 3 type: 'response.content_part.added' ContentPartAudio: example: audio_url: url: 'https://example.com/audio.mp3' type: 'audio_url' properties: audio_url: properties: url: type: 'string' required: - 'url' type: 'object' type: enum: - 'audio_url' type: 'string' required: - 'type' - 'audio_url' type: 'object' ContentPartDoneEvent: allOf: - $ref: '#/components/schemas/BaseContentPartDoneEvent' - properties: part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/ReasoningTextContent' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' type: 'object' description: 'Event emitted when a content part is complete' example: content_index: 0 item_id: 'item-1' output_index: 0 part: annotations: [] text: 'Hello! How can I help you?' type: 'output_text' sequence_number: 7 type: 'response.content_part.done' ContentPartImage: example: image_url: url: 'https://example.com/image.png' type: 'image_url' properties: image_url: properties: url: type: 'string' required: - 'url' type: 'object' type: enum: - 'image_url' type: 'string' required: - 'type' - 'image_url' type: 'object' ContentPartInputAudio: example: input_audio: data: 'data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAA...' format: 'wav' type: 'input_audio' properties: input_audio: $ref: '#/components/schemas/MultimodalMedia' type: enum: - 'input_audio' type: 'string' required: - 'type' - 'input_audio' type: 'object' ContentPartInputFile: example: input_file: data: 'data:application/pdf;base64,JVBERi0xLjQKJeLjz9MKMyAw...' format: 'pdf' type: 'input_file' properties: input_file: $ref: '#/components/schemas/MultimodalMedia' type: enum: - 'input_file' type: 'string' required: - 'type' - 'input_file' type: 'object' ContentPartInputVideo: example: input_video: data: 'data:video/mp4;base64,AAAAGGZ0eXBtcDQyAAAAAGlzb21tcDQy...' format: 'mp4' type: 'input_video' properties: input_video: $ref: '#/components/schemas/MultimodalMedia' type: enum: - 'input_video' type: 'string' required: - 'type' - 'input_video' type: 'object' ContentPartVideo: example: type: 'video_url' video_url: url: 'https://example.com/clip.mp4' properties: type: enum: - 'video_url' type: 'string' video_url: properties: url: type: 'string' required: - 'url' type: 'object' required: - 'type' - 'video_url' type: 'object' ContextCompactionItem: additionalProperties: {} description: 'A context compaction marker with an optional encrypted summary' example: encrypted_content: 'enc_abc123...' type: 'context_compaction' properties: encrypted_content: type: - 'string' - 'null' id: type: - 'string' - 'null' type: enum: - 'context_compaction' type: 'string' required: - 'type' type: 'object' ContextCompressionEngine: description: 'The compression engine to use. Defaults to "middle-out".' enum: - 'middle-out' example: 'middle-out' type: 'string' ContextCompressionPlugin: example: enabled: true engine: 'middle-out' id: 'context-compression' properties: enabled: description: 'Set to false to disable the context-compression plugin for this request. Defaults to true.' type: 'boolean' engine: $ref: '#/components/schemas/ContextCompressionEngine' id: enum: - 'context-compression' type: 'string' required: - 'id' type: 'object' CostDetails: description: 'Breakdown of upstream inference costs' example: upstream_inference_completions_cost: 0.0004 upstream_inference_cost: null upstream_inference_prompt_cost: 0.0008 properties: upstream_inference_completions_cost: format: 'double' type: 'number' upstream_inference_cost: format: 'double' type: - 'number' - 'null' upstream_inference_prompt_cost: format: 'double' type: 'number' required: - 'upstream_inference_prompt_cost' - 'upstream_inference_completions_cost' type: - 'object' - 'null' CreateBYOKKeyRequest: example: key: 'sk-proj-abc123...' name: 'Production OpenAI Key' provider: 'openai' properties: allowed_models: description: 'Optional allowlist of model slugs this credential may be used for. `null` means no restriction.' example: null items: type: 'string' maxItems: 100 type: - 'array' - 'null' allowed_user_ids: description: 'Optional allowlist of user IDs that may use this credential. `null` means no restriction.' example: null items: type: 'string' maxItems: 100 type: - 'array' - 'null' disabled: description: 'Whether this credential should be created in a disabled state.' example: false type: 'boolean' is_fallback: description: 'Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried.' example: false type: 'boolean' key: description: 'The raw provider API key or credential. This value is encrypted at rest and never returned in API responses.' example: 'sk-proj-abc123...' minLength: 1 type: 'string' name: description: 'Optional human-readable name for the credential.' example: 'Production OpenAI Key' maxLength: 255 type: - 'string' - 'null' provider: $ref: '#/components/schemas/BYOKProviderSlug' workspace_id: description: 'Optional workspace ID. Defaults to the authenticated entity''s default workspace.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'provider' - 'key' type: 'object' CreateBYOKKeyResponse: example: data: allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Production OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: data: allOf: - $ref: '#/components/schemas/BYOKKey' - description: 'The created BYOK credential.' required: - 'data' type: 'object' CreatedEvent: description: 'Event emitted when a response is created' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'in_progress' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 0 type: 'response.created' properties: response: $ref: '#/components/schemas/BaseResponsesResult' sequence_number: type: 'integer' type: enum: - 'response.created' type: 'string' required: - 'type' - 'response' - 'sequence_number' type: 'object' CreateGuardrailRequest: example: allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'deepseek' content_filter_builtins: - action: 'block' slug: 'regex-prompt-injection' content_filters: null description: 'A guardrail for limiting API usage' enforce_zdr_anthropic: true enforce_zdr_google: false enforce_zdr_openai: true enforce_zdr_other: false enforce_zdr_xai: false ignored_models: null ignored_providers: null limit_usd: 50 name: 'My New Guardrail' reset_interval: 'monthly' properties: allowed_models: description: 'Array of model identifiers (slug or canonical_slug accepted)' example: - 'openai/gpt-5.2' - 'anthropic/claude-4.5-opus-20251124' - 'deepseek/deepseek-r1-0528:free' items: type: 'string' minItems: 1 type: - 'array' - 'null' allowed_providers: description: 'List of allowed provider IDs' example: - 'openai' - 'anthropic' - 'deepseek' items: type: 'string' minItems: 1 type: - 'array' - 'null' content_filter_builtins: description: 'Builtin content filters to apply. Every builtin slug supports "block", "redact", and the detect-only "flag" action.' example: - action: 'block' slug: 'regex-prompt-injection' items: $ref: '#/components/schemas/ContentFilterBuiltinEntryInput' type: - 'array' - 'null' content_filters: description: 'Custom regex content filters to apply to request messages' example: - action: 'redact' label: '[API_KEY]' pattern: '\b(sk-[a-zA-Z0-9]{48})\b' items: $ref: '#/components/schemas/ContentFilterEntry' type: - 'array' - 'null' description: description: 'Description of the guardrail' example: 'A guardrail for limiting API usage' maxLength: 1000 type: - 'string' - 'null' enable_free_model_publication: description: 'Whether this guardrail allows free endpoints that publish prompts.' example: false type: - 'boolean' - 'null' enable_free_model_training: description: 'Whether this guardrail allows free endpoints that train on request data.' example: true type: - 'boolean' - 'null' enable_paid_model_training: description: 'Whether this guardrail allows paid endpoints that train on request data.' example: true type: - 'boolean' - 'null' enforce_zdr: deprecated: true description: 'Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, enforce_zdr_xai, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request.' example: false type: - 'boolean' - 'null' enforce_zdr_anthropic: description: 'Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_google: description: 'Whether to enforce zero data retention for Google models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_openai: description: 'Whether to enforce zero data retention for OpenAI models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_other: description: 'Whether to enforce zero data retention for models that are not from Anthropic, OpenAI, Google, or xAI. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_xai: description: 'Whether to enforce zero data retention for xAI models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' ignored_models: description: 'Array of model identifiers to exclude from routing (slug or canonical_slug accepted)' example: - 'openai/gpt-4o-mini' items: type: 'string' minItems: 1 type: - 'array' - 'null' ignored_providers: description: 'List of provider IDs to exclude from routing' example: - 'azure' items: type: 'string' minItems: 1 type: - 'array' - 'null' include_byok_in_budgets: description: 'Whether BYOK (bring-your-own-key) inference spend counts toward this guardrail''s limit_usd, in addition to OpenRouter credit spend. Defaults to false.' example: false type: 'boolean' limit_usd: description: 'Spending limit in USD' example: 50 format: 'double' type: - 'number' - 'null' name: description: 'Name for the new guardrail' example: 'My New Guardrail' maxLength: 200 minLength: 1 type: 'string' reset_interval: $ref: '#/components/schemas/GuardrailInterval' workspace_id: description: 'The workspace to create the guardrail in. Defaults to the default workspace if not provided.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' format: 'uuid' type: 'string' required: - 'name' type: 'object' CreateGuardrailResponse: example: data: allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'google' content_filter_builtins: - action: 'redact' label: '[EMAIL]' slug: 'email' content_filters: null created_at: '2025-08-24T10:30:00Z' description: 'A guardrail for limiting API usage' enforce_zdr: null enforce_zdr_anthropic: true enforce_zdr_google: false enforce_zdr_openai: true enforce_zdr_other: false enforce_zdr_xai: false id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: false limit_usd: 50 name: 'My New Guardrail' reset_interval: 'monthly' updated_at: null workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: data: allOf: - $ref: '#/components/schemas/Guardrail' - description: 'The created guardrail' required: - 'data' type: 'object' CreateObservabilityDestinationRequest: example: config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' name: 'Production Langfuse' type: 'langfuse' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes whose traffic is forwarded. `null` or omitted means all keys. Must contain at least one hash if provided.' example: null items: type: 'string' minItems: 1 type: - 'array' - 'null' config: additionalProperties: {} description: 'Provider-specific configuration. The shape depends on `type` and is validated server-side.' example: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' type: 'object' enabled: default: true description: 'Whether this destination should be enabled immediately.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfigNullable' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: 'string' privacy_mode: default: false description: 'When true, request/response bodies are not forwarded — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: description: 'The destination type. Only stable destination types are accepted.' enum: - 'arize' - 'braintrust' - 'clickhouse' - 'datadog' - 'grafana' - 'langfuse' - 'langsmith' - 'newrelic' - 'opik' - 'otel-collector' - 'posthog' - 'ramp' - 's3' - 'sentry' - 'snowflake' - 'weave' - 'webhook' example: 'langfuse' type: 'string' workspace_id: description: 'Optional workspace ID. Defaults to the authenticated entity''s default workspace.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'type' - 'name' - 'config' type: 'object' CreateObservabilityDestinationResponse: example: data: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: data: allOf: - $ref: '#/components/schemas/ObservabilityDestination' - description: 'The newly created observability destination.' required: - 'data' type: 'object' CreatePresetFromInferenceResponse: description: 'Response containing the created preset with its designated version.' example: data: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version: config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' properties: data: $ref: '#/components/schemas/PresetWithDesignatedVersion' required: - 'data' type: 'object' CreateScimGroupMappingRequest: properties: role: enum: - 'admin' - 'member' type: 'string' scim_group_id: format: 'uuid' type: 'string' workspace_id: format: 'uuid' type: 'string' required: - 'scim_group_id' - 'workspace_id' - 'role' type: 'object' CreateScimGroupMappingResponse: properties: data: $ref: '#/components/schemas/ScimGroupMapping' required: - 'data' type: 'object' CreateWorkspaceRequest: example: default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' name: 'Production' slug: 'production' properties: default_image_model: description: 'Default image model for this workspace' example: 'openai/dall-e-3' type: - 'string' - 'null' default_provider_sort: description: 'Default provider sort preference (price, throughput, latency, exacto)' example: 'price' type: - 'string' - 'null' default_text_model: description: 'Default text model for this workspace' example: 'openai/gpt-4o' type: - 'string' - 'null' description: description: 'Description of the workspace' example: 'Production environment workspace' maxLength: 500 type: - 'string' - 'null' io_logging_api_key_ids: description: 'Optional array of API key IDs to filter I/O logging' example: null items: type: 'integer' type: - 'array' - 'null' io_logging_sampling_rate: description: 'Sampling rate for I/O logging (0.0001-1)' example: 1 format: 'double' type: 'number' is_data_discount_logging_enabled: description: 'Whether data discount logging is enabled' example: true type: 'boolean' is_observability_broadcast_enabled: description: 'Whether broadcast is enabled' example: false type: 'boolean' is_observability_io_logging_enabled: description: 'Whether private logging is enabled' example: false type: 'boolean' name: description: 'Name for the new workspace' example: 'Production' maxLength: 100 minLength: 1 type: 'string' slug: description: 'URL-friendly slug (lowercase alphanumeric segments separated by single hyphens, no leading/trailing hyphens)' example: 'production' maxLength: 50 minLength: 1 pattern: '^[a-z0-9]+(?:-[a-z0-9]+)*$' type: 'string' required: - 'name' - 'slug' type: 'object' CreateWorkspaceResponse: example: data: created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Production' slug: 'production' updated_at: null properties: data: allOf: - $ref: '#/components/schemas/Workspace' - description: 'The created workspace' required: - 'data' type: 'object' CustomTool: description: 'Custom tool configuration' example: name: 'my_tool' type: 'custom' properties: description: type: 'string' format: anyOf: - properties: type: enum: - 'text' type: 'string' required: - 'type' type: 'object' - properties: definition: type: 'string' syntax: enum: - 'lark' - 'regex' type: 'string' type: enum: - 'grammar' type: 'string' required: - 'type' - 'definition' - 'syntax' type: 'object' name: type: 'string' type: enum: - 'custom' type: 'string' required: - 'type' - 'name' type: 'object' CustomToolCallInputDeltaEvent: allOf: - $ref: '#/components/schemas/BaseCustomToolCallInputDeltaEvent' - properties: {} type: 'object' description: 'Event emitted when a custom tool call''s freeform input is being streamed. Mirrors `response.function_call_arguments.delta` but for `custom` tools whose input is opaque text rather than JSON arguments.' example: delta: '*** Begin Patch' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.custom_tool_call_input.delta' CustomToolCallInputDoneEvent: allOf: - $ref: '#/components/schemas/BaseCustomToolCallInputDoneEvent' - properties: {} type: 'object' description: 'Event emitted when a custom tool call''s freeform input streaming is complete. Mirrors `response.function_call_arguments.done` but for `custom` tools.' example: input: "*** Begin Patch\n*** End Patch" item_id: 'item-1' output_index: 0 sequence_number: 6 type: 'response.custom_tool_call_input.done' CustomToolCallItem: description: 'A call to a custom (freeform-grammar) tool created by the model — distinct from `function_call`. Used for tools like Codex CLI''s `apply_patch` whose payload is opaque text rather than JSON arguments.' example: call_id: 'call-abc123' id: 'ctc-abc123' input: "*** Begin Patch\n*** End Patch" name: 'apply_patch' type: 'custom_tool_call' properties: call_id: type: 'string' id: type: 'string' input: type: 'string' name: type: 'string' namespace: description: 'Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)' type: 'string' type: enum: - 'custom_tool_call' type: 'string' required: - 'type' - 'call_id' - 'name' - 'input' type: 'object' CustomToolCallOutputItem: allOf: - $ref: '#/components/schemas/OpenAIResponseCustomToolCallOutput' - properties: output: anyOf: - type: 'string' - items: oneOf: - $ref: '#/components/schemas/InputText' - allOf: - $ref: '#/components/schemas/InputImage' - properties: {} type: 'object' description: 'Image input content item' example: detail: 'auto' image_url: 'https://example.com/image.jpg' type: 'input_image' - $ref: '#/components/schemas/InputFile' type: 'array' type: 'object' description: 'The output from a custom (freeform-grammar) tool call execution. Mirrors `function_call_output` but is matched to a `custom_tool_call` rather than a `function_call`.' example: call_id: 'call-abc123' id: 'ctco-abc123' output: 'patch applied successfully' type: 'custom_tool_call_output' DABenchmarkEntry: description: 'A single Design Arena benchmark entry for a specific arena+category' example: arena: 'models' category: 'website' elo: 1385.2 rank: 5 win_rate: 62.5 properties: arena: description: 'Arena type (e.g. models, builders, agents)' example: 'models' type: 'string' category: description: 'Category within the arena (e.g. website, gamedev, uicomponent)' example: 'website' type: 'string' elo: description: 'ELO rating from head-to-head arena battles' example: 1385.2 format: 'double' type: 'number' rank: description: 'Rank position within this arena+category among models available on OpenRouter (1 = highest ELO)' example: 5 type: 'integer' win_rate: description: 'Win rate percentage in arena battles' example: 62.5 format: 'double' type: 'number' required: - 'arena' - 'category' - 'elo' - 'win_rate' - 'rank' type: 'object' DatetimeServerTool: description: 'OpenRouter built-in server tool: returns the current date and time' example: parameters: timezone: 'America/New_York' type: 'openrouter:datetime' properties: parameters: $ref: '#/components/schemas/DatetimeServerToolConfig' type: enum: - 'openrouter:datetime' type: 'string' required: - 'type' type: 'object' DatetimeServerToolConfig: description: 'Configuration for the openrouter:datetime server tool' example: timezone: 'America/New_York' properties: timezone: description: 'IANA timezone name (e.g. "America/New_York"). Defaults to UTC.' example: 'America/New_York' type: 'string' type: 'object' DebugEvent: description: 'Debug event emitted when debug.echo_upstream_body is true. Contains the transformed upstream request body or timing milestones.' example: debug: echo_upstream_body: messages: [] model: 'anthropic/claude-sonnet-4' sequence_number: 1 type: 'response.debug' properties: debug: properties: echo_upstream_body: additionalProperties: {} type: 'object' timings: properties: epoch_ms: type: 'integer' event: enum: - 'adapter_request' - 'upstream_headers_received' - 'first_token_received' - 'upstream_body_ended' type: 'string' start_ms: type: 'integer' required: - 'start_ms' - 'event' - 'epoch_ms' type: 'object' type: 'object' sequence_number: type: 'integer' type: enum: - 'response.debug' type: 'string' required: - 'type' - 'debug' - 'sequence_number' type: 'object' DefaultParameters: additionalProperties: false description: 'Default parameters for this model' example: frequency_penalty: 0 presence_penalty: 0 repetition_penalty: 1 temperature: 0.7 top_k: 0 top_p: 0.9 properties: frequency_penalty: format: 'double' type: - 'number' - 'null' presence_penalty: format: 'double' type: - 'number' - 'null' repetition_penalty: format: 'double' type: - 'number' - 'null' temperature: format: 'double' type: - 'number' - 'null' top_k: type: - 'integer' - 'null' top_p: format: 'double' type: - 'number' - 'null' type: - 'object' - 'null' DeleteBYOKKeyResponse: example: deleted: true properties: deleted: const: true description: 'Confirmation that the BYOK credential was deleted.' example: true type: 'boolean' required: - 'deleted' type: 'object' DeleteGuardrailResponse: example: deleted: true properties: deleted: const: true description: 'Confirmation that the guardrail was deleted' example: true type: 'boolean' required: - 'deleted' type: 'object' DeleteObservabilityDestinationResponse: example: deleted: true properties: deleted: const: true description: 'Always `true` on success.' type: 'boolean' required: - 'deleted' type: 'object' DeleteScimGroupMappingResponse: properties: deleted: const: true type: 'boolean' required: - 'deleted' type: 'object' DeleteWorkspaceBudgetResponse: example: deleted: true properties: deleted: const: true description: 'Confirmation that the budget was deleted (or did not exist)' example: true type: 'boolean' required: - 'deleted' type: 'object' DeleteWorkspaceResponse: example: deleted: true properties: deleted: const: true description: 'Confirmation that the workspace was deleted' example: true type: 'boolean' required: - 'deleted' type: 'object' DeprecatedRoute: deprecated: true description: '**DEPRECATED** Use providers.sort.partition instead. Backwards-compatible alias for providers.sort.partition. Accepts legacy values: "fallback" (maps to "model"), "sort" (maps to "none").' enum: - 'fallback' - 'sort' - null example: 'fallback' type: - 'string' - 'null' x-fern-ignore: true x-speakeasy-deprecation-message: 'Use providers.sort.partition instead.' x-speakeasy-ignore: true EasyInputMessage: example: content: 'What is the weather today?' role: 'user' properties: content: anyOf: - items: oneOf: - $ref: '#/components/schemas/InputText' - allOf: - $ref: '#/components/schemas/InputImage' - properties: {} type: 'object' description: 'Image input content item' example: detail: 'auto' image_url: 'https://example.com/image.jpg' type: 'input_image' - $ref: '#/components/schemas/InputFile' - $ref: '#/components/schemas/InputAudio' - $ref: '#/components/schemas/InputVideo' type: 'array' - type: 'string' - type: 'null' phase: anyOf: - enum: - 'commentary' type: 'string' - enum: - 'final_answer' type: 'string' - type: 'null' description: 'The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages.' example: 'final_answer' role: anyOf: - enum: - 'user' type: 'string' - enum: - 'system' type: 'string' - enum: - 'assistant' type: 'string' - enum: - 'developer' type: 'string' type: enum: - 'message' type: 'string' required: - 'role' type: 'object' EdgeNetworkTimeoutResponse: description: 'Infrastructure Timeout - Provider request timed out at edge network' example: error: code: 524 message: 'Request timed out. Please try again later.' properties: error: $ref: '#/components/schemas/EdgeNetworkTimeoutResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' EdgeNetworkTimeoutResponseErrorData: description: 'Error data for EdgeNetworkTimeoutResponse' example: code: 524 message: 'Request timed out. Please try again later.' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' EndpointInfo: example: model: 'openai/gpt-4o' provider: 'OpenAI' selected: true properties: model: type: 'string' provider: type: 'string' selected: type: 'boolean' required: - 'provider' - 'model' - 'selected' type: 'object' EndpointsMetadata: example: available: - model: 'openai/gpt-4o' provider: 'OpenAI' selected: true total: 3 properties: available: items: $ref: '#/components/schemas/EndpointInfo' type: 'array' total: type: 'integer' required: - 'total' - 'available' type: 'object' EndpointStatus: enum: - 0 - -1 - -2 - -3 - -5 - -10 example: 0 type: 'integer' EnumCapability: description: 'A parameter that accepts one of a discrete set of string values.' example: type: 'enum' values: - '1K' - '2K' - '4K' properties: type: enum: - 'enum' type: 'string' values: items: type: 'string' type: 'array' required: - 'type' - 'values' type: 'object' ErrorEvent: allOf: - $ref: '#/components/schemas/BaseErrorEvent' - properties: {} type: 'object' description: 'Event emitted when an error occurs during streaming' example: code: 'rate_limit_exceeded' message: 'Rate limit exceeded. Please try again later.' param: null sequence_number: 2 type: 'error' FailedEvent: description: 'Event emitted when a response has failed' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'failed' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 3 type: 'response.failed' properties: response: $ref: '#/components/schemas/BaseResponsesResult' sequence_number: type: 'integer' type: enum: - 'response.failed' type: 'string' required: - 'type' - 'response' - 'sequence_number' type: 'object' FileCitation: example: file_id: 'file-abc123' filename: 'research_paper.pdf' index: 0 type: 'file_citation' properties: file_id: type: 'string' filename: type: 'string' index: type: 'integer' type: enum: - 'file_citation' type: 'string' required: - 'type' - 'file_id' - 'filename' - 'index' type: 'object' FileDeleteResponse: description: 'Confirmation that a file was deleted, in the negotiated shape.' discriminator: mapping: anthropic: '#/components/schemas/AnthropicFileDeleted' openai: '#/components/schemas/OpenAIFileDeleted' openrouter: '#/components/schemas/OpenRouterFileDeleted' propertyName: '_shape' example: _shape: 'openrouter' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'file_deleted' oneOf: - $ref: '#/components/schemas/OpenRouterFileDeleted' - $ref: '#/components/schemas/OpenAIFileDeleted' - $ref: '#/components/schemas/AnthropicFileDeleted' FileListResponse: description: 'A page of files, in the negotiated shape.' discriminator: mapping: anthropic: '#/components/schemas/AnthropicFileList' openai: '#/components/schemas/OpenAIFileList' openrouter: '#/components/schemas/OpenRouterFileList' propertyName: '_shape' example: _shape: 'openrouter' cursor: null data: [] first_id: null has_more: false last_id: null oneOf: - $ref: '#/components/schemas/OpenRouterFileList' - $ref: '#/components/schemas/OpenAIFileList' - $ref: '#/components/schemas/AnthropicFileList' FileParserPlugin: example: enabled: true id: 'file-parser' pdf: engine: 'cloudflare-ai' properties: enabled: description: 'Set to false to disable the file-parser plugin for this request. Defaults to true.' type: 'boolean' id: enum: - 'file-parser' type: 'string' pdf: $ref: '#/components/schemas/PDFParserOptions' required: - 'id' type: 'object' FilePath: example: file_id: 'file-xyz789' index: 0 type: 'file_path' properties: file_id: type: 'string' index: type: 'integer' type: enum: - 'file_path' type: 'string' required: - 'type' - 'file_id' - 'index' type: 'object' FileProvider: description: 'Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage.' enum: - 'openai' - 'anthropic' example: 'openai' type: 'string' FileResponse: description: 'A stored file. The shape is negotiated per request — see the endpoint description.' discriminator: mapping: anthropic: '#/components/schemas/AnthropicFile' openai: '#/components/schemas/OpenAIFile' openrouter: '#/components/schemas/OpenRouterFile' propertyName: '_shape' example: _shape: 'openrouter' created_at: '2025-01-01T00:00:00Z' downloadable: false filename: 'document.pdf' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' mime_type: 'application/pdf' size_bytes: 1024000 type: 'file' oneOf: - $ref: '#/components/schemas/OpenRouterFile' - $ref: '#/components/schemas/OpenAIFile' - $ref: '#/components/schemas/AnthropicFile' FileSearchServerTool: description: 'File search tool configuration' example: type: 'file_search' vector_store_ids: - 'vs_abc123' properties: filters: anyOf: - properties: key: type: 'string' type: enum: - 'eq' - 'ne' - 'gt' - 'gte' - 'lt' - 'lte' type: 'string' value: anyOf: - type: 'string' - format: 'double' type: 'number' - type: 'boolean' - items: anyOf: - type: 'string' - format: 'double' type: 'number' type: 'array' required: - 'key' - 'type' - 'value' type: 'object' - $ref: '#/components/schemas/CompoundFilter' - type: 'null' max_num_results: type: 'integer' ranking_options: properties: ranker: enum: - 'auto' - 'default-2024-11-15' type: 'string' score_threshold: format: 'double' type: 'number' type: 'object' type: enum: - 'file_search' type: 'string' vector_store_ids: items: type: 'string' type: 'array' required: - 'type' - 'vector_store_ids' type: 'object' FilesServerTool: description: 'OpenRouter built-in server tool: read, write, edit, and list workspace files via the Files API. Requires the `x-openrouter-file-ids: openrouter` request header.' example: parameters: {} type: 'openrouter:files' properties: parameters: $ref: '#/components/schemas/FilesServerToolConfig' type: enum: - 'openrouter:files' type: 'string' required: - 'type' type: 'object' FilesServerToolConfig: description: 'Configuration for the openrouter:files server tool' example: {} properties: {} type: 'object' ForbiddenResponse: description: 'Forbidden - Authentication successful but insufficient permissions' example: error: code: 403 message: 'Only management keys can perform this operation' properties: error: $ref: '#/components/schemas/ForbiddenResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' ForbiddenResponseErrorData: description: 'Error data for ForbiddenResponse' example: code: 403 message: 'Only management keys can perform this operation' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' FormatJsonObjectConfig: description: 'JSON object response format' example: type: 'json_object' properties: type: enum: - 'json_object' type: 'string' required: - 'type' type: 'object' FormatJsonSchemaConfig: description: 'JSON schema constrained response format' example: description: 'User information schema' name: 'user_info' schema: properties: age: type: 'number' name: type: 'string' required: - 'name' type: 'object' type: 'json_schema' properties: description: type: 'string' name: type: 'string' schema: additionalProperties: {} type: 'object' strict: type: - 'boolean' - 'null' type: enum: - 'json_schema' type: 'string' required: - 'type' - 'name' - 'schema' type: 'object' Formats: anyOf: - $ref: '#/components/schemas/FormatTextConfig' - $ref: '#/components/schemas/FormatJsonObjectConfig' - $ref: '#/components/schemas/FormatJsonSchemaConfig' description: 'Text response format configuration' example: type: 'text' FormatTextConfig: description: 'Plain text response format' example: type: 'text' properties: type: enum: - 'text' type: 'string' required: - 'type' type: 'object' FrameImage: allOf: - $ref: '#/components/schemas/ContentPartImage' - properties: frame_type: description: 'Whether this image represents the first or last frame of the video' enum: - 'first_frame' - 'last_frame' example: 'first_frame' type: 'string' required: - 'frame_type' type: 'object' example: frame_type: 'first_frame' image_url: url: 'https://example.com/image.png' type: 'image_url' FunctionCallArgsDeltaEvent: allOf: - $ref: '#/components/schemas/BaseFunctionCallArgsDeltaEvent' - properties: {} type: 'object' description: 'Event emitted when function call arguments are being streamed' example: delta: '{"city": "..."}' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.function_call_arguments.delta' FunctionCallArgsDoneEvent: allOf: - $ref: '#/components/schemas/BaseFunctionCallArgsDoneEvent' - properties: {} type: 'object' description: 'Event emitted when function call arguments streaming is complete' example: arguments: '{"city": "San Francisco", "units": "celsius"}' item_id: 'item-1' name: 'get_weather' output_index: 0 sequence_number: 6 type: 'response.function_call_arguments.done' FunctionCallItem: allOf: - $ref: '#/components/schemas/OpenAIResponseFunctionToolCall' - properties: {} required: - 'id' type: 'object' description: 'A function call initiated by the model' example: arguments: '{"location":"San Francisco"}' call_id: 'call-abc123' id: 'call-abc123' name: 'get_weather' status: 'completed' type: 'function_call' FunctionCallOutputItem: allOf: - $ref: '#/components/schemas/OpenAIResponseFunctionToolCallOutput' - properties: output: anyOf: - type: 'string' - items: oneOf: - $ref: '#/components/schemas/InputText' - allOf: - $ref: '#/components/schemas/InputImage' - properties: {} type: 'object' description: 'Image input content item' example: detail: 'auto' image_url: 'https://example.com/image.jpg' type: 'input_image' - $ref: '#/components/schemas/InputFile' type: 'array' type: 'object' description: 'The output from a function call execution' example: call_id: 'call-abc123' id: 'output-abc123' output: '{"temperature":72,"conditions":"sunny"}' status: 'completed' type: 'function_call_output' FunctionTool: description: 'Function tool definition' example: description: 'Get the current weather in a location' name: 'get_weather' parameters: properties: location: description: 'The city and state' type: 'string' unit: enum: - 'celsius' - 'fahrenheit' type: 'string' required: - 'location' type: 'object' type: 'function' properties: description: type: - 'string' - 'null' name: type: 'string' parameters: additionalProperties: {} type: - 'object' - 'null' strict: type: - 'boolean' - 'null' type: enum: - 'function' type: 'string' required: - 'type' - 'name' - 'parameters' type: 'object' FusionAnalysisResult: description: 'Structured analysis produced by the fusion analyst model.' example: blind_spots: - 'No model considered the impact on existing API consumers.' consensus: - 'All panel models agree the request is asking for a concise summary.' contradictions: - stances: - model: 'openai/gpt-5' stance: 'Favors an incremental rollout.' - model: 'anthropic/claude-sonnet-4.5' stance: 'Favors a single coordinated migration.' topic: 'Recommended approach' partial_coverage: - models: - 'openai/gpt-5' point: 'Only one model addressed the rollback strategy.' unique_insights: - insight: 'Highlighted a backwards-compatibility risk the other models missed.' model: 'anthropic/claude-sonnet-4.5' properties: blind_spots: items: type: 'string' type: 'array' consensus: items: type: 'string' type: 'array' contradictions: items: properties: stances: items: properties: model: type: 'string' stance: type: 'string' required: - 'model' - 'stance' type: 'object' type: 'array' topic: type: 'string' required: - 'topic' - 'stances' type: 'object' type: 'array' partial_coverage: items: properties: models: items: type: 'string' type: 'array' point: type: 'string' required: - 'models' - 'point' type: 'object' type: 'array' unique_insights: items: properties: insight: type: 'string' model: type: 'string' required: - 'model' - 'insight' type: 'object' type: 'array' required: - 'consensus' - 'contradictions' - 'partial_coverage' - 'unique_insights' - 'blind_spots' type: 'object' FusionCallAnalysisCompletedEvent: description: 'Emitted when the fusion analyst completes with the structured analysis.' example: analysis: blind_spots: [] consensus: [] contradictions: [] partial_coverage: [] unique_insights: [] item_id: 'st_fusion_abc' output_index: 0 sequence_number: 40 type: 'response.fusion_call.analysis.completed' properties: analysis: $ref: '#/components/schemas/FusionAnalysisResult' item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.analysis.completed' type: 'string' required: - 'type' - 'analysis' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallAnalysisInProgressEvent: description: 'Emitted when the fusion analyst starts producing the structured analysis.' example: analyst_model: 'openai/gpt-5' item_id: 'st_fusion_abc' judge_model: 'openai/gpt-5' output_index: 0 sequence_number: 25 type: 'response.fusion_call.analysis.in_progress' properties: analyst_model: description: 'Slug of the model producing the structured analysis.' type: 'string' item_id: type: 'string' judge_model: deprecated: true description: 'Deprecated alias of `analyst_model`, kept so existing consumers keep working. Always carries the same value. Use `analyst_model`.' type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.analysis.in_progress' type: 'string' required: - 'type' - 'analyst_model' - 'judge_model' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallCompletedEvent: description: 'Emitted when the openrouter:fusion tool call finishes.' example: item_id: 'st_fusion_abc' output_index: 0 sequence_number: 41 type: 'response.fusion_call.completed' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.completed' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallInProgressEvent: description: 'Emitted when an openrouter:fusion tool call begins executing.' example: item_id: 'st_fusion_abc' output_index: 0 sequence_number: 3 type: 'response.fusion_call.in_progress' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.in_progress' type: 'string' required: - 'type' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallPanelAddedEvent: description: 'Emitted when a fusion analysis-panel model starts.' example: item_id: 'st_fusion_abc' model: 'openai/gpt-5' output_index: 0 sequence_number: 4 type: 'response.fusion_call.panel.added' properties: item_id: type: 'string' model: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.panel.added' type: 'string' required: - 'type' - 'model' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallPanelCompletedEvent: description: 'Emitted when a fusion panel model finishes with its full content.' example: content: 'Full panel response text...' item_id: 'st_fusion_abc' model: 'openai/gpt-5' output_index: 0 sequence_number: 20 type: 'response.fusion_call.panel.completed' properties: content: type: 'string' item_id: type: 'string' model: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.panel.completed' type: 'string' required: - 'type' - 'model' - 'content' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallPanelDeltaEvent: description: 'Incremental content token from a fusion panel model.' example: delta: 'Carbon taxes' item_id: 'st_fusion_abc' model: 'openai/gpt-5' output_index: 0 sequence_number: 5 type: 'response.fusion_call.panel.delta' properties: delta: type: 'string' item_id: type: 'string' model: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.panel.delta' type: 'string' required: - 'type' - 'model' - 'delta' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallPanelFailedEvent: description: 'Emitted when a fusion panel model fails.' example: error: 'Upstream provider error' item_id: 'st_fusion_abc' model: 'openai/gpt-5' output_index: 0 sequence_number: 18 status_code: 502 type: 'response.fusion_call.panel.failed' properties: error: type: 'string' item_id: type: 'string' model: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' status_code: type: 'integer' type: enum: - 'response.fusion_call.panel.failed' type: 'string' required: - 'type' - 'model' - 'error' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionCallPanelReasoningDeltaEvent: description: 'Incremental reasoning token from a fusion panel model.' example: delta: 'Considering both sides' item_id: 'st_fusion_abc' model: 'openai/gpt-5' output_index: 0 sequence_number: 6 type: 'response.fusion_call.panel.reasoning.delta' properties: delta: type: 'string' item_id: type: 'string' model: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.fusion_call.panel.reasoning.delta' type: 'string' required: - 'type' - 'model' - 'delta' - 'output_index' - 'item_id' - 'sequence_number' type: 'object' FusionPlugin: example: analysis_models: - '~anthropic/claude-opus-latest' - '~openai/gpt-latest' - '~google/gemini-pro-latest' enabled: true id: 'fusion' model: '~anthropic/claude-opus-latest' properties: analysis_models: description: 'Slugs of models to run in parallel as the "expert panel" the analyst analyzes. Each model receives the same user prompt with web_search + web_fetch enabled. Capped at 8 models to bound cost amplification. When omitted, defaults to the Quality preset from the /labs/fusion UI (~anthropic/claude-opus-latest, ~openai/gpt-latest, ~google/gemini-pro-latest).' example: - '~anthropic/claude-opus-latest' - '~openai/gpt-latest' - '~google/gemini-pro-latest' items: type: 'string' maxItems: 8 minItems: 1 type: 'array' enabled: description: 'Set to false to disable the fusion plugin for this request. Defaults to true.' type: 'boolean' id: enum: - 'fusion' type: 'string' max_tool_calls: description: 'Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.' example: 12 maximum: 16 minimum: 1 type: 'integer' model: description: 'Slug of the model that performs both the analyst step (with web_search + web_fetch) and the final synthesis. When omitted, defaults to the first model in the Quality preset.' example: '~anthropic/claude-opus-latest' type: 'string' preset: description: 'A curated OpenRouter fusion preset (slugs follow `-`, e.g. `general-high`). Expands server-side into the preset''s analysis_models panel and analyst model, so callers never name individual models. Explicitly provided `analysis_models` / `model` take precedence.' enum: - 'general-high' - 'general-budget' - 'general-fast' example: 'general-high' type: 'string' tools: description: 'Server tools available to panelist and analyst inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: "openrouter:web_search" }, { type: "openrouter:web_fetch" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only).' example: - parameters: excluded_domains: - 'example.com' type: 'openrouter:web_search' - type: 'openrouter:web_fetch' items: properties: parameters: additionalProperties: anyOf: - type: 'string' - format: 'double' type: 'number' - type: 'boolean' - type: 'null' - items: anyOf: - type: 'string' - format: 'double' type: 'number' - type: 'boolean' - type: 'null' - type: 'null' type: 'array' - additionalProperties: anyOf: - type: 'string' - format: 'double' type: 'number' - type: 'boolean' - type: 'null' - type: 'null' type: 'object' - type: 'null' description: 'Optional configuration forwarded as the tool''s `parameters` object.' type: 'object' type: description: 'Server tool type identifier (e.g. "openrouter:web_search", "openrouter:web_fetch").' type: 'string' required: - 'type' type: 'object' maxItems: 8 type: 'array' required: - 'id' type: 'object' FusionServerTool_OpenRouter: description: 'OpenRouter built-in server tool: fans out the user prompt to a panel of analysis models, then asks an analyst model to summarize their collective output as structured JSON the outer model can synthesize from.' example: parameters: analysis_models: - '~anthropic/claude-opus-latest' - '~openai/gpt-latest' type: 'openrouter:fusion' properties: parameters: $ref: '#/components/schemas/FusionServerToolConfig' type: enum: - 'openrouter:fusion' type: 'string' required: - 'type' type: 'object' FusionServerToolConfig: description: 'Configuration for the openrouter:fusion server tool.' example: analysis_models: - '~anthropic/claude-opus-latest' - '~openai/gpt-latest' - '~google/gemini-pro-latest' properties: analysis_models: description: 'Slugs of models to run in parallel as the analysis panel. Each model receives the user prompt with openrouter:web_search and openrouter:web_fetch enabled, then an analyst model summarizes the collective output into structured analysis JSON. Capped at 8 models to bound cost amplification. Defaults to the Quality preset from /labs/fusion.' example: - '~anthropic/claude-opus-latest' - '~openai/gpt-latest' - '~google/gemini-pro-latest' items: type: 'string' maxItems: 8 minItems: 1 type: 'array' cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' max_completion_tokens: description: 'Maximum number of output tokens (including reasoning tokens) each panelist and the analyst model may produce per inner call. Controls the total output budget so reasoning-heavy models like GPT-5.5 do not exhaust their token allowance before producing visible text. When omitted, panelists default to 32000 and the analyst to 20000.' example: 16384 type: 'integer' max_tool_calls: description: 'Maximum number of tool-calling steps each panelist (analysis model) and the analyst model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16.' example: 12 maximum: 16 minimum: 1 type: 'integer' model: description: 'Slug of the analyst model that produces the structured analysis JSON. Defaults to the model used in the outer API request.' example: '~anthropic/claude-opus-latest' type: 'string' reasoning: description: 'Reasoning configuration forwarded to panelist and analyst inner calls. Use this to control reasoning effort and token budget for models that support extended thinking.' properties: effort: description: 'Reasoning effort level for panelist and analyst inner calls.' enum: - 'max' - 'xhigh' - 'high' - 'medium' - 'low' - 'minimal' - 'none' type: 'string' max_tokens: description: 'Maximum number of reasoning tokens each panelist and analyst model may use. Helps bound cost when models allocate too much budget to chain-of-thought.' type: 'integer' type: 'object' temperature: description: 'Temperature forwarded to panelist inner calls. The analyst always runs at temperature 0 regardless of this value. When omitted, the provider''s default applies.' example: 0.7 format: 'double' type: 'number' tools: description: 'Server tools available to panelist and analyst inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: "openrouter:web_search" }, { type: "openrouter:web_fetch" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only).' example: - parameters: excluded_domains: - 'example.com' type: 'openrouter:web_search' - type: 'openrouter:web_fetch' items: properties: parameters: additionalProperties: {} description: 'Optional configuration forwarded as the tool''s `parameters` object.' type: 'object' type: description: 'Server tool type identifier (e.g. "openrouter:web_search", "openrouter:web_fetch").' type: 'string' required: - 'type' type: 'object' maxItems: 8 type: 'array' type: 'object' FusionSource: description: 'A web page retrieved via web search during a fusion run.' example: title: 'Example article title' url: 'https://example.com/article' properties: title: description: 'Title of the retrieved web page.' type: 'string' url: description: 'URL of the web page a panel or the analyst retrieved during the run.' type: 'string' required: - 'url' - 'title' type: 'object' GenerationContentData: description: 'Stored prompt and completion content' example: input: messages: - content: 'What is the meaning of life?' role: 'user' output: completion: 'The meaning of life is a philosophical question...' reasoning: null properties: input: anyOf: - properties: prompt: example: 'What is the meaning of life?' type: 'string' required: - 'prompt' type: 'object' - properties: messages: example: - content: 'What is the meaning of life?' role: 'user' items: {} type: 'array' required: - 'messages' type: 'object' description: 'The input to the generation — either a prompt string or an array of messages' output: description: 'The output from the generation' properties: completion: description: 'The completion output' example: 'The meaning of life is a philosophical question...' type: - 'string' - 'null' reasoning: description: 'Reasoning/thinking output, if any' example: null type: - 'string' - 'null' required: - 'reasoning' - 'completion' type: 'object' required: - 'input' - 'output' type: 'object' GenerationContentResponse: description: 'Stored prompt and completion content for a generation' example: data: input: messages: - content: 'What is the meaning of life?' role: 'user' output: completion: 'The meaning of life is a philosophical question...' reasoning: null properties: data: $ref: '#/components/schemas/GenerationContentData' required: - 'data' type: 'object' GenerationResponse: description: 'Generation response' example: data: api_type: 'completions' app_id: 12345 cache_discount: null cancelled: false created_at: '2024-07-15T23:33:19.433273+00:00' data_region: 'global' external_user: 'user-123' finish_reason: 'stop' generation_time: 1200 http_referer: 'https://openrouter.ai/' id: 'gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG' is_byok: false latency: 1250 model: 'sao10k/l3-stheno-8b' moderation_latency: 50 native_finish_reason: 'stop' native_tokens_cached: 3 native_tokens_completion: 25 native_tokens_completion_images: 0 native_tokens_prompt: 10 native_tokens_reasoning: 5 num_fetches: 0 num_input_audio_prompt: 0 num_media_completion: 0 num_media_prompt: 1 num_search_results: 5 origin: 'https://openrouter.ai/' preset_id: 'a9e8d400-592a-494f-908c-375efa66cafd' provider_name: 'Infermatic' provider_responses: null request_id: 'req-1727282430-aBcDeFgHiJkLmNoPqRsT' router: 'openrouter/auto' service_tier: 'priority' session_id: null streamed: true tokens_completion: 25 tokens_prompt: 10 total_cost: 0.0015 upstream_id: 'chatcmpl-791bcf62-080e-4568-87d0-94c72e3b4946' upstream_inference_cost: 0.0012 usage: 0.0015 user_agent: 'Mozilla/5.0' web_search_engine: 'exa' properties: data: description: 'Generation data' properties: api_type: description: 'Type of API used for the generation' enum: - 'completions' - 'embeddings' - 'rerank' - 'tts' - 'stt' - 'video' - 'image' - null type: - 'string' - 'null' app_id: description: 'ID of the app that made the request' example: 12345 type: - 'integer' - 'null' cache_discount: description: 'Discount applied due to caching' example: 0.0002 format: 'double' type: - 'number' - 'null' cancelled: description: 'Whether the generation was cancelled' example: false type: - 'boolean' - 'null' created_at: description: 'ISO 8601 timestamp of when the generation was created' example: '2024-07-15T23:33:19.433273+00:00' type: 'string' data_region: description: 'The data region this generation was routed through: ''global'', ''europe'', or ''us''.' enum: - 'global' - 'europe' - 'us' example: 'global' type: 'string' external_user: description: 'External user identifier' example: 'user-123' type: - 'string' - 'null' finish_reason: description: 'Reason the generation finished' example: 'stop' type: - 'string' - 'null' generation_time: description: 'Time taken for generation in milliseconds' example: 1200 format: 'double' type: - 'number' - 'null' http_referer: description: 'Referer header from the request' type: - 'string' - 'null' id: description: 'Unique identifier for the generation' example: 'gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG' type: 'string' is_byok: description: 'Whether this used bring-your-own-key' example: false type: 'boolean' latency: description: 'Total latency in milliseconds' example: 1250 format: 'double' type: - 'number' - 'null' model: description: 'Model used for the generation' example: 'sao10k/l3-stheno-8b' type: 'string' moderation_latency: description: 'Moderation latency in milliseconds' example: 50 format: 'double' type: - 'number' - 'null' native_finish_reason: description: 'Native finish reason as reported by provider' example: 'stop' type: - 'string' - 'null' native_tokens_cached: description: 'Native cached tokens as reported by provider' example: 3 type: - 'integer' - 'null' native_tokens_completion: description: 'Native completion tokens as reported by provider' example: 25 type: - 'integer' - 'null' native_tokens_completion_images: description: 'Native completion image tokens as reported by provider' example: 0 type: - 'integer' - 'null' native_tokens_prompt: description: 'Native prompt tokens as reported by provider' example: 10 type: - 'integer' - 'null' native_tokens_reasoning: description: 'Native reasoning tokens as reported by provider' example: 5 type: - 'integer' - 'null' num_fetches: description: 'Number of web fetches performed' example: 0 type: - 'integer' - 'null' num_input_audio_prompt: description: 'Number of audio inputs in the prompt' example: 0 type: - 'integer' - 'null' num_media_completion: description: 'Number of media items in the completion' example: 0 type: - 'integer' - 'null' num_media_prompt: description: 'Number of media items in the prompt' example: 1 type: - 'integer' - 'null' num_search_results: description: 'Number of search results included' example: 5 type: - 'integer' - 'null' origin: description: 'Origin URL of the request' example: 'https://openrouter.ai/' type: 'string' preset_id: description: 'ID of the preset used for this generation, null if no preset was used' example: 'a9e8d400-592a-494f-908c-375efa66cafd' type: - 'string' - 'null' provider_name: description: 'Name of the provider that served the request' example: 'Infermatic' type: - 'string' - 'null' provider_responses: description: 'List of provider responses for this generation, including fallback attempts' items: $ref: '#/components/schemas/ProviderResponse' type: - 'array' - 'null' request_id: description: 'Unique identifier grouping all generations from a single API request' example: 'req-1727282430-aBcDeFgHiJkLmNoPqRsT' type: - 'string' - 'null' response_cache_source_id: description: 'If this generation was served from response cache, contains the original generation ID. Null otherwise.' type: - 'string' - 'null' router: description: 'Router used for the request (e.g., openrouter/auto)' example: 'openrouter/auto' type: - 'string' - 'null' service_tier: description: 'Service tier the upstream provider reported running this request on, or null if it did not report one.' example: 'priority' type: - 'string' - 'null' session_id: description: 'Session identifier grouping multiple generations in the same session' type: - 'string' - 'null' streamed: description: 'Whether the response was streamed' example: true type: - 'boolean' - 'null' tokens_completion: description: 'Number of tokens in the completion' example: 25 type: - 'integer' - 'null' tokens_prompt: description: 'Number of tokens in the prompt' example: 10 type: - 'integer' - 'null' total_cost: description: 'Total cost of the generation in USD' example: 0.0015 format: 'double' type: 'number' upstream_id: description: 'Upstream provider''s identifier for this generation' example: 'chatcmpl-791bcf62-080e-4568-87d0-94c72e3b4946' type: - 'string' - 'null' upstream_inference_cost: description: 'Cost charged by the upstream provider' example: 0.0012 format: 'double' type: - 'number' - 'null' usage: description: 'Usage amount in USD' example: 0.0015 format: 'double' type: 'number' user_agent: description: 'User-Agent header from the request' type: - 'string' - 'null' web_search_engine: description: 'The resolved web search engine used for this generation (e.g. exa, firecrawl, parallel)' example: 'exa' type: - 'string' - 'null' required: - 'id' - 'upstream_id' - 'total_cost' - 'cache_discount' - 'upstream_inference_cost' - 'created_at' - 'model' - 'app_id' - 'streamed' - 'cancelled' - 'provider_name' - 'latency' - 'moderation_latency' - 'generation_time' - 'finish_reason' - 'service_tier' - 'tokens_prompt' - 'tokens_completion' - 'native_tokens_prompt' - 'native_tokens_completion' - 'native_tokens_completion_images' - 'native_tokens_reasoning' - 'native_tokens_cached' - 'num_media_prompt' - 'num_input_audio_prompt' - 'num_media_completion' - 'num_search_results' - 'num_fetches' - 'web_search_engine' - 'origin' - 'usage' - 'is_byok' - 'native_finish_reason' - 'external_user' - 'api_type' - 'preset_id' - 'router' - 'provider_responses' - 'user_agent' - 'http_referer' - 'data_region' type: 'object' required: - 'data' type: 'object' GetBYOKKeyResponse: example: data: allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Production OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: data: allOf: - $ref: '#/components/schemas/BYOKKey' - description: 'The BYOK credential.' required: - 'data' type: 'object' GetGuardrailResponse: example: data: allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'google' content_filter_builtins: - action: 'redact' label: '[EMAIL]' slug: 'email' content_filters: null created_at: '2025-08-24T10:30:00Z' description: 'Guardrail for production environment' enforce_zdr: null enforce_zdr_anthropic: true enforce_zdr_google: false enforce_zdr_openai: true enforce_zdr_other: false enforce_zdr_xai: false id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: false limit_usd: 100 name: 'Production Guardrail' reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: data: allOf: - $ref: '#/components/schemas/Guardrail' - description: 'The guardrail' required: - 'data' type: 'object' GetObservabilityDestinationResponse: example: data: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: data: allOf: - $ref: '#/components/schemas/ObservabilityDestination' - description: 'The observability destination.' required: - 'data' type: 'object' GetPresetResponse: description: 'A preset with its currently designated version.' example: data: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version: config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' properties: data: $ref: '#/components/schemas/PresetWithDesignatedVersion' required: - 'data' type: 'object' GetPresetVersionResponse: description: 'A single version of a preset.' example: data: config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 properties: data: $ref: '#/components/schemas/PresetDesignatedVersion' required: - 'data' type: 'object' GetScimGroupMappingResponse: properties: data: $ref: '#/components/schemas/ScimGroupMapping' required: - 'data' type: 'object' GetWorkspaceResponse: example: data: created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Production' slug: 'production' updated_at: '2025-08-24T15:45:00Z' properties: data: allOf: - $ref: '#/components/schemas/Workspace' - description: 'The workspace' required: - 'data' type: 'object' GoneResponse: description: 'Gone - Endpoint has been permanently removed or deprecated' example: error: code: 410 message: 'The Coinbase APIs used by this endpoint have been deprecated, so the Coinbase Commerce credits API has been removed. Use the web credits purchase flow instead.' properties: error: $ref: '#/components/schemas/GoneResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' GoneResponseErrorData: description: 'Error data for GoneResponse' example: code: 410 message: 'The Coinbase APIs used by this endpoint have been deprecated, so the Coinbase Commerce credits API has been removed. Use the web credits purchase flow instead.' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' Guardrail: example: allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'google' content_filter_builtins: - action: 'redact' label: '[EMAIL]' slug: 'email' content_filters: null created_at: '2025-08-24T10:30:00Z' description: 'Guardrail for production environment' enable_free_model_publication: false enable_free_model_training: true enable_paid_model_training: true enforce_zdr: null enforce_zdr_anthropic: true enforce_zdr_google: false enforce_zdr_openai: true enforce_zdr_other: false enforce_zdr_xai: false id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: false limit_usd: 100 name: 'Production Guardrail' reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: allowed_models: description: 'Array of model canonical_slugs (immutable identifiers)' example: - 'openai/gpt-5.2-20251211' - 'anthropic/claude-4.5-opus-20251124' - 'deepseek/deepseek-r1-0528:free' items: type: 'string' type: - 'array' - 'null' allowed_providers: description: 'List of allowed provider IDs' example: - 'openai' - 'anthropic' - 'google' items: type: 'string' type: - 'array' - 'null' content_filter_builtins: description: 'Builtin content filters applied to requests. Includes PII detectors and the regex-based prompt injection detector.' example: - action: 'redact' label: '[EMAIL]' slug: 'email' items: $ref: '#/components/schemas/ContentFilterBuiltinEntry' type: - 'array' - 'null' content_filters: description: 'Custom regex content filters applied to request messages' example: - action: 'redact' label: '[API_KEY]' pattern: '\b(sk-[a-zA-Z0-9]{48})\b' items: $ref: '#/components/schemas/ContentFilterEntry' type: - 'array' - 'null' created_at: description: 'ISO 8601 timestamp of when the guardrail was created' example: '2025-08-24T10:30:00Z' type: 'string' description: description: 'Description of the guardrail' example: 'Guardrail for production environment' type: - 'string' - 'null' enable_free_model_publication: description: 'Whether this guardrail allows free endpoints that publish prompts.' example: false type: - 'boolean' - 'null' enable_free_model_training: description: 'Whether this guardrail allows free endpoints that train on request data.' example: true type: - 'boolean' - 'null' enable_paid_model_training: description: 'Whether this guardrail allows paid endpoints that train on request data.' example: true type: - 'boolean' - 'null' enforce_zdr: deprecated: true description: 'Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, enforce_zdr_xai, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request.' example: false type: - 'boolean' - 'null' enforce_zdr_anthropic: description: 'Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_google: description: 'Whether to enforce zero data retention for Google models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_openai: description: 'Whether to enforce zero data retention for OpenAI models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_other: description: 'Whether to enforce zero data retention for models that are not from Anthropic, OpenAI, Google, or xAI. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' enforce_zdr_xai: description: 'Whether to enforce zero data retention for xAI models. Falls back to enforce_zdr when not provided.' example: false type: - 'boolean' - 'null' id: description: 'Unique identifier for the guardrail' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' ignored_models: description: 'Array of model canonical_slugs to exclude from routing' example: - 'openai/gpt-4o-mini-2024-07-18' items: type: 'string' type: - 'array' - 'null' ignored_providers: description: 'List of provider IDs to exclude from routing' example: - 'azure' items: type: 'string' type: - 'array' - 'null' include_byok_in_budgets: description: 'Whether BYOK (bring-your-own-key) inference spend counts toward this guardrail''s limit_usd, in addition to OpenRouter credit spend.' example: false type: 'boolean' limit_usd: description: 'Spending limit in USD' example: 100 format: 'double' type: - 'number' - 'null' name: description: 'Name of the guardrail' example: 'Production Guardrail' type: 'string' reset_interval: $ref: '#/components/schemas/GuardrailInterval' updated_at: description: 'ISO 8601 timestamp of when the guardrail was last updated' example: '2025-08-24T15:45:00Z' type: - 'string' - 'null' workspace_id: description: 'The workspace ID this guardrail belongs to.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' type: 'string' required: - 'id' - 'name' - 'include_byok_in_budgets' - 'created_at' - 'workspace_id' type: 'object' GuardrailInterval: description: 'Interval at which the limit resets (daily, weekly, monthly)' enum: - 'daily' - 'weekly' - 'monthly' - null example: 'monthly' type: - 'string' - 'null' ImageConfig: additionalProperties: anyOf: - type: 'string' - format: 'double' type: 'number' - items: {} type: 'array' description: 'Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.' example: aspect_ratio: '16:9' quality: 'high' type: 'object' ImageEndpoint: description: 'An endpoint that serves a given image model.' example: allowed_passthrough_parameters: [] pricing: - billable: 'output_image' cost_usd: 0.05 unit: 'image' provider_name: 'Bytedance' provider_slug: 'bytedance' provider_tag: 'bytedance' supported_parameters: resolution: type: 'enum' values: - '1K' - '2K' - '4K' seed: type: 'boolean' supports_streaming: false properties: allowed_passthrough_parameters: description: 'Provider-specific options accepted under provider.options[provider_slug].' example: [] items: type: 'string' type: 'array' pricing: description: 'Billable pricing lines for this endpoint.' example: - billable: 'output_image' cost_usd: 0.05 unit: 'image' items: $ref: '#/components/schemas/ImagePricingEntry' type: 'array' provider_name: description: 'Provider display name' example: 'Bytedance' type: 'string' provider_slug: description: 'Provider slug' example: 'bytedance' type: 'string' provider_tag: description: 'Provider tag for request-side selection' example: 'bytedance' type: - 'string' - 'null' supported_parameters: allOf: - $ref: '#/components/schemas/SupportedParameters' - description: 'The definitive set of parameters this endpoint accepts for this model.' supports_streaming: description: 'Whether this endpoint supports native SSE streaming (`stream: true` in the request).' example: false type: 'boolean' required: - 'provider_name' - 'provider_slug' - 'provider_tag' - 'supported_parameters' - 'allowed_passthrough_parameters' - 'supports_streaming' - 'pricing' type: 'object' ImageGenCallCompletedEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallCompleted' - properties: {} type: 'object' description: 'Image generation call completed' example: item_id: 'call-123' output_index: 0 sequence_number: 4 type: 'response.image_generation_call.completed' ImageGenCallGeneratingEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallGenerating' - properties: {} type: 'object' description: 'Image generation call is generating' example: item_id: 'call-123' output_index: 0 sequence_number: 2 type: 'response.image_generation_call.generating' ImageGenCallInProgressEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallInProgress' - properties: {} type: 'object' description: 'Image generation call in progress' example: item_id: 'call-123' output_index: 0 sequence_number: 1 type: 'response.image_generation_call.in_progress' ImageGenCallPartialImageEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallPartialImage' - properties: {} type: 'object' description: 'Image generation call with partial image' example: item_id: 'call-123' output_index: 0 partial_image_b64: 'base64encodedimage...' partial_image_index: 0 sequence_number: 3 type: 'response.image_generation_call.partial_image' ImageGenCompletedEvent: description: 'Emitted when generation completes and the final image is available' example: b64_json: '' created: 1748372400 type: 'image_generation.completed' usage: completion_tokens: 4175 cost: 0.04 prompt_tokens: 0 total_tokens: 4175 properties: b64_json: description: 'Base64-encoded final image data' type: 'string' created: description: 'Unix timestamp (seconds) when the image was generated' type: 'integer' media_type: description: 'Media type (MIME type) of the image, e.g. `image/png`, `image/jpeg`, `image/webp`, `image/svg+xml`. May be omitted if the format could not be determined.' example: 'image/png' type: 'string' type: description: 'The event type' enum: - 'image_generation.completed' type: 'string' usage: $ref: '#/components/schemas/ImageGenerationUsage' required: - 'type' - 'b64_json' - 'created' type: 'object' ImageGenerationProviderPreferences: description: 'Provider routing preferences and provider-specific passthrough configuration.' example: allow_fallbacks: false only: - 'google-ai-studio' properties: allow_fallbacks: description: "Whether to allow backup providers to serve requests\n- true: (default) when the primary provider (or your custom providers in \"order\") is unavailable, use the next best provider.\n- false: use only the primary/custom provider, and return the upstream error if it's unavailable.\n" type: - 'boolean' - 'null' ignore: description: 'List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request.' example: - 'openai' - 'anthropic' items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: 'string' type: - 'array' - 'null' only: description: 'List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request.' example: - 'openai' - 'anthropic' items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: 'string' type: - 'array' - 'null' options: allOf: - $ref: '#/components/schemas/ProviderOptions' - example: black-forest-labs: guidance: 3 steps: 40 order: description: 'An ordered list of provider slugs. The router will attempt to use the first provider in the subset of this list that supports your requested model, and fall back to the next if it is unavailable. If no providers are available, the request will fail with an error message.' example: - 'openai' - 'anthropic' items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: 'string' type: - 'array' - 'null' sort: anyOf: - $ref: '#/components/schemas/ProviderSort' - $ref: '#/components/schemas/ProviderSortConfig' - type: 'null' description: 'The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed.' example: 'price' type: 'object' ImageGenerationRequest: description: 'Image generation request input' example: model: 'bytedance-seed/seedream-4.5' prompt: 'a red panda astronaut floating in space, studio lighting' properties: aspect_ratio: description: 'Normalized aspect ratio of the generated image. Providers clamp to their supported subset.' enum: - '1:1' - '1:2' - '1:4' - '1:8' - '2:1' - '2:3' - '3:2' - '3:4' - '4:1' - '4:3' - '4:5' - '5:4' - '8:1' - '9:16' - '16:9' - '9:19.5' - '19.5:9' - '9:20' - '20:9' - '9:21' - '21:9' - 'auto' example: '16:9' type: 'string' background: description: 'Background treatment. `transparent` requires an output_format that supports alpha (png or webp).' enum: - 'auto' - 'transparent' - 'opaque' example: 'auto' type: 'string' input_references: description: 'Reference images to guide image-to-image generation, as base64 data URLs or HTTP(S) URLs.' items: $ref: '#/components/schemas/ContentPartImage' maxItems: 16 type: 'array' model: description: 'The image generation model to use' example: 'bytedance-seed/seedream-4.5' type: 'string' 'n': description: 'Number of images to generate (1-10). Providers that only support single-image generation reject n > 1.' example: 1 type: 'integer' output_compression: description: 'Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob.' example: 100 type: 'integer' output_format: description: 'Encoding of the returned image bytes. Most models produce raster formats (png, jpeg, webp). SVG is supported by vectorization models (e.g. Quiver) — the SVG markup is UTF-8 base64-encoded in `b64_json`.' enum: - 'png' - 'jpeg' - 'webp' - 'svg' example: 'png' type: 'string' prompt: description: 'Text description of the desired image' example: 'a red panda astronaut floating in space, studio lighting' minLength: 1 type: 'string' provider: $ref: '#/components/schemas/ImageGenerationProviderPreferences' quality: description: 'Rendering quality. Providers without a quality knob ignore this.' enum: - 'auto' - 'low' - 'medium' - 'high' example: 'high' type: 'string' resolution: description: 'Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider.' enum: - '512' - '1K' - '2K' - '4K' example: '2K' type: 'string' seed: description: 'If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers.' type: 'integer' size: description: 'Optional. A convenience shorthand for output dimensions — pass a tier ("2K", "4K") or explicit pixels ("2048x2048") and we normalize it to the right dimensions for the chosen provider. A tier size is equivalent to setting `resolution` and combines with `aspect_ratio`. An explicit pixel size is authoritative: a mismatched `resolution` or `aspect_ratio` alongside it is rejected with a 400.' example: '2K' type: 'string' stream: description: 'If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response.' type: 'boolean' required: - 'model' - 'prompt' type: 'object' ImageGenerationResponse: description: 'Image generation response' example: created: 1748372400 data: - b64_json: '' usage: completion_tokens: 4175 cost: 0.04 prompt_tokens: 0 total_tokens: 4175 properties: created: description: 'Unix timestamp (seconds) when the image was generated' example: 1748372400 type: 'integer' data: description: 'Generated images' items: properties: b64_json: description: 'Base64-encoded image bytes' type: 'string' media_type: description: 'Media type (MIME type) of the image, e.g. `image/png`, `image/jpeg`, `image/webp`, `image/svg+xml`. May be omitted if the format could not be determined.' example: 'image/png' type: 'string' required: - 'b64_json' type: 'object' type: 'array' usage: $ref: '#/components/schemas/ImageGenerationUsage' required: - 'created' - 'data' type: 'object' ImageGenerationServerTool: description: 'Image generation tool configuration' example: quality: 'high' type: 'image_generation' properties: background: enum: - 'transparent' - 'opaque' - 'auto' type: 'string' input_fidelity: enum: - 'high' - 'low' - null type: - 'string' - 'null' input_image_mask: properties: file_id: type: 'string' image_url: type: 'string' type: 'object' model: type: 'string' moderation: enum: - 'auto' - 'low' type: 'string' output_compression: type: 'integer' output_format: enum: - 'png' - 'webp' - 'jpeg' type: 'string' partial_images: type: 'integer' quality: enum: - 'low' - 'medium' - 'high' - 'auto' type: 'string' size: type: 'string' type: enum: - 'image_generation' type: 'string' required: - 'type' type: 'object' ImageGenerationServerTool_OpenRouter: description: 'OpenRouter built-in server tool: generates images from text prompts using an image generation model' example: parameters: model: 'openai/gpt-5-image' quality: 'high' size: '1024x1024' type: 'openrouter:image_generation' properties: parameters: $ref: '#/components/schemas/ImageGenerationServerToolConfig' type: enum: - 'openrouter:image_generation' type: 'string' required: - 'type' type: 'object' ImageGenerationServerToolConfig: additionalProperties: anyOf: - type: 'string' - format: 'double' type: 'number' - items: {} type: 'array' description: 'Configuration for the openrouter:image_generation server tool. Accepts all image_config params (aspect_ratio, quality, size, background, output_format, output_compression, moderation, etc.) plus a model field.' example: aspect_ratio: '16:9' model: 'openai/gpt-5-image' quality: 'high' properties: model: description: 'Which image generation model to use (e.g. "openai/gpt-5-image"). Defaults to "openai/gpt-5-image".' example: 'openai/gpt-5-image' type: 'string' type: 'object' ImageGenerationStatus: enum: - 'in_progress' - 'completed' - 'generating' - 'failed' example: 'completed' type: 'string' ImageGenerationUsage: description: 'Token and cost usage for the image generation request, when available' example: completion_tokens: 4175 cost: 0.04 prompt_tokens: 0 total_tokens: 4175 properties: cache_creation: $ref: '#/components/schemas/AnthropicCacheCreation' completion_tokens: description: 'The tokens generated' type: 'integer' completion_tokens_details: properties: audio_tokens: description: 'Tokens generated by the model for audio output.' type: - 'integer' - 'null' image_tokens: description: 'Tokens generated by the model for image output.' type: - 'integer' - 'null' reasoning_tokens: description: 'Tokens generated by the model for reasoning.' type: - 'integer' - 'null' type: - 'object' - 'null' cost: description: 'Cost of the completion' format: 'double' type: - 'number' - 'null' cost_details: $ref: '#/components/schemas/CostDetails' is_byok: description: 'Whether a request was made using a Bring Your Own Key configuration' type: 'boolean' iterations: items: $ref: '#/components/schemas/AnthropicUsageIteration' type: - 'array' - 'null' prompt_tokens: description: 'Including images, input audio, and tools if any' type: 'integer' prompt_tokens_details: description: 'Breakdown of tokens used in the prompt.' properties: audio_tokens: description: 'Tokens used for input audio.' type: - 'integer' - 'null' cache_write_tokens: description: 'Tokens written to cache. Only returned for models with explicit caching and cache write pricing.' type: - 'integer' - 'null' cached_tokens: description: 'Tokens cached by the endpoint.' type: - 'integer' - 'null' file_tokens: description: 'Tokens used for input files/documents.' type: - 'integer' - 'null' video_tokens: description: 'Tokens used for input video.' type: - 'integer' - 'null' type: - 'object' - 'null' server_tool_use: description: 'Usage for server-side tool execution (e.g., web search)' properties: tool_calls_executed: description: 'Number of OpenRouter server tool calls that executed and produced a result.' type: - 'integer' - 'null' tool_calls_requested: description: 'Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here.' type: - 'integer' - 'null' web_search_requests: description: 'Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two.' type: - 'integer' - 'null' type: - 'object' - 'null' service_tier: description: 'The service tier used by the upstream provider for this request' type: - 'string' - 'null' speed: $ref: '#/components/schemas/AnthropicSpeed' total_tokens: description: 'Sum of the above two fields' type: 'integer' required: - 'prompt_tokens' - 'completion_tokens' - 'total_tokens' type: 'object' ImageGenPartialImageEvent: description: 'Emitted when a partial image becomes available during streaming generation' example: b64_json: '' partial_image_index: 0 type: 'image_generation.partial_image' properties: b64_json: description: 'Base64-encoded partial image data' type: 'string' partial_image_index: description: '0-based index indicating which partial image this is in the sequence' type: 'integer' type: description: 'The event type' enum: - 'image_generation.partial_image' type: 'string' required: - 'type' - 'partial_image_index' - 'b64_json' type: 'object' ImageGenStreamErrorEvent: description: 'Emitted when streaming generation fails after the SSE response starts' example: error: code: 'upstream_error' message: 'The upstream provider returned an error' param: null type: 'provider_error' type: 'error' properties: error: description: 'Provider error details' properties: code: description: 'Provider error code, when supplied' type: - 'string' - 'null' message: description: 'Provider error message' type: 'string' param: description: 'Request parameter associated with the error, when supplied' type: - 'string' - 'null' type: description: 'Provider error type, when supplied' type: - 'string' - 'null' required: - 'message' type: 'object' type: description: 'The event type' enum: - 'error' type: 'string' required: - 'type' - 'error' type: 'object' ImageGenTextChunkEvent: description: 'Emitted when a text chunk becomes available during streaming generation of text-based formats (e.g. SVG)' example: phase: 'content' text: '' type: 'image_generation.text_chunk' properties: phase: description: 'The generation phase this chunk belongs to. `content` is the renderable output; `reasoning` and `draft` are intermediate provider phases.' enum: - 'content' - 'reasoning' - 'draft' type: 'string' text: description: 'A text fragment of the image being generated (e.g. partial SVG markup)' type: 'string' type: description: 'The event type' enum: - 'image_generation.text_chunk' type: 'string' required: - 'type' - 'text' - 'phase' type: 'object' ImageInputModality: enum: - 'text' - 'image' - 'file' - 'audio' - 'video' example: 'text' type: 'string' ImageModelArchitecture: example: input_modalities: - 'text' - 'image' output_modalities: - 'image' properties: input_modalities: description: 'Supported input modalities' items: $ref: '#/components/schemas/ImageInputModality' type: 'array' output_modalities: description: 'Supported output modalities' items: $ref: '#/components/schemas/ImageOutputModality' type: 'array' required: - 'input_modalities' - 'output_modalities' type: 'object' ImageModelEndpointsResponse: description: 'The full per-endpoint records for an image model.' example: endpoints: - allowed_passthrough_parameters: [] pricing: - billable: 'output_image' cost_usd: 0.05 unit: 'image' provider_name: 'Bytedance' provider_slug: 'bytedance' provider_tag: 'bytedance' supported_parameters: resolution: type: 'enum' values: - '1K' - '2K' - '4K' supports_streaming: false id: 'bytedance-seed/seedream-4.5' properties: endpoints: items: $ref: '#/components/schemas/ImageEndpoint' type: 'array' id: description: 'Model slug' example: 'bytedance-seed/seedream-4.5' type: 'string' required: - 'id' - 'endpoints' type: 'object' ImageModelListItem: description: 'A single image model in the discovery listing.' example: architecture: input_modalities: - 'text' - 'image' output_modalities: - 'image' created: 1692901234 description: 'A text-to-image model.' endpoints: '/api/v1/images/models/bytedance-seed/seedream-4.5/endpoints' id: 'bytedance-seed/seedream-4.5' name: 'Seedream 4.5' supported_parameters: resolution: type: 'enum' values: - '1K' - '2K' - '4K' seed: type: 'boolean' supports_streaming: false properties: architecture: $ref: '#/components/schemas/ImageModelArchitecture' created: description: 'Unix timestamp (seconds) of when the model was created' example: 1692901234 type: 'integer' description: example: 'A text-to-image model.' type: 'string' endpoints: description: 'Relative URL to the full per-endpoint records for this model' example: '/api/v1/images/models/bytedance-seed/seedream-4.5/endpoints' type: 'string' id: description: 'Model slug' example: 'bytedance-seed/seedream-4.5' type: 'string' name: description: 'Display name' example: 'Seedream 4.5' type: 'string' supported_parameters: $ref: '#/components/schemas/SupportedParameters' supports_streaming: description: 'Whether any endpoint of this model supports native SSE streaming on the dedicated Image API (i.e. `stream: true` in the request). OR across endpoints.' example: false type: 'boolean' required: - 'id' - 'name' - 'description' - 'created' - 'architecture' - 'supported_parameters' - 'supports_streaming' - 'endpoints' type: 'object' ImageModelsListResponse: description: 'List of image generation models.' example: data: - architecture: input_modalities: - 'text' output_modalities: - 'image' created: 1692901234 description: 'A text-to-image model.' endpoints: '/api/v1/images/models/bytedance-seed/seedream-4.5/endpoints' id: 'bytedance-seed/seedream-4.5' name: 'Seedream 4.5' supported_parameters: resolution: type: 'enum' values: - '1K' - '2K' - '4K' supports_streaming: false properties: data: items: $ref: '#/components/schemas/ImageModelListItem' type: 'array' required: - 'data' type: 'object' ImageOutputModality: enum: - 'text' - 'image' - 'embeddings' - 'audio' - 'video' - 'rerank' - 'speech' - 'transcription' example: 'image' type: 'string' ImagePricingEntry: description: 'One billable pricing line for an image provider.' example: billable: 'output_image' cost_usd: 0.05 unit: 'image' properties: billable: enum: - 'output_image' - 'input_image' - 'input_font' - 'input_reference' - 'input_text' type: 'string' cost_usd: format: 'double' type: 'number' unit: enum: - 'image' - 'megapixel' - 'token' type: 'string' variant: type: 'string' required: - 'billable' - 'unit' - 'cost_usd' type: 'object' ImageStreamingResponse: example: data: b64_json: '' partial_image_index: 0 type: 'image_generation.partial_image' properties: data: anyOf: - $ref: '#/components/schemas/ImageGenPartialImageEvent' - $ref: '#/components/schemas/ImageGenTextChunkEvent' - $ref: '#/components/schemas/ImageGenCompletedEvent' - $ref: '#/components/schemas/ImageGenStreamErrorEvent' required: - 'data' type: 'object' IncompleteDetails: example: reason: 'max_output_tokens' properties: reason: enum: - 'max_output_tokens' - 'content_filter' type: 'string' type: - 'object' - 'null' IncompleteEvent: description: 'Event emitted when a response is incomplete' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'incomplete' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 5 type: 'response.incomplete' properties: response: $ref: '#/components/schemas/BaseResponsesResult' sequence_number: type: 'integer' type: enum: - 'response.incomplete' type: 'string' required: - 'type' - 'response' - 'sequence_number' type: 'object' InProgressEvent: description: 'Event emitted when a response is in progress' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'in_progress' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 1 type: 'response.in_progress' properties: response: $ref: '#/components/schemas/BaseResponsesResult' sequence_number: type: 'integer' type: enum: - 'response.in_progress' type: 'string' required: - 'type' - 'response' - 'sequence_number' type: 'object' InputAudio: description: 'Audio input content item' example: input_audio: data: 'SGVsbG8gV29ybGQ=' format: 'mp3' type: 'input_audio' properties: input_audio: properties: data: type: 'string' format: enum: - 'mp3' - 'wav' type: 'string' required: - 'data' - 'format' type: 'object' type: enum: - 'input_audio' type: 'string' required: - 'type' - 'input_audio' type: 'object' InputFile: description: 'File input content item' example: file_id: 'file-abc123' filename: 'document.pdf' type: 'input_file' properties: file_data: type: 'string' file_id: type: - 'string' - 'null' file_url: type: 'string' filename: type: 'string' type: enum: - 'input_file' type: 'string' required: - 'type' type: 'object' InputImage: description: 'Image input content item' example: detail: 'auto' image_url: 'https://example.com/image.jpg' type: 'input_image' properties: detail: enum: - 'auto' - 'high' - 'low' - 'original' type: 'string' image_url: type: - 'string' - 'null' type: enum: - 'input_image' type: 'string' required: - 'type' - 'detail' type: 'object' InputMessageItem: example: content: - text: 'Hello, how are you?' type: 'input_text' id: 'msg-abc123' role: 'user' type: 'message' properties: content: items: oneOf: - $ref: '#/components/schemas/InputText' - allOf: - $ref: '#/components/schemas/InputImage' - properties: {} type: 'object' description: 'Image input content item' example: detail: 'auto' image_url: 'https://example.com/image.jpg' type: 'input_image' - $ref: '#/components/schemas/InputFile' - $ref: '#/components/schemas/InputAudio' - $ref: '#/components/schemas/InputVideo' type: - 'array' - 'null' id: type: 'string' role: anyOf: - enum: - 'user' type: 'string' - enum: - 'system' type: 'string' - enum: - 'developer' type: 'string' type: enum: - 'message' type: 'string' required: - 'role' type: 'object' InputModality: enum: - 'text' - 'image' - 'file' - 'audio' - 'video' example: 'text' type: 'string' InputReference: description: 'A reference asset used to guide video generation. Image references are supported by all providers; audio and video references are only honored by providers that support them (currently BytePlus Seedance 2.0).' discriminator: mapping: audio_url: '#/components/schemas/ContentPartAudio' image_url: '#/components/schemas/ContentPartImage' video_url: '#/components/schemas/ContentPartVideo' propertyName: 'type' example: image_url: url: 'https://example.com/image.png' type: 'image_url' oneOf: - $ref: '#/components/schemas/ContentPartImage' - $ref: '#/components/schemas/ContentPartAudio' - $ref: '#/components/schemas/ContentPartVideo' Inputs: anyOf: - type: 'string' - items: anyOf: - $ref: '#/components/schemas/ReasoningItem' - $ref: '#/components/schemas/EasyInputMessage' - $ref: '#/components/schemas/InputMessageItem' - $ref: '#/components/schemas/FunctionCallItem' - $ref: '#/components/schemas/FunctionCallOutputItem' - $ref: '#/components/schemas/ApplyPatchCallItem' - $ref: '#/components/schemas/ApplyPatchCallOutputItem' - allOf: - $ref: '#/components/schemas/OutputMessageItem' - properties: content: anyOf: - items: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' type: 'array' - type: 'string' - type: 'null' type: default: 'message' enum: - 'message' type: 'string' type: 'object' description: 'An output message item' example: content: - annotations: [] text: 'Hello! How can I help you?' type: 'output_text' id: 'msg-123' role: 'assistant' status: 'completed' type: 'message' - allOf: - $ref: '#/components/schemas/OutputReasoningItem' - properties: summary: items: $ref: '#/components/schemas/ReasoningSummaryText' type: - 'array' - 'null' type: 'object' description: 'An output item containing reasoning' example: content: - text: 'First, we analyze the problem...' type: 'reasoning_text' format: 'anthropic-claude-v1' id: 'reasoning-123' signature: 'EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj...' status: 'completed' summary: - text: 'Analyzed the problem and found the optimal solution.' type: 'summary_text' type: 'reasoning' - $ref: '#/components/schemas/OutputFunctionCallItem' - $ref: '#/components/schemas/OutputCustomToolCallItem' - $ref: '#/components/schemas/OutputWebSearchCallItem' - $ref: '#/components/schemas/OutputFileSearchCallItem' - $ref: '#/components/schemas/OutputImageGenerationCallItem' - $ref: '#/components/schemas/OutputCodeInterpreterCallItem' - $ref: '#/components/schemas/OutputComputerCallItem' - $ref: '#/components/schemas/OutputDatetimeItem' - $ref: '#/components/schemas/OutputWebSearchServerToolItem' - $ref: '#/components/schemas/OutputCodeInterpreterServerToolItem' - $ref: '#/components/schemas/OutputFileSearchServerToolItem' - $ref: '#/components/schemas/OutputImageGenerationServerToolItem' - $ref: '#/components/schemas/OutputBrowserUseServerToolItem' - $ref: '#/components/schemas/OutputBashServerToolItem' - $ref: '#/components/schemas/OutputTextEditorServerToolItem' - $ref: '#/components/schemas/OutputApplyPatchServerToolItem' - $ref: '#/components/schemas/OutputWebFetchServerToolItem' - $ref: '#/components/schemas/OutputToolSearchServerToolItem' - $ref: '#/components/schemas/OutputMemoryServerToolItem' - $ref: '#/components/schemas/OutputMcpServerToolItem' - $ref: '#/components/schemas/OutputSearchModelsServerToolItem' - $ref: '#/components/schemas/OutputFusionServerToolItem' - $ref: '#/components/schemas/OutputAdvisorServerToolItem' - $ref: '#/components/schemas/OutputSubagentServerToolItem' - $ref: '#/components/schemas/OutputFilesServerToolItem' - $ref: '#/components/schemas/LocalShellCallItem' - $ref: '#/components/schemas/LocalShellCallOutputItem' - $ref: '#/components/schemas/ShellCallItem' - $ref: '#/components/schemas/ShellCallOutputItem' - $ref: '#/components/schemas/McpListToolsItem' - $ref: '#/components/schemas/McpApprovalRequestItem' - $ref: '#/components/schemas/McpApprovalResponseItem' - $ref: '#/components/schemas/McpCallItem' - $ref: '#/components/schemas/CustomToolCallItem' - $ref: '#/components/schemas/CustomToolCallOutputItem' - $ref: '#/components/schemas/CompactionItem' - $ref: '#/components/schemas/ContextCompactionItem' - $ref: '#/components/schemas/ItemReferenceItem' - $ref: '#/components/schemas/AdditionalToolsItem' - $ref: '#/components/schemas/AgentMessageItem' type: 'array' description: 'Input for a response request - can be a string or array of items' example: - content: 'What is the weather today?' role: 'user' InputText: description: 'Text input content item' example: text: 'Hello, how can I help you?' type: 'input_text' properties: prompt_cache_breakpoint: $ref: '#/components/schemas/PromptCacheBreakpoint' text: type: 'string' type: enum: - 'input_text' type: 'string' required: - 'type' - 'text' type: 'object' InputVideo: description: 'Video input content item' example: type: 'input_video' video_url: 'https://example.com/video.mp4' properties: type: enum: - 'input_video' type: 'string' video_url: description: 'A base64 data URL or remote URL that resolves to a video file' type: 'string' required: - 'type' - 'video_url' type: 'object' InstructType: description: 'Instruction format type' enum: - 'none' - 'airoboros' - 'alpaca' - 'alpaca-modif' - 'chatml' - 'claude' - 'code-llama' - 'gemma' - 'llama2' - 'llama3' - 'mistral' - 'nemotron' - 'neural' - 'openchat' - 'phi3' - 'rwkv' - 'vicuna' - 'zephyr' - 'deepseek-r1' - 'deepseek-v3.1' - 'qwq' - 'qwen3' - null example: 'chatml' type: - 'string' - 'null' InternalServerResponse: description: 'Internal Server Error - Unexpected server error' example: error: code: 500 message: 'Internal Server Error' properties: error: $ref: '#/components/schemas/InternalServerResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' InternalServerResponseErrorData: description: 'Error data for InternalServerResponse' example: code: 500 message: 'Internal Server Error' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' ItemReferenceItem: description: 'A reference to a previous response item by ID' example: id: 'msg-abc123' type: 'item_reference' properties: id: type: 'string' type: enum: - 'item_reference' type: 'string' required: - 'type' - 'id' type: 'object' KeyAssignment: example: assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' key_hash: 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' key_label: 'prod-key' key_name: 'Production Key' properties: assigned_by: description: 'User ID of who made the assignment' example: 'user_abc123' type: - 'string' - 'null' created_at: description: 'ISO 8601 timestamp of when the assignment was created' example: '2025-08-24T10:30:00Z' type: 'string' guardrail_id: description: 'ID of the guardrail' example: '550e8400-e29b-41d4-a716-446655440001' format: 'uuid' type: 'string' id: description: 'Unique identifier for the assignment' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' key_hash: description: 'Hash of the assigned API key' example: 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' type: 'string' key_label: description: 'Label of the API key' example: 'prod-key' type: 'string' key_name: description: 'Name of the API key' example: 'Production Key' type: 'string' required: - 'id' - 'key_hash' - 'guardrail_id' - 'key_name' - 'key_label' - 'assigned_by' - 'created_at' type: 'object' Legacy_ChatContentVideo: deprecated: true description: 'Video input content part (legacy format - deprecated)' example: type: 'input_video' video_url: url: 'https://example.com/video.mp4' properties: type: enum: - 'input_video' type: 'string' video_url: $ref: '#/components/schemas/Legacy_ChatContentVideoInput' required: - 'type' - 'video_url' type: 'object' Legacy_ChatContentVideoInput: description: 'Video input object' example: url: 'https://example.com/video.mp4' properties: url: description: 'URL of the video (data: URLs supported)' type: 'string' required: - 'url' type: 'object' Legacy_WebSearchServerTool: description: 'Web search tool configuration' example: engine: 'auto' filters: allowed_domains: - 'example.com' type: 'web_search' properties: engine: $ref: '#/components/schemas/WebSearchEngineEnum' filters: $ref: '#/components/schemas/WebSearchDomainFilter' max_results: description: 'Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped.' example: 5 type: 'integer' max_uses: description: 'Maximum number of web searches the model may perform in a single request. Once reached, further search calls return an error result instead of executing. Applies to the Exa, Firecrawl, Parallel, and Perplexity engines. With native provider search, forwarded only to Anthropic (as `max_uses`); other native search providers have no equivalent parameter and ignore it.' example: 3 type: 'integer' search_context_size: $ref: '#/components/schemas/SearchContextSizeEnum' type: enum: - 'web_search' type: 'string' user_location: $ref: '#/components/schemas/WebSearchUserLocation' required: - 'type' type: 'object' ListBYOKKeysResponse: example: data: - allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Production OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' total_count: 1 properties: data: description: 'List of BYOK credentials.' items: $ref: '#/components/schemas/BYOKKey' type: 'array' total_count: description: 'Total number of BYOK credentials matching the filters.' example: 1 type: 'integer' required: - 'data' - 'total_count' type: 'object' ListEndpointsResponse: description: 'List of available endpoints for a model' example: architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' created: 1692901234 description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' endpoints: - context_length: 8192 latency_last_30m: p50: 0.25 p75: 0.35 p90: 0.48 p99: 0.85 max_completion_tokens: 4096 max_prompt_tokens: 8192 model_id: 'openai/gpt-4' model_name: 'GPT-4' name: 'OpenAI: GPT-4' pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' provider_name: 'OpenAI' quantization: 'fp16' status: 0 supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' - 'frequency_penalty' - 'presence_penalty' supports_implicit_caching: true tag: 'openai' throughput_last_30m: p50: 45.2 p75: 38.5 p90: 28.3 p99: 15.1 uptime_last_1d: 99.8 uptime_last_30m: 99.5 uptime_last_5m: 100 id: 'openai/gpt-4' name: 'GPT-4' properties: architecture: allOf: - $ref: '#/components/schemas/ModelArchitecture' - properties: input_modalities: description: 'Supported input modalities' items: $ref: '#/components/schemas/InputModality' type: 'array' instruct_type: $ref: '#/components/schemas/InstructType' modality: description: 'Primary modality of the model' example: 'text' type: - 'string' - 'null' output_modalities: description: 'Supported output modalities' items: $ref: '#/components/schemas/OutputModality' type: 'array' tokenizer: anyOf: - $ref: '#/components/schemas/ModelGroup' - type: 'null' required: - 'tokenizer' - 'instruct_type' - 'modality' - 'input_modalities' - 'output_modalities' created: description: 'Unix timestamp of when the model was created' example: 1692901234 type: 'integer' description: description: 'Description of the model' example: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' type: 'string' endpoints: description: 'List of available endpoints for this model' items: $ref: '#/components/schemas/PublicEndpoint' type: 'array' id: description: 'Unique identifier for the model' example: 'openai/gpt-4' type: 'string' name: description: 'Display name of the model' example: 'GPT-4' type: 'string' required: - 'id' - 'name' - 'created' - 'description' - 'architecture' - 'endpoints' type: 'object' ListGuardrailsResponse: example: data: - allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'google' content_filter_builtins: - action: 'redact' label: '[EMAIL]' slug: 'email' content_filters: null created_at: '2025-08-24T10:30:00Z' description: 'Guardrail for production environment' enforce_zdr: null enforce_zdr_anthropic: true enforce_zdr_google: false enforce_zdr_openai: true enforce_zdr_other: false enforce_zdr_xai: false id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: false limit_usd: 100 name: 'Production Guardrail' reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' total_count: 1 properties: data: description: 'List of guardrails' items: $ref: '#/components/schemas/Guardrail' type: 'array' total_count: description: 'Total number of guardrails' example: 25 type: 'integer' required: - 'data' - 'total_count' type: 'object' ListKeyAssignmentsResponse: example: data: - assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' key_hash: 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' key_label: 'prod-key' key_name: 'Production Key' total_count: 1 properties: data: description: 'List of key assignments' items: $ref: '#/components/schemas/KeyAssignment' type: 'array' total_count: description: 'Total number of key assignments for this guardrail' example: 25 type: 'integer' required: - 'data' - 'total_count' type: 'object' ListMemberAssignmentsResponse: example: data: - assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' organization_id: 'org_xyz789' user_id: 'user_abc123' total_count: 1 properties: data: description: 'List of member assignments' items: $ref: '#/components/schemas/MemberAssignment' type: 'array' total_count: description: 'Total number of member assignments' example: 10 type: 'integer' required: - 'data' - 'total_count' type: 'object' ListObservabilityDestinationsResponse: example: data: - api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' total_count: 1 properties: data: description: 'List of observability destinations.' items: $ref: '#/components/schemas/ObservabilityDestination' type: 'array' total_count: description: 'Total number of destinations matching the filters.' example: 1 type: 'integer' required: - 'data' - 'total_count' type: 'object' ListPresetsResponse: description: 'A paginated list of presets.' example: data: - created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' total_count: 1 properties: data: items: $ref: '#/components/schemas/Preset' type: 'array' total_count: type: 'integer' required: - 'data' - 'total_count' type: 'object' ListPresetVersionsResponse: description: 'A paginated list of preset versions.' example: data: - config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 total_count: 1 properties: data: items: $ref: '#/components/schemas/PresetDesignatedVersion' type: 'array' total_count: type: 'integer' required: - 'data' - 'total_count' type: 'object' ListScimGroupMappingsResponse: properties: data: items: $ref: '#/components/schemas/ScimGroupMapping' type: 'array' total_count: type: 'integer' required: - 'data' - 'total_count' type: 'object' ListScimGroupsResponse: properties: data: items: $ref: '#/components/schemas/ScimGroup' type: 'array' total_count: type: 'integer' required: - 'data' - 'total_count' type: 'object' ListWorkspaceBudgetsResponse: example: data: - created_at: '2025-08-24T10:30:00Z' id: '770e8400-e29b-41d4-a716-446655440000' limit_usd: 100 reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false properties: data: description: 'List of budgets configured for the workspace' items: $ref: '#/components/schemas/WorkspaceBudget' type: 'array' include_byok_in_budgets: description: 'Whether BYOK (bring-your-own-key) spend is included when enforcing the workspace''s budgets. This is a workspace-wide setting that applies to all budget intervals (daily, weekly, monthly, and lifetime).' example: false type: 'boolean' required: - 'data' type: 'object' ListWorkspaceMembersResponse: example: data: - created_at: '2025-08-24T10:30:00Z' id: '660e8400-e29b-41d4-a716-446655440000' role: 'member' user_id: 'user_abc123' workspace_id: '550e8400-e29b-41d4-a716-446655440000' total_count: 1 properties: data: description: 'List of workspace members' items: $ref: '#/components/schemas/WorkspaceMember' type: 'array' total_count: description: 'Total number of members in the workspace' example: 5 type: 'integer' required: - 'data' - 'total_count' type: 'object' ListWorkspacesResponse: example: data: - created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Production' slug: 'production' updated_at: '2025-08-24T15:45:00Z' total_count: 1 properties: data: description: 'List of workspaces' items: $ref: '#/components/schemas/Workspace' type: 'array' total_count: description: 'Total number of workspaces' example: 5 type: 'integer' required: - 'data' - 'total_count' type: 'object' LocalShellCallItem: description: 'A local shell command execution call' example: action: command: - 'ls' - '-la' env: PATH: '/usr/bin' timeout_ms: 5000 type: 'exec' call_id: 'call-abc123' id: 'shell-abc123' status: 'completed' type: 'local_shell_call' properties: action: properties: command: items: type: 'string' type: 'array' env: additionalProperties: type: 'string' type: 'object' timeout_ms: type: - 'integer' - 'null' type: enum: - 'exec' type: 'string' user: type: - 'string' - 'null' working_directory: type: - 'string' - 'null' required: - 'type' - 'command' - 'env' type: 'object' call_id: type: 'string' id: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'local_shell_call' type: 'string' required: - 'type' - 'id' - 'call_id' - 'action' - 'status' type: 'object' LocalShellCallOutputItem: description: 'Output from a local shell command execution' example: id: 'output-abc123' output: "total 24\ndrwxr-xr-x 5 user staff 160 Jan 1 12:00 ." status: 'completed' type: 'local_shell_call_output' properties: id: type: 'string' output: type: 'string' status: anyOf: - $ref: '#/components/schemas/ToolCallStatus' - type: 'null' type: enum: - 'local_shell_call_output' type: 'string' required: - 'type' - 'id' - 'output' type: 'object' McpApprovalRequestItem: description: 'Request for approval to execute an MCP tool' example: arguments: '{"id":"123"}' id: 'approval-abc123' name: 'delete_record' server_label: 'database-server' type: 'mcp_approval_request' properties: arguments: type: 'string' id: type: 'string' name: type: 'string' server_label: type: 'string' type: enum: - 'mcp_approval_request' type: 'string' required: - 'type' - 'id' - 'name' - 'arguments' - 'server_label' type: 'object' McpApprovalResponseItem: description: 'User response to an MCP tool approval request' example: approval_request_id: 'approval-abc123' approve: true reason: 'Approved for execution' type: 'mcp_approval_response' properties: approval_request_id: type: 'string' approve: type: 'boolean' id: type: - 'string' - 'null' reason: type: - 'string' - 'null' type: enum: - 'mcp_approval_response' type: 'string' required: - 'type' - 'approval_request_id' - 'approve' type: 'object' McpCallItem: description: 'An MCP tool call with its output or error' example: arguments: '{"query":"SELECT * FROM users"}' id: 'mcp-call-abc123' name: 'query_database' output: '[{"id":1,"name":"Alice"}]' server_label: 'database-server' type: 'mcp_call' properties: arguments: type: 'string' error: type: - 'string' - 'null' id: type: 'string' name: type: 'string' output: type: - 'string' - 'null' server_label: type: 'string' type: enum: - 'mcp_call' type: 'string' required: - 'type' - 'id' - 'name' - 'arguments' - 'server_label' type: 'object' McpListToolsItem: description: 'List of available MCP tools from a server' example: id: 'mcp-list-abc123' server_label: 'database-server' tools: - description: 'Execute a database query' input_schema: properties: query: type: 'string' type: 'object' name: 'query_database' type: 'mcp_list_tools' properties: error: type: - 'string' - 'null' id: type: 'string' server_label: type: 'string' tools: items: properties: annotations: {} description: type: - 'string' - 'null' input_schema: additionalProperties: {} type: 'object' name: type: 'string' required: - 'name' - 'input_schema' type: 'object' type: 'array' type: enum: - 'mcp_list_tools' type: 'string' required: - 'type' - 'id' - 'server_label' - 'tools' type: 'object' McpServerTool: description: 'MCP (Model Context Protocol) tool configuration' example: server_label: 'my-server' server_url: 'https://example.com/mcp' type: 'mcp' properties: allowed_tools: anyOf: - items: type: 'string' type: 'array' - properties: read_only: type: 'boolean' tool_names: items: type: 'string' type: 'array' type: 'object' - type: 'null' authorization: type: 'string' connector_id: enum: - 'connector_dropbox' - 'connector_gmail' - 'connector_googlecalendar' - 'connector_googledrive' - 'connector_microsoftteams' - 'connector_outlookcalendar' - 'connector_outlookemail' - 'connector_sharepoint' type: 'string' headers: additionalProperties: type: 'string' type: - 'object' - 'null' require_approval: anyOf: - properties: always: properties: tool_names: items: type: 'string' type: 'array' type: 'object' never: properties: tool_names: items: type: 'string' type: 'array' type: 'object' type: 'object' - enum: - 'always' type: 'string' - enum: - 'never' type: 'string' - type: 'null' server_description: type: 'string' server_label: type: 'string' server_url: type: 'string' type: enum: - 'mcp' type: 'string' required: - 'type' - 'server_label' type: 'object' MemberAssignment: example: assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' organization_id: 'org_xyz789' user_id: 'user_abc123' properties: assigned_by: description: 'User ID of who made the assignment' example: 'user_abc123' type: - 'string' - 'null' created_at: description: 'ISO 8601 timestamp of when the assignment was created' example: '2025-08-24T10:30:00Z' type: 'string' guardrail_id: description: 'ID of the guardrail' example: '550e8400-e29b-41d4-a716-446655440001' format: 'uuid' type: 'string' id: description: 'Unique identifier for the assignment' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' organization_id: description: 'Organization ID' example: 'org_xyz789' type: 'string' user_id: description: 'Clerk user ID of the assigned member' example: 'user_abc123' type: 'string' required: - 'id' - 'user_id' - 'organization_id' - 'guardrail_id' - 'assigned_by' - 'created_at' type: 'object' MessagesAdvisorToolResultBlock: description: 'Advisor tool result from a prior assistant turn, replayed back to the model on the next turn. Mirrors the block Anthropic returns in assistant content when the `advisor_20260301` tool runs.' example: content: text: 'Advisor response text' type: 'advisor_result' tool_use_id: 'srvtoolu_01abc' type: 'advisor_tool_result' properties: content: additionalProperties: {} type: 'object' tool_use_id: type: 'string' type: enum: - 'advisor_tool_result' type: 'string' required: - 'type' - 'tool_use_id' - 'content' type: 'object' MessagesContentBlockDeltaEvent: description: 'Event sent when content is added to a content block' example: delta: text: 'Hello' type: 'text_delta' index: 0 type: 'content_block_delta' properties: delta: oneOf: - properties: text: type: 'string' type: enum: - 'text_delta' type: 'string' required: - 'type' - 'text' type: 'object' - properties: partial_json: type: 'string' type: enum: - 'input_json_delta' type: 'string' required: - 'type' - 'partial_json' type: 'object' - properties: thinking: type: 'string' type: enum: - 'thinking_delta' type: 'string' required: - 'type' - 'thinking' type: 'object' - properties: signature: type: 'string' type: enum: - 'signature_delta' type: 'string' required: - 'type' - 'signature' type: 'object' - properties: citation: discriminator: mapping: char_location: '#/components/schemas/AnthropicCitationCharLocation' content_block_location: '#/components/schemas/AnthropicCitationContentBlockLocation' page_location: '#/components/schemas/AnthropicCitationPageLocation' search_result_location: '#/components/schemas/AnthropicCitationSearchResultLocation' web_search_result_location: '#/components/schemas/AnthropicCitationWebSearchResultLocation' propertyName: 'type' oneOf: - $ref: '#/components/schemas/AnthropicCitationCharLocation' - $ref: '#/components/schemas/AnthropicCitationPageLocation' - $ref: '#/components/schemas/AnthropicCitationContentBlockLocation' - $ref: '#/components/schemas/AnthropicCitationWebSearchResultLocation' - $ref: '#/components/schemas/AnthropicCitationSearchResultLocation' type: enum: - 'citations_delta' type: 'string' required: - 'type' - 'citation' type: 'object' - properties: content: type: - 'string' - 'null' encrypted_content: type: - 'string' - 'null' type: enum: - 'compaction_delta' type: 'string' required: - 'type' - 'content' type: 'object' index: type: 'integer' type: enum: - 'content_block_delta' type: 'string' required: - 'type' - 'index' - 'delta' type: 'object' MessagesContentBlockStartEvent: description: 'Event sent when a new content block starts' example: content_block: citations: [] text: '' type: 'text' index: 0 type: 'content_block_start' properties: content_block: anyOf: - $ref: '#/components/schemas/AnthropicTextBlock' - $ref: '#/components/schemas/AnthropicToolUseBlock' - $ref: '#/components/schemas/AnthropicThinkingBlock' - $ref: '#/components/schemas/AnthropicRedactedThinkingBlock' - $ref: '#/components/schemas/ORAnthropicServerToolUseBlock' - $ref: '#/components/schemas/AnthropicWebSearchToolResult' - $ref: '#/components/schemas/AnthropicWebFetchToolResult' - $ref: '#/components/schemas/AnthropicCodeExecutionToolResult' - $ref: '#/components/schemas/AnthropicBashCodeExecutionToolResult' - $ref: '#/components/schemas/AnthropicTextEditorCodeExecutionToolResult' - $ref: '#/components/schemas/AnthropicToolSearchToolResult' - $ref: '#/components/schemas/AnthropicContainerUpload' - $ref: '#/components/schemas/AnthropicCompactionBlock' - $ref: '#/components/schemas/AnthropicAdvisorToolResult' - properties: content: type: - 'string' - 'null' encrypted_content: type: - 'string' - 'null' type: enum: - 'compaction' type: 'string' required: - 'type' - 'content' type: 'object' index: type: 'integer' type: enum: - 'content_block_start' type: 'string' required: - 'type' - 'index' - 'content_block' type: 'object' MessagesContentBlockStopEvent: description: 'Event sent when a content block is complete' example: index: 0 type: 'content_block_stop' properties: index: type: 'integer' type: enum: - 'content_block_stop' type: 'string' required: - 'type' - 'index' type: 'object' MessagesDeltaEvent: description: 'Event sent when the message metadata changes (e.g., stop_reason)' example: delta: container: null stop_details: null stop_reason: 'end_turn' stop_sequence: null type: 'message_delta' usage: cache_creation_input_tokens: null cache_read_input_tokens: null input_tokens: null output_tokens: 15 output_tokens_details: null server_tool_use: null properties: delta: properties: container: $ref: '#/components/schemas/AnthropicContainer' stop_details: $ref: '#/components/schemas/AnthropicRefusalStopDetails' stop_reason: $ref: '#/components/schemas/ORAnthropicStopReason' stop_sequence: type: - 'string' - 'null' required: - 'container' - 'stop_details' - 'stop_reason' - 'stop_sequence' type: 'object' type: enum: - 'message_delta' type: 'string' usage: properties: cache_creation: $ref: '#/components/schemas/AnthropicCacheCreation' cache_creation_input_tokens: type: - 'integer' - 'null' cache_read_input_tokens: type: - 'integer' - 'null' input_tokens: type: - 'integer' - 'null' iterations: items: $ref: '#/components/schemas/AnthropicUsageIteration' type: 'array' output_tokens: type: 'integer' output_tokens_details: $ref: '#/components/schemas/AnthropicOutputTokensDetails' server_tool_use: properties: web_fetch_requests: type: 'integer' web_search_requests: type: 'integer' required: - 'web_search_requests' - 'web_fetch_requests' type: - 'object' - 'null' required: - 'input_tokens' - 'output_tokens' - 'output_tokens_details' - 'cache_creation_input_tokens' - 'cache_read_input_tokens' - 'server_tool_use' type: 'object' required: - 'type' - 'delta' - 'usage' type: 'object' MessagesErrorDetail: example: error_type: 'invalid_request' message: 'Invalid request parameters' type: 'invalid_request_error' properties: error_type: $ref: '#/components/schemas/ApiErrorType' message: type: 'string' type: type: 'string' required: - 'type' - 'message' type: 'object' MessagesErrorEvent: description: 'Error event in the stream' example: error: error_type: 'provider_overloaded' message: 'Overloaded' type: 'overloaded_error' type: 'error' properties: error: properties: error_type: $ref: '#/components/schemas/ApiErrorType' message: type: 'string' type: type: 'string' required: - 'type' - 'message' type: 'object' openrouter_metadata: $ref: '#/components/schemas/OpenRouterMetadata' type: enum: - 'error' type: 'string' required: - 'type' - 'error' type: 'object' MessagesErrorResponse: example: error: message: 'Invalid request parameters' type: 'invalid_request_error' type: 'error' properties: error: $ref: '#/components/schemas/MessagesErrorDetail' type: enum: - 'error' type: 'string' required: - 'type' - 'error' type: 'object' MessagesFallbackParam: additionalProperties: {} description: 'Fallback model to try when the primary model fails or refuses. Only the `model` field is supported; per-attempt overrides are rejected.' example: model: 'claude-opus-4-8' properties: model: type: 'string' required: - 'model' type: 'object' MessagesMessageParam: description: 'Anthropic message with OpenRouter extensions' example: content: 'Hello, how are you?' role: 'user' properties: content: anyOf: - type: 'string' - items: oneOf: - $ref: '#/components/schemas/AnthropicTextBlockParam' - $ref: '#/components/schemas/AnthropicImageBlockParam' - $ref: '#/components/schemas/AnthropicDocumentBlockParam' - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' id: type: 'string' input: {} name: type: 'string' type: enum: - 'tool_use' type: 'string' required: - 'type' - 'id' - 'name' type: 'object' - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' content: anyOf: - type: 'string' - items: anyOf: - $ref: '#/components/schemas/AnthropicTextBlockParam' - $ref: '#/components/schemas/AnthropicImageBlockParam' - properties: tool_name: type: 'string' type: enum: - 'tool_reference' type: 'string' required: - 'type' - 'tool_name' type: 'object' - $ref: '#/components/schemas/AnthropicSearchResultBlockParam' - $ref: '#/components/schemas/AnthropicDocumentBlockParam' type: 'array' is_error: type: 'boolean' tool_use_id: type: 'string' type: enum: - 'tool_result' type: 'string' required: - 'type' - 'tool_use_id' type: 'object' - properties: signature: type: 'string' thinking: type: 'string' type: enum: - 'thinking' type: 'string' required: - 'type' - 'thinking' - 'signature' type: 'object' - properties: data: type: 'string' type: enum: - 'redacted_thinking' type: 'string' required: - 'type' - 'data' type: 'object' - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' id: type: 'string' input: {} name: type: 'string' type: enum: - 'server_tool_use' type: 'string' required: - 'type' - 'id' - 'name' type: 'object' - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' content: anyOf: - items: $ref: '#/components/schemas/AnthropicWebSearchResultBlockParam' type: 'array' - properties: error_code: enum: - 'invalid_tool_input' - 'unavailable' - 'max_uses_exceeded' - 'too_many_requests' - 'query_too_long' type: 'string' type: enum: - 'web_search_tool_result_error' type: 'string' required: - 'type' - 'error_code' type: 'object' tool_use_id: type: 'string' type: enum: - 'web_search_tool_result' type: 'string' required: - 'type' - 'tool_use_id' - 'content' type: 'object' - $ref: '#/components/schemas/AnthropicSearchResultBlockParam' - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' content: type: - 'string' - 'null' encrypted_content: type: - 'string' - 'null' type: enum: - 'compaction' type: 'string' required: - 'type' - 'content' type: 'object' - $ref: '#/components/schemas/MessagesAdvisorToolResultBlock' - $ref: '#/components/schemas/MessagesToolAdditionBlock' - $ref: '#/components/schemas/MessagesToolRemovalBlock' type: 'array' role: enum: - 'user' - 'assistant' - 'system' type: 'string' required: - 'role' - 'content' type: 'object' MessagesOutputConfig: description: 'Configuration for controlling output behavior. Supports the effort parameter and structured output format.' example: effort: 'medium' properties: effort: description: 'How much effort the model should put into its response. Higher effort levels may result in more thorough analysis but take longer. Valid values are `low`, `medium`, `high`, `xhigh`, or `max`.' enum: - 'low' - 'medium' - 'high' - 'xhigh' - 'max' - null example: 'medium' type: - 'string' - 'null' format: description: 'A schema to specify Claude''s output format in responses. See [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs).' properties: schema: additionalProperties: {} type: 'object' type: enum: - 'json_schema' type: 'string' required: - 'type' - 'schema' type: - 'object' - 'null' task_budget: description: 'Task budget for an agentic turn. The model sees a countdown of remaining tokens and uses it to prioritize work and wind down gracefully. Advisory — does not enforce a hard cap.' example: total: 400000 type: 'tokens' properties: remaining: minimum: 0 type: - 'integer' - 'null' total: minimum: 20000 type: 'integer' type: enum: - 'tokens' type: 'string' required: - 'type' - 'total' type: - 'object' - 'null' type: 'object' MessagesPingEvent: description: 'Keep-alive ping event' example: type: 'ping' properties: type: enum: - 'ping' type: 'string' required: - 'type' type: 'object' MessagesRequest: description: 'Request schema for Anthropic Messages API endpoint' example: max_tokens: 1024 messages: - content: 'Hello, how are you?' role: 'user' model: 'anthropic/claude-4.5-sonnet-20250929' temperature: 0.7 properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' context_management: properties: edits: items: oneOf: - properties: clear_at_least: $ref: '#/components/schemas/AnthropicInputTokensClearAtLeast' clear_tool_inputs: anyOf: - type: 'boolean' - items: type: 'string' type: 'array' - type: 'null' exclude_tools: items: type: 'string' type: - 'array' - 'null' keep: $ref: '#/components/schemas/AnthropicToolUsesKeep' trigger: discriminator: mapping: input_tokens: '#/components/schemas/AnthropicInputTokensTrigger' tool_uses: '#/components/schemas/AnthropicToolUsesTrigger' propertyName: 'type' oneOf: - $ref: '#/components/schemas/AnthropicInputTokensTrigger' - $ref: '#/components/schemas/AnthropicToolUsesTrigger' type: enum: - 'clear_tool_uses_20250919' type: 'string' required: - 'type' type: 'object' - properties: keep: anyOf: - $ref: '#/components/schemas/AnthropicThinkingTurns' - properties: type: enum: - 'all' type: 'string' required: - 'type' type: 'object' - enum: - 'all' type: 'string' type: enum: - 'clear_thinking_20251015' type: 'string' required: - 'type' type: 'object' - properties: instructions: type: - 'string' - 'null' pause_after_compaction: type: 'boolean' trigger: anyOf: - allOf: - $ref: '#/components/schemas/AnthropicInputTokensTrigger' - properties: {} type: 'object' - type: 'null' example: type: 'input_tokens' value: 100000 type: enum: - 'compact_20260112' type: 'string' required: - 'type' type: 'object' type: 'array' type: - 'object' - 'null' fallbacks: description: 'Fallback models to try if the primary model fails or refuses, in order. Handled by OpenRouter multi-model routing rather than Anthropic server-side fallbacks; cannot be combined with `models`. Each entry accepts only `model`. Maximum of 3 entries.' example: - model: 'claude-opus-4-8' items: $ref: '#/components/schemas/MessagesFallbackParam' type: - 'array' - 'null' max_tokens: type: 'integer' messages: items: $ref: '#/components/schemas/MessagesMessageParam' type: - 'array' - 'null' metadata: properties: user_id: type: - 'string' - 'null' type: 'object' model: type: 'string' models: items: type: 'string' type: 'array' output_config: $ref: '#/components/schemas/MessagesOutputConfig' plugins: description: 'Plugins you want to enable for this request, including their settings.' items: discriminator: mapping: auto-beta-router: '#/components/schemas/AutoBetaRouterPlugin' auto-router: '#/components/schemas/AutoRouterPlugin' context-compression: '#/components/schemas/ContextCompressionPlugin' file-parser: '#/components/schemas/FileParserPlugin' fusion: '#/components/schemas/FusionPlugin' moderation: '#/components/schemas/ModerationPlugin' pareto-router: '#/components/schemas/ParetoRouterPlugin' response-healing: '#/components/schemas/ResponseHealingPlugin' web: '#/components/schemas/WebSearchPlugin' web-fetch: '#/components/schemas/WebFetchPlugin' propertyName: 'id' oneOf: - $ref: '#/components/schemas/AutoRouterPlugin' - $ref: '#/components/schemas/AutoBetaRouterPlugin' - $ref: '#/components/schemas/ModerationPlugin' - $ref: '#/components/schemas/WebSearchPlugin' - $ref: '#/components/schemas/WebFetchPlugin' - $ref: '#/components/schemas/FileParserPlugin' - $ref: '#/components/schemas/ResponseHealingPlugin' - $ref: '#/components/schemas/ContextCompressionPlugin' - $ref: '#/components/schemas/ParetoRouterPlugin' - $ref: '#/components/schemas/FusionPlugin' type: 'array' provider: $ref: '#/components/schemas/ProviderPreferences' route: $ref: '#/components/schemas/DeprecatedRoute' service_tier: type: 'string' session_id: description: 'A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.' maxLength: 256 type: 'string' speed: allOf: - $ref: '#/components/schemas/AnthropicSpeed' - description: 'Controls output generation speed. When set to `fast`, uses a higher-speed inference configuration at premium pricing. Defaults to `standard` when omitted.' example: 'fast' stop_sequences: items: type: 'string' type: 'array' stop_server_tools_when: $ref: '#/components/schemas/StopServerToolsWhen' stream: type: 'boolean' system: anyOf: - type: 'string' - items: $ref: '#/components/schemas/AnthropicTextBlockParam' type: 'array' temperature: format: 'double' type: 'number' thinking: oneOf: - properties: budget_tokens: type: 'integer' display: $ref: '#/components/schemas/AnthropicThinkingDisplay' type: enum: - 'enabled' type: 'string' required: - 'type' - 'budget_tokens' type: 'object' - properties: type: enum: - 'disabled' type: 'string' required: - 'type' type: 'object' - properties: display: $ref: '#/components/schemas/AnthropicThinkingDisplay' type: enum: - 'adaptive' type: 'string' required: - 'type' type: 'object' tool_choice: oneOf: - properties: disable_parallel_tool_use: type: 'boolean' type: enum: - 'auto' type: 'string' required: - 'type' type: 'object' - properties: disable_parallel_tool_use: type: 'boolean' type: enum: - 'any' type: 'string' required: - 'type' type: 'object' - properties: type: enum: - 'none' type: 'string' required: - 'type' type: 'object' - properties: disable_parallel_tool_use: type: 'boolean' name: type: 'string' type: enum: - 'tool' type: 'string' required: - 'type' - 'name' type: 'object' tools: items: anyOf: - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' defer_loading: type: 'boolean' description: type: 'string' input_schema: additionalProperties: {} properties: properties: {} required: items: type: 'string' type: - 'array' - 'null' type: default: 'object' type: 'string' type: 'object' name: type: 'string' type: enum: - 'custom' type: 'string' required: - 'name' - 'input_schema' type: 'object' - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' name: enum: - 'bash' type: 'string' type: enum: - 'bash_20250124' type: 'string' required: - 'type' - 'name' type: 'object' - properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' name: enum: - 'str_replace_editor' type: 'string' type: enum: - 'text_editor_20250124' type: 'string' required: - 'type' - 'name' type: 'object' - properties: allowed_domains: items: type: 'string' type: - 'array' - 'null' blocked_domains: items: type: 'string' type: - 'array' - 'null' cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' max_uses: type: - 'integer' - 'null' name: enum: - 'web_search' type: 'string' type: enum: - 'web_search_20250305' type: 'string' user_location: $ref: '#/components/schemas/AnthropicWebSearchToolUserLocation' required: - 'type' - 'name' type: 'object' - properties: allowed_callers: $ref: '#/components/schemas/AnthropicAllowedCallers' allowed_domains: items: type: 'string' type: - 'array' - 'null' blocked_domains: items: type: 'string' type: - 'array' - 'null' cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' max_uses: type: - 'integer' - 'null' name: enum: - 'web_search' type: 'string' type: enum: - 'web_search_20260209' type: 'string' user_location: $ref: '#/components/schemas/AnthropicWebSearchToolUserLocation' required: - 'type' - 'name' type: 'object' - properties: allowed_callers: $ref: '#/components/schemas/AnthropicAllowedCallers' cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' caching: anyOf: - $ref: '#/components/schemas/AnthropicCacheControlDirective' - type: 'null' defer_loading: type: 'boolean' max_uses: type: 'integer' model: type: 'string' name: enum: - 'advisor' type: 'string' type: enum: - 'advisor_20260301' type: 'string' required: - 'type' - 'name' - 'model' type: 'object' - $ref: '#/components/schemas/BashServerTool' - $ref: '#/components/schemas/DatetimeServerTool' - $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter' - $ref: '#/components/schemas/MessagesSearchModelsServerTool' - $ref: '#/components/schemas/WebFetchServerTool' - $ref: '#/components/schemas/OpenRouterWebSearchServerTool' - additionalProperties: {} properties: type: type: 'string' required: - 'type' type: 'object' - $ref: '#/components/schemas/AnthropicToolSearchToolBm25' - $ref: '#/components/schemas/AnthropicToolSearchToolRegex' type: 'array' top_k: type: 'integer' top_p: format: 'double' type: 'number' trace: $ref: '#/components/schemas/TraceConfig' user: description: 'A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters.' maxLength: 256 type: 'string' required: - 'model' - 'messages' type: 'object' MessagesResult: allOf: - $ref: '#/components/schemas/BaseMessagesResult' - properties: context_management: properties: applied_edits: items: additionalProperties: {} properties: type: type: 'string' required: - 'type' type: 'object' type: 'array' required: - 'applied_edits' type: - 'object' - 'null' openrouter_metadata: $ref: '#/components/schemas/OpenRouterMetadata' provider: $ref: '#/components/schemas/ProviderName' usage: allOf: - $ref: '#/components/schemas/AnthropicUsage' - properties: cost: format: 'double' type: - 'number' - 'null' cost_details: $ref: '#/components/schemas/CostDetails' is_byok: type: 'boolean' iterations: items: $ref: '#/components/schemas/AnthropicUsageIteration' type: 'array' service_tier: type: - 'string' - 'null' speed: $ref: '#/components/schemas/AnthropicSpeed' type: 'object' example: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 100 output_tokens: 50 output_tokens_details: null server_tool_use: null service_tier: 'standard' type: 'object' description: 'Non-streaming response from the Anthropic Messages API with OpenRouter extensions' example: container: null content: - citations: [] text: 'Hello! I''m doing well, thank you for asking.' type: 'text' id: 'msg_01XFDUDYJgAACzvnptvVoYEL' model: 'claude-sonnet-4-5-20250929' role: 'assistant' stop_details: null stop_reason: 'end_turn' stop_sequence: null type: 'message' usage: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 12 output_tokens: 15 output_tokens_details: null server_tool_use: null service_tier: 'standard' MessagesSearchModelsServerTool: description: 'OpenRouter built-in server tool: searches and filters AI models available on OpenRouter' example: parameters: max_results: 5 type: 'openrouter:experimental__search_models' properties: parameters: $ref: '#/components/schemas/SearchModelsServerToolConfig' type: enum: - 'openrouter:experimental__search_models' type: 'string' required: - 'type' type: 'object' MessagesStartEvent: description: 'Event sent at the start of a streaming message' example: message: container: null content: [] id: 'msg_01XFDUDYJgAACzvnptvVoYEL' model: 'claude-sonnet-4-5-20250929' role: 'assistant' stop_details: null stop_reason: null stop_sequence: null type: 'message' usage: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 12 output_tokens: 0 output_tokens_details: null server_tool_use: null service_tier: 'standard' type: 'message_start' properties: message: properties: container: $ref: '#/components/schemas/AnthropicContainer' content: items: $ref: '#/components/schemas/ORAnthropicContentBlock' type: 'array' id: type: 'string' model: type: 'string' provider: enum: - 'AnyScale' - 'Atoma' - 'Cent-ML' - 'CrofAI' - 'Enfer' - 'GoPomelo' - 'HuggingFace' - 'Hyperbolic' - 'Hyperbolic 2' - 'InoCloud' - 'Kluster' - 'Lambda' - 'Lepton' - 'Lynn 2' - 'Lynn' - 'Mancer' - 'Modal' - 'Nineteen' - 'OctoAI' - 'Recursal' - 'Reflection' - 'Replicate' - 'SambaNova 2' - 'SF Compute' - 'Targon' - 'Together 2' - 'Ubicloud' - '01.AI' - 'AkashML' - 'AI21' - 'AionLabs' - 'Alibaba' - 'Ambient' - 'Baidu' - 'Amazon Bedrock' - 'Amazon Nova' - 'Anthropic' - 'Arcee AI' - 'AtlasCloud' - 'Avian' - 'Azure' - 'BaseTen' - 'BytePlus' - 'Black Forest Labs' - 'Cerebras' - 'Chutes' - 'Cirrascale' - 'Claude Platform on AWS' - 'Clarifai' - 'Cloudflare' - 'Cohere' - 'CoreWeave' - 'Crucible' - 'Crusoe' - 'Darkbloom' - 'Decart' - 'Deepgram' - 'DeepInfra' - 'DeepSeek' - 'DekaLLM' - 'DigitalOcean' - 'Featherless' - 'Fireworks' - 'Fish Audio' - 'Friendli' - 'GMICloud' - 'Google' - 'Google AI Studio' - 'Groq' - 'HeyGen' - 'Inception' - 'Inceptron' - 'InferenceNet' - 'Ionstream' - 'Infermatic' - 'Io Net' - 'Inferact vLLM' - 'Inflection' - 'Liquid' - 'Mara' - 'Mancer 2' - 'Meta' - 'Minimax' - 'ModelRun' - 'Mistral' - 'Modular' - 'Moonshot AI' - 'Morph' - 'VoyageAI by MongoDB' - 'NCompass' - 'Nebius' - 'Nex AGI' - 'NextBit' - 'Novita' - 'Nvidia' - 'OpenAI' - 'OpenInference' - 'Parasail' - 'Poolside' - 'Perceptron' - 'Perplexity' - 'Phala' - 'Recraft' - 'Reka' - 'Relace' - 'Sail Research' - 'Sakana AI' - 'SambaNova' - 'Seed' - 'SiliconFlow' - 'Sourceful' - 'StepFun' - 'Stealth' - 'StreamLake' - 'Switchpoint' - 'Tencent' - 'Tenstorrent' - 'Thinking Machines' - 'Together' - 'Upstage' - 'Venice' - 'Wafer' - 'WandB' - 'Quiver' - 'Krea' - 'Runway' - 'Xiaomi' - 'xAI' - 'Z.AI' - 'FakeProvider' type: 'string' role: enum: - 'assistant' type: 'string' stop_details: $ref: '#/components/schemas/AnthropicRefusalStopDetails' stop_reason: {} stop_sequence: {} type: enum: - 'message' type: 'string' usage: allOf: - $ref: '#/components/schemas/AnthropicUsage' - properties: iterations: items: $ref: '#/components/schemas/AnthropicUsageIteration' type: 'array' speed: $ref: '#/components/schemas/AnthropicSpeed' type: 'object' example: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 100 output_tokens: 50 output_tokens_details: null server_tool_use: null service_tier: 'standard' required: - 'id' - 'type' - 'role' - 'container' - 'content' - 'model' - 'stop_reason' - 'stop_details' - 'stop_sequence' - 'usage' type: 'object' type: enum: - 'message_start' type: 'string' required: - 'type' - 'message' type: 'object' MessagesStopEvent: description: 'Event sent when the message is complete' example: type: 'message_stop' properties: openrouter_metadata: $ref: '#/components/schemas/OpenRouterMetadata' type: enum: - 'message_stop' type: 'string' required: - 'type' type: 'object' MessagesStreamEvents: description: 'Union of all possible streaming events' discriminator: mapping: content_block_delta: '#/components/schemas/MessagesContentBlockDeltaEvent' content_block_start: '#/components/schemas/MessagesContentBlockStartEvent' content_block_stop: '#/components/schemas/MessagesContentBlockStopEvent' error: '#/components/schemas/MessagesErrorEvent' message_delta: '#/components/schemas/MessagesDeltaEvent' message_start: '#/components/schemas/MessagesStartEvent' message_stop: '#/components/schemas/MessagesStopEvent' ping: '#/components/schemas/MessagesPingEvent' propertyName: 'type' example: delta: text: 'Hello' type: 'text_delta' index: 0 type: 'content_block_delta' oneOf: - $ref: '#/components/schemas/MessagesStartEvent' - $ref: '#/components/schemas/MessagesDeltaEvent' - $ref: '#/components/schemas/MessagesStopEvent' - $ref: '#/components/schemas/MessagesContentBlockStartEvent' - $ref: '#/components/schemas/MessagesContentBlockDeltaEvent' - $ref: '#/components/schemas/MessagesContentBlockStopEvent' - $ref: '#/components/schemas/MessagesPingEvent' - $ref: '#/components/schemas/MessagesErrorEvent' MessagesStreamingResponse: example: data: delta: text: 'Hello' type: 'text_delta' index: 0 type: 'content_block_delta' event: 'content_block_delta' properties: data: $ref: '#/components/schemas/MessagesStreamEvents' event: type: 'string' required: - 'event' - 'data' type: 'object' MessagesToolAdditionBlock: description: 'Loads a previously deferred tool (declared in `tools` with `defer_loading: true`) mid-conversation without invalidating the prompt cache. Only valid in `role: "system"` messages. Not supported on Claude Sonnet 5 or models older than Claude Opus 4.8.' example: tool: name: 'get_forecast' type: 'tool_reference' type: 'tool_addition' properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' tool: oneOf: - properties: name: type: 'string' type: enum: - 'tool_reference' type: 'string' required: - 'type' - 'name' type: 'object' - properties: name: type: 'string' server_name: type: 'string' type: enum: - 'mcp_tool_reference' type: 'string' required: - 'type' - 'name' - 'server_name' type: 'object' - properties: server_name: type: 'string' type: enum: - 'mcp_toolset_reference' type: 'string' required: - 'type' - 'server_name' type: 'object' type: enum: - 'tool_addition' type: 'string' required: - 'type' - 'tool' type: 'object' MessagesToolRemovalBlock: description: 'Removes a tool from the conversation mid-conversation without invalidating the prompt cache. Only valid in `role: "system"` messages. Not supported on Claude Sonnet 5 or models older than Claude Opus 4.8.' example: tool: name: 'get_weather' type: 'tool_reference' type: 'tool_removal' properties: cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' tool: oneOf: - properties: name: type: 'string' type: enum: - 'tool_reference' type: 'string' required: - 'type' - 'name' type: 'object' - properties: name: type: 'string' server_name: type: 'string' type: enum: - 'mcp_tool_reference' type: 'string' required: - 'type' - 'name' - 'server_name' type: 'object' - properties: server_name: type: 'string' type: enum: - 'mcp_toolset_reference' type: 'string' required: - 'type' - 'server_name' type: 'object' type: enum: - 'tool_removal' type: 'string' required: - 'type' - 'tool' type: 'object' MetadataLevel: description: 'Opt-in level for surfacing routing metadata on the response under `openrouter_metadata`.' enum: - 'disabled' - 'enabled' example: 'enabled' type: 'string' Model: description: 'Information about an AI model available on OpenRouter' example: architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' canonical_slug: 'openai/gpt-4' context_length: 8192 created: 1692901234 default_parameters: null description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' expiration_date: null id: 'openai/gpt-4' knowledge_cutoff: null links: details: '/api/v1/models/openai/gpt-5.4/endpoints' name: 'GPT-4' per_request_limits: null pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' reasoning: default_effort: 'medium' default_enabled: true mandatory: false supported_efforts: - 'high' - 'medium' - 'low' - 'minimal' supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supported_voices: null top_provider: context_length: 8192 is_moderated: true max_completion_tokens: 4096 properties: alias_target: $ref: '#/components/schemas/ModelAliasTarget' architecture: $ref: '#/components/schemas/ModelArchitecture' benchmarks: $ref: '#/components/schemas/ModelBenchmarks' canonical_slug: description: 'Canonical slug for the model' example: 'openai/gpt-4' type: 'string' context_length: description: 'Maximum context length in tokens' example: 8192 type: - 'integer' - 'null' created: description: 'Unix timestamp of when the model was created' example: 1692901234 type: 'integer' default_parameters: $ref: '#/components/schemas/DefaultParameters' description: description: 'Description of the model' example: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' type: 'string' expiration_date: description: 'The date after which the model may be removed. ISO 8601 date string (YYYY-MM-DD) or null if no expiration.' example: '2025-06-01' type: - 'string' - 'null' hugging_face_id: description: 'Hugging Face model identifier, if applicable' example: 'microsoft/DialoGPT-medium' type: - 'string' - 'null' id: description: 'Unique identifier for the model' example: 'openai/gpt-4' type: 'string' knowledge_cutoff: description: 'The date up to which the model was trained on data. ISO 8601 date string (YYYY-MM-DD) or null if unknown.' example: '2024-10-01' type: - 'string' - 'null' links: $ref: '#/components/schemas/ModelLinks' name: description: 'Display name of the model' example: 'GPT-4' type: 'string' per_request_limits: $ref: '#/components/schemas/PerRequestLimits' pricing: $ref: '#/components/schemas/PublicPricing' reasoning: $ref: '#/components/schemas/ModelReasoning' supported_parameters: description: 'List of supported parameters for this model' items: $ref: '#/components/schemas/Parameter' type: 'array' supported_voices: description: 'List of supported voice identifiers for TTS models. Null for non-TTS models.' example: null items: type: 'string' type: - 'array' - 'null' top_provider: $ref: '#/components/schemas/TopProviderInfo' required: - 'id' - 'canonical_slug' - 'name' - 'created' - 'pricing' - 'context_length' - 'architecture' - 'top_provider' - 'per_request_limits' - 'supported_parameters' - 'default_parameters' - 'supported_voices' - 'links' type: 'object' ModelAliasTarget: description: 'Concrete model targeted by this tilde-latest alias, when applicable' example: name: 'Claude Sonnet 4.5' slug: 'anthropic/claude-sonnet-4.5' properties: name: description: 'Human-readable name of the concrete model targeted by this alias' type: 'string' slug: description: 'Routable model ID of the concrete target, matching that model row''s id' type: 'string' required: - 'slug' - 'name' type: 'object' ModelArchitecture: description: 'Model architecture information' example: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' properties: input_modalities: description: 'Supported input modalities' items: $ref: '#/components/schemas/InputModality' type: 'array' instruct_type: $ref: '#/components/schemas/InstructType' modality: description: 'Primary modality of the model' example: 'text->text' type: - 'string' - 'null' output_modalities: description: 'Supported output modalities' items: $ref: '#/components/schemas/OutputModality' type: 'array' tokenizer: $ref: '#/components/schemas/ModelGroup' required: - 'modality' - 'input_modalities' - 'output_modalities' type: 'object' ModelBenchmarks: description: 'Third-party benchmark rankings for this model. Omitted when no benchmark data is available.' example: artificial_analysis: agentic_index: 55.8 coding_index: 63.2 intelligence_index: 71.4 design_arena: - arena: 'models' category: 'website' elo: 1385.2 rank: 5 win_rate: 62.5 properties: artificial_analysis: $ref: '#/components/schemas/AABenchmarkEntry' design_arena: description: 'Design Arena ELO rankings across arena+category pairs.' example: - arena: 'models' category: 'website' elo: 1385.2 rank: 5 win_rate: 62.5 items: $ref: '#/components/schemas/DABenchmarkEntry' type: 'array' required: - 'design_arena' type: 'object' ModelGroup: description: 'Tokenizer type used by the model' enum: - 'Router' - 'Media' - 'Other' - 'GPT' - 'Claude' - 'Gemini' - 'Gemma' - 'Grok' - 'Cohere' - 'Nova' - 'Qwen' - 'Yi' - 'DeepSeek' - 'Mistral' - 'Llama2' - 'Llama3' - 'Llama4' - 'PaLM' - 'RWKV' - 'Qwen3' example: 'GPT' type: 'string' ModelLinks: description: 'Related API endpoints and resources for this model.' example: details: '/api/v1/models/openai/gpt-5.4/endpoints' properties: details: description: 'URL for the model details/endpoints API' example: '/api/v1/models/openai/gpt-5.4/endpoints' type: 'string' required: - 'details' type: 'object' ModelName: description: 'Model to use for completion' example: 'openai/gpt-4' type: 'string' ModelReasoning: description: 'Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models.' example: default_effort: 'medium' default_enabled: true mandatory: false supported_efforts: - 'high' - 'medium' - 'low' - 'minimal' properties: default_effort: allOf: - $ref: '#/components/schemas/ReasoningEffort' - description: 'Default reasoning effort when the client enables reasoning without specifying effort. Maps to `reasoning.effort` in chat requests. When `"none"`, prefer omitting effort unless the user explicitly disables reasoning.' default_enabled: description: 'Default reasoning enabled state when the client does not set `reasoning.enabled`.' type: 'boolean' mandatory: description: 'When true, reasoning cannot be disabled and effort "none" is rejected.' type: 'boolean' supported_efforts: description: 'Allowed reasoning effort values for this model, in descending effort order (highest first). Null means no allowlist — all gateway effort values are accepted.' items: $ref: '#/components/schemas/ReasoningEffort' type: - 'array' - 'null' supports_max_tokens: description: 'Present and `true` when the model accepts `reasoning.max_tokens` in requests (Anthropic-style) instead of or in addition to `reasoning.effort`. Omitted otherwise.' type: 'boolean' required: - 'mandatory' type: 'object' ModelResponse: description: 'Single model response' example: data: architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' canonical_slug: 'openai/gpt-4' context_length: 8192 created: 1692901234 default_parameters: null description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' expiration_date: null id: 'openai/gpt-4' knowledge_cutoff: null links: details: '/api/v1/models/openai/gpt-4/endpoints' name: 'GPT-4' per_request_limits: null pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supported_voices: null top_provider: context_length: 8192 is_moderated: true max_completion_tokens: 4096 properties: data: $ref: '#/components/schemas/Model' required: - 'data' type: 'object' ModelsCountResponse: description: 'Model count data' example: data: count: 150 properties: data: description: 'Model count data' example: count: 150 properties: count: description: 'Total number of available models' example: 150 type: 'integer' required: - 'count' type: 'object' required: - 'data' type: 'object' ModelsListResponse: description: 'List of available models' example: data: - architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' canonical_slug: 'openai/gpt-4' context_length: 8192 created: 1692901234 default_parameters: null description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' expiration_date: null id: 'openai/gpt-4' knowledge_cutoff: null links: details: '/api/v1/models/openai/gpt-4/endpoints' name: 'GPT-4' per_request_limits: null pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' - 'frequency_penalty' - 'presence_penalty' supported_voices: null top_provider: context_length: 8192 is_moderated: true max_completion_tokens: 4096 links: next: '/api/v1/models?offset=500&limit=500' total_count: 150 properties: data: $ref: '#/components/schemas/ModelsListResponseData' links: description: 'Pagination links' properties: next: description: 'URL for the next page of results, or null if this is the last page' example: '/api/v1/models?offset=500&limit=500' type: - 'string' - 'null' required: - 'next' type: 'object' total_count: description: 'Total number of models matching the query' example: 150 type: 'integer' required: - 'data' - 'total_count' - 'links' type: 'object' ModelsListResponseData: description: 'List of available models' example: - architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' canonical_slug: 'openai/gpt-4' context_length: 8192 created: 1692901234 default_parameters: null description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' expiration_date: null id: 'openai/gpt-4' knowledge_cutoff: null links: details: '/api/v1/models/openai/gpt-4/endpoints' name: 'GPT-4' per_request_limits: null pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supported_voices: null top_provider: context_length: 8192 is_moderated: true max_completion_tokens: 4096 items: $ref: '#/components/schemas/Model' type: 'array' ModerationPlugin: example: id: 'moderation' properties: id: enum: - 'moderation' type: 'string' required: - 'id' type: 'object' MultimodalMedia: example: data: 'data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAA...' format: 'wav' properties: data: type: 'string' format: type: 'string' required: - 'data' type: 'object' NamespaceFunctionTool: description: 'A function tool grouped inside a namespace tool' example: name: 'spawn_agent' type: 'function' properties: allowed_callers: items: enum: - 'direct' - 'programmatic' type: 'string' type: - 'array' - 'null' defer_loading: type: 'boolean' description: type: - 'string' - 'null' name: type: 'string' output_schema: additionalProperties: {} type: - 'object' - 'null' parameters: additionalProperties: {} type: - 'object' - 'null' strict: type: - 'boolean' - 'null' type: enum: - 'function' type: 'string' required: - 'type' - 'name' type: 'object' NamespaceTool: description: 'Groups function/custom tools under a shared namespace' example: description: 'Tools for spawning and managing sub-agents.' name: 'multi_agent_v1' tools: - name: 'spawn_agent' type: 'function' type: 'namespace' properties: description: type: 'string' name: type: 'string' tools: items: anyOf: - $ref: '#/components/schemas/NamespaceFunctionTool' - $ref: '#/components/schemas/CustomTool' type: 'array' type: enum: - 'namespace' type: 'string' required: - 'type' - 'name' - 'description' - 'tools' type: 'object' NotFoundResponse: description: 'Not Found - Resource does not exist' example: error: code: 404 message: 'Resource not found' properties: error: $ref: '#/components/schemas/NotFoundResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' NotFoundResponseErrorData: description: 'Error data for NotFoundResponse' example: code: 404 message: 'Resource not found' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' ObservabilityArizeDestination: example: api_key_hashes: null config: apiKey: 'arize_...AbCd' baseUrl: 'https://otlp.arize.com' modelId: 'openrouter-prod' spaceKey: 'space_...EfGh' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Arize' privacy_mode: false sampling_rate: 1 type: 'arize' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: minLength: 1 type: 'string' baseUrl: default: 'https://otlp.arize.com' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' modelId: description: 'The name of the tracing project in Arize AX' minLength: 1 type: 'string' spaceKey: minLength: 1 type: 'string' required: - 'apiKey' - 'spaceKey' - 'modelId' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'arize' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityBraintrustDestination: example: api_key_hashes: null config: apiKey: 'sk-...AbCd' baseUrl: 'https://api.braintrust.dev' projectId: 'proj_...' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Braintrust' privacy_mode: false sampling_rate: 1 type: 'braintrust' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: minLength: 1 type: 'string' baseUrl: default: 'https://api.braintrust.dev' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' projectId: minLength: 1 type: 'string' required: - 'apiKey' - 'projectId' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'braintrust' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityClickhouseDestination: example: api_key_hashes: null config: database: 'analytics' host: 'https://clickhouse.example.com:8123' password: '********' table: 'OPENROUTER_TRACES' username: 'default' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production ClickHouse' privacy_mode: false sampling_rate: 1 type: 'clickhouse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: database: minLength: 1 type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' host: minLength: 1 type: 'string' password: minLength: 1 type: 'string' table: default: 'OPENROUTER_TRACES' type: 'string' username: description: 'If you have not set a specific username in ClickHouse, simply type in ''default'' below.' minLength: 1 type: 'string' required: - 'host' - 'database' - 'username' - 'password' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'clickhouse' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityDatadogDestination: example: api_key_hashes: null config: apiKey: '************...AbCd' mlApp: 'my-llm-app' url: 'https://api.us5.datadoghq.com' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Datadog' privacy_mode: false sampling_rate: 1 type: 'datadog' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: description: 'Datadog API key must have LLM Observability permissions. Create at: ' minLength: 1 type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' mlApp: description: 'Name to identify your application in Datadog LLM Observability' minLength: 1 type: 'string' url: default: 'https://api.us5.datadoghq.com' description: 'Datadog API URL for your region (e.g., https://api.datadoghq.com, https://api.us3.datadoghq.com, https://api.datadoghq.eu)' type: 'string' required: - 'apiKey' - 'mlApp' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'datadog' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityDestination: discriminator: mapping: arize: '#/components/schemas/ObservabilityArizeDestination' braintrust: '#/components/schemas/ObservabilityBraintrustDestination' clickhouse: '#/components/schemas/ObservabilityClickhouseDestination' datadog: '#/components/schemas/ObservabilityDatadogDestination' grafana: '#/components/schemas/ObservabilityGrafanaDestination' langfuse: '#/components/schemas/ObservabilityLangfuseDestination' langsmith: '#/components/schemas/ObservabilityLangsmithDestination' newrelic: '#/components/schemas/ObservabilityNewrelicDestination' opik: '#/components/schemas/ObservabilityOpikDestination' otel-collector: '#/components/schemas/ObservabilityOtelCollectorDestination' posthog: '#/components/schemas/ObservabilityPosthogDestination' ramp: '#/components/schemas/ObservabilityRampDestination' s3: '#/components/schemas/ObservabilityS3Destination' sentry: '#/components/schemas/ObservabilitySentryDestination' snowflake: '#/components/schemas/ObservabilitySnowflakeDestination' weave: '#/components/schemas/ObservabilityWeaveDestination' webhook: '#/components/schemas/ObservabilityWebhookDestination' propertyName: 'type' example: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' oneOf: - $ref: '#/components/schemas/ObservabilityArizeDestination' - $ref: '#/components/schemas/ObservabilityBraintrustDestination' - $ref: '#/components/schemas/ObservabilityClickhouseDestination' - $ref: '#/components/schemas/ObservabilityDatadogDestination' - $ref: '#/components/schemas/ObservabilityGrafanaDestination' - $ref: '#/components/schemas/ObservabilityLangfuseDestination' - $ref: '#/components/schemas/ObservabilityLangsmithDestination' - $ref: '#/components/schemas/ObservabilityNewrelicDestination' - $ref: '#/components/schemas/ObservabilityOpikDestination' - $ref: '#/components/schemas/ObservabilityOtelCollectorDestination' - $ref: '#/components/schemas/ObservabilityPosthogDestination' - $ref: '#/components/schemas/ObservabilityRampDestination' - $ref: '#/components/schemas/ObservabilityS3Destination' - $ref: '#/components/schemas/ObservabilitySentryDestination' - $ref: '#/components/schemas/ObservabilitySnowflakeDestination' - $ref: '#/components/schemas/ObservabilityWeaveDestination' - $ref: '#/components/schemas/ObservabilityWebhookDestination' ObservabilityFilterRuleGroup: example: logic: 'and' rules: - field: 'model' operator: 'equals' value: 'openai/gpt-4o' properties: logic: default: 'and' enum: - 'and' - 'or' type: 'string' rules: items: properties: field: enum: - 'model' - 'provider' - 'session_id' - 'user_id' - 'api_key_name' - 'finish_reason' - 'input' - 'output' - 'total_cost' - 'total_tokens' - 'prompt_tokens' - 'completion_tokens' type: 'string' operator: enum: - 'equals' - 'not_equals' - 'contains' - 'not_contains' - 'regex' - 'starts_with' - 'ends_with' - 'gt' - 'lt' - 'gte' - 'lte' - 'exists' - 'not_exists' type: 'string' value: anyOf: - type: 'string' - type: 'number' required: - 'field' - 'operator' type: 'object' type: 'array' required: - 'rules' type: 'object' ObservabilityFilterRulesConfig: description: 'Optional structured filter rules controlling which events are forwarded.' example: null properties: enabled: default: true type: 'boolean' groups: items: $ref: '#/components/schemas/ObservabilityFilterRuleGroup' type: 'array' required: - 'groups' type: - 'object' - 'null' ObservabilityFilterRulesConfigNullable: description: 'Optional structured filter rules controlling which events are forwarded.' example: null properties: enabled: default: true type: 'boolean' groups: items: $ref: '#/components/schemas/ObservabilityFilterRuleGroup' type: 'array' required: - 'groups' type: - 'object' - 'null' ObservabilityGrafanaDestination: example: api_key_hashes: null config: apiKey: 'glc_...AbCd' baseUrl: 'https://otlp-gateway-prod-us-west-0.grafana.net' instanceId: '123456' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Grafana' privacy_mode: false sampling_rate: 1 type: 'grafana' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: minLength: 1 type: 'string' baseUrl: default: 'https://otlp-gateway-prod-us-west-0.grafana.net' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' instanceId: minLength: 1 type: 'string' required: - 'apiKey' - 'instanceId' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'grafana' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityLangfuseDestination: example: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: baseUrl: default: 'https://us.cloud.langfuse.com' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' publicKey: minLength: 1 type: 'string' secretKey: minLength: 1 type: 'string' required: - 'secretKey' - 'publicKey' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'langfuse' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityLangsmithDestination: example: api_key_hashes: null config: apiKey: 'lsv2_...AbCd' endpoint: 'https://api.smith.langchain.com' project: 'main' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production LangSmith' privacy_mode: false sampling_rate: 1 type: 'langsmith' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: minLength: 1 type: 'string' endpoint: default: 'https://api.smith.langchain.com' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' project: default: 'main' description: 'The name for this project, such as pr-openrouter-demo. Defaults to "main" if not set.' minLength: 1 type: 'string' workspaceId: description: 'Required for org-scoped API keys. Find this in your LangSmith workspace settings.' type: 'string' required: - 'apiKey' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'langsmith' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityNewrelicDestination: example: api_key_hashes: null config: licenseKey: '****...AbCd' region: 'us' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production New Relic' privacy_mode: false sampling_rate: 1 type: 'newrelic' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' licenseKey: minLength: 1 type: 'string' region: default: 'us' enum: - 'us' - 'eu' type: 'string' required: - 'licenseKey' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'newrelic' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityOpikDestination: example: api_key_hashes: null config: apiKey: '****...AbCd' projectName: 'openrouter-prod' workspace: 'my-workspace' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Opik' privacy_mode: false sampling_rate: 1 type: 'opik' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: minLength: 1 type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' projectName: minLength: 1 type: 'string' workspace: minLength: 1 type: 'string' required: - 'apiKey' - 'workspace' - 'projectName' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'opik' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityOtelCollectorDestination: example: api_key_hashes: null config: endpoint: 'https://otel.example.com:4318' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production OTel Collector' privacy_mode: false sampling_rate: 1 type: 'otel-collector' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: endpoint: type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers as a JSON object. For Axiom, use {"Authorization": "Bearer xaat-xxx", "X-Axiom-Dataset": "your-dataset"}' type: 'object' required: - 'endpoint' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'otel-collector' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityPosthogDestination: example: api_key_hashes: null config: apiKey: 'phc_...AbCd' endpoint: 'https://us.i.posthog.com' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production PostHog' privacy_mode: false sampling_rate: 1 type: 'posthog' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: minLength: 1 type: 'string' endpoint: default: 'https://us.i.posthog.com' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' required: - 'apiKey' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'posthog' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityRampDestination: example: api_key_hashes: null config: apiKey: 'rmp_...AbCd' baseUrl: 'https://api.ramp.com/developer/v1/ai-usage/openrouter' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Ramp' privacy_mode: false sampling_rate: 1 type: 'ramp' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: description: 'Generate this in your Ramp integration settings.' minLength: 1 type: 'string' baseUrl: default: 'https://api.ramp.com/developer/v1/ai-usage/openrouter' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to Ramp.' type: 'object' required: - 'apiKey' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'ramp' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityS3Destination: example: api_key_hashes: null config: accessKeyId: 'AKIA...AbCd' bucketName: 'openrouter-traces' secretAccessKey: '****...EfGh' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production S3' privacy_mode: false sampling_rate: 1 type: 's3' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: accessKeyId: minLength: 1 type: 'string' bucketName: minLength: 1 type: 'string' endpoint: description: 'Only for S3-compatible services like Cloudflare R2 (https://account-id.r2.cloudflarestorage.com) or MinIO. Leave blank for standard AWS S3.' format: 'uri' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' pathTemplate: default: '{prefix}/{date}' description: 'Template for S3 object path. The filename ({traceId}-{timestamp}.json) is automatically appended. Available variables: {prefix}, {date}, {year}, {month}, {day}, {apiKeyName}' type: 'string' prefix: default: 'openrouter-traces' type: 'string' region: type: 'string' secretAccessKey: minLength: 1 type: 'string' sessionToken: type: 'string' required: - 'bucketName' - 'accessKeyId' - 'secretAccessKey' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 's3' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilitySentryDestination: example: api_key_hashes: null config: dsn: 'https://abc123@o0.ingest.sentry.io/0' otlpEndpoint: 'https://o0.ingest.sentry.io/api/0/otlp' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Sentry' privacy_mode: false sampling_rate: 1 type: 'sentry' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: dsn: minLength: 1 pattern: '^https:\/\/([^:@]+)(?::[^@]*)?@([^/]+)(?:\/[^/]+)*\/(\d+)\/?$' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' otlpEndpoint: type: 'string' required: - 'otlpEndpoint' - 'dsn' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'sentry' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilitySnowflakeDestination: example: api_key_hashes: null config: account: 'xy12345.us-east-1' token: '****...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Snowflake' privacy_mode: false sampling_rate: 1 type: 'snowflake' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: account: minLength: 1 type: 'string' database: default: 'SNOWFLAKE_LEARNING_DB' type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' schema: default: 'PUBLIC' type: 'string' table: default: 'OPENROUTER_TRACES' type: 'string' token: minLength: 1 type: 'string' warehouse: default: 'COMPUTE_WH' type: 'string' required: - 'account' - 'token' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'snowflake' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityWeaveDestination: example: api_key_hashes: null config: apiKey: '****...AbCd' baseUrl: 'https://trace.wandb.ai' entity: 'my-team' project: 'openrouter-prod' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Weave' privacy_mode: false sampling_rate: 1 type: 'weave' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: apiKey: minLength: 1 type: 'string' baseUrl: default: 'https://trace.wandb.ai' type: 'string' entity: minLength: 1 type: 'string' headers: additionalProperties: type: 'string' description: 'Custom HTTP headers to include in requests to this destination.' type: 'object' project: minLength: 1 type: 'string' required: - 'apiKey' - 'entity' - 'project' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'weave' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' ObservabilityWebhookDestination: example: api_key_hashes: null config: url: 'https://example.com/openrouter-events' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Webhook' privacy_mode: false sampling_rate: 1 type: 'webhook' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys.' example: null items: type: 'string' type: - 'array' - 'null' config: properties: headers: additionalProperties: type: 'string' type: 'object' method: default: 'POST' enum: - 'POST' - 'PUT' type: 'string' url: type: 'string' required: - 'url' type: 'object' created_at: description: 'ISO timestamp of when the destination was created.' example: '2025-08-24T10:30:00Z' type: 'string' enabled: description: 'Whether this destination is currently enabled.' example: true type: 'boolean' filter_rules: $ref: '#/components/schemas/ObservabilityFilterRulesConfig' id: description: 'Stable public identifier for this destination.' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: - 'string' - 'null' privacy_mode: description: 'When true, request/response bodies are not forwarded to this destination — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: enum: - 'webhook' type: 'string' updated_at: description: 'ISO timestamp of when the destination was last updated.' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace this destination belongs to.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'name' - 'enabled' - 'privacy_mode' - 'sampling_rate' - 'api_key_hashes' - 'filter_rules' - 'created_at' - 'updated_at' - 'type' - 'config' type: 'object' OpenAIFile: description: 'A stored file in OpenAI''s Files API shape.' example: _shape: 'openai' bytes: 1024000 created_at: 1735689600 filename: 'document.pdf' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' object: 'file' purpose: 'user_data' status: 'processed' properties: _shape: enum: - 'openai' type: 'string' bytes: type: 'integer' created_at: type: 'integer' filename: type: 'string' id: type: 'string' object: enum: - 'file' type: 'string' purpose: enum: - 'assistants' - 'batch' - 'fine-tune' - 'vision' - 'user_data' - 'evals' - 'assistants_output' - 'batch_output' - 'fine-tune-results' type: 'string' status: enum: - 'processed' type: 'string' required: - '_shape' - 'id' - 'object' - 'bytes' - 'created_at' - 'filename' - 'purpose' - 'status' type: 'object' OpenAIFileDeleted: description: 'Deletion result in OpenAI''s shape.' example: _shape: 'openai' deleted: true id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' object: 'file' properties: _shape: enum: - 'openai' type: 'string' deleted: const: true type: 'boolean' id: type: 'string' object: enum: - 'file' type: 'string' required: - '_shape' - 'id' - 'object' - 'deleted' type: 'object' OpenAIFileList: description: 'A page of files in OpenAI''s shape.' example: _shape: 'openai' data: [] first_id: null has_more: false last_id: null object: 'list' properties: _shape: enum: - 'openai' type: 'string' data: items: $ref: '#/components/schemas/OpenAIFile' type: 'array' first_id: type: - 'string' - 'null' has_more: type: 'boolean' last_id: type: - 'string' - 'null' object: enum: - 'list' type: 'string' required: - '_shape' - 'object' - 'data' - 'has_more' - 'first_id' - 'last_id' type: 'object' OpenAIResponseCustomToolCall: example: call_id: 'call-abc123' id: 'ctc-abc123' input: "*** Begin Patch\n*** End Patch" name: 'apply_patch' type: 'custom_tool_call' properties: call_id: type: 'string' id: type: 'string' input: type: 'string' name: type: 'string' namespace: description: 'Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)' type: 'string' type: enum: - 'custom_tool_call' type: 'string' required: - 'type' - 'call_id' - 'name' - 'input' type: 'object' OpenAIResponseCustomToolCallOutput: example: call_id: 'call-abc123' output: 'patch applied successfully' type: 'custom_tool_call_output' properties: call_id: type: 'string' id: type: 'string' output: anyOf: - type: 'string' - items: discriminator: mapping: input_file: '#/components/schemas/InputFile' input_image: '#/components/schemas/InputImage' input_text: '#/components/schemas/InputText' propertyName: 'type' oneOf: - $ref: '#/components/schemas/InputText' - $ref: '#/components/schemas/InputImage' - $ref: '#/components/schemas/InputFile' type: 'array' type: enum: - 'custom_tool_call_output' type: 'string' required: - 'type' - 'call_id' - 'output' type: 'object' OpenAIResponseFunctionToolCall: example: arguments: '{"location":"San Francisco"}' call_id: 'call-abc123' id: 'fc-abc123' name: 'get_weather' status: 'completed' type: 'function_call' properties: arguments: type: 'string' call_id: type: 'string' id: type: 'string' name: type: 'string' namespace: description: 'Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)' type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'function_call' type: 'string' required: - 'type' - 'call_id' - 'name' - 'arguments' type: 'object' OpenAIResponseFunctionToolCallOutput: example: call_id: 'call-abc123' output: '{"temperature":72,"conditions":"sunny"}' type: 'function_call_output' properties: call_id: type: 'string' id: type: - 'string' - 'null' output: anyOf: - type: 'string' - items: discriminator: mapping: input_file: '#/components/schemas/InputFile' input_image: '#/components/schemas/InputImage' input_text: '#/components/schemas/InputText' propertyName: 'type' oneOf: - $ref: '#/components/schemas/InputText' - $ref: '#/components/schemas/InputImage' - $ref: '#/components/schemas/InputFile' type: 'array' status: anyOf: - $ref: '#/components/schemas/ToolCallStatus' - type: 'null' type: enum: - 'function_call_output' type: 'string' required: - 'type' - 'call_id' - 'output' type: 'object' OpenAIResponseInputMessageItem: example: content: - text: 'Hello, how are you?' type: 'input_text' id: 'msg-abc123' role: 'user' type: 'message' properties: content: items: discriminator: mapping: input_audio: '#/components/schemas/InputAudio' input_file: '#/components/schemas/InputFile' input_image: '#/components/schemas/InputImage' input_text: '#/components/schemas/InputText' propertyName: 'type' oneOf: - $ref: '#/components/schemas/InputText' - $ref: '#/components/schemas/InputImage' - $ref: '#/components/schemas/InputFile' - $ref: '#/components/schemas/InputAudio' type: 'array' id: type: 'string' role: anyOf: - enum: - 'user' type: 'string' - enum: - 'system' type: 'string' - enum: - 'developer' type: 'string' type: enum: - 'message' type: 'string' required: - 'id' - 'role' - 'content' type: 'object' OpenAIResponsesAnnotation: anyOf: - $ref: '#/components/schemas/FileCitation' - $ref: '#/components/schemas/URLCitation' - $ref: '#/components/schemas/FilePath' example: file_id: 'file-abc123' filename: 'research_paper.pdf' index: 0 type: 'file_citation' OpenAIResponsesImageGenCallCompleted: example: item_id: 'ig_abc123' output_index: 0 sequence_number: 4 type: 'response.image_generation_call.completed' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.image_generation_call.completed' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'sequence_number' type: 'object' OpenAIResponsesImageGenCallGenerating: example: item_id: 'ig_abc123' output_index: 0 sequence_number: 2 type: 'response.image_generation_call.generating' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.image_generation_call.generating' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'sequence_number' type: 'object' OpenAIResponsesImageGenCallInProgress: example: item_id: 'ig_abc123' output_index: 0 sequence_number: 1 type: 'response.image_generation_call.in_progress' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.image_generation_call.in_progress' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'sequence_number' type: 'object' OpenAIResponsesImageGenCallPartialImage: example: item_id: 'ig_abc123' output_index: 0 partial_image_b64: 'iVBORw0KGgo...' partial_image_index: 0 sequence_number: 3 type: 'response.image_generation_call.partial_image' properties: item_id: type: 'string' output_index: type: 'integer' partial_image_b64: type: 'string' partial_image_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.image_generation_call.partial_image' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'sequence_number' - 'partial_image_b64' - 'partial_image_index' type: 'object' OpenAIResponsesRefusalContent: example: refusal: 'I''m sorry, I cannot assist with that request' type: 'refusal' properties: refusal: type: 'string' type: enum: - 'refusal' type: 'string' required: - 'type' - 'refusal' type: 'object' OpenAIResponsesResponseStatus: enum: - 'completed' - 'incomplete' - 'in_progress' - 'failed' - 'cancelled' - 'queued' example: 'completed' type: 'string' OpenAIResponsesSearchCompleted: example: item_id: 'ws_abc123' output_index: 0 sequence_number: 5 type: 'response.web_search_call.completed' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.web_search_call.completed' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'sequence_number' type: 'object' OpenAIResponsesToolChoice: anyOf: - enum: - 'auto' type: 'string' - enum: - 'none' type: 'string' - enum: - 'required' type: 'string' - properties: name: type: 'string' type: enum: - 'function' type: 'string' required: - 'type' - 'name' type: 'object' - properties: type: anyOf: - enum: - 'web_search_preview_2025_03_11' type: 'string' - enum: - 'web_search_preview' type: 'string' required: - 'type' type: 'object' - $ref: '#/components/schemas/ToolChoiceAllowed' - properties: type: enum: - 'apply_patch' type: 'string' required: - 'type' type: 'object' - properties: type: enum: - 'shell' type: 'string' required: - 'type' type: 'object' example: 'auto' OpenAIResponsesTruncation: enum: - 'auto' - 'disabled' - null example: 'auto' type: - 'string' - 'null' OpenAIResponsesUsage: example: input_tokens: 100 input_tokens_details: cached_tokens: 0 output_tokens: 50 output_tokens_details: reasoning_tokens: 0 total_tokens: 150 properties: input_tokens: type: 'integer' input_tokens_details: properties: cache_write_tokens: type: - 'integer' - 'null' cached_tokens: type: 'integer' required: - 'cached_tokens' type: 'object' output_tokens: type: 'integer' output_tokens_details: properties: reasoning_tokens: type: 'integer' required: - 'reasoning_tokens' type: 'object' total_tokens: type: 'integer' required: - 'input_tokens' - 'input_tokens_details' - 'output_tokens' - 'output_tokens_details' - 'total_tokens' type: 'object' OpenAIResponsesWebSearchCallInProgress: example: item_id: 'ws_abc123' output_index: 0 sequence_number: 1 type: 'response.web_search_call.in_progress' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.web_search_call.in_progress' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'sequence_number' type: 'object' OpenAIResponsesWebSearchCallSearching: example: item_id: 'ws_abc123' output_index: 0 sequence_number: 2 type: 'response.web_search_call.searching' properties: item_id: type: 'string' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.web_search_call.searching' type: 'string' required: - 'type' - 'item_id' - 'output_index' - 'sequence_number' type: 'object' OpenResponsesCreatedEvent: allOf: - $ref: '#/components/schemas/CreatedEvent' - properties: response: $ref: '#/components/schemas/OpenResponsesResult' type: 'object' description: 'Event emitted when a response is created' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'in_progress' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 0 type: 'response.created' OpenResponsesInProgressEvent: allOf: - $ref: '#/components/schemas/InProgressEvent' - properties: response: $ref: '#/components/schemas/OpenResponsesResult' type: 'object' description: 'Event emitted when a response is in progress' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'in_progress' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 1 type: 'response.in_progress' OpenResponsesLogProbs: description: 'Log probability information for a token' example: logprob: -0.1 token: 'world' top_logprobs: - logprob: -0.5 token: 'hello' properties: bytes: items: type: 'integer' type: 'array' logprob: format: 'double' type: 'number' token: type: 'string' top_logprobs: items: $ref: '#/components/schemas/OpenResponsesTopLogprobs' type: 'array' required: - 'logprob' - 'token' type: 'object' OpenResponsesResult: allOf: - $ref: '#/components/schemas/BaseResponsesResult' - properties: error_type: $ref: '#/components/schemas/ApiErrorType' openrouter_metadata: $ref: '#/components/schemas/OpenRouterMetadata' output: items: $ref: '#/components/schemas/OutputItems' type: 'array' service_tier: type: - 'string' - 'null' text: $ref: '#/components/schemas/TextExtendedConfig' usage: $ref: '#/components/schemas/Usage' type: 'object' description: 'Complete non-streaming response from the Responses API' example: completed_at: 1704067210 created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: - content: - annotations: [] text: 'Hello! How can I help you today?' type: 'output_text' id: 'msg-abc123' role: 'assistant' status: 'completed' type: 'message' parallel_tool_calls: true presence_penalty: null status: 'completed' temperature: null tool_choice: 'auto' tools: [] top_p: null usage: input_tokens: 10 input_tokens_details: cached_tokens: 0 output_tokens: 25 output_tokens_details: reasoning_tokens: 0 total_tokens: 35 OpenResponsesTopLogprobs: description: 'Alternative token with its log probability' example: logprob: -0.5 token: 'hello' properties: bytes: items: type: 'integer' type: 'array' logprob: format: 'double' type: 'number' token: type: 'string' type: 'object' OpenRouterFile: description: 'A stored file in the OpenRouter superset shape: Anthropic-shaped, plus OpenRouter-only fields.' example: _shape: 'openrouter' created_at: '2025-01-01T00:00:00Z' downloadable: false filename: 'document.pdf' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' mime_type: 'application/pdf' size_bytes: 1024000 type: 'file' properties: _shape: enum: - 'openrouter' type: 'string' created_at: type: 'string' downloadable: type: 'boolean' filename: type: 'string' id: type: 'string' mime_type: type: 'string' size_bytes: type: 'integer' type: enum: - 'file' type: 'string' required: - '_shape' - 'id' - 'type' - 'filename' - 'mime_type' - 'size_bytes' - 'created_at' - 'downloadable' type: 'object' OpenRouterFileDeleted: description: 'Deletion result in the OpenRouter shape.' example: _shape: 'openrouter' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'file_deleted' properties: _shape: enum: - 'openrouter' type: 'string' id: type: 'string' type: enum: - 'file_deleted' type: 'string' required: - '_shape' - 'id' - 'type' type: 'object' OpenRouterFileList: description: 'A page of files in the OpenRouter shape.' example: _shape: 'openrouter' cursor: null data: [] first_id: null has_more: false last_id: null properties: _shape: enum: - 'openrouter' type: 'string' cursor: description: 'Opaque cursor for the next page; null when there are no more results.' type: - 'string' - 'null' data: items: $ref: '#/components/schemas/OpenRouterFile' type: 'array' first_id: type: - 'string' - 'null' has_more: type: 'boolean' last_id: type: - 'string' - 'null' required: - '_shape' - 'data' - 'has_more' - 'first_id' - 'last_id' - 'cursor' type: 'object' OpenRouterMetadata: example: attempt: 1 endpoints: available: - model: 'openai/gpt-4o' provider: 'OpenAI' selected: true total: 1 is_byok: false region: 'iad' requested: 'openai/gpt-4o' strategy: 'direct' summary: 'available=1, selected=OpenAI' properties: attempt: type: 'integer' attempts: items: $ref: '#/components/schemas/RouterAttempt' type: 'array' endpoints: $ref: '#/components/schemas/EndpointsMetadata' is_byok: type: 'boolean' params: $ref: '#/components/schemas/RouterParams' pipeline: items: $ref: '#/components/schemas/PipelineStage' type: 'array' region: type: - 'string' - 'null' requested: type: 'string' strategy: $ref: '#/components/schemas/RoutingStrategy' summary: type: 'string' required: - 'requested' - 'strategy' - 'region' - 'summary' - 'attempt' - 'is_byok' - 'endpoints' type: 'object' OpenRouterWebSearchServerTool: description: 'OpenRouter built-in server tool: searches the web for current information' example: parameters: max_results: 5 type: 'openrouter:web_search' properties: parameters: $ref: '#/components/schemas/WebSearchConfig' type: enum: - 'openrouter:web_search' type: 'string' required: - 'type' type: 'object' ORAnthropicContentBlock: discriminator: mapping: advisor_tool_result: '#/components/schemas/AnthropicAdvisorToolResult' bash_code_execution_tool_result: '#/components/schemas/AnthropicBashCodeExecutionToolResult' code_execution_tool_result: '#/components/schemas/AnthropicCodeExecutionToolResult' compaction: '#/components/schemas/AnthropicCompactionBlock' container_upload: '#/components/schemas/AnthropicContainerUpload' redacted_thinking: '#/components/schemas/AnthropicRedactedThinkingBlock' server_tool_use: '#/components/schemas/ORAnthropicServerToolUseBlock' text: '#/components/schemas/AnthropicTextBlock' text_editor_code_execution_tool_result: '#/components/schemas/AnthropicTextEditorCodeExecutionToolResult' thinking: '#/components/schemas/AnthropicThinkingBlock' tool_search_tool_result: '#/components/schemas/AnthropicToolSearchToolResult' tool_use: '#/components/schemas/AnthropicToolUseBlock' web_fetch_tool_result: '#/components/schemas/AnthropicWebFetchToolResult' web_search_tool_result: '#/components/schemas/AnthropicWebSearchToolResult' propertyName: 'type' example: citations: null text: 'Hello, world!' type: 'text' oneOf: - $ref: '#/components/schemas/AnthropicTextBlock' - $ref: '#/components/schemas/AnthropicToolUseBlock' - $ref: '#/components/schemas/AnthropicThinkingBlock' - $ref: '#/components/schemas/AnthropicRedactedThinkingBlock' - $ref: '#/components/schemas/ORAnthropicServerToolUseBlock' - $ref: '#/components/schemas/AnthropicWebSearchToolResult' - $ref: '#/components/schemas/AnthropicWebFetchToolResult' - $ref: '#/components/schemas/AnthropicCodeExecutionToolResult' - $ref: '#/components/schemas/AnthropicBashCodeExecutionToolResult' - $ref: '#/components/schemas/AnthropicTextEditorCodeExecutionToolResult' - $ref: '#/components/schemas/AnthropicToolSearchToolResult' - $ref: '#/components/schemas/AnthropicContainerUpload' - $ref: '#/components/schemas/AnthropicCompactionBlock' - $ref: '#/components/schemas/AnthropicAdvisorToolResult' ORAnthropicNullableCaller: discriminator: mapping: code_execution_20250825: '#/components/schemas/AnthropicCodeExecution20250825Caller' code_execution_20260120: '#/components/schemas/AnthropicCodeExecution20260120Caller' direct: '#/components/schemas/AnthropicDirectCaller' propertyName: 'type' example: type: 'direct' oneOf: - $ref: '#/components/schemas/AnthropicDirectCaller' - $ref: '#/components/schemas/AnthropicCodeExecution20250825Caller' - $ref: '#/components/schemas/AnthropicCodeExecution20260120Caller' - type: 'null' ORAnthropicServerToolUseBlock: example: caller: type: 'direct' id: 'srvtoolu_01abc' input: {} name: 'advisor' type: 'server_tool_use' properties: caller: $ref: '#/components/schemas/ORAnthropicNullableCaller' id: type: 'string' input: {} name: type: 'string' type: enum: - 'server_tool_use' type: 'string' required: - 'type' - 'id' - 'name' type: 'object' ORAnthropicStopReason: enum: - 'end_turn' - 'max_tokens' - 'model_context_window_exceeded' - 'stop_sequence' - 'tool_use' - 'pause_turn' - 'refusal' - 'compaction' - null example: 'end_turn' type: - 'string' - 'null' OutputAdvisorServerToolItem: description: 'An openrouter:advisor server tool output item' example: id: 'st_tmp_abc123' status: 'completed' type: 'openrouter:advisor' properties: advice: description: 'The advisor model''s response (the advice text returned to the executor).' type: 'string' error: description: 'Error message when the advisor call did not produce advice.' type: 'string' id: type: 'string' instance_name: description: 'Provider-safe function name of the specific advisor instance that produced this item (e.g. `openrouter_advisor__1`). Present only when more than one advisor tool is configured; omitted for the default single advisor. Echo this field back unchanged so the advisor''s cross-request memory stays namespaced to the correct instance. This identity is positional: it is derived from the index of the advisor entry in the request `tools` array, so clients must keep the order of advisor tool entries stable across requests in a conversation. Reordering or inserting advisor entries shifts these names and causes each advisor''s cross-request memory to be attributed to the wrong instance.' example: 'openrouter_advisor__1' type: 'string' model: description: 'Slug of the advisor model that was consulted.' type: 'string' prompt: description: 'The prompt the executor sent to the advisor.' type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:advisor' type: 'string' required: - 'status' - 'type' type: 'object' OutputApplyPatchCallItem: description: 'A native `apply_patch_call` output item matching OpenAI''s Responses API shape. Emitted when the client requested the `apply_patch` shorthand.' example: call_id: 'call_abc123' id: 'apc_abc123' operation: diff: "@@ function main() {\n+ console.log(\"hi\");\n }" path: '/src/main.ts' type: 'update_file' status: 'completed' type: 'apply_patch_call' properties: call_id: type: 'string' id: type: 'string' operation: $ref: '#/components/schemas/ApplyPatchCallOperation' status: $ref: '#/components/schemas/ApplyPatchCallStatus' type: enum: - 'apply_patch_call' type: 'string' required: - 'type' - 'id' - 'call_id' - 'status' - 'operation' type: 'object' OutputApplyPatchServerToolItem: description: 'An openrouter:apply_patch server tool output item. The turn halts when validation succeeds so the client can apply the patch and echo an `apply_patch_call_output` on the next turn.' example: call_id: 'call_abc123' id: 'apc_abc123' operation: diff: "@@ function main() {\n+ console.log(\"hi\");\n }" path: '/src/main.ts' type: 'update_file' status: 'completed' type: 'openrouter:apply_patch' properties: call_id: type: 'string' id: type: 'string' operation: $ref: '#/components/schemas/ApplyPatchCallOperation' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:apply_patch' type: 'string' required: - 'status' - 'type' type: 'object' OutputBashServerToolItem: description: 'An openrouter:bash server tool output item' example: command: 'ls -la' exitCode: 0 id: 'bash_tmp_abc123' status: 'completed' stdout: "total 0\n" type: 'openrouter:bash' properties: arguments: description: 'The raw tool-call arguments string as emitted by the model.' type: 'string' call_id: description: 'The model-generated tool call id from the originating turn.' type: 'string' command: type: 'string' exitCode: type: 'integer' id: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' stderr: type: 'string' stdout: type: 'string' type: enum: - 'openrouter:bash' type: 'string' required: - 'status' - 'type' type: 'object' OutputBrowserUseServerToolItem: description: 'An openrouter:browser_use server tool output item' example: action: 'screenshot' id: 'bu_tmp_abc123' status: 'completed' type: 'openrouter:browser_use' properties: action: type: 'string' id: type: 'string' screenshotB64: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:browser_use' type: 'string' required: - 'status' - 'type' type: 'object' OutputCodeInterpreterCallItem: allOf: - $ref: '#/components/schemas/CodeInterpreterCallItem' - properties: {} type: 'object' description: 'A code interpreter execution call with outputs' example: code: 'print("hello")' container_id: 'ctr-xyz789' id: 'ci-abc123' outputs: - logs: "hello\n" type: 'logs' status: 'completed' type: 'code_interpreter_call' OutputCodeInterpreterServerToolItem: description: 'An openrouter:code_interpreter server tool output item' example: code: 'print("hello")' id: 'ci_tmp_abc123' language: 'python' status: 'completed' stdout: "hello\n" type: 'openrouter:code_interpreter' properties: code: type: 'string' exitCode: type: 'integer' id: type: 'string' language: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' stderr: type: 'string' stdout: type: 'string' type: enum: - 'openrouter:code_interpreter' type: 'string' required: - 'status' - 'type' type: 'object' OutputComputerCallItem: example: action: type: 'screenshot' call_id: 'call-abc123' id: 'cu-abc123' pending_safety_checks: [] status: 'completed' type: 'computer_call' properties: action: {} call_id: type: 'string' id: type: 'string' pending_safety_checks: items: properties: code: type: 'string' id: type: 'string' message: type: 'string' required: - 'id' - 'code' - 'message' type: 'object' type: 'array' status: enum: - 'completed' - 'incomplete' - 'in_progress' type: 'string' type: enum: - 'computer_call' type: 'string' required: - 'type' - 'call_id' - 'status' - 'pending_safety_checks' type: 'object' OutputCustomToolCallItem: description: 'A call to a custom (freeform-grammar) tool created by the model — distinct from `function_call`. Used for tools like Codex CLI''s `apply_patch` whose payload is opaque text rather than JSON arguments.' example: call_id: 'call-abc123' id: 'ctc-abc123' input: "*** Begin Patch\n*** End Patch" name: 'apply_patch' type: 'custom_tool_call' properties: call_id: type: 'string' id: type: 'string' input: type: 'string' name: type: 'string' namespace: description: 'Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)' type: 'string' type: enum: - 'custom_tool_call' type: 'string' required: - 'type' - 'name' - 'input' - 'call_id' type: 'object' OutputDatetimeItem: description: 'An openrouter:datetime server tool output item' example: datetime: '2026-03-12T14:30:00.000Z' id: 'dt_tmp_abc123' status: 'completed' timezone: 'UTC' type: 'openrouter:datetime' properties: datetime: description: 'ISO 8601 datetime string' type: 'string' id: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' timezone: description: 'IANA timezone name' type: 'string' type: enum: - 'openrouter:datetime' type: 'string' required: - 'status' - 'type' - 'datetime' - 'timezone' type: 'object' OutputFileSearchCallItem: allOf: - $ref: '#/components/schemas/OutputItemFileSearchCall' - properties: {} type: 'object' example: id: 'fs-abc123' queries: - 'search term' results: [] status: 'completed' type: 'file_search_call' OutputFileSearchServerToolItem: description: 'An openrouter:file_search server tool output item' example: id: 'fs_tmp_abc123' queries: - 'search term' status: 'completed' type: 'openrouter:file_search' properties: id: type: 'string' queries: items: type: 'string' type: 'array' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:file_search' type: 'string' required: - 'status' - 'type' type: 'object' OutputFilesServerToolItem: description: 'An openrouter:files server tool output item' example: filename: 'notes.txt' id: 'fl_tmp_abc123' operation: 'read' result: '{"id":"file_abc","filename":"notes.txt","content":"hello"}' status: 'completed' type: 'openrouter:files' properties: error: description: 'Error message when the file operation failed.' type: 'string' file_id: description: 'The target file id supplied in the tool-call arguments.' type: 'string' filename: description: 'The target filename supplied in the tool-call arguments.' type: 'string' id: type: 'string' operation: description: 'The file operation performed (list, read, write, or edit).' type: 'string' result: description: 'JSON-serialized result of the file operation.' type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:files' type: 'string' required: - 'status' - 'type' type: 'object' OutputFunctionCallItem: allOf: - $ref: '#/components/schemas/OutputItemFunctionCall' - properties: {} type: 'object' example: arguments: '{"location":"San Francisco"}' call_id: 'call-abc123' id: 'fc-abc123' name: 'get_weather' status: 'completed' type: 'function_call' OutputFusionServerToolItem: description: 'An openrouter:fusion server tool output item' example: id: 'st_tmp_abc123' status: 'completed' type: 'openrouter:fusion' properties: analysis: $ref: '#/components/schemas/FusionAnalysisResult' error: description: 'Error message when the fusion run did not produce an analysis result.' type: 'string' failed_models: description: 'Models that were requested as part of the analysis panel but did not produce a response. Present when at least one requested analysis model failed. The fusion result is still usable but was produced from a degraded panel.' items: properties: error: description: 'Error message describing why the model failed.' type: 'string' model: description: 'Slug of the analysis model that failed.' type: 'string' status_code: description: 'HTTP status code from the upstream response, when available (e.g. 402, 429).' type: 'integer' required: - 'model' - 'error' type: 'object' type: 'array' failure_reason: description: 'Typed failure reason when the fusion run failed. Possible values include: all_panels_failed, insufficient_credits, rate_limited, judge_not_valid_json, judge_schema_mismatch, judge_upstream_error, judge_empty_completion. The four analysis-stage codes keep their pre-rename `judge_` spelling so existing consumers keep matching.' type: 'string' id: type: 'string' responses: description: 'Analysis models that produced a response in this fusion run, with each model''s full panel content.' items: properties: content: type: 'string' model: type: 'string' required: - 'model' type: 'object' type: 'array' sources: description: 'Web pages the analysis panels and analyst retrieved via web search during this fusion run, deduplicated by URL across the whole run. Present when at least one model cited a source.' items: $ref: '#/components/schemas/FusionSource' type: 'array' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:fusion' type: 'string' required: - 'status' - 'type' type: 'object' OutputImageGenerationCallItem: allOf: - $ref: '#/components/schemas/OutputItemImageGenerationCall' - properties: prompt: description: 'The prompt (possibly rewritten) that the image was generated from.' type: 'string' type: 'object' example: id: 'img-abc123' result: null status: 'completed' type: 'image_generation_call' OutputImageGenerationServerToolItem: description: 'An openrouter:image_generation server tool output item' example: id: 'ig_tmp_abc123' imageUrl: 'https://example.com/image.png' result: 'https://example.com/image.png' status: 'completed' type: 'openrouter:image_generation' properties: id: type: 'string' imageB64: type: 'string' imageUrl: type: 'string' prompt: description: 'The prompt (possibly rewritten) that the image was generated from.' type: 'string' result: description: 'The generated image as a base64-encoded string or URL, matching OpenAI image_generation_call format' type: - 'string' - 'null' revisedPrompt: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:image_generation' type: 'string' required: - 'status' - 'type' type: 'object' OutputItemAddedEvent: description: 'Event emitted when a new output item is added to the response' example: item: content: [] id: 'item-1' role: 'assistant' status: 'in_progress' type: 'message' output_index: 0 sequence_number: 2 type: 'response.output_item.added' properties: item: discriminator: mapping: apply_patch_call: '#/components/schemas/OutputItemApplyPatchCall' custom_tool_call: '#/components/schemas/OutputItemCustomToolCall' file_search_call: '#/components/schemas/OutputItemFileSearchCall' function_call: '#/components/schemas/OutputItemFunctionCall' image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' message: '#/components/schemas/OutputMessage' reasoning: '#/components/schemas/OutputItemReasoning' web_search_call: '#/components/schemas/OutputItemWebSearchCall' propertyName: 'type' oneOf: - $ref: '#/components/schemas/OutputMessage' - $ref: '#/components/schemas/OutputItemReasoning' - $ref: '#/components/schemas/OutputItemFunctionCall' - $ref: '#/components/schemas/OutputItemCustomToolCall' - $ref: '#/components/schemas/OutputItemWebSearchCall' - $ref: '#/components/schemas/OutputItemFileSearchCall' - $ref: '#/components/schemas/OutputItemImageGenerationCall' - $ref: '#/components/schemas/OutputItemApplyPatchCall' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.output_item.added' type: 'string' required: - 'type' - 'output_index' - 'item' - 'sequence_number' type: 'object' OutputItemApplyPatchCall: example: call_id: 'call_abc123' id: 'apc_abc123' operation: diff: "@@ function main() {\n+ console.log(\"hi\");\n }" path: '/src/main.ts' type: 'update_file' status: 'completed' type: 'apply_patch_call' properties: call_id: type: 'string' created_by: type: 'string' id: type: 'string' operation: discriminator: mapping: create_file: '#/components/schemas/ApplyPatchCreateFileOperation' delete_file: '#/components/schemas/ApplyPatchDeleteFileOperation' update_file: '#/components/schemas/ApplyPatchUpdateFileOperation' propertyName: 'type' oneOf: - $ref: '#/components/schemas/ApplyPatchCreateFileOperation' - $ref: '#/components/schemas/ApplyPatchUpdateFileOperation' - $ref: '#/components/schemas/ApplyPatchDeleteFileOperation' status: enum: - 'in_progress' - 'completed' type: 'string' type: enum: - 'apply_patch_call' type: 'string' required: - 'type' - 'id' - 'call_id' - 'operation' - 'status' type: 'object' OutputItemCustomToolCall: example: call_id: 'call-abc123' id: 'ctc-abc123' input: "*** Begin Patch\n*** End Patch" name: 'apply_patch' type: 'custom_tool_call' properties: call_id: type: 'string' id: type: 'string' input: type: 'string' name: type: 'string' namespace: description: 'Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)' type: 'string' type: enum: - 'custom_tool_call' type: 'string' required: - 'type' - 'name' - 'input' - 'call_id' type: 'object' OutputItemDoneEvent: description: 'Event emitted when an output item is complete' example: item: content: - annotations: [] text: 'Hello! How can I help you?' type: 'output_text' id: 'item-1' role: 'assistant' status: 'completed' type: 'message' output_index: 0 sequence_number: 8 type: 'response.output_item.done' properties: item: discriminator: mapping: apply_patch_call: '#/components/schemas/OutputItemApplyPatchCall' custom_tool_call: '#/components/schemas/OutputItemCustomToolCall' file_search_call: '#/components/schemas/OutputItemFileSearchCall' function_call: '#/components/schemas/OutputItemFunctionCall' image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' message: '#/components/schemas/OutputMessage' reasoning: '#/components/schemas/OutputItemReasoning' web_search_call: '#/components/schemas/OutputItemWebSearchCall' propertyName: 'type' oneOf: - $ref: '#/components/schemas/OutputMessage' - $ref: '#/components/schemas/OutputItemReasoning' - $ref: '#/components/schemas/OutputItemFunctionCall' - $ref: '#/components/schemas/OutputItemCustomToolCall' - $ref: '#/components/schemas/OutputItemWebSearchCall' - $ref: '#/components/schemas/OutputItemFileSearchCall' - $ref: '#/components/schemas/OutputItemImageGenerationCall' - $ref: '#/components/schemas/OutputItemApplyPatchCall' output_index: type: 'integer' sequence_number: type: 'integer' type: enum: - 'response.output_item.done' type: 'string' required: - 'type' - 'output_index' - 'item' - 'sequence_number' type: 'object' OutputItemFileSearchCall: example: id: 'filesearch-abc123' queries: - 'machine learning algorithms' - 'neural networks' status: 'completed' type: 'file_search_call' properties: id: type: 'string' queries: items: type: 'string' type: 'array' status: $ref: '#/components/schemas/WebSearchStatus' type: enum: - 'file_search_call' type: 'string' required: - 'type' - 'id' - 'queries' - 'status' type: 'object' OutputItemFunctionCall: example: arguments: '{"location":"San Francisco","unit":"celsius"}' call_id: 'call-abc123' id: 'call-abc123' name: 'get_weather' type: 'function_call' properties: arguments: type: 'string' call_id: type: 'string' id: type: 'string' name: type: 'string' namespace: description: 'Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)' type: 'string' status: anyOf: - enum: - 'completed' type: 'string' - enum: - 'incomplete' type: 'string' - enum: - 'in_progress' type: 'string' type: enum: - 'function_call' type: 'string' required: - 'type' - 'name' - 'arguments' - 'call_id' type: 'object' OutputItemImageGenerationCall: example: id: 'imagegen-abc123' result: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==' status: 'completed' type: 'image_generation_call' properties: id: type: 'string' result: default: null type: - 'string' - 'null' status: $ref: '#/components/schemas/ImageGenerationStatus' type: enum: - 'image_generation_call' type: 'string' required: - 'type' - 'id' - 'status' type: 'object' OutputItemReasoning: example: id: 'reasoning-abc123' summary: - text: 'Analyzed the problem using first principles' type: 'summary_text' type: 'reasoning' properties: content: items: $ref: '#/components/schemas/ReasoningTextContent' type: 'array' encrypted_content: type: - 'string' - 'null' id: type: 'string' status: anyOf: - enum: - 'completed' type: 'string' - enum: - 'incomplete' type: 'string' - enum: - 'in_progress' type: 'string' summary: items: $ref: '#/components/schemas/ReasoningSummaryText' type: 'array' type: enum: - 'reasoning' type: 'string' required: - 'type' - 'id' - 'summary' type: 'object' OutputItems: description: 'An output item from the response' discriminator: mapping: apply_patch_call: '#/components/schemas/OutputApplyPatchCallItem' code_interpreter_call: '#/components/schemas/OutputCodeInterpreterCallItem' computer_call: '#/components/schemas/OutputComputerCallItem' custom_tool_call: '#/components/schemas/OutputCustomToolCallItem' file_search_call: '#/components/schemas/OutputFileSearchCallItem' function_call: '#/components/schemas/OutputFunctionCallItem' image_generation_call: '#/components/schemas/OutputImageGenerationCallItem' message: '#/components/schemas/OutputMessageItem' openrouter:advisor: '#/components/schemas/OutputAdvisorServerToolItem' openrouter:apply_patch: '#/components/schemas/OutputApplyPatchServerToolItem' openrouter:bash: '#/components/schemas/OutputBashServerToolItem' openrouter:browser_use: '#/components/schemas/OutputBrowserUseServerToolItem' openrouter:code_interpreter: '#/components/schemas/OutputCodeInterpreterServerToolItem' openrouter:datetime: '#/components/schemas/OutputDatetimeItem' openrouter:experimental__search_models: '#/components/schemas/OutputSearchModelsServerToolItem' openrouter:file_search: '#/components/schemas/OutputFileSearchServerToolItem' openrouter:files: '#/components/schemas/OutputFilesServerToolItem' openrouter:fusion: '#/components/schemas/OutputFusionServerToolItem' openrouter:image_generation: '#/components/schemas/OutputImageGenerationServerToolItem' openrouter:mcp: '#/components/schemas/OutputMcpServerToolItem' openrouter:memory: '#/components/schemas/OutputMemoryServerToolItem' openrouter:subagent: '#/components/schemas/OutputSubagentServerToolItem' openrouter:text_editor: '#/components/schemas/OutputTextEditorServerToolItem' openrouter:tool_search: '#/components/schemas/OutputToolSearchServerToolItem' openrouter:web_fetch: '#/components/schemas/OutputWebFetchServerToolItem' openrouter:web_search: '#/components/schemas/OutputWebSearchServerToolItem' reasoning: '#/components/schemas/OutputReasoningItem' shell_call: '#/components/schemas/OutputShellCallItem' shell_call_output: '#/components/schemas/OutputShellCallOutputItem' web_search_call: '#/components/schemas/OutputWebSearchCallItem' propertyName: 'type' example: content: - text: 'Hello! How can I help you today?' type: 'output_text' id: 'msg-abc123' role: 'assistant' status: 'completed' type: 'message' oneOf: - $ref: '#/components/schemas/OutputMessageItem' - $ref: '#/components/schemas/OutputReasoningItem' - $ref: '#/components/schemas/OutputFunctionCallItem' - $ref: '#/components/schemas/OutputWebSearchCallItem' - $ref: '#/components/schemas/OutputFileSearchCallItem' - $ref: '#/components/schemas/OutputImageGenerationCallItem' - $ref: '#/components/schemas/OutputCodeInterpreterCallItem' - $ref: '#/components/schemas/OutputComputerCallItem' - $ref: '#/components/schemas/OutputDatetimeItem' - $ref: '#/components/schemas/OutputWebSearchServerToolItem' - $ref: '#/components/schemas/OutputCodeInterpreterServerToolItem' - $ref: '#/components/schemas/OutputFileSearchServerToolItem' - $ref: '#/components/schemas/OutputImageGenerationServerToolItem' - $ref: '#/components/schemas/OutputBrowserUseServerToolItem' - $ref: '#/components/schemas/OutputBashServerToolItem' - $ref: '#/components/schemas/OutputTextEditorServerToolItem' - $ref: '#/components/schemas/OutputApplyPatchServerToolItem' - $ref: '#/components/schemas/OutputApplyPatchCallItem' - $ref: '#/components/schemas/OutputShellCallItem' - $ref: '#/components/schemas/OutputShellCallOutputItem' - $ref: '#/components/schemas/OutputWebFetchServerToolItem' - $ref: '#/components/schemas/OutputToolSearchServerToolItem' - $ref: '#/components/schemas/OutputMemoryServerToolItem' - $ref: '#/components/schemas/OutputMcpServerToolItem' - $ref: '#/components/schemas/OutputSearchModelsServerToolItem' - $ref: '#/components/schemas/OutputFusionServerToolItem' - $ref: '#/components/schemas/OutputAdvisorServerToolItem' - $ref: '#/components/schemas/OutputSubagentServerToolItem' - $ref: '#/components/schemas/OutputFilesServerToolItem' - $ref: '#/components/schemas/OutputCustomToolCallItem' OutputItemWebSearchCall: example: action: query: 'OpenAI API' type: 'search' id: 'search-abc123' status: 'completed' type: 'web_search_call' properties: action: oneOf: - properties: queries: items: type: 'string' type: 'array' query: type: 'string' sources: items: $ref: '#/components/schemas/WebSearchSource' type: 'array' type: enum: - 'search' type: 'string' required: - 'type' - 'query' type: 'object' - properties: type: enum: - 'open_page' type: 'string' url: type: - 'string' - 'null' required: - 'type' type: 'object' - properties: pattern: type: 'string' type: enum: - 'find_in_page' type: 'string' url: type: 'string' required: - 'type' - 'pattern' - 'url' type: 'object' id: type: 'string' status: $ref: '#/components/schemas/WebSearchStatus' type: enum: - 'web_search_call' type: 'string' required: - 'type' - 'id' - 'status' type: 'object' OutputMcpServerToolItem: description: 'An openrouter:mcp server tool output item' example: id: 'mcp_tmp_abc123' serverLabel: 'my-server' status: 'completed' toolName: 'get_data' type: 'openrouter:mcp' properties: id: type: 'string' serverLabel: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' toolName: type: 'string' type: enum: - 'openrouter:mcp' type: 'string' required: - 'status' - 'type' type: 'object' OutputMemoryServerToolItem: description: 'An openrouter:memory server tool output item' example: action: 'read' id: 'mem_tmp_abc123' key: 'user_preference' status: 'completed' type: 'openrouter:memory' properties: action: enum: - 'read' - 'write' - 'delete' type: 'string' id: type: 'string' key: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:memory' type: 'string' value: {} required: - 'status' - 'type' type: 'object' OutputMessage: example: content: - text: 'Hello! How can I help you today?' type: 'output_text' id: 'msg-abc123' role: 'assistant' status: 'completed' type: 'message' properties: content: items: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' type: 'array' id: type: 'string' phase: anyOf: - enum: - 'commentary' type: 'string' - enum: - 'final_answer' type: 'string' - type: 'null' description: 'The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages.' role: enum: - 'assistant' type: 'string' status: anyOf: - enum: - 'completed' type: 'string' - enum: - 'incomplete' type: 'string' - enum: - 'in_progress' type: 'string' type: enum: - 'message' type: 'string' required: - 'id' - 'role' - 'type' - 'content' type: 'object' OutputMessageItem: allOf: - $ref: '#/components/schemas/OutputMessage' - properties: {} type: 'object' description: 'An output message item' example: content: - annotations: [] text: 'Hello! How can I help you?' type: 'output_text' id: 'msg-123' role: 'assistant' status: 'completed' type: 'message' OutputModality: enum: - 'text' - 'image' - 'embeddings' - 'audio' - 'video' - 'rerank' - 'speech' - 'transcription' example: 'text' type: 'string' OutputModalityEnum: enum: - 'text' - 'image' example: 'text' type: 'string' OutputReasoningItem: allOf: - $ref: '#/components/schemas/OutputItemReasoning' - properties: content: items: $ref: '#/components/schemas/ReasoningTextContent' type: - 'array' - 'null' format: $ref: '#/components/schemas/ReasoningFormat' signature: description: 'A signature for the reasoning content, used for verification' example: 'EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj...' type: - 'string' - 'null' type: 'object' description: 'An output item containing reasoning' example: content: - text: 'First, we analyze the problem...' type: 'reasoning_text' format: 'anthropic-claude-v1' id: 'reasoning-123' signature: 'EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj...' status: 'completed' summary: - text: 'Analyzed the problem and found the optimal solution.' type: 'summary_text' type: 'reasoning' OutputSearchModelsServerToolItem: description: 'An openrouter:experimental__search_models server tool output item' example: arguments: '{"query":"Claude Opus"}' id: 'sm_tmp_abc123' query: 'Claude Opus' status: 'completed' type: 'openrouter:experimental__search_models' properties: arguments: description: 'The JSON arguments submitted to the search tool (e.g. {"query":"Claude"})' type: 'string' id: type: 'string' query: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:experimental__search_models' type: 'string' required: - 'status' - 'type' type: 'object' OutputShellCallItem: description: 'A native `shell_call` output item matching OpenAI''s Responses API shape. Emitted for the sandbox-backed `shell` tool.' example: action: commands: - 'echo hello' max_output_length: null timeout_ms: null call_id: 'call_abc123' id: 'shc_abc123' status: 'completed' type: 'shell_call' properties: action: properties: commands: items: type: 'string' type: 'array' max_output_length: type: - 'integer' - 'null' timeout_ms: type: - 'integer' - 'null' required: - 'commands' - 'max_output_length' - 'timeout_ms' type: 'object' call_id: type: 'string' id: type: 'string' status: $ref: '#/components/schemas/ShellCallStatus' type: enum: - 'shell_call' type: 'string' required: - 'type' - 'id' - 'call_id' - 'status' type: 'object' OutputShellCallOutputItem: description: 'A native `shell_call_output` item matching OpenAI''s Responses API shape. Carries per-command stdout, stderr, and the exit/timeout outcome.' example: call_id: 'call_abc123' id: 'sho_abc123' output: - outcome: exit_code: 0 type: 'exit' stderr: '' stdout: "hello\n" status: 'completed' type: 'shell_call_output' properties: call_id: type: 'string' id: type: 'string' max_output_length: type: - 'integer' - 'null' output: items: properties: outcome: oneOf: - properties: exit_code: type: 'integer' type: enum: - 'exit' type: 'string' required: - 'type' - 'exit_code' type: 'object' - properties: type: enum: - 'timeout' type: 'string' required: - 'type' type: 'object' stderr: type: 'string' stdout: type: 'string' required: - 'stdout' - 'stderr' - 'outcome' type: 'object' type: 'array' status: $ref: '#/components/schemas/ShellCallStatus' type: enum: - 'shell_call_output' type: 'string' required: - 'type' - 'id' - 'call_id' - 'status' - 'output' type: 'object' OutputSubagentServerToolItem: description: 'An openrouter:subagent server tool output item' example: id: 'st_tmp_abc123' status: 'completed' type: 'openrouter:subagent' properties: error: description: 'Error message when the subagent task did not produce an outcome.' type: 'string' id: type: 'string' instance_name: description: 'Provider-safe function name of the specific subagent instance that produced this item (e.g. `openrouter_subagent__1`). Present only on items from non-default instances — the second and later subagent entries in the request `tools` array. The first (default) instance omits it, even when multiple subagents are configured. When a replayed item echoes this field back, the transcript rehydrates the call under that instance''s tool. This identity is positional: it is derived from the index of the subagent entry in the request `tools` array, so keep the order of subagent entries stable across requests in a conversation.' example: 'openrouter_subagent__1' type: 'string' model: description: 'Slug of the worker model that executed the task.' type: 'string' name: description: 'Configured name of the subagent that executed the task (the `name` on its tool entry). Present only for named subagents; omitted for an unnamed (default) subagent.' example: 'summarizer' type: 'string' outcome: description: 'The worker model''s result (the outcome text returned to the delegating model).' type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' task_description: description: 'The task description the delegating model sent to the worker.' type: 'string' task_name: description: 'The short task identifier the delegating model supplied.' type: 'string' type: enum: - 'openrouter:subagent' type: 'string' required: - 'status' - 'type' type: 'object' OutputTextEditorServerToolItem: description: 'An openrouter:text_editor server tool output item' example: command: 'view' filePath: '/src/main.ts' id: 'te_tmp_abc123' status: 'completed' type: 'openrouter:text_editor' properties: command: enum: - 'view' - 'create' - 'str_replace' - 'insert' type: 'string' filePath: type: 'string' id: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:text_editor' type: 'string' required: - 'status' - 'type' type: 'object' OutputToolSearchServerToolItem: description: 'An openrouter:tool_search server tool output item' example: id: 'ts_tmp_abc123' query: 'weather tools' status: 'completed' type: 'openrouter:tool_search' properties: id: type: 'string' query: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:tool_search' type: 'string' required: - 'status' - 'type' type: 'object' OutputWebFetchServerToolItem: description: 'An openrouter:web_fetch server tool output item' example: httpStatus: 200 id: 'wf_tmp_abc123' status: 'completed' title: 'Example Domain' type: 'openrouter:web_fetch' url: 'https://example.com' properties: content: type: 'string' error: description: 'The error message if the fetch failed.' type: 'string' httpStatus: description: 'The HTTP status code returned by the upstream URL fetch.' type: 'integer' id: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' title: type: 'string' type: enum: - 'openrouter:web_fetch' type: 'string' url: type: 'string' required: - 'status' - 'type' type: 'object' OutputWebSearchCallItem: allOf: - $ref: '#/components/schemas/OutputItemWebSearchCall' - properties: {} type: 'object' example: id: 'ws-abc123' status: 'completed' type: 'web_search_call' OutputWebSearchServerToolItem: description: 'An openrouter:web_search server tool output item' example: action: query: 'latest AI news' type: 'search' id: 'ws_tmp_abc123' status: 'completed' type: 'openrouter:web_search' properties: action: description: 'The search action performed, matching OpenAI web_search_call.action shape. Includes the query the model issued and optional source URLs returned by the search provider.' properties: query: type: 'string' sources: items: properties: type: enum: - 'url' type: 'string' url: type: 'string' required: - 'type' - 'url' type: 'object' type: 'array' type: enum: - 'search' type: 'string' required: - 'type' - 'query' type: 'object' id: type: 'string' status: $ref: '#/components/schemas/ToolCallStatus' type: enum: - 'openrouter:web_search' type: 'string' required: - 'status' - 'type' type: 'object' Parameter: enum: - 'temperature' - 'top_p' - 'top_k' - 'min_p' - 'top_a' - 'frequency_penalty' - 'presence_penalty' - 'repetition_penalty' - 'max_tokens' - 'max_completion_tokens' - 'logit_bias' - 'logprobs' - 'top_logprobs' - 'prediction' - 'seed' - 'response_format' - 'structured_outputs' - 'stop' - 'tools' - 'tool_choice' - 'parallel_tool_calls' - 'include_reasoning' - 'reasoning' - 'reasoning_effort' - 'web_search_options' - 'verbosity' example: 'temperature' type: 'string' ParetoRouterPlugin: example: enabled: true id: 'pareto-router' max_price: 5 price_source: 'prompt' properties: enabled: description: 'Set to false to disable the pareto-router plugin for this request. Defaults to true.' type: 'boolean' id: enum: - 'pareto-router' type: 'string' max_price: description: 'Maximum input price in USD per million tokens. When set, quality-tier selection (min_coding_score) is bypassed: the router computes the Pareto frontier over the top coding models and routes to the best-scoring frontier model priced at or below this cap, falling back through cheaper frontier models, then non-frontier models. Enforced against the price source given by price_source. Returns 404 when no candidate satisfies the cap.' example: 5 format: 'double' minimum: 0 type: 'number' min_coding_score: description: 'Minimum coding quality score between 0 and 1. Maps to internal quality tiers: >= 0.66 → high (top coding models), >= 0.33 → medium (strong modern flagships), < 0.33 → low (capable coders above the median). Omit to default to the highest tier (equivalent to >= 0.66). Not used when max_price is set (price-based selection takes over).' example: 0.8 format: 'double' maximum: 1 minimum: 0 type: 'number' price_source: description: 'Price source for the Pareto frontier cost axis and for enforcing max_price. "prompt" uses catalog list price (endpoint.pricing.prompt). "weighted_avg" uses traffic-weighted effective input price from ClickHouse, falling back to prompt price for models without traffic data. Defaults to "prompt".' enum: - 'prompt' - 'weighted_avg' type: 'string' required: - 'id' type: 'object' PayloadTooLargeResponse: description: 'Payload Too Large - Request payload exceeds size limits' example: error: code: 413 message: 'Request payload too large' properties: error: $ref: '#/components/schemas/PayloadTooLargeResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' PayloadTooLargeResponseErrorData: description: 'Error data for PayloadTooLargeResponse' example: code: 413 message: 'Request payload too large' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' PaymentRequiredResponse: description: 'Payment Required - Insufficient credits or quota to complete request' example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' properties: error: $ref: '#/components/schemas/PaymentRequiredResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' PaymentRequiredResponseErrorData: description: 'Error data for PaymentRequiredResponse' example: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' PDFParserEngine: anyOf: - enum: - 'mistral-ocr' - 'native' - 'cloudflare-ai' type: 'string' - enum: - 'pdf-text' type: 'string' description: 'The engine to use for parsing PDF files. "pdf-text" is deprecated and automatically redirected to "cloudflare-ai".' example: 'cloudflare-ai' PDFParserOptions: description: 'Options for PDF parsing.' example: engine: 'cloudflare-ai' properties: engine: $ref: '#/components/schemas/PDFParserEngine' type: 'object' PercentileLatencyCutoffs: description: 'Percentile-based latency cutoffs. All specified cutoffs must be met for an endpoint to be preferred.' example: p50: 5 p90: 10 properties: p50: description: 'Maximum p50 latency (seconds)' format: 'double' type: - 'number' - 'null' p75: description: 'Maximum p75 latency (seconds)' format: 'double' type: - 'number' - 'null' p90: description: 'Maximum p90 latency (seconds)' format: 'double' type: - 'number' - 'null' p99: description: 'Maximum p99 latency (seconds)' format: 'double' type: - 'number' - 'null' type: 'object' PercentileStats: description: 'Latency percentiles in milliseconds over the last 30 minutes. Latency measures time to first token. Only visible when authenticated with an API key or cookie; returns null for unauthenticated requests.' example: p50: 25.5 p75: 35.2 p90: 48.7 p99: 85.3 properties: p50: description: 'Median (50th percentile)' example: 25.5 format: 'double' type: 'number' p75: description: '75th percentile' example: 35.2 format: 'double' type: 'number' p90: description: '90th percentile' example: 48.7 format: 'double' type: 'number' p99: description: '99th percentile' example: 85.3 format: 'double' type: 'number' required: - 'p50' - 'p75' - 'p90' - 'p99' type: - 'object' - 'null' PercentileThroughputCutoffs: description: 'Percentile-based throughput cutoffs. All specified cutoffs must be met for an endpoint to be preferred.' example: p50: 100 p90: 50 properties: p50: description: 'Minimum p50 throughput (tokens/sec)' format: 'double' type: - 'number' - 'null' p75: description: 'Minimum p75 throughput (tokens/sec)' format: 'double' type: - 'number' - 'null' p90: description: 'Minimum p90 throughput (tokens/sec)' format: 'double' type: - 'number' - 'null' p99: description: 'Minimum p99 throughput (tokens/sec)' format: 'double' type: - 'number' - 'null' type: 'object' PerRequestLimits: description: 'Per-request token limits' example: completion_tokens: 1000 prompt_tokens: 1000 properties: completion_tokens: description: 'Maximum completion tokens per request' example: 1000 type: 'number' prompt_tokens: description: 'Maximum prompt tokens per request' example: 1000 type: 'number' required: - 'prompt_tokens' - 'completion_tokens' type: - 'object' - 'null' PipelineStage: example: data: action: 'redacted' engines: - 'presidio' flagged: true matched_entity_types: - 'EMAIL' - 'PHONE' name: 'content-filter' summary: 'PII redacted via Presidio (EMAIL, PHONE)' type: 'guardrail' properties: cost_usd: format: 'double' type: - 'number' - 'null' data: additionalProperties: {} type: 'object' guardrail_id: type: 'string' guardrail_scope: type: 'string' name: type: 'string' summary: type: 'string' type: $ref: '#/components/schemas/PipelineStageType' required: - 'type' - 'name' type: 'object' PipelineStageType: description: 'Categorical kind of a pipeline stage. Multiple plugins can share a type (e.g. all guardrail-level plugins emit `guardrail`); the `name` field disambiguates which plugin emitted it.' enum: - 'guardrail' - 'plugin' - 'server_tools' - 'response_healing' - 'context_compression' example: 'guardrail' type: 'string' Prediction: description: 'Static predicted output content. Supported models can use this to reduce latency when much of the response is known in advance.' example: content: 'Expected response' type: 'content' properties: content: anyOf: - type: 'string' - items: $ref: '#/components/schemas/PredictionContentText' type: 'array' type: enum: - 'content' type: 'string' required: - 'type' - 'content' type: - 'object' - 'null' PredictionContentText: description: 'Text content part for a predicted output.' example: text: 'Expected response' type: 'text' properties: text: type: 'string' type: enum: - 'text' type: 'string' required: - 'type' - 'text' type: 'object' PreferredMaxLatency: anyOf: - format: 'double' type: 'number' - $ref: '#/components/schemas/PercentileLatencyCutoffs' - type: 'null' description: 'Preferred maximum latency (in seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints above the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold.' example: 5 PreferredMinThroughput: anyOf: - format: 'double' type: 'number' - $ref: '#/components/schemas/PercentileThroughputCutoffs' - type: 'null' description: 'Preferred minimum throughput (in tokens per second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints below the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold.' example: 100 Preset: description: 'A preset without version details.' example: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' properties: created_at: type: 'string' creator_user_id: type: - 'string' - 'null' description: type: - 'string' - 'null' designated_version_id: type: - 'string' - 'null' id: type: 'string' name: type: 'string' slug: type: 'string' status: $ref: '#/components/schemas/PresetStatus' status_updated_at: type: - 'string' - 'null' updated_at: type: 'string' workspace_id: type: - 'string' - 'null' required: - 'id' - 'creator_user_id' - 'workspace_id' - 'name' - 'slug' - 'description' - 'status' - 'designated_version_id' - 'created_at' - 'updated_at' - 'status_updated_at' type: 'object' PresetDesignatedVersion: description: 'A specific version of a preset, containing config and optional system prompt.' example: config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 properties: config: additionalProperties: {} type: 'object' created_at: type: 'string' creator_id: type: 'string' id: type: 'string' preset_id: type: 'string' system_prompt: type: - 'string' - 'null' updated_at: type: 'string' version: type: 'integer' required: - 'id' - 'preset_id' - 'creator_id' - 'version' - 'system_prompt' - 'config' - 'created_at' - 'updated_at' type: - 'object' - 'null' PresetStatus: description: 'The status of a preset.' enum: - 'active' - 'disabled' - 'archived' example: 'active' type: 'string' PresetWithDesignatedVersion: allOf: - $ref: '#/components/schemas/Preset' - properties: designated_version: $ref: '#/components/schemas/PresetDesignatedVersion' required: - 'designated_version' type: 'object' description: 'A preset with its currently designated version.' example: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version: config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' Preview_20250311_WebSearchServerTool: description: 'Web search preview tool configuration (2025-03-11 version)' example: type: 'web_search_preview_2025_03_11' properties: engine: $ref: '#/components/schemas/WebSearchEngineEnum' filters: $ref: '#/components/schemas/WebSearchDomainFilter' max_results: description: 'Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped.' example: 5 type: 'integer' max_uses: description: 'Maximum number of web searches the model may perform in a single request. Once reached, further search calls return an error result instead of executing. Applies to the Exa, Firecrawl, Parallel, and Perplexity engines. With native provider search, forwarded only to Anthropic (as `max_uses`); other native search providers have no equivalent parameter and ignore it.' example: 3 type: 'integer' search_context_size: $ref: '#/components/schemas/SearchContextSizeEnum' type: enum: - 'web_search_preview_2025_03_11' type: 'string' user_location: $ref: '#/components/schemas/Preview_WebSearchUserLocation' required: - 'type' type: 'object' Preview_WebSearchServerTool: description: 'Web search preview tool configuration' example: type: 'web_search_preview' properties: engine: $ref: '#/components/schemas/WebSearchEngineEnum' filters: $ref: '#/components/schemas/WebSearchDomainFilter' max_results: description: 'Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped.' example: 5 type: 'integer' max_uses: description: 'Maximum number of web searches the model may perform in a single request. Once reached, further search calls return an error result instead of executing. Applies to the Exa, Firecrawl, Parallel, and Perplexity engines. With native provider search, forwarded only to Anthropic (as `max_uses`); other native search providers have no equivalent parameter and ignore it.' example: 3 type: 'integer' search_context_size: $ref: '#/components/schemas/SearchContextSizeEnum' type: enum: - 'web_search_preview' type: 'string' user_location: $ref: '#/components/schemas/Preview_WebSearchUserLocation' required: - 'type' type: 'object' Preview_WebSearchUserLocation: example: city: 'San Francisco' country: 'USA' region: 'California' timezone: 'America/Los_Angeles' type: 'approximate' properties: city: type: - 'string' - 'null' country: type: - 'string' - 'null' region: type: - 'string' - 'null' timezone: type: - 'string' - 'null' type: enum: - 'approximate' type: 'string' required: - 'type' type: - 'object' - 'null' PricingOverride: description: 'A conditional override of the base pricing. An entry applies only when all of its condition fields (e.g. min_prompt_tokens, or the utc_start/utc_end time window) match the request; among applicable entries, later entries win per price key; price keys absent from an entry inherit the base price.' example: completion: '0.00002' min_prompt_tokens: 200000 prompt: '0.000005' properties: audio: description: 'Overridden price in USD per audio input token' type: 'string' completion: description: 'Overridden price in USD per token for completion (output) generation' type: 'string' input_audio_cache: description: 'Overridden price in USD per cached audio input token' type: 'string' input_cache_read: description: 'Overridden price in USD per cached input token (read)' type: 'string' input_cache_write: description: 'Overridden price in USD per cache-write token' type: 'string' input_cache_write_1h: description: 'Overridden price in USD per 1-hour cache-write token' type: 'string' min_prompt_tokens: description: 'Condition: the entry applies when the total prompt tokens of a request are strictly greater than this threshold' format: 'double' type: 'number' prompt: description: 'Overridden price in USD per token for prompt (input) processing' type: 'string' utc_end: description: 'Condition: exclusive end of a daily UTC time window as an HHMM clock number (e.g. 400 = 04:00)' format: 'double' type: 'number' utc_start: description: 'Condition: inclusive start of a daily UTC time window as an HHMM clock number (e.g. 100 = 01:00, 1030 = 10:30). The entry applies while the current UTC time is inside the half-open window [utc_start, utc_end), which may wrap past midnight (utc_start > utc_end).' format: 'double' type: 'number' type: 'object' PromptCacheBreakpoint: description: 'Marks an explicit prompt-cache boundary on this content block (OpenAI-style). Everything through the block carrying this marker is part of the candidate cached prefix. Supported natively by OpenAI GPT-5.6 and newer; on providers that use Anthropic-style `cache_control`, OpenRouter converts the marker to that format automatically.' example: mode: 'explicit' properties: mode: enum: - 'explicit' type: 'string' required: - 'mode' type: - 'object' - 'null' PromptCacheOptions: description: 'Request-level prompt-cache controls. `mode: "explicit"` disables OpenAI-managed breakpoints so only blocks marked with `prompt_cache_breakpoint` are cached. Only supported by OpenAI GPT-5.6 and newer.' example: mode: 'explicit' ttl: '30m' properties: mode: enum: - 'explicit' type: 'string' ttl: type: - 'string' - 'null' required: - 'mode' type: - 'object' - 'null' PromptInjectionScanScope: description: 'Which message roles to scan for prompt injection. Only applies to the regex-prompt-injection builtin. Defaults to all_messages.' enum: - 'user_only' - 'all_messages' example: 'user_only' type: 'string' ProviderName: enum: - 'Modal' - 'AkashML' - 'AI21' - 'AionLabs' - 'Alibaba' - 'Ambient' - 'Baidu' - 'Amazon Bedrock' - 'Amazon Nova' - 'Anthropic' - 'Arcee AI' - 'AtlasCloud' - 'Avian' - 'Azure' - 'BaseTen' - 'BytePlus' - 'Black Forest Labs' - 'Cerebras' - 'Chutes' - 'Cirrascale' - 'Claude Platform on AWS' - 'Clarifai' - 'Cloudflare' - 'Cohere' - 'CoreWeave' - 'Crucible' - 'Crusoe' - 'Darkbloom' - 'Decart' - 'Deepgram' - 'DeepInfra' - 'DeepSeek' - 'DekaLLM' - 'DigitalOcean' - 'Featherless' - 'Fireworks' - 'Fish Audio' - 'Friendli' - 'GMICloud' - 'Google' - 'Google AI Studio' - 'Groq' - 'HeyGen' - 'Inception' - 'Inceptron' - 'InferenceNet' - 'Ionstream' - 'Infermatic' - 'Io Net' - 'Inferact vLLM' - 'Inflection' - 'Liquid' - 'Mara' - 'Mancer 2' - 'Meta' - 'Minimax' - 'ModelRun' - 'Mistral' - 'Modular' - 'Moonshot AI' - 'Morph' - 'VoyageAI by MongoDB' - 'NCompass' - 'Nebius' - 'Nex AGI' - 'NextBit' - 'Novita' - 'Nvidia' - 'OpenAI' - 'OpenInference' - 'Parasail' - 'Poolside' - 'Perceptron' - 'Perplexity' - 'Phala' - 'Recraft' - 'Reka' - 'Relace' - 'Sail Research' - 'Sakana AI' - 'SambaNova' - 'Seed' - 'SiliconFlow' - 'Sourceful' - 'StepFun' - 'Stealth' - 'StreamLake' - 'Switchpoint' - 'Tencent' - 'Tenstorrent' - 'Thinking Machines' - 'Together' - 'Upstage' - 'Venice' - 'Wafer' - 'WandB' - 'Quiver' - 'Krea' - 'Runway' - 'Xiaomi' - 'xAI' - 'Z.AI' - 'FakeProvider' example: 'OpenAI' type: 'string' ProviderOptions: description: 'Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped.' example: openai: max_tokens: 1000 properties: 01ai: additionalProperties: {} type: 'object' ai21: additionalProperties: {} type: 'object' aion-labs: additionalProperties: {} type: 'object' akashml: additionalProperties: {} type: 'object' alibaba: additionalProperties: {} type: 'object' amazon-bedrock: additionalProperties: {} type: 'object' amazon-nova: additionalProperties: {} type: 'object' ambient: additionalProperties: {} type: 'object' anthropic: additionalProperties: {} type: 'object' anyscale: additionalProperties: {} type: 'object' arcee-ai: additionalProperties: {} type: 'object' atlas-cloud: additionalProperties: {} type: 'object' atoma: additionalProperties: {} type: 'object' avian: additionalProperties: {} type: 'object' azure: additionalProperties: {} type: 'object' baidu: additionalProperties: {} type: 'object' baseten: additionalProperties: {} type: 'object' black-forest-labs: additionalProperties: {} type: 'object' byteplus: additionalProperties: {} type: 'object' centml: additionalProperties: {} type: 'object' cerebras: additionalProperties: {} type: 'object' chutes: additionalProperties: {} type: 'object' cirrascale: additionalProperties: {} type: 'object' clarifai: additionalProperties: {} type: 'object' claude-on-aws: additionalProperties: {} type: 'object' cloudflare: additionalProperties: {} type: 'object' cohere: additionalProperties: {} type: 'object' coreweave: additionalProperties: {} type: 'object' crofai: additionalProperties: {} type: 'object' crucible: additionalProperties: {} type: 'object' crusoe: additionalProperties: {} type: 'object' darkbloom: additionalProperties: {} type: 'object' decart: additionalProperties: {} type: 'object' deepgram: additionalProperties: {} type: 'object' deepinfra: additionalProperties: {} type: 'object' deepseek: additionalProperties: {} type: 'object' dekallm: additionalProperties: {} type: 'object' digitalocean: additionalProperties: {} type: 'object' enfer: additionalProperties: {} type: 'object' fake-provider: additionalProperties: {} type: 'object' featherless: additionalProperties: {} type: 'object' fireworks: additionalProperties: {} type: 'object' fish-audio: additionalProperties: {} type: 'object' friendli: additionalProperties: {} type: 'object' gmicloud: additionalProperties: {} type: 'object' google-ai-studio: additionalProperties: {} type: 'object' google-vertex: additionalProperties: {} type: 'object' gopomelo: additionalProperties: {} type: 'object' groq: additionalProperties: {} type: 'object' heygen: additionalProperties: {} type: 'object' huggingface: additionalProperties: {} type: 'object' hyperbolic: additionalProperties: {} type: 'object' hyperbolic-quantized: additionalProperties: {} type: 'object' inception: additionalProperties: {} type: 'object' inceptron: additionalProperties: {} type: 'object' inferact-vllm: additionalProperties: {} type: 'object' inference-net: additionalProperties: {} type: 'object' infermatic: additionalProperties: {} type: 'object' inflection: additionalProperties: {} type: 'object' inocloud: additionalProperties: {} type: 'object' io-net: additionalProperties: {} type: 'object' ionstream: additionalProperties: {} type: 'object' klusterai: additionalProperties: {} type: 'object' krea: additionalProperties: {} type: 'object' lambda: additionalProperties: {} type: 'object' lepton: additionalProperties: {} type: 'object' liquid: additionalProperties: {} type: 'object' lynn: additionalProperties: {} type: 'object' lynn-private: additionalProperties: {} type: 'object' mancer: additionalProperties: {} type: 'object' mancer-old: additionalProperties: {} type: 'object' mara: additionalProperties: {} type: 'object' meta: additionalProperties: {} type: 'object' minimax: additionalProperties: {} type: 'object' mistral: additionalProperties: {} type: 'object' modal: additionalProperties: {} type: 'object' modelrun: additionalProperties: {} type: 'object' modular: additionalProperties: {} type: 'object' moonshotai: additionalProperties: {} type: 'object' morph: additionalProperties: {} type: 'object' ncompass: additionalProperties: {} type: 'object' nebius: additionalProperties: {} type: 'object' nex-agi: additionalProperties: {} type: 'object' nextbit: additionalProperties: {} type: 'object' nineteen: additionalProperties: {} type: 'object' novita: additionalProperties: {} type: 'object' nvidia: additionalProperties: {} type: 'object' octoai: additionalProperties: {} type: 'object' open-inference: additionalProperties: {} type: 'object' openai: additionalProperties: {} type: 'object' parasail: additionalProperties: {} type: 'object' perceptron: additionalProperties: {} type: 'object' perplexity: additionalProperties: {} type: 'object' phala: additionalProperties: {} type: 'object' poolside: additionalProperties: {} type: 'object' quiver: additionalProperties: {} type: 'object' recraft: additionalProperties: {} type: 'object' recursal: additionalProperties: {} type: 'object' reflection: additionalProperties: {} type: 'object' reka: additionalProperties: {} type: 'object' relace: additionalProperties: {} type: 'object' replicate: additionalProperties: {} type: 'object' runway: additionalProperties: {} type: 'object' sail-research: additionalProperties: {} type: 'object' sakana: additionalProperties: {} type: 'object' sakana-ai: additionalProperties: {} type: 'object' sambanova: additionalProperties: {} type: 'object' sambanova-cloaked: additionalProperties: {} type: 'object' seed: additionalProperties: {} type: 'object' sf-compute: additionalProperties: {} type: 'object' siliconflow: additionalProperties: {} type: 'object' sourceful: additionalProperties: {} type: 'object' stealth: additionalProperties: {} type: 'object' stepfun: additionalProperties: {} type: 'object' streamlake: additionalProperties: {} type: 'object' switchpoint: additionalProperties: {} type: 'object' targon: additionalProperties: {} type: 'object' tencent: additionalProperties: {} type: 'object' tenstorrent: additionalProperties: {} type: 'object' thinkingmachines: additionalProperties: {} type: 'object' together: additionalProperties: {} type: 'object' together-lite: additionalProperties: {} type: 'object' ubicloud: additionalProperties: {} type: 'object' upstage: additionalProperties: {} type: 'object' venice: additionalProperties: {} type: 'object' voyageai: additionalProperties: {} type: 'object' wafer: additionalProperties: {} type: 'object' wandb: additionalProperties: {} type: 'object' wandb-legacy: additionalProperties: {} type: 'object' xai: additionalProperties: {} type: 'object' xiaomi: additionalProperties: {} type: 'object' z-ai: additionalProperties: {} type: 'object' type: 'object' ProviderOverloadedResponse: description: 'Provider Overloaded - Provider is temporarily overloaded' example: error: code: 529 message: 'Provider returned error' properties: error: $ref: '#/components/schemas/ProviderOverloadedResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' ProviderOverloadedResponseErrorData: description: 'Error data for ProviderOverloadedResponse' example: code: 529 message: 'Provider returned error' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' ProviderPreferences: additionalProperties: false description: 'When multiple model providers are available, optionally indicate your routing preference.' example: allow_fallbacks: true properties: allow_fallbacks: description: "Whether to allow backup providers to serve requests\n- true: (default) when the primary provider (or your custom providers in \"order\") is unavailable, use the next best provider.\n- false: use only the primary/custom provider, and return the upstream error if it's unavailable.\n" type: - 'boolean' - 'null' data_collection: description: "Data collection setting. If no available model provider meets the requirement, your request will return an error.\n- allow: (default) allow providers which store user data non-transiently and may train on it\n\n- deny: use only providers which do not collect user data." enum: - 'deny' - 'allow' - null example: 'allow' type: - 'string' - 'null' enforce_distillable_text: description: 'Whether to restrict routing to only models that allow text distillation. When true, only models where the author has allowed distillation will be used.' example: true type: - 'boolean' - 'null' ignore: description: 'List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request.' example: - 'openai' - 'anthropic' items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: 'string' type: - 'array' - 'null' max_price: description: 'The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion.' properties: audio: description: 'Maximum price in USD per audio unit' type: 'string' completion: description: 'Maximum price in USD per million completion tokens' type: 'string' image: description: 'Maximum price in USD per image' type: 'string' prompt: description: 'Maximum price in USD per million prompt tokens' type: 'string' request: description: 'Maximum price in USD per request' type: 'string' type: 'object' only: description: 'List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request.' example: - 'openai' - 'anthropic' items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: 'string' type: - 'array' - 'null' order: description: 'An ordered list of provider slugs. The router will attempt to use the first provider in the subset of this list that supports your requested model, and fall back to the next if it is unavailable. If no providers are available, the request will fail with an error message.' example: - 'openai' - 'anthropic' items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: 'string' type: - 'array' - 'null' preferred_max_latency: $ref: '#/components/schemas/PreferredMaxLatency' preferred_min_throughput: $ref: '#/components/schemas/PreferredMinThroughput' quantizations: description: 'A list of quantization levels to filter the provider by.' items: $ref: '#/components/schemas/Quantization' type: - 'array' - 'null' require_parameters: description: 'Whether to filter providers to only those that support the parameters you''ve provided. If this setting is omitted or set to false, then providers will receive only the parameters they support, and ignore the rest.' type: - 'boolean' - 'null' sort: anyOf: - $ref: '#/components/schemas/ProviderSort' - $ref: '#/components/schemas/ProviderSortConfig' - type: 'null' description: 'The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed.' example: 'price' zdr: description: 'Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. When true, only endpoints that do not retain prompts will be used.' example: true type: - 'boolean' - 'null' type: - 'object' - 'null' ProviderResponse: description: 'Details of a provider response for a generation attempt' example: endpoint_id: 'ep_abc123' id: 'chatcmpl-abc123' is_byok: false latency: 1200 model_permaslug: 'openai/gpt-4' provider_name: 'OpenAI' status: 200 properties: endpoint_id: description: 'Internal endpoint identifier' example: 'ep_abc123' type: 'string' id: description: 'Upstream provider response identifier' example: 'chatcmpl-abc123' type: 'string' is_byok: description: 'Whether the request used a bring-your-own-key' example: false type: 'boolean' latency: description: 'Response latency in milliseconds' example: 1200 format: 'double' type: 'number' model_permaslug: description: 'Canonical model slug' example: 'openai/gpt-4' type: 'string' provider_name: description: 'Name of the provider' enum: - 'AnyScale' - 'Atoma' - 'Cent-ML' - 'CrofAI' - 'Enfer' - 'GoPomelo' - 'HuggingFace' - 'Hyperbolic' - 'Hyperbolic 2' - 'InoCloud' - 'Kluster' - 'Lambda' - 'Lepton' - 'Lynn 2' - 'Lynn' - 'Mancer' - 'Modal' - 'Nineteen' - 'OctoAI' - 'Recursal' - 'Reflection' - 'Replicate' - 'SambaNova 2' - 'SF Compute' - 'Targon' - 'Together 2' - 'Ubicloud' - '01.AI' - 'AkashML' - 'AI21' - 'AionLabs' - 'Alibaba' - 'Ambient' - 'Baidu' - 'Amazon Bedrock' - 'Amazon Nova' - 'Anthropic' - 'Arcee AI' - 'AtlasCloud' - 'Avian' - 'Azure' - 'BaseTen' - 'BytePlus' - 'Black Forest Labs' - 'Cerebras' - 'Chutes' - 'Cirrascale' - 'Claude Platform on AWS' - 'Clarifai' - 'Cloudflare' - 'Cohere' - 'CoreWeave' - 'Crucible' - 'Crusoe' - 'Darkbloom' - 'Decart' - 'Deepgram' - 'DeepInfra' - 'DeepSeek' - 'DekaLLM' - 'DigitalOcean' - 'Featherless' - 'Fireworks' - 'Fish Audio' - 'Friendli' - 'GMICloud' - 'Google' - 'Google AI Studio' - 'Groq' - 'HeyGen' - 'Inception' - 'Inceptron' - 'InferenceNet' - 'Ionstream' - 'Infermatic' - 'Io Net' - 'Inferact vLLM' - 'Inflection' - 'Liquid' - 'Mara' - 'Mancer 2' - 'Meta' - 'Minimax' - 'ModelRun' - 'Mistral' - 'Modular' - 'Moonshot AI' - 'Morph' - 'VoyageAI by MongoDB' - 'NCompass' - 'Nebius' - 'Nex AGI' - 'NextBit' - 'Novita' - 'Nvidia' - 'OpenAI' - 'OpenInference' - 'Parasail' - 'Poolside' - 'Perceptron' - 'Perplexity' - 'Phala' - 'Recraft' - 'Reka' - 'Relace' - 'Sail Research' - 'Sakana AI' - 'SambaNova' - 'Seed' - 'SiliconFlow' - 'Sourceful' - 'StepFun' - 'Stealth' - 'StreamLake' - 'Switchpoint' - 'Tencent' - 'Tenstorrent' - 'Thinking Machines' - 'Together' - 'Upstage' - 'Venice' - 'Wafer' - 'WandB' - 'Quiver' - 'Krea' - 'Runway' - 'Xiaomi' - 'xAI' - 'Z.AI' - 'FakeProvider' example: 'OpenAI' type: 'string' routed_service_tier: description: 'The service tier this request was routed to (e.g. flex, priority). The tier actually applied and billed is determined by the provider response and may differ.' enum: - 'flex' - 'priority' example: 'priority' type: 'string' status: description: 'HTTP status code from the provider' example: 200 type: - 'integer' - 'null' required: - 'status' type: 'object' ProviderSort: description: 'The provider sorting strategy (price, throughput, latency)' enum: - 'price' - 'throughput' - 'latency' - 'exacto' example: 'price' type: 'string' ProviderSortConfig: description: 'The provider sorting strategy (price, throughput, latency)' example: by: 'price' partition: 'model' properties: by: description: 'The provider sorting strategy (price, throughput, latency)' enum: - 'price' - 'throughput' - 'latency' - 'exacto' - null example: 'price' type: - 'string' - 'null' partition: description: 'Partitioning strategy for sorting: "model" (default) groups endpoints by model before sorting (fallback models remain fallbacks), "none" sorts all endpoints together regardless of model.' enum: - 'model' - 'none' - null example: 'model' type: - 'string' - 'null' type: 'object' PublicEndpoint: description: 'Information about a specific model endpoint' example: context_length: 8192 latency_last_30m: p50: 0.25 p75: 0.35 p90: 0.48 p99: 0.85 max_completion_tokens: 4096 max_prompt_tokens: 8192 model_id: 'openai/gpt-4' model_name: 'GPT-4' name: 'OpenAI: GPT-4' pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' provider_name: 'OpenAI' quantization: 'fp16' status: 0 supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supports_implicit_caching: true tag: 'openai' throughput_last_30m: p50: 45.2 p75: 38.5 p90: 28.3 p99: 15.1 uptime_last_1d: 99.8 uptime_last_30m: 99.5 uptime_last_5m: 100 properties: context_length: type: 'integer' latency_last_30m: $ref: '#/components/schemas/PercentileStats' max_completion_tokens: type: - 'integer' - 'null' max_prompt_tokens: type: - 'integer' - 'null' model_id: description: 'The unique identifier for the model (permaslug)' example: 'openai/gpt-4' type: 'string' model_name: type: 'string' name: type: 'string' pricing: properties: audio: description: 'Price in USD per audio input token' type: 'string' audio_output: description: 'Price in USD per audio output token' type: 'string' completion: description: 'Price in USD per token for completion (output) generation' type: 'string' discount: description: 'Fractional discount applied to this endpoint''s pricing; the price is multiplied by (1 - discount) (0 = no discount, 1 = free)' format: 'double' type: 'number' image: description: 'Price in USD per input image' type: 'string' image_output: description: 'Price in USD per output image' type: 'string' image_token: description: 'Price in USD per image token' type: 'string' input_audio_cache: description: 'Price in USD per cached audio input token' type: 'string' input_cache_read: description: 'Price in USD per cached input token (read)' type: 'string' input_cache_write: description: 'Price per cache-write token, in USD per token. For providers with multiple cache TTLs (e.g. Anthropic), this is the default (5-minute) cache-write rate.' type: 'string' input_cache_write_1h: description: 'Price per 1-hour cache-write token, in USD per token. Only present for providers that price an extended (1-hour) cache TTL separately, such as Anthropic.' type: 'string' internal_reasoning: description: 'Price in USD per internal reasoning token' type: 'string' overrides: description: 'Conditional overrides of the base pricing (e.g. long-context or time-based pricing). An entry applies when all of its condition fields (e.g. min_prompt_tokens, or the utc_start/utc_end time window) match the request; among applicable entries, later entries win per key; price keys absent from an entry inherit the base price. The top-level pricing keys always reflect the price that applies under default conditions.' items: $ref: '#/components/schemas/PricingOverride' type: 'array' prompt: description: 'Price in USD per token for prompt (input) processing' type: 'string' request: description: 'Price in USD per request' type: 'string' web_search: description: 'Price in USD per web search' type: 'string' required: - 'prompt' - 'completion' type: 'object' provider_name: $ref: '#/components/schemas/ProviderName' quantization: anyOf: - $ref: '#/components/schemas/Quantization' - type: 'null' status: $ref: '#/components/schemas/EndpointStatus' supported_parameters: items: $ref: '#/components/schemas/Parameter' type: 'array' supports_implicit_caching: type: 'boolean' tag: type: 'string' throughput_last_30m: allOf: - $ref: '#/components/schemas/PercentileStats' - description: 'Throughput percentiles in tokens per second over the last 30 minutes. Throughput measures output token generation speed. Only visible when authenticated with an API key or cookie; returns null for unauthenticated requests.' uptime_last_1d: description: 'Uptime percentage over the last 1 day, calculated as successful requests / (successful + error requests) * 100. Rate-limited requests are excluded. Returns null if insufficient data.' format: 'double' type: - 'number' - 'null' uptime_last_30m: format: 'double' type: - 'number' - 'null' uptime_last_5m: description: 'Uptime percentage over the last 5 minutes, calculated as successful requests / (successful + error requests) * 100. Rate-limited requests are excluded. Returns null if insufficient data.' format: 'double' type: - 'number' - 'null' required: - 'name' - 'model_id' - 'model_name' - 'context_length' - 'pricing' - 'provider_name' - 'tag' - 'quantization' - 'max_completion_tokens' - 'max_prompt_tokens' - 'supported_parameters' - 'uptime_last_30m' - 'uptime_last_5m' - 'uptime_last_1d' - 'supports_implicit_caching' - 'latency_last_30m' - 'throughput_last_30m' type: 'object' PublicPricing: description: 'Pricing information for the model' example: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' properties: audio: description: 'Price in USD per audio input token' type: 'string' audio_output: description: 'Price in USD per audio output token' type: 'string' completion: description: 'Price in USD per token for completion (output) generation' type: 'string' discount: description: 'Fractional discount applied to this endpoint''s pricing; the price is multiplied by (1 - discount) (0 = no discount, 1 = free)' format: 'double' type: 'number' image: description: 'Price in USD per input image' type: 'string' image_output: description: 'Price in USD per output image' type: 'string' image_token: description: 'Price in USD per image token' type: 'string' input_audio_cache: description: 'Price in USD per cached audio input token' type: 'string' input_cache_read: description: 'Price in USD per cached input token (read)' type: 'string' input_cache_write: description: 'Price per cache-write token, in USD per token. For providers with multiple cache TTLs (e.g. Anthropic), this is the default (5-minute) cache-write rate.' type: 'string' input_cache_write_1h: description: 'Price per 1-hour cache-write token, in USD per token. Only present for providers that price an extended (1-hour) cache TTL separately, such as Anthropic.' type: 'string' internal_reasoning: description: 'Price in USD per internal reasoning token' type: 'string' overrides: description: 'Conditional overrides of the base pricing (e.g. long-context or time-based pricing). An entry applies when all of its condition fields (e.g. min_prompt_tokens, or the utc_start/utc_end time window) match the request; among applicable entries, later entries win per key; price keys absent from an entry inherit the base price. The top-level pricing keys always reflect the price that applies under default conditions.' items: $ref: '#/components/schemas/PricingOverride' type: 'array' prompt: description: 'Price in USD per token for prompt (input) processing' type: 'string' request: description: 'Price in USD per request' type: 'string' web_search: description: 'Price in USD per web search' type: 'string' required: - 'prompt' - 'completion' type: 'object' Quantization: enum: - 'int4' - 'int8' - 'fp4' - 'mxfp4' - 'nvfp4' - 'fp6' - 'fp8' - 'mxfp8' - 'fp16' - 'bf16' - 'fp32' - 'unknown' example: 'fp16' type: 'string' RangeCapability: description: 'A parameter that accepts any value within an inclusive numeric range.' example: max: 100 min: 0 type: 'range' properties: max: type: 'number' min: type: 'number' type: enum: - 'range' type: 'string' required: - 'type' - 'min' - 'max' type: 'object' RankingsDailyItem: example: date: '2026-05-11' model_permaslug: 'openai/gpt-4o-2024-05-13' total_tokens: '12345678' properties: date: description: 'UTC calendar date the row is aggregated over (YYYY-MM-DD).' example: '2026-05-11' type: 'string' model_permaslug: description: 'Model variant permaslug (e.g. `openai/gpt-4o-2024-05-13`, `openai/gpt-4o-2024-05-13:free`). Non-default variants include a `:variant` suffix and are ranked as their own entry. The reserved value `other` denotes the aggregated row covering every model outside the daily top 50 for that date — always sorted last within its date.' example: 'openai/gpt-4o-2024-05-13' type: 'string' total_tokens: description: 'Sum of `prompt_tokens + completion_tokens` for the day, returned as a decimal string so 64-bit values are not truncated.' example: '12345678' type: 'string' required: - 'date' - 'model_permaslug' - 'total_tokens' type: 'object' RankingsDailyMeta: example: as_of: '2026-05-12T02:00:00Z' end_date: '2026-05-11' start_date: '2026-04-12' version: 'v1' properties: as_of: description: 'ISO-8601 timestamp of when the response was generated. Reflects data-freshness because the underlying materialized view continuously ingests upstream events.' example: '2026-05-12T02:00:00Z' type: 'string' end_date: description: 'Resolved end of the date window (UTC, inclusive).' example: '2026-05-11' type: 'string' start_date: description: 'Resolved start of the date window (UTC, inclusive).' example: '2026-04-12' type: 'string' version: description: 'Dataset version. Field names and grain are stable for the life of `v1`.' enum: - 'v1' type: 'string' required: - 'as_of' - 'version' - 'start_date' - 'end_date' type: 'object' RankingsDailyResponse: example: data: - date: '2026-05-11' model_permaslug: 'openai/gpt-4o-2024-05-13' total_tokens: '12345678' - date: '2026-05-11' model_permaslug: 'anthropic/claude-3.5-sonnet-20241022' total_tokens: '9876543' meta: as_of: '2026-05-12T02:00:00Z' end_date: '2026-05-11' start_date: '2026-04-12' version: 'v1' properties: data: description: 'Up to 51 rows per day — the top 50 public models by `total_tokens` for each UTC calendar date in the window, plus one aggregated `other` row summing every model outside that top 50 (omitted when the long tail is empty). Rows are sorted by `date` ascending, then by `total_tokens` descending, with `other` pinned last within its date. Ties between real models break alphabetically on `model_permaslug` so the order is stable across requests.' items: $ref: '#/components/schemas/RankingsDailyItem' type: 'array' meta: $ref: '#/components/schemas/RankingsDailyMeta' required: - 'data' - 'meta' type: 'object' ReasoningConfig: anyOf: - allOf: - $ref: '#/components/schemas/BaseReasoningConfig' - properties: enabled: type: - 'boolean' - 'null' max_tokens: type: - 'integer' - 'null' type: 'object' - type: 'null' description: 'Configuration for reasoning mode in the response' example: enabled: true summary: 'auto' ReasoningContext: description: 'Controls which reasoning is available to the model. `auto` uses the model default (same as omitting); `all_turns` includes reasoning from earlier turns passed in input; `current_turn` limits to the current turn only. Only supported by OpenAI GPT-5.6 and newer.' enum: - 'auto' - 'all_turns' - 'current_turn' - null example: 'all_turns' type: - 'string' - 'null' ReasoningDeltaEvent: allOf: - $ref: '#/components/schemas/BaseReasoningDeltaEvent' - properties: {} type: 'object' description: 'Event emitted when reasoning text delta is streamed' example: content_index: 0 delta: 'First, we need' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.reasoning_text.delta' ReasoningDetailEncrypted: description: 'Reasoning detail encrypted schema' example: data: 'encrypted data' type: 'reasoning.encrypted' properties: data: type: 'string' format: $ref: '#/components/schemas/ReasoningFormat' id: type: - 'string' - 'null' index: type: 'integer' type: enum: - 'reasoning.encrypted' type: 'string' required: - 'type' - 'data' type: 'object' ReasoningDetailServerToolCall: description: 'Record of an OpenRouter server-tool invocation (e.g. openrouter:fusion), carried in reasoning_details so a prior tool call can be rehydrated into a later turn of the same conversation.' example: arguments: '{"prompt":"Compare carbon tax proposals"}' result: '{"status":"ok","models":["openai/gpt-4o"]}' tool_call_id: 'call_abc123' tool_name: 'openrouter:fusion' type: 'reasoning.server_tool_call' properties: arguments: type: 'string' format: $ref: '#/components/schemas/ReasoningFormat' id: type: - 'string' - 'null' index: type: 'integer' result: type: 'string' tool_call_id: type: - 'string' - 'null' tool_name: type: 'string' type: enum: - 'reasoning.server_tool_call' type: 'string' required: - 'type' - 'tool_name' - 'arguments' - 'result' type: 'object' ReasoningDetailSummary: description: 'Reasoning detail summary schema' example: summary: 'The model analyzed the problem by first identifying key constraints, then evaluating possible solutions...' type: 'reasoning.summary' properties: format: $ref: '#/components/schemas/ReasoningFormat' id: type: - 'string' - 'null' index: type: 'integer' summary: type: 'string' type: enum: - 'reasoning.summary' type: 'string' required: - 'type' - 'summary' type: 'object' ReasoningDetailText: description: 'Reasoning detail text schema' example: signature: 'signature' text: 'The model analyzed the problem by first identifying key constraints, then evaluating possible solutions...' type: 'reasoning.text' properties: format: $ref: '#/components/schemas/ReasoningFormat' id: type: - 'string' - 'null' index: type: 'integer' signature: type: - 'string' - 'null' text: type: - 'string' - 'null' type: enum: - 'reasoning.text' type: 'string' required: - 'type' type: 'object' ReasoningDetailUnion: description: 'Reasoning detail union schema' discriminator: mapping: reasoning.encrypted: '#/components/schemas/ReasoningDetailEncrypted' reasoning.server_tool_call: '#/components/schemas/ReasoningDetailServerToolCall' reasoning.summary: '#/components/schemas/ReasoningDetailSummary' reasoning.text: '#/components/schemas/ReasoningDetailText' propertyName: 'type' example: summary: 'The model analyzed the problem by first identifying key constraints, then evaluating possible solutions...' type: 'reasoning.summary' oneOf: - $ref: '#/components/schemas/ReasoningDetailSummary' - $ref: '#/components/schemas/ReasoningDetailEncrypted' - $ref: '#/components/schemas/ReasoningDetailText' - $ref: '#/components/schemas/ReasoningDetailServerToolCall' ReasoningDoneEvent: allOf: - $ref: '#/components/schemas/BaseReasoningDoneEvent' - properties: {} type: 'object' description: 'Event emitted when reasoning text streaming is complete' example: content_index: 0 item_id: 'item-1' output_index: 0 sequence_number: 6 text: 'First, we need to identify the key components and then combine them logically.' type: 'response.reasoning_text.done' ReasoningEffort: enum: - 'max' - 'xhigh' - 'high' - 'medium' - 'low' - 'minimal' - 'none' - null example: 'medium' type: - 'string' - 'null' ReasoningFormat: enum: - 'unknown' - 'openai-responses-v1' - 'azure-openai-responses-v1' - 'bedrock-openai-responses-v1' - 'xai-responses-v1' - 'meta-responses-v1' - 'anthropic-claude-v1' - 'google-gemini-v1' - null example: 'unknown' type: - 'string' - 'null' ReasoningItem: allOf: - $ref: '#/components/schemas/OutputItemReasoning' - properties: content: items: $ref: '#/components/schemas/ReasoningTextContent' type: - 'array' - 'null' format: $ref: '#/components/schemas/ReasoningFormat' signature: type: - 'string' - 'null' type: 'object' description: 'Reasoning output item with signature and format extensions' example: id: 'reasoning-abc123' summary: - text: 'Step by step analysis' type: 'summary_text' type: 'reasoning' ReasoningMode: description: 'Selects the reasoning mode. `standard` is the default; `pro` engages deeper reasoning on models that support it, billed at standard token rates. Only supported by OpenAI GPT-5.6 and newer.' enum: - 'standard' - 'pro' - null example: 'standard' type: - 'string' - 'null' ReasoningSummaryPartAddedEvent: allOf: - $ref: '#/components/schemas/BaseReasoningSummaryPartAddedEvent' - properties: {} type: 'object' description: 'Event emitted when a reasoning summary part is added' example: item_id: 'item-1' output_index: 0 part: text: '' type: 'summary_text' sequence_number: 3 summary_index: 0 type: 'response.reasoning_summary_part.added' ReasoningSummaryPartDoneEvent: allOf: - $ref: '#/components/schemas/BaseReasoningSummaryPartDoneEvent' - properties: {} type: 'object' description: 'Event emitted when a reasoning summary part is complete' example: item_id: 'item-1' output_index: 0 part: text: 'Analyzing the problem step by step to find the optimal solution.' type: 'summary_text' sequence_number: 7 summary_index: 0 type: 'response.reasoning_summary_part.done' ReasoningSummaryText: example: text: 'Analyzed the problem using first principles' type: 'summary_text' properties: text: type: 'string' type: enum: - 'summary_text' type: 'string' required: - 'type' - 'text' type: 'object' ReasoningSummaryTextDeltaEvent: allOf: - $ref: '#/components/schemas/BaseReasoningSummaryTextDeltaEvent' - properties: {} type: 'object' description: 'Event emitted when reasoning summary text delta is streamed' example: delta: 'Analyzing' item_id: 'item-1' output_index: 0 sequence_number: 4 summary_index: 0 type: 'response.reasoning_summary_text.delta' ReasoningSummaryTextDoneEvent: allOf: - $ref: '#/components/schemas/BaseReasoningSummaryTextDoneEvent' - properties: {} type: 'object' description: 'Event emitted when reasoning summary text streaming is complete' example: item_id: 'item-1' output_index: 0 sequence_number: 6 summary_index: 0 text: 'Analyzing the problem step by step to find the optimal solution.' type: 'response.reasoning_summary_text.done' ReasoningSummaryVerbosity: enum: - 'auto' - 'concise' - 'detailed' - null example: 'auto' type: - 'string' - 'null' ReasoningTextContent: example: text: 'Let me think step by step about this problem...' type: 'reasoning_text' properties: text: type: 'string' type: enum: - 'reasoning_text' type: 'string' required: - 'type' - 'text' type: 'object' RefusalDeltaEvent: allOf: - $ref: '#/components/schemas/BaseRefusalDeltaEvent' - properties: {} type: 'object' description: 'Event emitted when a refusal delta is streamed' example: content_index: 0 delta: 'I''m sorry' item_id: 'item-1' output_index: 0 sequence_number: 4 type: 'response.refusal.delta' RefusalDoneEvent: allOf: - $ref: '#/components/schemas/BaseRefusalDoneEvent' - properties: {} type: 'object' description: 'Event emitted when refusal streaming is complete' example: content_index: 0 item_id: 'item-1' output_index: 0 refusal: 'I''m sorry, but I can''t assist with that request.' sequence_number: 6 type: 'response.refusal.done' RequestMetadata: additionalProperties: maxLength: 512 type: 'string' description: 'Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed.' example: session_id: 'abc-def-ghi' user_id: '123' type: - 'object' - 'null' RequestTimeoutResponse: description: 'Request Timeout - Operation exceeded time limit' example: error: code: 408 message: 'Operation timed out. Please try again later.' properties: error: $ref: '#/components/schemas/RequestTimeoutResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' RequestTimeoutResponseErrorData: description: 'Error data for RequestTimeoutResponse' example: code: 408 message: 'Operation timed out. Please try again later.' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' ResponseHealingPlugin: example: enabled: true id: 'response-healing' properties: enabled: description: 'Set to false to disable the response-healing plugin for this request. Defaults to true.' type: 'boolean' id: enum: - 'response-healing' type: 'string' required: - 'id' type: 'object' ResponseIncludesEnum: enum: - 'file_search_call.results' - 'message.input_image.image_url' - 'computer_call_output.output.image_url' - 'reasoning.encrypted_content' - 'code_interpreter_call.outputs' example: 'file_search_call.results' type: 'string' ResponseOutputText: example: annotations: - end_index: 42 start_index: 0 title: 'Paris - Wikipedia' type: 'url_citation' url: 'https://en.wikipedia.org/wiki/Paris' text: 'The capital of France is Paris.' type: 'output_text' properties: annotations: items: $ref: '#/components/schemas/OpenAIResponsesAnnotation' type: 'array' logprobs: items: properties: bytes: items: type: 'integer' type: 'array' logprob: format: 'double' type: 'number' token: type: 'string' top_logprobs: items: properties: bytes: items: type: 'integer' type: 'array' logprob: format: 'double' type: 'number' token: type: 'string' required: - 'token' - 'bytes' - 'logprob' type: 'object' type: 'array' required: - 'token' - 'bytes' - 'logprob' - 'top_logprobs' type: 'object' type: 'array' text: type: 'string' type: enum: - 'output_text' type: 'string' required: - 'type' - 'text' type: 'object' ResponsesErrorField: description: 'Error information returned from the API' example: code: 'rate_limit_exceeded' message: 'Rate limit exceeded. Please try again later.' properties: code: enum: - 'server_error' - 'rate_limit_exceeded' - 'invalid_prompt' - 'vector_store_timeout' - 'invalid_image' - 'invalid_image_format' - 'invalid_base64_image' - 'invalid_image_url' - 'image_too_large' - 'image_too_small' - 'image_parse_error' - 'image_content_policy_violation' - 'invalid_image_mode' - 'image_file_too_large' - 'unsupported_image_media_type' - 'empty_image_file' - 'failed_to_download_image' - 'image_file_not_found' - 'bio_policy' - 'data_residency_mismatch' type: 'string' message: type: 'string' required: - 'code' - 'message' type: - 'object' - 'null' ResponsesRequest: description: 'Request schema for Responses endpoint' example: input: - content: 'Hello, how are you?' role: 'user' type: 'message' model: 'anthropic/claude-4.5-sonnet-20250929' temperature: 0.7 tools: - description: 'Get the current weather in a given location' name: 'get_current_weather' parameters: properties: location: type: 'string' type: 'object' type: 'function' top_p: 0.9 properties: background: type: - 'boolean' - 'null' cache_control: $ref: '#/components/schemas/AnthropicCacheControlDirective' debug: $ref: '#/components/schemas/ChatDebugOptions' frequency_penalty: format: 'double' type: - 'number' - 'null' image_config: $ref: '#/components/schemas/ImageConfig' include: items: $ref: '#/components/schemas/ResponseIncludesEnum' type: - 'array' - 'null' input: $ref: '#/components/schemas/Inputs' instructions: type: - 'string' - 'null' max_output_tokens: type: - 'integer' - 'null' max_tool_calls: description: 'Maximum number of server-tool (e.g. `openrouter:web_search`) agent steps the model may take during a request. Defaults to 30, which is also the maximum. Ignored when `stop_server_tools_when` is set.' example: 30 type: - 'integer' - 'null' metadata: $ref: '#/components/schemas/RequestMetadata' modalities: description: 'Output modalities for the response. Supported values are "text" and "image".' example: - 'text' - 'image' items: $ref: '#/components/schemas/OutputModalityEnum' type: 'array' model: type: 'string' models: items: type: 'string' type: 'array' parallel_tool_calls: type: - 'boolean' - 'null' plugins: description: 'Plugins you want to enable for this request, including their settings.' items: discriminator: mapping: auto-beta-router: '#/components/schemas/AutoBetaRouterPlugin' auto-router: '#/components/schemas/AutoRouterPlugin' context-compression: '#/components/schemas/ContextCompressionPlugin' file-parser: '#/components/schemas/FileParserPlugin' fusion: '#/components/schemas/FusionPlugin' moderation: '#/components/schemas/ModerationPlugin' pareto-router: '#/components/schemas/ParetoRouterPlugin' response-healing: '#/components/schemas/ResponseHealingPlugin' web: '#/components/schemas/WebSearchPlugin' web-fetch: '#/components/schemas/WebFetchPlugin' propertyName: 'id' oneOf: - $ref: '#/components/schemas/AutoRouterPlugin' - $ref: '#/components/schemas/AutoBetaRouterPlugin' - $ref: '#/components/schemas/ModerationPlugin' - $ref: '#/components/schemas/WebSearchPlugin' - $ref: '#/components/schemas/WebFetchPlugin' - $ref: '#/components/schemas/FileParserPlugin' - $ref: '#/components/schemas/ResponseHealingPlugin' - $ref: '#/components/schemas/ContextCompressionPlugin' - $ref: '#/components/schemas/ParetoRouterPlugin' - $ref: '#/components/schemas/FusionPlugin' type: 'array' presence_penalty: format: 'double' type: - 'number' - 'null' previous_response_id: description: 'Not supported. The Responses API is stateless: no responses are stored, so a previous response cannot be referenced. Requests with a non-null value are rejected with a 400 error. Send the full conversation history in `input` instead.' prompt: $ref: '#/components/schemas/StoredPromptTemplate' prompt_cache_key: type: - 'string' - 'null' prompt_cache_options: $ref: '#/components/schemas/PromptCacheOptions' provider: $ref: '#/components/schemas/ProviderPreferences' reasoning: $ref: '#/components/schemas/ReasoningConfig' route: $ref: '#/components/schemas/DeprecatedRoute' safety_identifier: description: 'Recommended per-end-user identifier for abuse isolation. Use a stable ID, hash, or pseudonym. When a provider requires a user identity, OpenRouter folds it into the hashed identity sent upstream and never forwards it raw. If omitted, requests use an account-level identity, so provider policy blocks can affect the whole account.' example: 'user-123' type: - 'string' - 'null' service_tier: default: 'auto' description: 'The service tier to use for processing this request. `fast` is accepted as an alias for `priority`.' enum: - 'auto' - 'default' - 'fast' - 'flex' - 'priority' - 'scale' - null type: - 'string' - 'null' session_id: description: 'A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.' maxLength: 256 type: 'string' stop_server_tools_when: $ref: '#/components/schemas/StopServerToolsWhen' store: const: false default: false type: 'boolean' stream: default: false type: 'boolean' temperature: format: 'double' type: - 'number' - 'null' text: $ref: '#/components/schemas/TextExtendedConfig' tool_choice: $ref: '#/components/schemas/OpenAIResponsesToolChoice' tools: items: anyOf: - allOf: - $ref: '#/components/schemas/FunctionTool' - properties: {} type: 'object' description: 'Function tool definition' example: description: 'Get the current weather in a location' name: 'get_weather' parameters: properties: location: description: 'The city and state' type: 'string' unit: enum: - 'celsius' - 'fahrenheit' type: 'string' required: - 'location' type: 'object' type: 'function' - $ref: '#/components/schemas/Preview_WebSearchServerTool' - $ref: '#/components/schemas/Preview_20250311_WebSearchServerTool' - $ref: '#/components/schemas/Legacy_WebSearchServerTool' - $ref: '#/components/schemas/WebSearchServerTool' - $ref: '#/components/schemas/FileSearchServerTool' - $ref: '#/components/schemas/ComputerUseServerTool' - $ref: '#/components/schemas/CodeInterpreterServerTool' - $ref: '#/components/schemas/McpServerTool' - $ref: '#/components/schemas/ImageGenerationServerTool' - $ref: '#/components/schemas/CodexLocalShellTool' - $ref: '#/components/schemas/ShellServerTool' - $ref: '#/components/schemas/ApplyPatchServerTool' - $ref: '#/components/schemas/CustomTool' - $ref: '#/components/schemas/NamespaceTool' - $ref: '#/components/schemas/AdvisorServerTool_OpenRouter' - $ref: '#/components/schemas/SubagentServerTool_OpenRouter' - $ref: '#/components/schemas/DatetimeServerTool' - $ref: '#/components/schemas/FilesServerTool' - $ref: '#/components/schemas/FusionServerTool_OpenRouter' - $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter' - $ref: '#/components/schemas/SearchModelsServerTool_OpenRouter' - $ref: '#/components/schemas/WebFetchServerTool' - $ref: '#/components/schemas/WebSearchServerTool_OpenRouter' - $ref: '#/components/schemas/ApplyPatchServerTool_OpenRouter' - $ref: '#/components/schemas/BashServerTool' - $ref: '#/components/schemas/ShellServerTool_OpenRouter' type: 'array' top_k: type: 'integer' top_logprobs: type: - 'integer' - 'null' top_p: format: 'double' type: - 'number' - 'null' trace: $ref: '#/components/schemas/TraceConfig' truncation: $ref: '#/components/schemas/OpenAIResponsesTruncation' user: description: 'A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters.' maxLength: 256 type: 'string' type: 'object' ResponsesStreamingResponse: example: data: content_index: 0 delta: 'Hello' item_id: 'item-1' logprobs: [] output_index: 0 sequence_number: 4 type: 'response.output_text.delta' properties: data: $ref: '#/components/schemas/StreamEvents' required: - 'data' type: 'object' RouterAttempt: example: model: 'openai/gpt-4o' provider: 'OpenAI' status: 200 properties: model: type: 'string' provider: type: 'string' status: type: 'integer' required: - 'provider' - 'model' - 'status' type: 'object' RouterParams: additionalProperties: {} example: version_group: 'anthropic/claude-sonnet-4' properties: quality_floor: format: 'double' type: 'number' throughput_floor: format: 'double' type: 'number' version_group: type: 'string' type: 'object' RoutingStrategy: enum: - 'direct' - 'auto' - 'free' - 'latest' - 'alias' - 'fallback' - 'pareto' - 'bodybuilder' - 'fusion' example: 'direct' type: 'string' SandboxSleepAfterSeconds: description: 'How long (in seconds) the container stays warm after its last command before sleeping, freeing its capacity slot. Idle-based: each command renews the timer. Defaults to 900 (15 minutes); capped at 2592000 (30 days).' example: 900 type: 'integer' ScimGroup: example: created_at: '2025-08-24T10:30:00.000Z' display_name: 'Engineering' external_id: 'group-external-id' id: '550e8400-e29b-41d4-a716-446655440000' organization_id: 'org_123456' updated_at: '2025-08-24T10:30:00.000Z' properties: created_at: type: 'string' display_name: type: 'string' external_id: type: - 'string' - 'null' id: format: 'uuid' type: 'string' organization_id: type: 'string' updated_at: type: 'string' required: - 'id' - 'organization_id' - 'external_id' - 'display_name' - 'created_at' - 'updated_at' type: 'object' ScimGroupMapping: example: created_at: '2025-08-24T10:30:00.000Z' id: '770e8400-e29b-41d4-a716-446655440000' organization_id: 'org_123456' role: 'member' scim_group_id: '550e8400-e29b-41d4-a716-446655440000' updated_at: '2025-08-24T10:30:00.000Z' workspace_id: '660e8400-e29b-41d4-a716-446655440000' properties: created_at: type: 'string' id: format: 'uuid' type: 'string' organization_id: type: 'string' role: enum: - 'admin' - 'member' type: 'string' scim_group_id: format: 'uuid' type: 'string' updated_at: type: 'string' workspace_id: format: 'uuid' type: 'string' required: - 'id' - 'organization_id' - 'scim_group_id' - 'workspace_id' - 'role' - 'created_at' - 'updated_at' type: 'object' SearchContextSizeEnum: description: 'Size of the search context for web search tools' enum: - 'low' - 'medium' - 'high' example: 'medium' type: 'string' SearchModelsServerTool_OpenRouter: description: 'OpenRouter built-in server tool: searches and filters AI models available on OpenRouter' example: parameters: max_results: 5 type: 'openrouter:experimental__search_models' properties: parameters: $ref: '#/components/schemas/SearchModelsServerToolConfig' type: enum: - 'openrouter:experimental__search_models' type: 'string' required: - 'type' type: 'object' SearchModelsServerToolConfig: description: 'Configuration for the openrouter:experimental__search_models server tool' example: max_results: 5 properties: max_results: description: 'Maximum number of models to return. Defaults to 5, max 20.' example: 5 type: 'integer' type: 'object' SearchQualityLevel: description: 'How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API''s native search_context_size parameter. Overridden by `max_characters` when both are set.' enum: - 'low' - 'medium' - 'high' example: 'medium' type: 'string' ServerToolUseDetails: description: 'Usage for server-side tool execution (e.g., web search)' example: tool_calls_executed: 2 tool_calls_requested: 2 web_search_requests: 2 properties: tool_calls_executed: description: 'Number of OpenRouter server tool calls that executed and produced a result.' type: - 'integer' - 'null' tool_calls_requested: description: 'Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here.' type: - 'integer' - 'null' web_search_requests: description: 'Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two.' type: - 'integer' - 'null' type: - 'object' - 'null' ServiceTier: enum: - 'auto' - 'default' - 'flex' - 'priority' - 'scale' - null example: 'default' type: - 'string' - 'null' ServiceUnavailableResponse: description: 'Service Unavailable - Service temporarily unavailable' example: error: code: 503 message: 'Service temporarily unavailable' properties: error: $ref: '#/components/schemas/ServiceUnavailableResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' ServiceUnavailableResponseErrorData: description: 'Error data for ServiceUnavailableResponse' example: code: 503 message: 'Service temporarily unavailable' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' ShellCallItem: description: 'A shell command execution call (newer variant)' example: action: commands: - 'ls' - '-la' max_output_length: 10000 call_id: 'call-abc123' status: 'completed' type: 'shell_call' properties: action: properties: commands: items: type: 'string' type: 'array' max_output_length: type: - 'integer' - 'null' timeout_ms: type: - 'integer' - 'null' required: - 'commands' type: 'object' call_id: type: 'string' environment: {} id: type: - 'string' - 'null' status: anyOf: - $ref: '#/components/schemas/ToolCallStatus' - type: 'null' type: enum: - 'shell_call' type: 'string' required: - 'type' - 'call_id' - 'action' type: 'object' ShellCallOutputItem: description: 'Output from a shell command execution (newer variant)' example: call_id: 'call-abc123' output: - content: "total 0\n" type: 'stdout' status: 'completed' type: 'shell_call_output' properties: call_id: type: 'string' id: type: - 'string' - 'null' max_output_length: type: - 'integer' - 'null' output: items: additionalProperties: {} properties: content: type: - 'string' - 'null' exit_code: type: - 'integer' - 'null' type: type: 'string' required: - 'type' type: 'object' type: 'array' status: anyOf: - $ref: '#/components/schemas/ToolCallStatus' - type: 'null' type: enum: - 'shell_call_output' type: 'string' required: - 'type' - 'call_id' - 'output' type: 'object' ShellCallStatus: description: 'Status of a shell call or its output.' enum: - 'in_progress' - 'completed' - 'incomplete' example: 'completed' type: 'string' ShellServerTool: description: 'Shell tool configuration' example: type: 'shell' properties: type: enum: - 'shell' type: 'string' required: - 'type' type: 'object' ShellServerTool_OpenRouter: description: 'OpenRouter built-in server tool: runs shell commands server-side in a sandboxed container (a sandbox-backed clone of OpenAI''s hosted shell tool)' example: parameters: engine: 'openrouter' environment: type: 'container_auto' type: 'openrouter:shell' properties: parameters: $ref: '#/components/schemas/ShellServerToolConfig' type: enum: - 'openrouter:shell' type: 'string' required: - 'type' type: 'object' ShellServerToolConfig: description: 'Configuration for the openrouter:shell server tool' example: engine: 'openrouter' environment: type: 'container_auto' properties: engine: $ref: '#/components/schemas/ShellServerToolEngine' environment: $ref: '#/components/schemas/ShellServerToolEnvironment' sleep_after_seconds: $ref: '#/components/schemas/SandboxSleepAfterSeconds' type: 'object' ShellServerToolEngine: description: 'Which shell engine to use. "openrouter" runs commands server-side in the OpenRouter sandbox. "auto" (default) keeps the provider''s native hosted shell when available (OpenAI); on other providers the call is routed to the OpenRouter sandbox.' enum: - 'auto' - 'openrouter' example: 'openrouter' type: 'string' ShellServerToolEnvironment: description: 'Server-side execution environment for the shell tool. Only container-backed environments are supported; "local" shells are not.' discriminator: mapping: container_auto: '#/components/schemas/ContainerAutoEnvironment' container_reference: '#/components/schemas/ContainerReferenceEnvironment' propertyName: 'type' example: type: 'container_auto' oneOf: - $ref: '#/components/schemas/ContainerAutoEnvironment' - $ref: '#/components/schemas/ContainerReferenceEnvironment' SpeechRequest: description: 'Text-to-speech request input' example: input: 'Hello world' model: 'mistralai/voxtral-mini-tts-2603' response_format: 'pcm' speed: 1 voice: 'en_paul_neutral' properties: input: description: 'Text to synthesize' example: 'Hello world' type: 'string' model: description: 'TTS model identifier' example: 'mistralai/voxtral-mini-tts-2603' type: 'string' provider: description: 'Provider-specific passthrough configuration' properties: options: $ref: '#/components/schemas/ProviderOptions' type: 'object' response_format: default: 'pcm' description: 'Audio output format' enum: - 'mp3' - 'pcm' example: 'pcm' type: 'string' speed: description: 'Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers.' example: 1 format: 'double' type: 'number' voice: description: 'Voice identifier (provider-specific).' example: 'en_paul_neutral' minLength: 1 type: 'string' required: - 'model' - 'input' type: 'object' StopServerToolsWhen: description: 'Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. When a condition fires while the model is still emitting tool calls, the pending tool calls are executed and one final turn is made with tool calls disabled so the response ends with a natural-language answer instead of an unfinished tool call.' example: - step_count: 5 type: 'step_count_is' - max_cost_in_dollars: 0.5 type: 'max_cost' items: $ref: '#/components/schemas/StopServerToolsWhenCondition' minItems: 1 type: 'array' StopServerToolsWhenCondition: description: 'A single condition that, when met, halts the server-tool agent loop.' discriminator: mapping: finish_reason_is: '#/components/schemas/StopServerToolsWhenFinishReasonIs' has_tool_call: '#/components/schemas/StopServerToolsWhenHasToolCall' max_cost: '#/components/schemas/StopServerToolsWhenMaxCost' max_tokens_used: '#/components/schemas/StopServerToolsWhenMaxTokensUsed' step_count_is: '#/components/schemas/StopServerToolsWhenStepCountIs' propertyName: 'type' example: step_count: 5 type: 'step_count_is' oneOf: - $ref: '#/components/schemas/StopServerToolsWhenStepCountIs' - $ref: '#/components/schemas/StopServerToolsWhenHasToolCall' - $ref: '#/components/schemas/StopServerToolsWhenMaxTokensUsed' - $ref: '#/components/schemas/StopServerToolsWhenMaxCost' - $ref: '#/components/schemas/StopServerToolsWhenFinishReasonIs' StopServerToolsWhenFinishReasonIs: description: 'Stop when the upstream model emits this finish reason (e.g. `length`).' example: reason: 'length' type: 'finish_reason_is' properties: reason: minLength: 1 type: 'string' type: enum: - 'finish_reason_is' type: 'string' required: - 'type' - 'reason' type: 'object' StopServerToolsWhenHasToolCall: description: 'Stop after a tool with this name has been called.' example: tool_name: 'finalize' type: 'has_tool_call' properties: tool_name: minLength: 1 type: 'string' type: enum: - 'has_tool_call' type: 'string' required: - 'type' - 'tool_name' type: 'object' StopServerToolsWhenMaxCost: description: 'Stop once cumulative cost across the loop exceeds this dollar threshold.' example: max_cost_in_dollars: 0.5 type: 'max_cost' properties: max_cost_in_dollars: format: 'double' type: 'number' type: enum: - 'max_cost' type: 'string' required: - 'type' - 'max_cost_in_dollars' type: 'object' StopServerToolsWhenMaxTokensUsed: description: 'Stop once cumulative token usage across the loop exceeds this threshold.' example: max_tokens: 10000 type: 'max_tokens_used' properties: max_tokens: type: 'integer' type: enum: - 'max_tokens_used' type: 'string' required: - 'type' - 'max_tokens' type: 'object' StopServerToolsWhenStepCountIs: description: 'Stop after the agent loop has executed this many steps.' example: step_count: 5 type: 'step_count_is' properties: step_count: type: 'integer' type: enum: - 'step_count_is' type: 'string' required: - 'type' - 'step_count' type: 'object' StoredPromptTemplate: example: id: 'prompt-abc123' variables: name: 'John' properties: id: type: 'string' variables: additionalProperties: anyOf: - type: 'string' - $ref: '#/components/schemas/InputText' - $ref: '#/components/schemas/InputImage' - $ref: '#/components/schemas/InputFile' type: - 'object' - 'null' required: - 'id' type: - 'object' - 'null' StreamEvents: description: 'Union of all possible event types emitted during response streaming' discriminator: mapping: error: '#/components/schemas/ErrorEvent' response.apply_patch_call_operation_diff.delta: '#/components/schemas/ApplyPatchCallOperationDiffDeltaEvent' response.apply_patch_call_operation_diff.done: '#/components/schemas/ApplyPatchCallOperationDiffDoneEvent' response.completed: '#/components/schemas/StreamEventsResponseCompleted' response.content_part.added: '#/components/schemas/ContentPartAddedEvent' response.content_part.done: '#/components/schemas/ContentPartDoneEvent' response.created: '#/components/schemas/OpenResponsesCreatedEvent' response.custom_tool_call_input.delta: '#/components/schemas/CustomToolCallInputDeltaEvent' response.custom_tool_call_input.done: '#/components/schemas/CustomToolCallInputDoneEvent' response.debug: '#/components/schemas/DebugEvent' response.failed: '#/components/schemas/StreamEventsResponseFailed' response.function_call_arguments.delta: '#/components/schemas/FunctionCallArgsDeltaEvent' response.function_call_arguments.done: '#/components/schemas/FunctionCallArgsDoneEvent' response.fusion_call.analysis.completed: '#/components/schemas/FusionCallAnalysisCompletedEvent' response.fusion_call.analysis.in_progress: '#/components/schemas/FusionCallAnalysisInProgressEvent' response.fusion_call.completed: '#/components/schemas/FusionCallCompletedEvent' response.fusion_call.in_progress: '#/components/schemas/FusionCallInProgressEvent' response.fusion_call.panel.added: '#/components/schemas/FusionCallPanelAddedEvent' response.fusion_call.panel.completed: '#/components/schemas/FusionCallPanelCompletedEvent' response.fusion_call.panel.delta: '#/components/schemas/FusionCallPanelDeltaEvent' response.fusion_call.panel.failed: '#/components/schemas/FusionCallPanelFailedEvent' response.fusion_call.panel.reasoning.delta: '#/components/schemas/FusionCallPanelReasoningDeltaEvent' response.image_generation_call.completed: '#/components/schemas/ImageGenCallCompletedEvent' response.image_generation_call.generating: '#/components/schemas/ImageGenCallGeneratingEvent' response.image_generation_call.in_progress: '#/components/schemas/ImageGenCallInProgressEvent' response.image_generation_call.partial_image: '#/components/schemas/ImageGenCallPartialImageEvent' response.in_progress: '#/components/schemas/OpenResponsesInProgressEvent' response.incomplete: '#/components/schemas/StreamEventsResponseIncomplete' response.output_item.added: '#/components/schemas/StreamEventsResponseOutputItemAdded' response.output_item.done: '#/components/schemas/StreamEventsResponseOutputItemDone' response.output_text.annotation.added: '#/components/schemas/AnnotationAddedEvent' response.output_text.delta: '#/components/schemas/TextDeltaEvent' response.output_text.done: '#/components/schemas/TextDoneEvent' response.reasoning_summary_part.added: '#/components/schemas/ReasoningSummaryPartAddedEvent' response.reasoning_summary_part.done: '#/components/schemas/ReasoningSummaryPartDoneEvent' response.reasoning_summary_text.delta: '#/components/schemas/ReasoningSummaryTextDeltaEvent' response.reasoning_summary_text.done: '#/components/schemas/ReasoningSummaryTextDoneEvent' response.reasoning_text.delta: '#/components/schemas/ReasoningDeltaEvent' response.reasoning_text.done: '#/components/schemas/ReasoningDoneEvent' response.refusal.delta: '#/components/schemas/RefusalDeltaEvent' response.refusal.done: '#/components/schemas/RefusalDoneEvent' response.web_search_call.completed: '#/components/schemas/WebSearchCallCompletedEvent' response.web_search_call.in_progress: '#/components/schemas/WebSearchCallInProgressEvent' response.web_search_call.searching: '#/components/schemas/WebSearchCallSearchingEvent' propertyName: 'type' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'in_progress' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 0 type: 'response.created' oneOf: - $ref: '#/components/schemas/OpenResponsesCreatedEvent' - $ref: '#/components/schemas/OpenResponsesInProgressEvent' - $ref: '#/components/schemas/StreamEventsResponseCompleted' - $ref: '#/components/schemas/StreamEventsResponseIncomplete' - $ref: '#/components/schemas/StreamEventsResponseFailed' - $ref: '#/components/schemas/ErrorEvent' - $ref: '#/components/schemas/StreamEventsResponseOutputItemAdded' - $ref: '#/components/schemas/StreamEventsResponseOutputItemDone' - $ref: '#/components/schemas/ContentPartAddedEvent' - $ref: '#/components/schemas/ContentPartDoneEvent' - $ref: '#/components/schemas/TextDeltaEvent' - $ref: '#/components/schemas/TextDoneEvent' - $ref: '#/components/schemas/RefusalDeltaEvent' - $ref: '#/components/schemas/RefusalDoneEvent' - $ref: '#/components/schemas/AnnotationAddedEvent' - $ref: '#/components/schemas/FunctionCallArgsDeltaEvent' - $ref: '#/components/schemas/FunctionCallArgsDoneEvent' - $ref: '#/components/schemas/ReasoningDeltaEvent' - $ref: '#/components/schemas/ReasoningDoneEvent' - $ref: '#/components/schemas/ReasoningSummaryPartAddedEvent' - $ref: '#/components/schemas/ReasoningSummaryPartDoneEvent' - $ref: '#/components/schemas/ReasoningSummaryTextDeltaEvent' - $ref: '#/components/schemas/ReasoningSummaryTextDoneEvent' - $ref: '#/components/schemas/ImageGenCallInProgressEvent' - $ref: '#/components/schemas/ImageGenCallGeneratingEvent' - $ref: '#/components/schemas/ImageGenCallPartialImageEvent' - $ref: '#/components/schemas/ImageGenCallCompletedEvent' - $ref: '#/components/schemas/WebSearchCallInProgressEvent' - $ref: '#/components/schemas/WebSearchCallSearchingEvent' - $ref: '#/components/schemas/WebSearchCallCompletedEvent' - $ref: '#/components/schemas/CustomToolCallInputDeltaEvent' - $ref: '#/components/schemas/CustomToolCallInputDoneEvent' - $ref: '#/components/schemas/ApplyPatchCallOperationDiffDeltaEvent' - $ref: '#/components/schemas/ApplyPatchCallOperationDiffDoneEvent' - $ref: '#/components/schemas/FusionCallInProgressEvent' - $ref: '#/components/schemas/FusionCallPanelAddedEvent' - $ref: '#/components/schemas/FusionCallPanelDeltaEvent' - $ref: '#/components/schemas/FusionCallPanelReasoningDeltaEvent' - $ref: '#/components/schemas/FusionCallPanelCompletedEvent' - $ref: '#/components/schemas/FusionCallPanelFailedEvent' - $ref: '#/components/schemas/FusionCallAnalysisInProgressEvent' - $ref: '#/components/schemas/FusionCallAnalysisCompletedEvent' - $ref: '#/components/schemas/FusionCallCompletedEvent' - $ref: '#/components/schemas/DebugEvent' StreamEventsResponseCompleted: allOf: - $ref: '#/components/schemas/CompletedEvent' - properties: response: $ref: '#/components/schemas/OpenResponsesResult' type: 'object' description: 'Event emitted when a response has completed successfully' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'completed' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 10 type: 'response.completed' StreamEventsResponseFailed: allOf: - $ref: '#/components/schemas/FailedEvent' - properties: response: $ref: '#/components/schemas/OpenResponsesResult' type: 'object' description: 'Event emitted when a response has failed' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'failed' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 3 type: 'response.failed' StreamEventsResponseIncomplete: allOf: - $ref: '#/components/schemas/IncompleteEvent' - properties: response: $ref: '#/components/schemas/OpenResponsesResult' type: 'object' description: 'Event emitted when a response is incomplete' example: response: completed_at: null created_at: 1704067200 error: null frequency_penalty: null id: 'resp-abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'gpt-4' object: 'response' output: [] parallel_tool_calls: true presence_penalty: null status: 'incomplete' temperature: null tool_choice: 'auto' tools: [] top_p: null sequence_number: 5 type: 'response.incomplete' StreamEventsResponseOutputItemAdded: allOf: - $ref: '#/components/schemas/OutputItemAddedEvent' - properties: item: $ref: '#/components/schemas/OutputItems' type: 'object' description: 'Event emitted when a new output item is added to the response' example: item: content: [] id: 'item-1' role: 'assistant' status: 'in_progress' type: 'message' output_index: 0 sequence_number: 2 type: 'response.output_item.added' StreamEventsResponseOutputItemDone: allOf: - $ref: '#/components/schemas/OutputItemDoneEvent' - properties: item: $ref: '#/components/schemas/OutputItems' type: 'object' description: 'Event emitted when an output item is complete' example: item: content: - annotations: [] text: 'Hello! How can I help you?' type: 'output_text' id: 'item-1' role: 'assistant' status: 'completed' type: 'message' output_index: 0 sequence_number: 8 type: 'response.output_item.done' StreamLogprob: allOf: - $ref: '#/components/schemas/OpenResponsesLogProbs' - properties: top_logprobs: items: $ref: '#/components/schemas/StreamLogprobTopLogprob' type: 'array' type: 'object' description: 'Log probability information for a token' example: bytes: - 72 - 101 - 108 - 108 - 111 logprob: -0.5 token: 'Hello' top_logprobs: [] StreamLogprobTopLogprob: allOf: - $ref: '#/components/schemas/OpenResponsesTopLogprobs' - properties: {} type: 'object' description: 'Alternative token with its log probability' example: bytes: - 72 - 101 - 108 - 108 - 111 logprob: -0.5 token: 'Hello' STTInputAudio: description: 'Base64-encoded audio to transcribe' example: data: 'UklGRiQA...' format: 'wav' properties: data: description: 'Base64-encoded audio data (raw bytes, not a data URI)' type: 'string' format: description: 'Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider.' type: 'string' required: - 'data' - 'format' type: 'object' STTRequest: description: 'Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio.' example: input_audio: data: 'UklGRiQA...' format: 'wav' language: 'en' model: 'openai/whisper-large-v3' properties: input_audio: $ref: '#/components/schemas/STTInputAudio' language: description: 'ISO-639-1 language code (e.g., "en", "ja"). Auto-detected if omitted.' example: 'en' type: 'string' model: description: 'STT model identifier' example: 'openai/whisper-large-v3' type: 'string' provider: description: 'Provider-specific passthrough configuration' properties: options: $ref: '#/components/schemas/ProviderOptions' type: 'object' response_format: description: 'Output format. "json" (default) returns { text, usage }. "verbose_json" additionally returns task, language, duration, and segment-level timestamps; only supported by OpenAI-compatible providers.' enum: - 'json' - 'verbose_json' example: 'json' type: 'string' temperature: description: 'Sampling temperature for transcription' example: 0 format: 'double' type: 'number' timestamp_granularities: description: 'Timestamp detail levels to include when response_format is "verbose_json". "segment" returns segment-level timestamps; "word" additionally returns word-level timestamps in the words array. Ignored unless response_format is "verbose_json".' example: - 'segment' items: $ref: '#/components/schemas/STTTimestampGranularity' type: 'array' required: - 'model' - 'input_audio' type: 'object' STTResponse: description: 'STT response containing transcribed text and optional usage statistics' example: text: 'Hello, this is a test of OpenAI speech-to-text transcription.' usage: cost: 0.000508 input_tokens: 83 output_tokens: 30 seconds: 9.2 total_tokens: 113 properties: duration: description: 'Duration of the input audio in seconds, present when response_format is verbose_json' example: 9.2 format: 'double' type: 'number' language: description: 'Detected or forced language, present when response_format is verbose_json' example: 'english' type: 'string' segments: description: 'Timestamped transcript segments, present when response_format is verbose_json' items: $ref: '#/components/schemas/STTSegment' type: 'array' task: description: 'The task performed, present when response_format is verbose_json' example: 'transcribe' type: 'string' text: description: 'The transcribed text' example: 'Hello, this is a test of OpenAI speech-to-text transcription. The weather is sunny today and the temperature is around 72 degrees.' type: 'string' usage: $ref: '#/components/schemas/STTUsage' words: description: 'Timestamped words, present when the provider returns word-level timestamps' items: $ref: '#/components/schemas/STTWord' type: 'array' required: - 'text' type: 'object' STTSegment: description: 'A timestamped transcript segment, returned when response_format is verbose_json' example: avg_logprob: -0.28 compression_ratio: 1.13 end: 3.2 id: 0 no_speech_prob: 0.01 seek: 0 speaker: 0 start: 0 temperature: 0 text: 'Hello there.' tokens: - 50364 - 2425 - 456 properties: avg_logprob: description: 'Average log probability of the segment' format: 'double' type: 'number' compression_ratio: description: 'Compression ratio of the segment' format: 'double' type: 'number' end: description: 'Segment end time in seconds' example: 3.2 format: 'double' type: 'number' id: description: 'Segment index within the transcript' example: 0 type: 'integer' no_speech_prob: description: 'Probability the segment contains no speech' format: 'double' type: 'number' seek: description: 'Seek offset of the segment' example: 0 type: 'integer' speaker: description: 'Speaker index for the segment, present when the provider returns diarization data' example: 0 type: 'integer' start: description: 'Segment start time in seconds' example: 0 format: 'double' type: 'number' temperature: description: 'Temperature used for the segment' format: 'double' type: 'number' text: description: 'Transcribed text of the segment' example: 'Hello there.' type: 'string' tokens: description: 'Token IDs of the segment' items: type: 'integer' type: 'array' required: - 'id' - 'start' - 'end' - 'text' type: 'object' STTTimestampGranularity: description: 'A timestamp detail level for verbose_json transcription responses.' enum: - 'word' - 'segment' example: 'word' type: 'string' STTUsage: description: 'Aggregated usage statistics for the request' example: cost: 0.000508 input_tokens: 83 output_tokens: 30 seconds: 9.2 total_tokens: 113 properties: cost: description: 'Total cost of the request in USD' example: 0.000508 format: 'double' type: 'number' input_tokens: description: 'Number of input tokens billed for this request' example: 83 type: 'integer' output_tokens: description: 'Number of output tokens generated' example: 30 type: 'integer' seconds: description: 'Duration of the input audio in seconds' example: 9.2 format: 'double' type: 'number' total_tokens: description: 'Total number of tokens used (input + output)' example: 113 type: 'integer' type: 'object' STTWord: description: 'A timestamped word, returned when the provider includes word-level timestamps' example: end: 0.4 speaker: 0 start: 0 word: 'Hello' properties: end: description: 'Word end time in seconds' example: 0.4 format: 'double' type: 'number' speaker: description: 'Speaker index for the word, present when the provider returns diarization data' example: 0 type: 'integer' start: description: 'Word start time in seconds' example: 0 format: 'double' type: 'number' word: description: 'The transcribed word' example: 'Hello' type: 'string' required: - 'word' - 'start' - 'end' type: 'object' SubagentNestedTool: additionalProperties: {} description: 'A tool made available to the subagent. Only OpenRouter server tools (e.g. openrouter:web_search) are supported; function tools are rejected because the worker has no way to execute them. The subagent tool may not list itself.' example: type: 'openrouter:web_search' properties: parameters: additionalProperties: {} type: 'object' type: type: 'string' required: - 'type' type: 'object' SubagentReasoning: description: 'Reasoning configuration forwarded to the subagent call. Use this to control reasoning effort and token budget for models that support extended thinking.' example: effort: 'low' properties: effort: description: 'Reasoning effort level for the subagent call.' enum: - 'max' - 'xhigh' - 'high' - 'medium' - 'low' - 'minimal' - 'none' type: 'string' max_tokens: description: 'Maximum number of reasoning tokens the subagent may use. Accepted and validated but not yet forwarded to the subagent call.' type: 'integer' type: 'object' SubagentServerTool_OpenRouter: description: 'OpenRouter built-in server tool: delegates self-contained tasks to a smaller, cheaper, faster worker model (any OpenRouter model) mid-generation and returns its outcome. The worker may run as a sub-agent with its own tools.' example: parameters: model: '~anthropic/claude-haiku-latest' type: 'openrouter:subagent' properties: parameters: $ref: '#/components/schemas/SubagentServerToolConfig' type: enum: - 'openrouter:subagent' type: 'string' required: - 'type' type: 'object' SubagentServerToolConfig: description: 'Configuration for one openrouter:subagent server tool entry.' example: model: '~anthropic/claude-haiku-latest' name: 'summarizer' properties: instructions: description: 'System instructions for the subagent. When omitted, the subagent responds with no system prompt of its own.' example: 'You are a fast, focused worker. Complete the task exactly as described.' type: 'string' max_completion_tokens: description: 'Maximum number of output tokens (including reasoning) the subagent may produce. When omitted, the provider''s default applies.' example: 2048 type: 'integer' max_tool_calls: description: 'Maximum number of tool-calling steps the subagent may take during its agentic loop. Capped at 25. Only relevant when the subagent is given tools. Accepted and validated but not yet enforced on the subagent call.' example: 5 maximum: 25 minimum: 1 type: 'integer' model: description: 'Slug of the model that executes delegated tasks (any OpenRouter model). Typically a smaller, cheaper, faster model than the one delegating. When omitted, the model from the outer API request is used. The subagent tool itself cannot be the subagent model.' example: '~anthropic/claude-haiku-latest' type: 'string' name: description: 'Optional name for this subagent. The model sees one tool per named subagent (and one default for an unnamed entry). Names must be unique across subagent entries. Letters, digits, spaces, underscores, and dashes; trimmed; 1–64 chars.' example: 'summarizer' maxLength: 64 minLength: 1 pattern: '^[a-zA-Z0-9 _-]+$' type: 'string' reasoning: $ref: '#/components/schemas/SubagentReasoning' temperature: description: 'Sampling temperature forwarded to the subagent call. When omitted, the provider''s default applies.' example: 0.7 format: 'double' type: 'number' tools: description: 'Tools the subagent may use while executing a delegated task. The subagent runs as an agentic sub-agent over these tools, then returns its outcome. Only OpenRouter server tools are supported — function tools are rejected — and the list must not include the subagent tool itself.' items: $ref: '#/components/schemas/SubagentNestedTool' type: 'array' type: 'object' SubmitGenerationFeedbackRequest: description: 'Structured feedback about a specific generation' example: category: 'incorrect_response' comment: 'The model repeated the same paragraph three times.' generation_id: 'gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG' properties: category: description: 'The category of feedback being reported' enum: - 'latency' - 'incoherence' - 'incorrect_response' - 'formatting' - 'billing' - 'api_error' - 'other' example: 'incorrect_response' type: 'string' comment: description: 'An optional free-text comment describing the feedback' example: 'The model repeated the same paragraph three times.' maxLength: 1000 type: 'string' generation_id: description: 'The generation to submit feedback on' example: 'gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG' minLength: 1 type: 'string' required: - 'generation_id' - 'category' type: 'object' SubmitGenerationFeedbackResponse: description: 'Confirmation that the feedback was recorded' example: data: success: true properties: data: properties: success: const: true description: 'Whether the feedback was recorded' example: true type: 'boolean' required: - 'success' type: 'object' required: - 'data' type: 'object' SupportedParameters: additionalProperties: $ref: '#/components/schemas/CapabilityDescriptor' description: 'Union of supported parameters across every endpoint of this model. Coarse discovery aid; the definitive per-endpoint set is behind the endpoints URL.' example: output_compression: max: 100 min: 0 type: 'range' resolution: type: 'enum' values: - '1K' - '2K' - '4K' seed: type: 'boolean' type: 'object' TaskClassificationItem: example: category_token_share: 0.48 category_usage_share: 0.51 display_name: 'Code Generation' macro_category: 'code' models: - id: 'openai/gpt-4.1-mini' tag_token_share: 0.75 tag_usage_share: 0.55 - id: 'anthropic/claude-sonnet-4' tag_token_share: 0.12 tag_usage_share: 0.2 tag: 'code:general_impl' token_share: 0.31 usage_share: 0.23 properties: category_token_share: description: 'Fraction of this classification''s token volume within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`.' example: 0.48 format: 'double' type: 'number' category_usage_share: description: 'Fraction of this classification''s usage within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`.' example: 0.51 format: 'double' type: 'number' display_name: description: 'Human-readable label for the classification.' example: 'Code Generation' type: 'string' macro_category: description: 'Coarse grouping derived from the tag prefix: `code`, `data`, `agent`, or `general`.' example: 'code' type: 'string' models: description: 'Top models for this classification by request volume, sorted descending. Each entry reports the model''s share of this classification''s requests and tokens.' items: $ref: '#/components/schemas/TaskClassificationModel' type: 'array' tag: description: 'Classification tag identifier (e.g. `code:general_impl`, `agent:web_search`).' example: 'code:general_impl' type: 'string' token_share: description: 'Fraction of classified sampled token volume (prompt + completion) attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator.' example: 0.31 format: 'double' type: 'number' usage_share: description: 'Fraction of classified sampled requests attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator.' example: 0.23 format: 'double' type: 'number' required: - 'tag' - 'display_name' - 'macro_category' - 'usage_share' - 'token_share' - 'category_usage_share' - 'category_token_share' - 'models' type: 'object' TaskClassificationMacroCategory: example: key: 'code' label: 'Code' token_share: 0.52 usage_share: 0.45 properties: key: description: 'Macro-category identifier.' example: 'code' type: 'string' label: description: 'Human-readable label for the macro-category.' example: 'Code' type: 'string' token_share: description: 'Combined token share of all classifications in this macro-category (0–1).' example: 0.52 format: 'double' type: 'number' usage_share: description: 'Combined usage share of all classifications in this macro-category (0–1).' example: 0.45 format: 'double' type: 'number' required: - 'key' - 'label' - 'usage_share' - 'token_share' type: 'object' TaskClassificationModel: example: id: 'openai/gpt-4.1-mini' tag_token_share: 0.75 tag_usage_share: 0.55 properties: id: description: 'Model identifier (permaslug).' example: 'openai/gpt-4.1-mini' type: 'string' tag_token_share: description: 'Fraction of this classification''s sampled token volume attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded).' example: 0.75 format: 'double' type: 'number' tag_usage_share: description: 'Fraction of this classification''s sampled requests attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded).' example: 0.55 format: 'double' type: 'number' required: - 'id' - 'tag_usage_share' - 'tag_token_share' type: 'object' TaskClassificationResponse: example: data: as_of: '2026-06-17' classifications: - category_token_share: 0.48 category_usage_share: 0.51 display_name: 'Code Generation' macro_category: 'code' models: - id: 'openai/gpt-4.1-mini' tag_token_share: 0.75 tag_usage_share: 0.55 tag: 'code:general_impl' token_share: 0.31 usage_share: 0.23 macro_categories: - key: 'code' label: 'Code' token_share: 0.52 usage_share: 0.45 window_days: 7 properties: data: properties: as_of: description: 'UTC date (YYYY-MM-DD) of the window upper bound (yesterday). Data is exclusive of the current incomplete UTC day. This is the expected latest date in the snapshot; it does not confirm data presence for that date.' example: '2026-06-17' type: 'string' classifications: description: 'Per-task classification market-share data, sorted by usage_share descending.' items: $ref: '#/components/schemas/TaskClassificationItem' type: 'array' macro_categories: description: 'Aggregate market-share data per macro-category (code, data, agent, general).' items: $ref: '#/components/schemas/TaskClassificationMacroCategory' type: 'array' window_days: description: 'Number of trailing days covered by this snapshot.' example: 7 type: 'integer' required: - 'window_days' - 'as_of' - 'classifications' - 'macro_categories' type: 'object' required: - 'data' type: 'object' TextConfig: description: 'Text output configuration including format and verbosity' example: format: type: 'text' verbosity: 'medium' properties: format: $ref: '#/components/schemas/Formats' verbosity: enum: - 'high' - 'low' - 'medium' - null type: - 'string' - 'null' type: 'object' TextDeltaEvent: allOf: - $ref: '#/components/schemas/BaseTextDeltaEvent' - properties: logprobs: items: $ref: '#/components/schemas/StreamLogprob' type: 'array' type: 'object' description: 'Event emitted when a text delta is streamed' example: content_index: 0 delta: 'Hello' item_id: 'item-1' logprobs: [] output_index: 0 sequence_number: 4 type: 'response.output_text.delta' TextDoneEvent: allOf: - $ref: '#/components/schemas/BaseTextDoneEvent' - properties: logprobs: items: $ref: '#/components/schemas/StreamLogprob' type: 'array' type: 'object' description: 'Event emitted when text streaming is complete' example: content_index: 0 item_id: 'item-1' logprobs: [] output_index: 0 sequence_number: 6 text: 'Hello! How can I help you?' type: 'response.output_text.done' TextExtendedConfig: allOf: - $ref: '#/components/schemas/TextConfig' - properties: verbosity: enum: - 'low' - 'medium' - 'high' - 'xhigh' - 'max' - null type: - 'string' - 'null' type: 'object' description: 'Text output configuration including format and verbosity' example: format: type: 'text' ToolCallStatus: enum: - 'in_progress' - 'completed' - 'incomplete' example: 'completed' type: 'string' ToolChoiceAllowed: description: 'Constrains the model to a pre-defined set of allowed tools' example: mode: 'auto' tools: - name: 'get_weather' type: 'function' type: 'allowed_tools' properties: mode: anyOf: - enum: - 'auto' type: 'string' - enum: - 'required' type: 'string' tools: items: additionalProperties: {} type: 'object' type: 'array' type: enum: - 'allowed_tools' type: 'string' required: - 'type' - 'mode' - 'tools' type: 'object' TooManyRequestsResponse: description: 'Too Many Requests - Rate limit exceeded' example: error: code: 429 message: 'Rate limit exceeded' properties: error: $ref: '#/components/schemas/TooManyRequestsResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' TooManyRequestsResponseErrorData: description: 'Error data for TooManyRequestsResponse' example: code: 429 message: 'Rate limit exceeded' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' TopProviderInfo: description: 'Information about the top provider for this model' example: context_length: 8192 is_moderated: true max_completion_tokens: 4096 properties: context_length: description: 'Context length from the top provider' example: 8192 type: - 'integer' - 'null' is_moderated: description: 'Whether the top provider moderates content' example: true type: 'boolean' max_completion_tokens: description: 'Maximum completion tokens from the top provider' example: 4096 type: - 'integer' - 'null' required: - 'is_moderated' type: 'object' TraceConfig: additionalProperties: {} description: 'Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations.' example: trace_id: 'trace-abc123' trace_name: 'my-app-trace' properties: generation_name: type: 'string' parent_span_id: type: 'string' span_name: type: 'string' trace_id: type: 'string' trace_name: type: 'string' type: 'object' Truncation: enum: - 'auto' - 'disabled' - null example: 'auto' type: - 'string' - 'null' UnauthorizedResponse: description: 'Unauthorized - Authentication required or invalid credentials' example: error: code: 401 message: 'Missing Authentication header' properties: error: $ref: '#/components/schemas/UnauthorizedResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' UnauthorizedResponseErrorData: description: 'Error data for UnauthorizedResponse' example: code: 401 message: 'Missing Authentication header' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' UnifiedBenchmarkPricing: description: 'OpenRouter pricing per token for this model. Null if pricing is unavailable.' example: completion: '0.000015' prompt: '0.000003' properties: completion: description: 'Cost per output token (USD, decimal string).' example: '0.000015' type: 'string' prompt: description: 'Cost per input token (USD, decimal string).' example: '0.000003' type: 'string' required: - 'prompt' - 'completion' type: - 'object' - 'null' UnifiedBenchmarksAAItem: example: agentic_index: 58.3 coding_index: 65.8 display_name: 'GPT-4o' intelligence_index: 71.2 model_permaslug: 'openai/gpt-4o' pricing: completion: '0.00001' prompt: '0.0000025' source: 'artificial-analysis' properties: agentic_index: description: 'Artificial Analysis Agentic Index composite score. Higher is better.' example: 58.3 format: 'double' type: - 'number' - 'null' coding_index: description: 'Artificial Analysis Coding Index composite score. Higher is better.' example: 65.8 format: 'double' type: - 'number' - 'null' display_name: description: 'Model name as listed on Artificial Analysis.' example: 'GPT-4o' type: 'string' intelligence_index: description: 'Artificial Analysis Intelligence Index composite score. Higher is better.' example: 71.2 format: 'double' type: - 'number' - 'null' model_permaslug: description: 'Stable OpenRouter model identifier.' example: 'openai/gpt-4o' type: 'string' pricing: $ref: '#/components/schemas/UnifiedBenchmarkPricing' source: description: 'Benchmark source discriminator.' enum: - 'artificial-analysis' type: 'string' required: - 'source' - 'model_permaslug' - 'display_name' - 'intelligence_index' - 'coding_index' - 'agentic_index' - 'pricing' type: 'object' UnifiedBenchmarksDAItem: example: arena: 'models' avg_generation_time_ms: 3200 category: 'codecategories' display_name: 'Claude Sonnet 4' elo: 1423 model_permaslug: 'anthropic/claude-sonnet-4' pricing: completion: '0.000015' prompt: '0.000003' source: 'design-arena' tournament_stats: first_place: 12 fourth_place: 2 second_place: 8 third_place: 5 total: 27 win_rate: 72 properties: arena: description: 'Arena this ranking belongs to.' example: 'models' type: 'string' avg_generation_time_ms: description: 'Average generation time in milliseconds.' example: 3200 format: 'double' type: - 'number' - 'null' category: description: 'Category within the arena.' example: 'codecategories' type: 'string' display_name: description: 'Human-readable model name from Design Arena.' example: 'Claude Sonnet 4' type: 'string' elo: description: 'ELO rating from head-to-head arena battles.' example: 1423 format: 'double' type: 'number' model_permaslug: description: 'Stable OpenRouter model identifier when mapped; otherwise the upstream Design Arena model id.' example: 'anthropic/claude-sonnet-4' type: 'string' pricing: $ref: '#/components/schemas/UnifiedBenchmarkPricing' source: description: 'Benchmark source discriminator.' enum: - 'design-arena' type: 'string' tournament_stats: description: 'Placement distribution from tournament matches.' properties: first_place: type: - 'integer' - 'null' fourth_place: type: - 'integer' - 'null' second_place: type: - 'integer' - 'null' third_place: type: - 'integer' - 'null' total: type: - 'integer' - 'null' required: - 'first_place' - 'second_place' - 'third_place' - 'fourth_place' - 'total' type: 'object' win_rate: description: 'Win rate as a percentage (0–100).' example: 72 format: 'double' type: 'number' required: - 'source' - 'model_permaslug' - 'display_name' - 'arena' - 'category' - 'elo' - 'win_rate' - 'avg_generation_time_ms' - 'tournament_stats' - 'pricing' type: 'object' UnifiedBenchmarksMeta: example: as_of: '2026-06-03T12:00:00Z' citation: 'Source: Artificial Analysis (artificialanalysis.ai) via OpenRouter (openrouter.ai/rankings).' model_count: 50 source: 'artificial-analysis' source_url: 'https://artificialanalysis.ai' task_type: null version: 'v1' properties: as_of: description: 'ISO-8601 timestamp of when this data was last updated.' example: '2026-06-03T12:00:00Z' type: 'string' citation: description: 'Required attribution when republishing this data, or null when results span multiple sources (attribute each item individually by its `source` discriminator).' example: 'Source: Artificial Analysis (artificialanalysis.ai) via OpenRouter (openrouter.ai/rankings).' type: - 'string' - 'null' model_count: description: 'Number of unique models in the response.' type: 'integer' source: description: 'The source filter applied, or null when all sources are returned.' enum: - 'artificial-analysis' - 'design-arena' - 'openrouter' - null example: 'artificial-analysis' type: - 'string' - 'null' source_url: description: 'URL of the upstream data source, or null when results span multiple sources.' example: 'https://artificialanalysis.ai' type: - 'string' - 'null' task_type: description: 'The task_type filter applied, or null if showing all.' type: - 'string' - 'null' version: description: 'Dataset version.' enum: - 'v1' type: 'string' required: - 'as_of' - 'version' - 'source' - 'source_url' - 'citation' - 'model_count' - 'task_type' type: 'object' UnifiedBenchmarksORItem: example: accuracy: 0.72 accuracy_stddev: 0.03 avg_cost_per_task: 0.002 benchmark_type: 'gpqa_diamond' display_name: 'GPT-4o' last_run_timestamp: '2026-06-03T12:00:00Z' model_permaslug: 'openai/gpt-4o' source: 'openrouter' total_tasks: 300 properties: accuracy: description: 'Aggregate accuracy score from 0 to 1. Higher is better.' example: 0.72 format: 'double' type: 'number' accuracy_stddev: description: 'Standard deviation of run accuracy, or null for a single run.' example: 0.03 format: 'double' type: - 'number' - 'null' avg_cost_per_task: description: 'Average cost per task in USD, or null if unavailable.' example: 0.002 format: 'double' type: - 'number' - 'null' benchmark_type: description: 'OpenRouter benchmark evaluation type.' enum: - 'gpqa_diamond' - 'tau_bench_verified_airline' example: 'gpqa_diamond' type: 'string' display_name: description: 'Human-readable model name.' example: 'GPT-4o' type: 'string' last_run_timestamp: description: 'Timestamp of the most recent public benchmark run.' example: '2026-06-03T12:00:00Z' type: 'string' model_permaslug: description: 'Stable OpenRouter model identifier.' example: 'openai/gpt-4o' type: 'string' source: description: 'Benchmark source discriminator.' enum: - 'openrouter' type: 'string' total_tasks: description: 'Total benchmark tasks across runs.' example: 300 type: 'integer' required: - 'source' - 'model_permaslug' - 'display_name' - 'benchmark_type' - 'accuracy' - 'accuracy_stddev' - 'avg_cost_per_task' - 'total_tasks' - 'last_run_timestamp' type: 'object' UnifiedBenchmarksResponse: example: data: - agentic_index: 58.3 coding_index: 65.8 display_name: 'GPT-4o' intelligence_index: 71.2 model_permaslug: 'openai/gpt-4o' pricing: completion: '0.00001' prompt: '0.0000025' source: 'artificial-analysis' - accuracy: 0.72 accuracy_stddev: 0.03 avg_cost_per_task: 0.002 benchmark_type: 'gpqa_diamond' display_name: 'GPT-4o' last_run_timestamp: '2026-06-03T12:00:00Z' model_permaslug: 'openai/gpt-4o' source: 'openrouter' total_tasks: 300 meta: as_of: '2026-06-03T12:00:00Z' citation: null model_count: 1 source: null source_url: null task_type: null version: 'v1' properties: data: items: discriminator: mapping: artificial-analysis: '#/components/schemas/UnifiedBenchmarksAAItem' design-arena: '#/components/schemas/UnifiedBenchmarksDAItem' openrouter: '#/components/schemas/UnifiedBenchmarksORItem' propertyName: 'source' oneOf: - $ref: '#/components/schemas/UnifiedBenchmarksAAItem' - $ref: '#/components/schemas/UnifiedBenchmarksDAItem' - $ref: '#/components/schemas/UnifiedBenchmarksORItem' type: 'array' meta: $ref: '#/components/schemas/UnifiedBenchmarksMeta' required: - 'data' - 'meta' type: 'object' UnprocessableEntityResponse: description: 'Unprocessable Entity - Semantic validation failure' example: error: code: 422 message: 'Invalid argument' properties: error: $ref: '#/components/schemas/UnprocessableEntityResponseErrorData' openrouter_metadata: additionalProperties: {} type: - 'object' - 'null' user_id: type: - 'string' - 'null' required: - 'error' type: 'object' UnprocessableEntityResponseErrorData: description: 'Error data for UnprocessableEntityResponse' example: code: 422 message: 'Invalid argument' properties: code: type: 'integer' message: type: 'string' metadata: additionalProperties: {} type: - 'object' - 'null' required: - 'code' - 'message' type: 'object' UpdateBYOKKeyRequest: example: disabled: false name: 'Updated OpenAI Key' properties: allowed_models: description: 'Optional allowlist of model slugs this credential may be used for. `null` means no restriction.' example: null items: type: 'string' maxItems: 100 type: - 'array' - 'null' allowed_user_ids: description: 'Optional allowlist of user IDs that may use this credential. `null` means no restriction.' example: null items: type: 'string' maxItems: 100 type: - 'array' - 'null' disabled: description: 'Whether this credential is disabled.' example: false type: 'boolean' is_fallback: description: 'Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried.' example: false type: 'boolean' key: description: 'A new raw provider API key to rotate the credential in-place. The previous key material is overwritten and the masked label is regenerated. Encrypted at rest and never returned in API responses.' example: 'sk-proj-newkey456...' minLength: 1 type: 'string' name: description: 'Optional human-readable name for the credential.' example: 'Updated OpenAI Key' maxLength: 255 type: - 'string' - 'null' type: 'object' UpdateBYOKKeyResponse: example: data: allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Updated OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: data: allOf: - $ref: '#/components/schemas/BYOKKey' - description: 'The updated BYOK credential.' required: - 'data' type: 'object' UpdateGuardrailRequest: example: description: 'Updated description' limit_usd: 75 name: 'Updated Guardrail Name' reset_interval: 'weekly' properties: allowed_models: description: 'Array of model identifiers (slug or canonical_slug accepted)' example: - 'openai/gpt-5.2' items: type: 'string' minItems: 1 type: - 'array' - 'null' allowed_providers: description: 'New list of allowed provider IDs' example: - 'openai' - 'anthropic' - 'deepseek' items: type: 'string' minItems: 1 type: - 'array' - 'null' content_filter_builtins: description: 'Builtin content filters to apply. Set to null to remove. Every builtin slug supports "block", "redact", and the detect-only "flag" action.' example: - action: 'block' slug: 'regex-prompt-injection' items: $ref: '#/components/schemas/ContentFilterBuiltinEntryInput' type: - 'array' - 'null' content_filters: description: 'Custom regex content filters to apply. Set to null to remove.' example: null items: $ref: '#/components/schemas/ContentFilterEntry' type: - 'array' - 'null' description: description: 'New description for the guardrail' example: 'Updated description' maxLength: 1000 type: - 'string' - 'null' enable_free_model_publication: description: 'Whether this guardrail allows free endpoints that publish prompts.' example: false type: - 'boolean' - 'null' enable_free_model_training: description: 'Whether this guardrail allows free endpoints that train on request data.' example: true type: - 'boolean' - 'null' enable_paid_model_training: description: 'Whether this guardrail allows paid endpoints that train on request data.' example: true type: - 'boolean' - 'null' enforce_zdr: deprecated: true description: 'Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, enforce_zdr_xai, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request.' example: true type: - 'boolean' - 'null' enforce_zdr_anthropic: description: 'Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided.' example: true type: - 'boolean' - 'null' enforce_zdr_google: description: 'Whether to enforce zero data retention for Google models. Falls back to enforce_zdr when not provided.' example: true type: - 'boolean' - 'null' enforce_zdr_openai: description: 'Whether to enforce zero data retention for OpenAI models. Falls back to enforce_zdr when not provided.' example: true type: - 'boolean' - 'null' enforce_zdr_other: description: 'Whether to enforce zero data retention for models that are not from Anthropic, OpenAI, Google, or xAI. Falls back to enforce_zdr when not provided.' example: true type: - 'boolean' - 'null' enforce_zdr_xai: description: 'Whether to enforce zero data retention for xAI models. Falls back to enforce_zdr when not provided.' example: true type: - 'boolean' - 'null' ignored_models: description: 'Array of model identifiers to exclude from routing (slug or canonical_slug accepted)' example: - 'openai/gpt-4o-mini' items: type: 'string' minItems: 1 type: - 'array' - 'null' ignored_providers: description: 'List of provider IDs to exclude from routing' example: - 'azure' items: type: 'string' minItems: 1 type: - 'array' - 'null' include_byok_in_budgets: description: 'Whether BYOK (bring-your-own-key) inference spend counts toward this guardrail''s limit_usd, in addition to OpenRouter credit spend. Omit to leave unchanged.' example: true type: 'boolean' limit_usd: description: 'New spending limit in USD' example: 75 format: 'double' type: - 'number' - 'null' name: description: 'New name for the guardrail' example: 'Updated Guardrail Name' maxLength: 200 minLength: 1 type: 'string' reset_interval: $ref: '#/components/schemas/GuardrailInterval' type: 'object' UpdateGuardrailResponse: example: data: allowed_models: null allowed_providers: - 'openai' content_filter_builtins: - action: 'redact' label: '[EMAIL]' slug: 'email' content_filters: null created_at: '2025-08-24T10:30:00Z' description: 'Updated description' enforce_zdr: null enforce_zdr_anthropic: true enforce_zdr_google: true enforce_zdr_openai: true enforce_zdr_other: true enforce_zdr_xai: true id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: true limit_usd: 75 name: 'Updated Guardrail Name' reset_interval: 'weekly' updated_at: '2025-08-24T16:00:00Z' workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: data: allOf: - $ref: '#/components/schemas/Guardrail' - description: 'The updated guardrail' required: - 'data' type: 'object' UpdateObservabilityDestinationRequest: example: enabled: false name: 'Updated Langfuse' properties: api_key_hashes: description: 'Optional allowlist of OpenRouter API key hashes. `null` clears the filter (all keys). Omitting leaves the current value. Must contain at least one hash if provided.' example: null items: type: 'string' minItems: 1 type: - 'array' - 'null' config: additionalProperties: {} description: 'Provider-specific configuration fields to update. Masked values are ignored; unset fields keep their current value.' example: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' type: 'object' enabled: description: 'Whether the destination is enabled.' example: true type: 'boolean' filter_rules: allOf: - $ref: '#/components/schemas/ObservabilityFilterRulesConfigNullable' - description: 'Optional structured filter rules. `null` clears the rules. Omitting keeps the current value.' name: description: 'Human-readable name for the destination.' example: 'Production Langfuse' type: 'string' privacy_mode: description: 'When true, request/response bodies are not forwarded — only metadata.' example: false type: 'boolean' sampling_rate: description: 'Sampling rate between 0.0001 and 1 (1 = 100%).' example: 1 format: 'double' type: 'number' type: 'object' UpdateObservabilityDestinationResponse: example: data: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: data: allOf: - $ref: '#/components/schemas/ObservabilityDestination' - description: 'The updated observability destination.' required: - 'data' type: 'object' UpdateScimGroupMappingRequest: properties: role: enum: - 'admin' - 'member' type: 'string' required: - 'role' type: 'object' UpdateScimGroupMappingResponse: properties: data: $ref: '#/components/schemas/ScimGroupMapping' required: - 'data' type: 'object' UpdateWorkspaceRequest: example: name: 'Updated Workspace' slug: 'updated-workspace' properties: default_image_model: description: 'Default image model for this workspace' example: 'openai/dall-e-3' type: - 'string' - 'null' default_provider_sort: description: 'Default provider sort preference (price, throughput, latency, exacto)' example: 'price' type: - 'string' - 'null' default_text_model: description: 'Default text model for this workspace' example: 'openai/gpt-4o' type: - 'string' - 'null' description: description: 'New description for the workspace' example: 'Updated description' maxLength: 500 type: - 'string' - 'null' io_logging_api_key_ids: description: 'Optional array of API key IDs to filter I/O logging' example: null items: type: 'integer' type: - 'array' - 'null' io_logging_sampling_rate: description: 'Sampling rate for I/O logging (0.0001-1)' example: 1 format: 'double' type: 'number' is_data_discount_logging_enabled: description: 'Whether data discount logging is enabled' example: true type: 'boolean' is_observability_broadcast_enabled: description: 'Whether broadcast is enabled' example: false type: 'boolean' is_observability_io_logging_enabled: description: 'Whether private logging is enabled' example: false type: 'boolean' name: description: 'New name for the workspace' example: 'Updated Workspace' maxLength: 100 minLength: 1 type: 'string' slug: description: 'New URL-friendly slug (lowercase alphanumeric segments separated by single hyphens, no leading/trailing hyphens)' example: 'updated-workspace' maxLength: 50 minLength: 1 pattern: '^[a-z0-9]+(?:-[a-z0-9]+)*$' type: 'string' type: 'object' UpdateWorkspaceResponse: example: data: created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Updated Workspace' slug: 'updated-workspace' updated_at: '2025-08-25T10:00:00Z' properties: data: allOf: - $ref: '#/components/schemas/Workspace' - description: 'The updated workspace' required: - 'data' type: 'object' UpsertWorkspaceBudgetRequest: example: include_byok_in_budgets: true limit_usd: 100 properties: include_byok_in_budgets: description: 'Whether to include BYOK (bring-your-own-key) spend when enforcing the workspace''s budgets. This is a workspace-wide setting: it applies to every budget interval (daily, weekly, monthly, and lifetime), not just the interval being upserted in this request. Omit to leave the current setting unchanged.' example: true type: 'boolean' limit_usd: description: 'Spending limit in USD. Must be greater than 0.' example: 100 format: 'double' type: 'number' required: - 'limit_usd' type: 'object' UpsertWorkspaceBudgetResponse: example: data: created_at: '2025-08-24T10:30:00Z' id: '770e8400-e29b-41d4-a716-446655440000' limit_usd: 100 reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: true properties: data: allOf: - $ref: '#/components/schemas/WorkspaceBudget' - description: 'The created or updated budget' include_byok_in_budgets: description: 'Whether BYOK (bring-your-own-key) spend is included when enforcing the workspace''s budgets. This is a workspace-wide setting that applies to all budget intervals (daily, weekly, monthly, and lifetime).' example: true type: 'boolean' required: - 'data' type: 'object' URLCitation: example: content: 'OpenRouter provides a unified API for accessing LLMs from multiple providers.' end_index: 42 start_index: 0 title: 'OpenRouter Documentation' type: 'url_citation' url: 'https://openrouter.ai/docs' properties: content: type: 'string' end_index: type: 'integer' start_index: type: 'integer' title: type: 'string' type: enum: - 'url_citation' type: 'string' url: type: 'string' required: - 'type' - 'url' - 'title' - 'start_index' - 'end_index' type: 'object' Usage: anyOf: - allOf: - $ref: '#/components/schemas/OpenAIResponsesUsage' - properties: cost: description: 'Cost of the completion' format: 'double' type: - 'number' - 'null' cost_details: properties: upstream_inference_cost: format: 'double' type: - 'number' - 'null' upstream_inference_input_cost: format: 'double' type: 'number' upstream_inference_output_cost: format: 'double' type: 'number' required: - 'upstream_inference_input_cost' - 'upstream_inference_output_cost' type: 'object' is_byok: description: 'Whether a request was made using a Bring Your Own Key configuration' type: 'boolean' server_tool_use_details: $ref: '#/components/schemas/ServerToolUseDetails' type: 'object' - type: 'null' description: 'Token usage information for the response' example: cost: 0.0012 cost_details: upstream_inference_cost: null upstream_inference_input_cost: 0.0008 upstream_inference_output_cost: 0.0004 input_tokens: 10 input_tokens_details: cached_tokens: 0 output_tokens: 25 output_tokens_details: reasoning_tokens: 0 total_tokens: 35 VideoGenerationRequest: example: aspect_ratio: '16:9' duration: 8 model: 'google/veo-3.1' prompt: 'A serene mountain landscape at sunset' resolution: '720p' properties: aspect_ratio: description: 'Aspect ratio of the generated video' enum: - '16:9' - '9:16' - '1:1' - '4:3' - '3:4' - '3:2' - '2:3' - '21:9' - '9:21' example: '16:9' type: 'string' callback_url: description: 'URL to receive a webhook notification when the video generation job completes. Overrides the workspace-level default callback URL if set. Must be HTTPS.' example: 'https://example.com/webhook' format: 'uri' type: 'string' duration: description: 'Duration of the generated video in seconds' example: 8 minimum: 1 type: 'integer' frame_images: description: 'Images to use as the first and/or last frame of the generated video. Each image must specify a frame_type of first_frame or last_frame.' items: $ref: '#/components/schemas/FrameImage' type: 'array' generate_audio: description: 'Whether to generate audio alongside the video. Defaults to the endpoint''s generate_audio capability flag, false if not set.' example: true type: 'boolean' input_references: description: 'Reference assets to guide video generation. Accepts image, audio, and video references. Audio and video references are only honored by providers that support them (currently BytePlus Seedance 2.0); other providers use image references and ignore the rest.' items: $ref: '#/components/schemas/InputReference' type: 'array' model: type: 'string' prompt: description: 'Text prompt describing the video to generate. Optional for models that support generating a video from image input alone; required by all other models.' example: 'A serene mountain landscape at sunset' type: 'string' provider: description: 'Provider-specific passthrough configuration' properties: options: allOf: - $ref: '#/components/schemas/ProviderOptions' - example: google-vertex: output_config: effort: 'low' type: 'object' resolution: description: 'Resolution of the generated video' enum: - '480p' - '720p' - '768p' - '1080p' - '1K' - '2K' - '4K' example: '720p' type: 'string' seed: description: 'If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers.' type: 'integer' size: description: 'Exact pixel dimensions of the generated video in "WIDTHxHEIGHT" format (e.g. "1280x720"). Interchangeable with resolution + aspect_ratio.' example: '1280x720' type: 'string' required: - 'model' type: 'object' VideoGenerationResponse: example: generation_id: 'gen-xyz789' id: 'job-abc123' polling_url: '/api/v1/videos/job-abc123' status: 'pending' properties: error: type: 'string' generation_id: description: 'The generation ID associated with this video generation job. Available once the job has been processed.' type: 'string' id: type: 'string' polling_url: type: 'string' status: enum: - 'pending' - 'in_progress' - 'completed' - 'failed' - 'cancelled' - 'expired' type: 'string' unsigned_urls: items: type: 'string' type: 'array' usage: $ref: '#/components/schemas/VideoGenerationUsage' required: - 'id' - 'polling_url' - 'status' type: 'object' VideoGenerationUsage: description: 'Usage and cost information for the video generation. Available once the job has completed.' example: cost: 0.5 is_byok: false properties: cost: description: 'The cost of the video generation in USD.' format: 'double' type: - 'number' - 'null' is_byok: description: 'Whether the request was made using a Bring Your Own Key configuration.' type: 'boolean' type: 'object' VideoModel: example: allowed_passthrough_parameters: [] canonical_slug: 'google/veo-3.1' created: 1700000000 description: 'Google video generation model' generate_audio: true id: 'google/veo-3.1' name: 'Veo 3.1' pricing_skus: generate: '0.50' seed: null supported_aspect_ratios: - '16:9' supported_durations: - 5 - 8 supported_frame_images: - 'first_frame' - 'last_frame' supported_resolutions: - '720p' supported_sizes: null properties: allowed_passthrough_parameters: description: 'List of parameters that are allowed to be passed through to the provider' items: type: 'string' type: 'array' canonical_slug: description: 'Canonical slug for the model' example: 'openai/gpt-4' type: 'string' created: description: 'Unix timestamp of when the model was created' example: 1692901234 type: 'integer' description: description: 'Description of the model' example: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' type: 'string' generate_audio: description: 'Whether the model supports generating audio alongside video' type: - 'boolean' - 'null' hugging_face_id: description: 'Hugging Face model identifier, if applicable' example: 'microsoft/DialoGPT-medium' type: - 'string' - 'null' id: description: 'Unique identifier for the model' example: 'openai/gpt-4' type: 'string' name: description: 'Display name of the model' example: 'GPT-4' type: 'string' pricing_skus: additionalProperties: type: 'string' description: 'Pricing SKUs with provider prefix stripped, values as strings' type: - 'object' - 'null' seed: description: 'Whether the model supports deterministic generation via seed parameter' type: - 'boolean' - 'null' supported_aspect_ratios: description: 'Supported output aspect ratios' items: enum: - '16:9' - '9:16' - '1:1' - '4:3' - '3:4' - '3:2' - '2:3' - '21:9' - '9:21' type: 'string' type: - 'array' - 'null' supported_durations: description: 'Supported video durations in seconds' items: type: 'integer' type: - 'array' - 'null' supported_frame_images: description: 'Supported frame image types (e.g. first_frame, last_frame)' items: enum: - 'first_frame' - 'last_frame' type: 'string' type: - 'array' - 'null' supported_resolutions: description: 'Supported output resolutions' items: enum: - '480p' - '720p' - '768p' - '1080p' - '1K' - '2K' - '4K' type: 'string' type: - 'array' - 'null' supported_sizes: description: 'Supported output sizes (width x height)' items: enum: - '480x480' - '480x640' - '480x720' - '480x854' - '480x1120' - '640x480' - '720x480' - '720x720' - '720x960' - '720x1080' - '720x1280' - '720x1680' - '768x768' - '768x1024' - '768x1152' - '768x1366' - '768x1792' - '854x480' - '960x720' - '1024x768' - '1080x720' - '1080x1080' - '1080x1440' - '1080x1620' - '1080x1920' - '1080x2520' - '1120x480' - '1152x768' - '1280x720' - '1366x768' - '1440x1080' - '1440x1440' - '1440x1920' - '1440x2160' - '1440x2560' - '1440x3360' - '1620x1080' - '1680x720' - '1792x768' - '1920x1080' - '1920x1440' - '2160x1440' - '2160x2160' - '2160x2880' - '2160x3240' - '2160x3840' - '2160x5040' - '2520x1080' - '2560x1440' - '2880x2160' - '3240x2160' - '3360x1440' - '3840x2160' - '5040x2160' type: 'string' type: - 'array' - 'null' required: - 'id' - 'canonical_slug' - 'name' - 'created' - 'supported_resolutions' - 'supported_aspect_ratios' - 'supported_sizes' - 'supported_durations' - 'supported_frame_images' - 'generate_audio' - 'seed' - 'allowed_passthrough_parameters' type: 'object' VideoModelsListResponse: example: data: - allowed_passthrough_parameters: [] canonical_slug: 'google/veo-3.1' created: 1700000000 description: 'Google video generation model' generate_audio: true id: 'google/veo-3.1' name: 'Veo 3.1' pricing_skus: generate: '0.50' seed: null supported_aspect_ratios: - '16:9' supported_durations: - 5 - 8 supported_frame_images: - 'first_frame' - 'last_frame' supported_resolutions: - '720p' supported_sizes: null properties: data: items: $ref: '#/components/schemas/VideoModel' type: 'array' required: - 'data' type: 'object' WebFetchEngineEnum: description: 'Which fetch engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider''s built-in fetch. "exa" uses Exa Contents API. "openrouter" uses direct HTTP fetch. "firecrawl" uses Firecrawl scrape (requires BYOK). "parallel" uses the Parallel extract API.' enum: - 'auto' - 'native' - 'openrouter' - 'exa' - 'parallel' - 'firecrawl' example: 'auto' type: 'string' WebFetchPlugin: example: id: 'web-fetch' max_uses: 10 properties: allowed_domains: description: 'Only fetch from these domains.' items: type: 'string' type: 'array' blocked_domains: description: 'Never fetch from these domains.' items: type: 'string' type: 'array' id: enum: - 'web-fetch' type: 'string' max_content_tokens: description: 'Maximum content length in approximate tokens. Content exceeding this limit is truncated.' type: 'integer' max_uses: description: 'Maximum number of web fetches per request. Once exceeded, the tool returns an error.' type: 'integer' required: - 'id' type: 'object' WebFetchServerTool: description: 'OpenRouter built-in server tool: fetches full content from a URL (web page or PDF)' example: parameters: max_uses: 10 type: 'openrouter:web_fetch' properties: parameters: $ref: '#/components/schemas/WebFetchServerToolConfig' type: enum: - 'openrouter:web_fetch' type: 'string' required: - 'type' type: 'object' WebFetchServerToolConfig: description: 'Configuration for the openrouter:web_fetch server tool' example: max_content_tokens: 100000 max_uses: 10 properties: allowed_domains: description: 'Only fetch from these domains.' items: type: 'string' type: 'array' blocked_domains: description: 'Never fetch from these domains.' items: type: 'string' type: 'array' engine: $ref: '#/components/schemas/WebFetchEngineEnum' max_content_tokens: description: 'Maximum content length in approximate tokens. Content exceeding this limit is truncated.' example: 100000 type: 'integer' max_uses: description: 'Maximum number of web fetches per request. Once exceeded, the tool returns an error.' example: 10 type: 'integer' type: 'object' WebSearchCallCompletedEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesSearchCompleted' - properties: {} type: 'object' description: 'Web search call completed' example: item_id: 'ws-123' output_index: 0 sequence_number: 3 type: 'response.web_search_call.completed' WebSearchCallInProgressEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesWebSearchCallInProgress' - properties: {} type: 'object' description: 'Web search call in progress' example: item_id: 'ws-123' output_index: 0 sequence_number: 1 type: 'response.web_search_call.in_progress' WebSearchCallSearchingEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesWebSearchCallSearching' - properties: {} type: 'object' description: 'Web search call is searching' example: item_id: 'ws-123' output_index: 0 sequence_number: 2 type: 'response.web_search_call.searching' WebSearchConfig: example: max_results: 5 search_context_size: 'medium' properties: allowed_domains: description: 'Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains.' items: type: 'string' type: 'array' engine: $ref: '#/components/schemas/WebSearchEngineEnum' excluded_domains: description: 'Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, Anthropic, OpenAI, and xAI. Cannot be used with allowed_domains.' items: type: 'string' type: 'array' max_characters: description: 'Exact maximum number of characters of content per search result. Applies to the Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, caps highlight content per result. For Parallel, caps excerpt content per result (default 1,500 when omitted). For Perplexity, maps to the native `max_tokens_per_page` parameter (converted from characters to tokens) and trims the response to the exact character cap. When both `max_characters` and `search_context_size` are set, `max_characters` takes precedence. When omitted, falls back to `search_context_size` mapping (Exa) or engine defaults (Parallel, Perplexity).' example: 2000 type: 'integer' max_results: description: 'Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped.' example: 5 type: 'integer' max_total_results: description: 'Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified.' example: 50 type: 'integer' max_uses: description: 'Maximum number of web searches the model may perform in a single request. Once reached, further search calls return an error result instead of executing. Applies to the Exa, Firecrawl, Parallel, and Perplexity engines. With native provider search, forwarded only to Anthropic (as `max_uses`); other native search providers have no equivalent parameter and ignore it.' example: 3 type: 'integer' search_context_size: $ref: '#/components/schemas/SearchQualityLevel' user_location: $ref: '#/components/schemas/WebSearchUserLocationServerTool' type: 'object' WebSearchDomainFilter: example: allowed_domains: - 'example.com' blocked_domains: - 'spam.com' excluded_domains: - 'spam.com' properties: allowed_domains: items: type: 'string' type: - 'array' - 'null' blocked_domains: items: type: 'string' type: - 'array' - 'null' excluded_domains: items: type: 'string' type: - 'array' - 'null' type: - 'object' - 'null' WebSearchEngine: description: 'The search engine to use for web search.' enum: - 'native' - 'exa' - 'firecrawl' - 'parallel' - 'perplexity' example: 'exa' type: 'string' WebSearchEngineEnum: description: 'Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider''s built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results).' enum: - 'native' - 'exa' - 'parallel' - 'firecrawl' - 'perplexity' - 'auto' example: 'auto' type: 'string' WebSearchPlugin: example: enabled: true id: 'web' max_results: 5 properties: enabled: description: 'Set to false to disable the web-search plugin for this request. Defaults to true.' type: 'boolean' engine: $ref: '#/components/schemas/WebSearchEngine' exclude_domains: description: 'A list of domains to exclude from web search results. Supports wildcards (e.g. "*.substack.com") and path filtering (e.g. "openai.com/blog").' example: - 'example.com' - '*.substack.com' - 'openai.com/blog' items: type: 'string' type: 'array' id: enum: - 'web' type: 'string' include_domains: description: 'A list of domains to restrict web search results to. Supports wildcards (e.g. "*.substack.com") and path filtering (e.g. "openai.com/blog").' example: - 'example.com' - '*.substack.com' - 'openai.com/blog' items: type: 'string' type: 'array' max_results: type: 'integer' max_uses: description: 'Maximum number of times the model can invoke web search in a single turn. Passed through to native providers that support it (e.g. Anthropic).' type: 'integer' search_prompt: type: 'string' user_location: allOf: - $ref: '#/components/schemas/WebSearchUserLocation' - description: 'Approximate user location for location-biased search results. Passed through to native providers that support it (e.g. Anthropic).' example: city: 'San Francisco' country: 'US' region: 'California' timezone: 'America/Los_Angeles' type: 'approximate' required: - 'type' required: - 'id' type: 'object' WebSearchServerTool: description: 'Web search tool configuration (2025-08-26 version)' example: engine: 'auto' filters: allowed_domains: - 'example.com' type: 'web_search_2025_08_26' properties: engine: $ref: '#/components/schemas/WebSearchEngineEnum' filters: $ref: '#/components/schemas/WebSearchDomainFilter' max_results: description: 'Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped.' example: 5 type: 'integer' max_uses: description: 'Maximum number of web searches the model may perform in a single request. Once reached, further search calls return an error result instead of executing. Applies to the Exa, Firecrawl, Parallel, and Perplexity engines. With native provider search, forwarded only to Anthropic (as `max_uses`); other native search providers have no equivalent parameter and ignore it.' example: 3 type: 'integer' search_context_size: $ref: '#/components/schemas/SearchContextSizeEnum' type: enum: - 'web_search_2025_08_26' type: 'string' user_location: $ref: '#/components/schemas/WebSearchUserLocation' required: - 'type' type: 'object' WebSearchServerTool_OpenRouter: description: 'OpenRouter built-in server tool: searches the web for current information' example: parameters: max_results: 5 type: 'openrouter:web_search' properties: parameters: $ref: '#/components/schemas/WebSearchServerToolConfig' type: enum: - 'openrouter:web_search' type: 'string' required: - 'type' type: 'object' WebSearchServerToolConfig: description: 'Configuration for the openrouter:web_search server tool' example: max_results: 5 search_context_size: 'medium' properties: allowed_domains: description: 'Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains.' items: type: 'string' type: 'array' engine: $ref: '#/components/schemas/WebSearchEngineEnum' excluded_domains: description: 'Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, Anthropic, OpenAI, and xAI. Cannot be used with allowed_domains.' items: type: 'string' type: 'array' max_characters: description: 'Exact maximum number of characters of content per search result. Applies to the Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, caps highlight content per result. For Parallel, caps excerpt content per result (default 1,500 when omitted). For Perplexity, maps to the native `max_tokens_per_page` parameter (converted from characters to tokens) and trims the response to the exact character cap. When both `max_characters` and `search_context_size` are set, `max_characters` takes precedence. When omitted, falls back to `search_context_size` mapping (Exa) or engine defaults (Parallel, Perplexity).' example: 2000 type: 'integer' max_results: description: 'Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped.' example: 5 type: 'integer' max_total_results: description: 'Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified.' example: 50 type: 'integer' max_uses: description: 'Maximum number of web searches the model may perform in a single request. Once reached, further search calls return an error result instead of executing. Applies to the Exa, Firecrawl, Parallel, and Perplexity engines. With native provider search, forwarded only to Anthropic (as `max_uses`); other native search providers have no equivalent parameter and ignore it.' example: 3 type: 'integer' search_context_size: $ref: '#/components/schemas/SearchQualityLevel' user_location: $ref: '#/components/schemas/WebSearchUserLocationServerTool' type: 'object' WebSearchSource: example: type: 'url' url: 'https://example.com/article' properties: type: enum: - 'url' type: 'string' url: type: 'string' required: - 'type' - 'url' type: 'object' WebSearchStatus: enum: - 'completed' - 'searching' - 'in_progress' - 'failed' example: 'completed' type: 'string' WebSearchUserLocation: description: 'User location information for web search' example: city: 'San Francisco' country: 'USA' region: 'California' timezone: 'America/Los_Angeles' type: 'approximate' properties: city: type: - 'string' - 'null' country: type: - 'string' - 'null' region: type: - 'string' - 'null' timezone: type: - 'string' - 'null' type: enum: - 'approximate' type: 'string' type: - 'object' - 'null' WebSearchUserLocationServerTool: description: 'Approximate user location for location-biased results.' example: city: 'San Francisco' country: 'US' region: 'California' timezone: 'America/Los_Angeles' type: 'approximate' properties: city: type: - 'string' - 'null' country: type: - 'string' - 'null' region: type: - 'string' - 'null' timezone: type: - 'string' - 'null' type: enum: - 'approximate' type: 'string' type: 'object' Workspace: example: created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Production' slug: 'production' updated_at: '2025-08-24T15:45:00Z' properties: created_at: description: 'ISO 8601 timestamp of when the workspace was created' example: '2025-08-24T10:30:00Z' type: 'string' created_by: description: 'User ID of the workspace creator' example: 'user_abc123' type: - 'string' - 'null' default_guardrail_id: description: 'Deterministic ID derived from the workspace ID. The default guardrail is materialized when its configuration is first written.' example: '595d5849-7e86-51fd-a7c0-705c34e4afff' format: 'uuid' type: 'string' default_image_model: description: 'Default image model for this workspace' example: 'openai/dall-e-3' type: - 'string' - 'null' default_provider_sort: description: 'Default provider sort preference (price, throughput, latency, exacto)' example: 'price' type: - 'string' - 'null' default_text_model: description: 'Default text model for this workspace' example: 'openai/gpt-4o' type: - 'string' - 'null' description: description: 'Description of the workspace' example: 'Production environment workspace' type: - 'string' - 'null' id: description: 'Unique identifier for the workspace' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' include_byok_in_budgets: description: 'Whether BYOK (bring-your-own-key) spend counts toward this workspace''s budgets. Set it via the workspace budget endpoints.' example: false type: 'boolean' io_logging_api_key_ids: description: 'Optional array of API key IDs to filter I/O logging. Null means all keys are logged.' example: null items: type: 'integer' type: - 'array' - 'null' io_logging_sampling_rate: description: 'Sampling rate for I/O logging (0.0001-1). 1 means 100% of requests are logged.' example: 1 format: 'double' type: 'number' is_data_discount_logging_enabled: description: 'Whether data discount logging is enabled for this workspace' example: true type: 'boolean' is_observability_broadcast_enabled: description: 'Whether broadcast is enabled for this workspace' example: false type: 'boolean' is_observability_io_logging_enabled: description: 'Whether private logging is enabled for this workspace' example: false type: 'boolean' name: description: 'Name of the workspace' example: 'Production' type: 'string' slug: description: 'URL-friendly slug for the workspace' example: 'production' type: 'string' updated_at: description: 'ISO 8601 timestamp of when the workspace was last updated' example: '2025-08-24T15:45:00Z' type: - 'string' - 'null' required: - 'id' - 'default_guardrail_id' - 'name' - 'slug' - 'description' - 'default_text_model' - 'default_image_model' - 'default_provider_sort' - 'is_observability_io_logging_enabled' - 'is_observability_broadcast_enabled' - 'is_data_discount_logging_enabled' - 'io_logging_sampling_rate' - 'io_logging_api_key_ids' - 'created_at' - 'updated_at' - 'created_by' type: 'object' WorkspaceBudget: example: created_at: '2025-08-24T10:30:00Z' id: '770e8400-e29b-41d4-a716-446655440000' limit_usd: 100 reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: created_at: description: 'ISO 8601 timestamp of when the budget was created' example: '2025-08-24T10:30:00Z' type: 'string' id: description: 'Unique identifier for the budget' example: '770e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' limit_usd: description: 'Spending limit in USD for this interval' example: 100 format: 'double' type: 'number' reset_interval: description: 'Interval at which spend resets. Null means a lifetime (one-time) budget.' enum: - 'daily' - 'weekly' - 'monthly' - null example: 'monthly' type: - 'string' - 'null' updated_at: description: 'ISO 8601 timestamp of when the budget was last updated' example: '2025-08-24T15:45:00Z' type: 'string' workspace_id: description: 'ID of the workspace the budget belongs to' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'limit_usd' - 'reset_interval' - 'created_at' - 'updated_at' type: 'object' WorkspaceBudgetInterval: description: 'Budget reset interval. Use "lifetime" for a one-time budget that never resets.' enum: - 'daily' - 'weekly' - 'monthly' - 'lifetime' example: 'monthly' type: 'string' WorkspaceMember: example: created_at: '2025-08-24T10:30:00Z' id: '660e8400-e29b-41d4-a716-446655440000' role: 'member' user_id: 'user_abc123' workspace_id: '550e8400-e29b-41d4-a716-446655440000' properties: created_at: description: 'ISO 8601 timestamp of when the membership was created' example: '2025-08-24T10:30:00Z' type: 'string' id: description: 'Unique identifier for the workspace membership' example: '660e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' role: description: 'Role of the member in the workspace' enum: - 'admin' - 'member' example: 'member' type: 'string' user_id: description: 'Clerk user ID of the member' example: 'user_abc123' type: 'string' workspace_id: description: 'ID of the workspace' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' required: - 'id' - 'workspace_id' - 'user_id' - 'role' - 'created_at' type: 'object' securitySchemes: apiKey: description: 'API key as bearer token in Authorization header' scheme: 'bearer' type: 'http' bearer: description: 'API key as bearer token in Authorization header' scheme: 'bearer' type: 'http' externalDocs: description: 'OpenRouter Documentation' url: 'https://openrouter.ai/docs' info: contact: email: 'support@openrouter.ai' name: 'OpenRouter Support' url: 'https://openrouter.ai/docs' description: 'OpenAI-compatible API with additional OpenRouter features' license: name: 'MIT' url: 'https://opensource.org/licenses/MIT' title: 'OpenRouter API' version: '1.0.0' openapi: '3.1.0' paths: /activity: get: description: 'Returns user activity data grouped by endpoint for the last 30 (completed) UTC days. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getUserActivity' parameters: - description: 'Filter by a single UTC date in the last 30 days (YYYY-MM-DD format).' in: 'query' name: 'date' required: false schema: description: 'Filter by a single UTC date in the last 30 days (YYYY-MM-DD format).' example: '2025-08-24' type: 'string' - description: 'Filter by API key hash (SHA-256 hex string, as returned by the keys API).' in: 'query' name: 'api_key_hash' required: false schema: description: 'Filter by API key hash (SHA-256 hex string, as returned by the keys API).' example: 'abc123def456...' type: 'string' - description: 'Filter by org member user ID. Only applicable for organization accounts.' in: 'query' name: 'user_id' required: false schema: description: 'Filter by org member user ID. Only applicable for organization accounts.' example: 'user_abc123' type: 'string' responses: '200': content: application/json: example: data: - byok_usage_inference: 0.012 completion_tokens: 125 date: '2025-08-24' endpoint_id: '550e8400-e29b-41d4-a716-446655440000' model: 'openai/gpt-4.1' model_permaslug: 'openai/gpt-4.1-2025-04-14' prompt_tokens: 50 provider_name: 'OpenAI' reasoning_tokens: 25 requests: 5 usage: 0.015 schema: $ref: '#/components/schemas/ActivityResponse' description: 'Returns user activity data grouped by endpoint' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get user activity grouped by endpoint' tags: - 'Analytics' /analytics/meta: get: description: 'Returns the available metrics, dimensions, filter operators, and granularities for the analytics query endpoint. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getAnalyticsMeta' responses: '200': content: application/json: example: data: dimensions: - display_label: 'Model' name: 'model' granularities: - display_label: 'Day' name: 'day' metrics: - display_format: 'number' display_label: 'Request Count' is_rate: false name: 'request_count' operators: - name: 'eq' value_type: 'scalar' schema: properties: data: properties: dimensions: items: properties: display_label: description: 'Human-readable label' example: 'Model' type: 'string' name: description: 'Dimension identifier used in query requests' example: 'model' type: 'string' required: - 'name' - 'display_label' type: 'object' type: 'array' granularities: items: properties: display_label: description: 'Human-readable label' example: 'Day' type: 'string' name: description: 'Granularity identifier' enum: - 'minute' - 'hour' - 'day' - 'week' - 'month' example: 'day' type: 'string' required: - 'name' - 'display_label' type: 'object' type: 'array' metrics: items: properties: display_format: description: 'How this metric value should be formatted for display (e.g. percent → multiply by 100 and append %, currency → prefix with $)' enum: - 'number' - 'currency' - 'percent' - 'latency' - 'throughput' example: 'number' type: 'string' display_label: description: 'Human-readable label' example: 'Request Count' type: 'string' is_rate: description: 'Whether this metric is a rate/ratio (averaged, not summed)' type: 'boolean' name: description: 'Metric identifier used in query requests' example: 'request_count' type: 'string' required: - 'name' - 'display_label' - 'is_rate' - 'display_format' type: 'object' type: 'array' operators: items: properties: name: description: 'Operator identifier used in filter definitions' enum: - 'eq' - 'neq' - 'in' - 'not_in' - 'gt' - 'gte' - 'lt' - 'lte' example: 'eq' type: 'string' value_type: description: 'Whether the operator expects a single value or an array' enum: - 'scalar' - 'array' type: 'string' required: - 'name' - 'value_type' type: 'object' type: 'array' required: - 'metrics' - 'dimensions' - 'operators' - 'granularities' type: 'object' required: - 'data' type: 'object' description: 'Returns analytics query metadata' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get available analytics metrics and dimensions' tags: - 'beta.Analytics' /analytics/query: post: description: 'Execute an analytics query with specified metrics, dimensions, filters, and time range. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'queryAnalytics' requestBody: content: application/json: example: dimensions: - 'model' granularity: 'day' limit: 100 metrics: - 'request_count' time_range: end: '2025-01-08T00:00:00Z' start: '2025-01-01T00:00:00Z' schema: properties: classifier_dimensions: description: 'Group results by custom classifier tags, breaking down metrics by the specified dimension values. Requires an active classifier on the workspace.' properties: classifier_id: description: 'UUID of the classifier whose tags to group by.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' dimension_names: items: description: 'Classifier dimension name (snake_case identifier). When exactly one name is provided, the response uses it as the column key; with multiple names or none, the response uses `clf_dimension_name`/`clf_dimension_value` columns.' example: 'department' type: 'string' maxItems: 10 type: 'array' include_nulls: description: 'When true, also include generations that have no tag from this classifier. Defaults to false, which returns only classified generations.' type: 'boolean' required: - 'classifier_id' type: 'object' classifier_filters: description: 'Filter results to generations with specific classifier tag values. Can be combined with classifier_dimensions (must use the same classifier_id) or used independently with standard dimensions.' properties: classifier_id: description: 'UUID of the classifier whose tags to filter by. Must match classifier_dimensions.classifier_id when both are specified.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' filters: items: properties: field: description: 'Classifier dimension name to filter on (snake_case identifier, e.g. "department", "work_type").' example: 'department' type: 'string' operator: description: 'Filter operator. Only equality/set operators are supported (eq, neq, in, not_in) — ordered comparisons are not available because classification values are strings.' example: 'eq' type: 'string' value: anyOf: - type: 'string' - format: 'double' type: 'number' - items: anyOf: - type: 'string' - format: 'double' type: 'number' type: 'array' description: 'Filter value. Use a scalar (string or number) for eq/neq, or an array for in/not_in.' example: 'Engineering' required: - 'field' - 'operator' - 'value' type: 'object' maxItems: 10 minItems: 1 type: 'array' required: - 'classifier_id' - 'filters' type: 'object' dimensions: items: description: 'Dimension to group by (up to 2). Use the /meta endpoint for available dimensions.' example: 'model' type: 'string' maxItems: 2 type: 'array' filters: items: properties: field: description: 'Dimension to filter on. Use the /meta endpoint for available dimensions.' example: 'model' type: 'string' operator: description: 'Filter operator' example: 'eq' type: 'string' value: anyOf: - type: 'string' - format: 'double' type: 'number' - items: anyOf: - type: 'string' - format: 'double' type: 'number' type: 'array' description: 'Filter value (scalar or array depending on operator). Several dimensions are enriched in responses (returned as human-readable labels), but filters must use the underlying ID: `api_key_id` — numeric ID (from generation metadata) or key hash (64-char hex from GET /api/v1/keys, resolved server-side); `user` — Clerk user ID (e.g. "user_abc123"), not the display name; `workspace` — workspace UUID, not the workspace name; `app` — numeric app ID, not the app title; `model` — permaslug (e.g. "openai/gpt-4o"), not the display name. Other dimensions (provider, origin, country, etc.) are not enriched and accept the value as returned.' required: - 'field' - 'operator' - 'value' type: 'object' maxItems: 20 type: 'array' granularity: description: 'Time granularity' example: 'day' type: 'string' group_limit: description: 'Maximum rows per distinct combination of dimensions. When omitted on time-series queries (granularity + dimensions), auto-computed to avoid truncating time windows. Explicit values override the default and may truncate time buckets if set lower than the number of buckets in the range. Ignored when no dimensions are specified.' example: 100 type: 'integer' limit: description: 'Maximum total rows returned. Defaults to 1000. On time-series queries with dimensions and no explicit group_limit, the server may raise this to accommodate the expected number of unique time-bucket/dimension combinations.' type: 'integer' metrics: items: description: 'Metric name' example: 'request_count' type: 'string' minItems: 1 type: 'array' order_by: properties: direction: enum: - 'asc' - 'desc' type: 'string' field: description: 'Field to order by: a metric included in `metrics` (or "request_count", which may be ordered by without being requested), a requested dimension, or "date".' example: 'request_count' type: 'string' required: - 'field' - 'direction' type: 'object' time_range: properties: end: format: 'date-time' type: 'string' start: format: 'date-time' type: 'string' required: - 'start' - 'end' type: 'object' required: - 'metrics' type: 'object' required: true responses: '200': content: application/json: example: data: data: - date__day: '2025-01-01T00:00:00.000Z' request_count: 1500 metadata: query_time_ms: 42 row_count: 1 truncated: false schema: properties: data: properties: cachedAt: format: 'double' type: 'number' data: items: description: 'A row of analytics data with metric/dimension values' type: 'object' type: 'array' metadata: properties: query_time_ms: format: 'double' type: 'number' row_count: type: 'integer' truncated: type: 'boolean' required: - 'query_time_ms' - 'row_count' - 'truncated' type: 'object' warnings: description: 'Warnings about filter resolution issues (e.g. unresolvable api_key_id hashes). The query still runs normally; these inform the caller that some filter values could not be resolved.' items: type: 'string' type: 'array' required: - 'data' - 'metadata' type: 'object' required: - 'data' type: 'object' description: 'Analytics query results' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '408': content: application/json: example: error: code: 408 message: 'Operation timed out. Please try again later.' schema: $ref: '#/components/schemas/RequestTimeoutResponse' description: 'Request Timeout - Operation exceeded time limit' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Query analytics data' tags: - 'beta.Analytics' /audio/speech: post: description: 'Synthesizes audio from the input text. Returns a raw audio bytestream in the requested format (e.g. mp3, pcm, wav).' operationId: 'createAudioSpeech' requestBody: content: application/json: example: input: 'Hello world' model: 'mistralai/voxtral-mini-tts-2603' response_format: 'pcm' speed: 1 voice: 'en_paul_neutral' schema: $ref: '#/components/schemas/SpeechRequest' required: true responses: '200': content: audio/*: schema: description: 'Raw audio bytestream. Content-Type varies by requested format (audio/mpeg for mp3, audio/pcm for pcm — 16-bit little-endian).' example: '' format: 'binary' type: 'string' description: 'Audio bytes stream' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Create speech' tags: - 'TTS' x-speakeasy-max-method-params: 1 x-speakeasy-name-override: 'createSpeech' /audio/transcriptions: post: description: 'Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text.' operationId: 'createAudioTranscriptions' requestBody: content: application/json: example: input_audio: data: 'UklGRiQA...' format: 'wav' language: 'en' model: 'openai/whisper-large-v3' schema: $ref: '#/components/schemas/STTRequest' multipart/form-data: example: file: 'audio.wav' language: 'en' model: 'openai/whisper-large-v3' schema: properties: file: description: 'The audio file to transcribe. The format is derived from the filename extension or the file part content type. Max 25 MB; send larger files as base64 JSON via input_audio.' format: 'binary' type: 'string' language: description: 'The language of the input audio (ISO-639-1).' type: 'string' model: description: 'The model to use for transcription.' type: 'string' response_format: description: 'The response format. "json" (default) returns { text, usage }; "verbose_json" additionally returns task, language, duration, and segment-level timestamps (OpenAI-compatible providers only).' enum: - 'json' - 'verbose_json' type: 'string' temperature: description: 'The sampling temperature.' type: 'number' timestamp_granularities[]: description: 'Timestamp detail levels to include when response_format is "verbose_json". "word" additionally returns word-level timestamps in the words array.' items: enum: - 'word' - 'segment' type: 'string' type: 'array' required: - 'file' - 'model' type: 'object' required: true responses: '200': content: application/json: example: text: 'Hello, this is a test of OpenAI speech-to-text transcription.' usage: cost: 0.000508 input_tokens: 83 output_tokens: 30 seconds: 9.2 total_tokens: 113 schema: $ref: '#/components/schemas/STTResponse' description: 'Transcription result' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Create transcription' tags: - 'STT' x-speakeasy-max-method-params: 1 x-speakeasy-name-override: 'createTranscription' /auth/keys: post: description: 'Exchange an authorization code from the PKCE flow for a user-controlled API key' operationId: 'exchangeAuthCodeForAPIKey' requestBody: content: application/json: example: code: 'auth_code_abc123def456' code_challenge_method: 'S256' code_verifier: 'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk' schema: example: code: 'auth_code_abc123def456' code_challenge_method: 'S256' code_verifier: 'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk' properties: code: description: 'The authorization code received from the OAuth redirect' example: 'auth_code_abc123def456' type: 'string' code_challenge_method: description: 'The method used to generate the code challenge' enum: - 'S256' - 'plain' - null example: 'S256' type: - 'string' - 'null' code_verifier: description: 'The code verifier if code_challenge was used in the authorization request' example: 'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk' type: 'string' required: - 'code' type: 'object' required: true responses: '200': content: application/json: example: key: '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' user_id: 'user_2yOPcMpKoQhcd4bVgSMlELRaIah' schema: example: key: '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' user_id: 'user_2yOPcMpKoQhcd4bVgSMlELRaIah' properties: key: description: 'The API key to use for OpenRouter requests' example: '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' type: 'string' user_id: description: 'User ID associated with the API key' example: 'user_2yOPcMpKoQhcd4bVgSMlELRaIah' type: - 'string' - 'null' required: - 'key' - 'user_id' type: 'object' description: 'Successfully exchanged code for an API key' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Exchange authorization code for API key' tags: - 'OAuth' /auth/keys/code: post: description: 'Create an authorization code for the PKCE flow to generate a user-controlled API key' operationId: 'createAuthKeysCode' requestBody: content: application/json: example: callback_url: 'https://myapp.com/auth/callback' code_challenge: 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM' code_challenge_method: 'S256' limit: 100 schema: example: callback_url: 'https://myapp.com/auth/callback' code_challenge: 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM' code_challenge_method: 'S256' limit: 100 properties: callback_url: description: 'The callback URL to redirect to after authorization. Supports https URLs and localhost/127.0.0.1 URLs on any port for local CLI tools.' example: 'https://myapp.com/auth/callback' format: 'uri' type: 'string' code_challenge: description: 'PKCE code challenge for enhanced security' example: 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM' type: 'string' code_challenge_method: description: 'The method used to generate the code challenge' enum: - 'S256' - 'plain' example: 'S256' type: 'string' expires_at: description: 'Optional expiration time for the API key to be created' example: '2027-12-31T23:59:59Z' format: 'date-time' type: - 'string' - 'null' key_label: description: 'Optional custom label for the API key. Defaults to the app name if not provided.' example: 'My Custom Key' maxLength: 100 type: 'string' limit: description: 'Credit limit for the API key to be created' example: 100 format: 'double' type: 'number' spawn_agent: description: 'Agent identifier for spawn telemetry' example: 'my-agent' type: 'string' x-fern-ignore: true x-speakeasy-ignore: true spawn_cloud: description: 'Cloud identifier for spawn telemetry' example: 'aws-us-east-1' type: 'string' x-fern-ignore: true x-speakeasy-ignore: true usage_limit_type: description: 'Optional credit limit reset interval. When set, the credit limit resets on this interval.' enum: - 'daily' - 'weekly' - 'monthly' example: 'monthly' type: 'string' workspace_id: description: 'Optional workspace ID to associate the API key with' format: 'uuid' type: 'string' required: - 'callback_url' type: 'object' required: true responses: '200': content: application/json: example: data: app_id: 12345 created_at: '2025-08-24T10:30:00Z' id: 'auth_code_xyz789' schema: example: data: app_id: 12345 created_at: '2025-08-24T10:30:00Z' id: 'auth_code_xyz789' properties: data: description: 'Auth code data' example: app_id: 12345 created_at: '2025-08-24T10:30:00Z' id: 'auth_code_xyz789' properties: app_id: description: 'The application ID associated with this auth code' example: 12345 type: 'integer' created_at: description: 'ISO 8601 timestamp of when the auth code was created' example: '2025-08-24T10:30:00Z' type: 'string' id: description: 'The authorization code ID to use in the exchange request' example: 'auth_code_xyz789' type: 'string' required: - 'id' - 'app_id' - 'created_at' type: 'object' required: - 'data' type: 'object' description: 'Successfully created authorization code' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '409': content: application/json: example: error: code: 409 message: 'Resource conflict. Please try again later.' schema: $ref: '#/components/schemas/ConflictResponse' description: 'Conflict - Resource conflict or concurrent modification' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create authorization code' tags: - 'OAuth' x-speakeasy-name-override: 'createAuthCode' /benchmarks: get: description: 'Unified benchmark endpoint that aggregates scores from multiple benchmark sources (Artificial Analysis, Design Arena, and OpenRouter''s own tau-bench and GPQA evals). Filter by source to reproduce the exact shapes from the legacy per-source endpoints, or use task_type to find models suited for specific workloads. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.' operationId: 'getBenchmarks' parameters: - description: 'Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources.' in: 'query' name: 'source' required: false schema: description: 'Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources.' enum: - 'artificial-analysis' - 'design-arena' - 'openrouter' example: 'artificial-analysis' type: 'string' - description: 'Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category.' in: 'query' name: 'task_type' required: false schema: description: 'Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category.' enum: - 'coding' - 'intelligence' - 'agentic' example: 'coding' type: 'string' - description: 'Design Arena only: arena to query. Defaults to `models` when source is `design-arena`.' in: 'query' name: 'arena' required: false schema: description: 'Design Arena only: arena to query. Defaults to `models` when source is `design-arena`.' enum: - 'models' - 'builders' - 'agents' example: 'models' type: 'string' - description: 'Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories.' in: 'query' name: 'category' required: false schema: description: 'Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories.' example: 'codecategories' type: 'string' - description: 'Maximum number of items to return. When omitted, all matching results are returned.' in: 'query' name: 'max_results' required: false schema: description: 'Maximum number of items to return. When omitted, all matching results are returned.' example: 50 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - agentic_index: 58.3 coding_index: 65.8 display_name: 'GPT-4o' intelligence_index: 71.2 model_permaslug: 'openai/gpt-4o' pricing: completion: '0.00001' prompt: '0.0000025' source: 'artificial-analysis' - accuracy: 0.72 accuracy_stddev: 0.03 avg_cost_per_task: 0.002 benchmark_type: 'gpqa_diamond' display_name: 'GPT-4o' last_run_timestamp: '2026-06-03T12:00:00Z' model_permaslug: 'openai/gpt-4o' source: 'openrouter' total_tasks: 300 meta: as_of: '2026-06-03T12:00:00Z' citation: null model_count: 1 source: null source_url: null task_type: null version: 'v1' schema: $ref: '#/components/schemas/UnifiedBenchmarksResponse' description: 'Benchmark results filtered by the specified source and optional task type.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List Benchmarks' tags: - 'Benchmarks' /byok: get: description: 'List the bring-your-own-key (BYOK) provider credentials for the authenticated entity''s default workspace. Use the `workspace_id` query parameter to scope the result to a different workspace, or the `provider` query parameter to filter by upstream provider. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listBYOKKeys' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' - description: 'Optional workspace ID to filter by. Defaults to the authenticated entity''s default workspace.' in: 'query' name: 'workspace_id' required: false schema: description: 'Optional workspace ID to filter by. Defaults to the authenticated entity''s default workspace.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' - description: 'Optional provider slug to filter by (e.g. `openai`, `anthropic`, `amazon-bedrock`).' in: 'query' name: 'provider' required: false schema: description: 'Optional provider slug to filter by (e.g. `openai`, `anthropic`, `amazon-bedrock`).' enum: - 'ai21' - 'aion-labs' - 'akashml' - 'alibaba' - 'amazon-bedrock' - 'amazon-nova' - 'ambient' - 'anthropic' - 'arcee-ai' - 'atlas-cloud' - 'avian' - 'azure' - 'baidu' - 'baseten' - 'black-forest-labs' - 'byteplus' - 'cerebras' - 'chutes' - 'cirrascale' - 'clarifai' - 'cloudflare' - 'cohere' - 'coreweave' - 'crusoe' - 'darkbloom' - 'decart' - 'deepgram' - 'deepinfra' - 'deepseek' - 'dekallm' - 'digitalocean' - 'featherless' - 'fireworks' - 'fish-audio' - 'friendli' - 'gmicloud' - 'google-ai-studio' - 'google-vertex' - 'groq' - 'heygen' - 'inception' - 'inceptron' - 'inferact-vllm' - 'inference-net' - 'infermatic' - 'inflection' - 'io-net' - 'ionstream' - 'krea' - 'liquid' - 'mancer' - 'mara' - 'meta' - 'minimax' - 'mistral' - 'modal' - 'modelrun' - 'modular' - 'moonshotai' - 'morph' - 'ncompass' - 'nebius' - 'nex-agi' - 'nextbit' - 'novita' - 'nvidia' - 'open-inference' - 'openai' - 'parasail' - 'perceptron' - 'perplexity' - 'phala' - 'poolside' - 'quiver' - 'recraft' - 'reka' - 'relace' - 'runway' - 'sail-research' - 'sakana' - 'sakana-ai' - 'sambanova' - 'seed' - 'siliconflow' - 'sourceful' - 'stepfun' - 'streamlake' - 'switchpoint' - 'tencent' - 'tenstorrent' - 'thinkingmachines' - 'together' - 'upstage' - 'venice' - 'wafer' - 'wandb' - 'wandb-legacy' - 'xai' - 'xiaomi' - 'z-ai' example: 'openai' type: 'string' responses: '200': content: application/json: example: data: - allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Production OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' total_count: 1 schema: $ref: '#/components/schemas/ListBYOKKeysResponse' description: 'List of BYOK credentials' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List BYOK provider credentials' tags: - 'BYOK' x-speakeasy-name-override: 'list' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' post: description: 'Create a new bring-your-own-key (BYOK) provider credential. The raw key is encrypted at rest and never returned in API responses. Defaults to the authenticated entity''s default workspace; use the `workspace_id` body field to scope to a different workspace. Treat the raw key as write-only; it is never returned after creation. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'createBYOKKey' requestBody: content: application/json: example: key: 'sk-proj-abc123...' name: 'Production OpenAI Key' provider: 'openai' schema: $ref: '#/components/schemas/CreateBYOKKeyRequest' required: true responses: '201': content: application/json: example: data: allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Production OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' schema: $ref: '#/components/schemas/CreateBYOKKeyResponse' description: 'BYOK credential created successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create a BYOK provider credential' tags: - 'BYOK' x-speakeasy-name-override: 'create' /byok/{id}: delete: description: 'Delete (soft-delete) a bring-your-own-key (BYOK) provider credential by its `id`. The encrypted key material is wiped and the record is marked as deleted. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'deleteBYOKKey' parameters: - description: 'The BYOK credential ID (UUID).' in: 'path' name: 'id' required: true schema: description: 'The BYOK credential ID (UUID).' example: '11111111-2222-3333-4444-555555555555' format: 'uuid' type: 'string' responses: '200': content: application/json: example: deleted: true schema: $ref: '#/components/schemas/DeleteBYOKKeyResponse' description: 'BYOK credential deleted successfully' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Delete a BYOK provider credential' tags: - 'BYOK' x-speakeasy-name-override: 'delete' get: description: 'Get a single bring-your-own-key (BYOK) provider credential by its `id`. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getBYOKKey' parameters: - description: 'The BYOK credential ID (UUID).' in: 'path' name: 'id' required: true schema: description: 'The BYOK credential ID (UUID).' example: '11111111-2222-3333-4444-555555555555' format: 'uuid' type: 'string' responses: '200': content: application/json: example: data: allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Production OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' schema: $ref: '#/components/schemas/GetBYOKKeyResponse' description: 'BYOK credential details' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get a BYOK provider credential' tags: - 'BYOK' x-speakeasy-name-override: 'get' patch: description: 'Update an existing bring-your-own-key (BYOK) provider credential by its `id`. Include the `key` field to rotate the raw provider API key in-place (the previous key material is overwritten). [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updateBYOKKey' parameters: - description: 'The BYOK credential ID (UUID).' in: 'path' name: 'id' required: true schema: description: 'The BYOK credential ID (UUID).' example: '11111111-2222-3333-4444-555555555555' format: 'uuid' type: 'string' requestBody: content: application/json: example: disabled: false name: 'Updated OpenAI Key' schema: $ref: '#/components/schemas/UpdateBYOKKeyRequest' required: true responses: '200': content: application/json: example: data: allowed_api_key_hashes: null allowed_models: null allowed_user_ids: null created_at: '2025-08-24T10:30:00Z' disabled: false id: '11111111-2222-3333-4444-555555555555' is_fallback: false label: 'sk-...AbCd' name: 'Updated OpenAI Key' provider: 'openai' sort_order: 0 workspace_id: '550e8400-e29b-41d4-a716-446655440000' schema: $ref: '#/components/schemas/UpdateBYOKKeyResponse' description: 'BYOK credential updated successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Update a BYOK provider credential' tags: - 'BYOK' x-speakeasy-name-override: 'update' /chat/completions: post: description: 'Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes.' operationId: 'sendChatCompletionRequest' parameters: - description: 'Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.' example: 'enabled' in: 'header' name: 'X-OpenRouter-Metadata' required: false schema: $ref: '#/components/schemas/MetadataLevel' requestBody: content: application/json: example: max_tokens: 150 messages: - content: 'You are a helpful assistant.' role: 'system' - content: 'What is the capital of France?' role: 'user' model: 'openai/gpt-4' temperature: 0.7 schema: $ref: '#/components/schemas/ChatRequest' required: true responses: '200': content: application/json: example: choices: - finish_reason: 'stop' index: 0 message: content: 'The capital of France is Paris.' role: 'assistant' created: 1677652288 id: 'chatcmpl-123' model: 'openai/gpt-4' object: 'chat.completion' system_fingerprint: 'fp_44709d6fcb' usage: completion_tokens: 10 prompt_tokens: 25 total_tokens: 35 schema: $ref: '#/components/schemas/ChatResult' text/event-stream: example: data: choices: - delta: content: 'Hello' role: 'assistant' finish_reason: null index: 0 created: 1677652288 id: 'chatcmpl-123' model: 'openai/gpt-4' object: 'chat.completion.chunk' schema: $ref: '#/components/schemas/ChatStreamingResponse' x-speakeasy-sse-sentinel: '[DONE]' description: 'Successful chat completion response' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '403': content: application/json: examples: guardrail-blocked: summary: 'Guardrail blocked the request' value: error: code: 403 message: 'Request blocked: prompt injection patterns detected' metadata: patterns: - 'ignore all previous instructions' openrouter_metadata: attempt: 1 endpoints: available: - model: 'openai/gpt-4o' provider: 'OpenAI' selected: false total: 1 is_byok: false pipeline: - data: action: 'blocked' detected: true engines: - 'regex' patterns: - 'ignore all previous instructions' guardrail_id: 'grd_abc123' guardrail_scope: 'api-key' name: 'regex_pi_detection' summary: 'Blocked: prompt injection detected (1 pattern matched)' type: 'guardrail' region: 'iad' requested: 'openai/gpt-4o' strategy: 'direct' summary: 'available=1' insufficient-permissions: summary: 'Insufficient permissions' value: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions, or a guardrail blocked the request. When guardrails block and the `X-OpenRouter-Metadata: enabled` header is present, the response includes `openrouter_metadata` with full routing context and a `pipeline` array containing guardrail stage details.' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '408': content: application/json: example: error: code: 408 message: 'Operation timed out. Please try again later.' schema: $ref: '#/components/schemas/RequestTimeoutResponse' description: 'Request Timeout - Operation exceeded time limit' '413': content: application/json: example: error: code: 413 message: 'Request payload too large' schema: $ref: '#/components/schemas/PayloadTooLargeResponse' description: 'Payload Too Large - Request payload exceeds size limits' '422': content: application/json: example: error: code: 422 message: 'Invalid argument' schema: $ref: '#/components/schemas/UnprocessableEntityResponse' description: 'Unprocessable Entity - Semantic validation failure' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Create a chat completion' tags: - 'Chat' x-speakeasy-group: 'chat' x-speakeasy-name-override: 'send' x-speakeasy-stream-request-field: 'stream' /classifications/task: get: description: "Returns the market-share breakdown of OpenRouter traffic by task classification\n(e.g. code generation, web search, summarization) over a trailing time window.\n\nEach classification reports its share of classified sampled requests (`usage_share`)\nand classified sampled token volume (`token_share`) as fractions between 0 and 1.\nThe unclassified `other` bucket is excluded. Absolute volumes are not exposed\nbecause the underlying data is sampled.\n\nEach classification also includes a `models` array listing the top models by\nrequest volume within that classification, with their within-tag usage and token shares.\n\nClassifications are grouped into macro-categories (Code, Data, Agent, General)\nwith aggregate shares provided for each.\n\nAuthenticate with any valid OpenRouter API key (same key used for inference).\nRate-limited to 30 requests/minute per key and 500 requests/day per account.\n\nWhen republishing or quoting this data, cite as:\n\"Source: OpenRouter (openrouter.ai/rankings), as of {as_of}.\"" operationId: 'getTaskClassifications' parameters: - description: 'Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported.' in: 'query' name: 'window' required: false schema: default: '7d' description: 'Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported.' enum: - '7d' example: '7d' type: 'string' responses: '200': content: application/json: example: data: as_of: '2026-06-17' classifications: - category_token_share: 0.48 category_usage_share: 0.51 display_name: 'Code Generation' macro_category: 'code' models: - id: 'openai/gpt-4.1-mini' tag_token_share: 0.75 tag_usage_share: 0.55 tag: 'code:general_impl' token_share: 0.31 usage_share: 0.23 macro_categories: - key: 'code' label: 'Code' token_share: 0.52 usage_share: 0.45 window_days: 7 schema: $ref: '#/components/schemas/TaskClassificationResponse' description: 'Task classification market-share data for the requested trailing window.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Task classification market share' tags: - 'Classifications' /credits: get: description: 'Get total credits purchased and used for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getCredits' responses: '200': content: application/json: example: data: total_credits: 100.5 total_usage: 25.75 schema: description: 'Total credits purchased and used' example: data: total_credits: 100.5 total_usage: 25.75 properties: data: example: total_credits: 100.5 total_usage: 25.75 properties: total_credits: description: 'Total credits purchased' example: 100.5 format: 'double' type: 'number' total_usage: description: 'Total credits used' example: 25.75 format: 'double' type: 'number' required: - 'total_credits' - 'total_usage' type: 'object' required: - 'data' type: 'object' description: 'Returns the total credits purchased and used' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get remaining credits' tags: - 'Credits' x-speakeasy-name-override: 'getCredits' /credits/coinbase: post: deprecated: true description: 'Deprecated. The Coinbase APIs used by this endpoint have been deprecated, so Coinbase Commerce charges have been removed. Use the web credits purchase flow instead.' operationId: 'createCoinbaseCharge' responses: '200': description: 'This endpoint is deprecated and will never return a 200 response.' '410': content: application/json: example: error: code: 410 message: 'The Coinbase APIs used by this endpoint have been deprecated, so the Coinbase Commerce credits API has been removed. Use the web credits purchase flow instead.' schema: $ref: '#/components/schemas/GoneResponse' description: 'Gone - Endpoint has been permanently removed or deprecated' security: [] summary: 'Deprecated Coinbase Commerce charge endpoint' tags: - 'Credits' x-fern-ignore: true x-speakeasy-ignore: true x-speakeasy-name-override: 'createCoinbaseCharge' /datasets/app-rankings: get: description: "Returns the top public apps on OpenRouter ranked by token usage inside the requested\ndate window, matching the public apps marketplace on openrouter.ai/apps. Token totals\nare `prompt_tokens + completion_tokens`; hidden and private apps are excluded and\ntraffic from related app aliases is merged into the canonical visible app.\n\n`sort=popular` (default) ranks by total token volume inside the window.\n`sort=trending` ranks by absolute excess token growth: window volume minus the average\nvolume of the three equal-length periods immediately preceding the window. Apps with\nno excess growth are omitted, so `trending` may return fewer than `limit` rows.\n\nFilter with `category` (marketplace category group, e.g. `coding`) or `subcategory`\n(e.g. `cli-agent`). Ranks are re-numbered 1..N after filtering. Page with `offset` —\n`rank` stays absolute, so the first row of `offset=50` is `rank: 51`.\n\nAuthenticate with any valid OpenRouter API key (same key used for inference).\nRate-limited to 30 requests/minute per key and 500 requests/day per account.\n\nWhen republishing or quoting this dataset, OpenRouter must be cited as:\n\"Source: OpenRouter (openrouter.ai/apps), as of {as_of}.\"\n\nToken counts come from each upstream provider's own tokenizer, so a token attributed\nto one app is not directly comparable to a token attributed to another app whose\ntraffic flows through a different provider." operationId: 'getAppRankings' parameters: - description: 'Marketplace category group to filter by (e.g. `coding`). Only apps tagged with a subcategory inside this group are returned. Mutually combinable with `subcategory` — when both are supplied the `subcategory` must belong to the `category` group.' in: 'query' name: 'category' required: false schema: description: 'Marketplace category group to filter by (e.g. `coding`). Only apps tagged with a subcategory inside this group are returned. Mutually combinable with `subcategory` — when both are supplied the `subcategory` must belong to the `category` group.' enum: - 'coding' - 'creative' - 'productivity' - 'entertainment' example: 'coding' type: 'string' - description: 'Marketplace subcategory to filter by (e.g. `cli-agent`). Takes precedence over `category` for the actual filter; when `category` is also supplied the pair must be consistent.' in: 'query' name: 'subcategory' required: false schema: description: 'Marketplace subcategory to filter by (e.g. `cli-agent`). Takes precedence over `category` for the actual filter; when `category` is also supplied the pair must be consistent.' enum: - 'cli-agent' - 'ide-extension' - 'cloud-agent' - 'programming-app' - 'native-app-builder' - 'creative-writing' - 'video-gen' - 'image-gen' - 'audio-gen' - 'roleplay' - 'game' - 'writing-assistant' - 'general-chat' - 'personal-agent' - 'legal' example: 'cli-agent' type: 'string' - description: '`popular` ranks apps by total token volume inside the date window. `trending` ranks apps by absolute excess token growth: window volume minus the average volume of the three equal-length periods immediately preceding the window. Apps with no excess growth are omitted from `trending` results.' in: 'query' name: 'sort' required: false schema: default: 'popular' description: '`popular` ranks apps by total token volume inside the date window. `trending` ranks apps by absolute excess token growth: window volume minus the average volume of the three equal-length periods immediately preceding the window. Apps with no excess growth are omitted from `trending` results.' enum: - 'popular' - 'trending' example: 'popular' type: 'string' - description: 'Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`.' in: 'query' name: 'start_date' required: false schema: description: 'Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`.' example: '2026-04-12' pattern: '^\d{4}-\d{2}-\d{2}$' type: 'string' - description: 'End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400.' in: 'query' name: 'end_date' required: false schema: description: 'End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400.' example: '2026-05-11' pattern: '^\d{4}-\d{2}-\d{2}$' type: 'string' - description: 'Maximum number of apps to return (1-100). Defaults to 50.' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of apps to return (1-100). Defaults to 50.' example: 50 maximum: 100 minimum: 1 type: 'integer' - description: 'Number of ranked apps to skip before the first returned row (0-100). Defaults to 0. `rank` stays absolute, so the first row of `offset=50` is `rank: 51`.' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of ranked apps to skip before the first returned row (0-100). Defaults to 0. `rank` stays absolute, so the first row of `offset=50` is `rank: 51`.' example: 0 maximum: 100 minimum: 0 type: - 'integer' - 'null' responses: '200': content: application/json: example: data: - app_id: 12345 app_name: 'Cline' rank: 1 total_requests: 4321 total_tokens: '12345678' - app_id: 67890 app_name: 'Roo Code' rank: 2 total_requests: 2109 total_tokens: '9876543' meta: as_of: '2026-05-12T02:00:00Z' end_date: '2026-05-11' start_date: '2026-04-12' version: 'v1' schema: $ref: '#/components/schemas/AppRankingsResponse' description: 'Apps ranked per the requested `sort`, re-numbered 1..N. `popular` sorts by `total_tokens` descending; `trending` sorts by absolute excess token growth descending and may return fewer than `limit` rows.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Top apps by token usage' tags: - 'Datasets' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /datasets/rankings-daily: get: description: "Returns the top 50 public models per day by total token usage on OpenRouter, plus a\nsingle aggregated `other` row per day that sums every model outside that top 50.\nToken totals are `prompt_tokens + completion_tokens`, matching the public rankings\nchart on openrouter.ai/rankings.\n\nEach row is a distinct `(date, model_permaslug)` pair. The `other` row uses the\nreserved permaslug `other` and is always returned last within its date, so callers\ncan compute `top-50 traffic / total daily traffic` without a second request.\n\nOptional filters slice the dataset. `period` (`day`/`week`/`month`) sets the time\ngrain. `modality` and `context_bucket` narrow the exact dataset by output/input\nmodality (or tool-calling activity) and request context length. `category` and\n`language_type` instead read a sampled, upsampled dataset whose `total_tokens` are\nweekly-grain estimates — they cannot be combined with each other or with the exact\nfilters, and reject `period=day` with a 400.\n\nAuthenticate with any valid OpenRouter API key (same key used for inference).\nRate-limited to 30 requests/minute per key and 500 requests/day per account.\n\nWhen republishing or quoting this dataset, OpenRouter must be cited as:\n\"Source: OpenRouter (openrouter.ai/rankings), as of {as_of}.\"\n\nToken counts come from each upstream provider's own tokenizer (Anthropic counts\nare as reported by Anthropic, OpenAI counts are as reported by OpenAI, etc.), so\na token in one row is not directly comparable to a token in another row from a\ndifferent provider." operationId: 'getRankingsDaily' parameters: - description: 'Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`.' in: 'query' name: 'start_date' required: false schema: description: 'Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`.' example: '2026-04-12' pattern: '^\d{4}-\d{2}-\d{2}$' type: 'string' - description: 'End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400.' in: 'query' name: 'end_date' required: false schema: description: 'End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400.' example: '2026-05-11' pattern: '^\d{4}-\d{2}-\d{2}$' type: 'string' - description: 'Time grain of each row. `day` (default) returns the per-UTC-day series; `week` buckets by ISO week start; `month` buckets by month start. With `category` or `language_type` only `week` (default) and `month` are available — `day` is rejected with a 400 because those datasets are aggregated weekly. For those sampled datasets `period=month` buckets each week by its week-start month, so totals are approximate at month boundaries.' in: 'query' name: 'period' required: false schema: description: 'Time grain of each row. `day` (default) returns the per-UTC-day series; `week` buckets by ISO week start; `month` buckets by month start. With `category` or `language_type` only `week` (default) and `month` are available — `day` is rejected with a 400 because those datasets are aggregated weekly. For those sampled datasets `period=month` buckets each week by its week-start month, so totals are approximate at month boundaries.' enum: - 'day' - 'week' - 'month' example: 'day' type: 'string' - description: 'Restrict to models for a modality surface: `text` / `image_output` match output modality, `image` / `audio` match input modality, and `tool_calling` keeps only rows that recorded at least one tool call. Exact dataset — cannot be combined with `category` or `language_type`.' in: 'query' name: 'modality' required: false schema: description: 'Restrict to models for a modality surface: `text` / `image_output` match output modality, `image` / `audio` match input modality, and `tool_calling` keeps only rows that recorded at least one tool call. Exact dataset — cannot be combined with `category` or `language_type`.' enum: - 'text' - 'image' - 'image_output' - 'audio' - 'tool_calling' example: 'text' type: 'string' - description: 'Restrict to requests whose context length falls in this bucket (`1K`, `10K`, `100K`, `1M`, or `10M`). Exact dataset — cannot be combined with `category` or `language_type`.' in: 'query' name: 'context_bucket' required: false schema: description: 'Restrict to requests whose context length falls in this bucket (`1K`, `10K`, `100K`, `1M`, or `10M`). Exact dataset — cannot be combined with `category` or `language_type`.' enum: - '1K' - '10K' - '100K' - '1M' - '10M' example: '100K' type: 'string' - description: 'Restrict to a use-case category (e.g. `programming`, `roleplay`). Sourced from a sampled, upsampled dataset, so `total_tokens` is an estimate and is aggregated weekly (the trailing weekly bucket may include traffic past `end_date`). Cannot be combined with `modality`, `context_bucket`, or `language_type`.' in: 'query' name: 'category' required: false schema: description: 'Restrict to a use-case category (e.g. `programming`, `roleplay`). Sourced from a sampled, upsampled dataset, so `total_tokens` is an estimate and is aggregated weekly (the trailing weekly bucket may include traffic past `end_date`). Cannot be combined with `modality`, `context_bucket`, or `language_type`.' enum: - 'programming' - 'roleplay' - 'marketing' - 'marketing/seo' - 'technology' - 'science' - 'translation' - 'legal' - 'finance' - 'health' - 'trivia' - 'academia' example: 'programming' type: 'string' - description: 'Restrict to natural-language or programming-language tagged activity. Sourced from a sampled, upsampled dataset, so `total_tokens` is an estimate and is aggregated weekly (the trailing weekly bucket may include traffic past `end_date`). Cannot be combined with `modality`, `context_bucket`, or `category`.' in: 'query' name: 'language_type' required: false schema: description: 'Restrict to natural-language or programming-language tagged activity. Sourced from a sampled, upsampled dataset, so `total_tokens` is an estimate and is aggregated weekly (the trailing weekly bucket may include traffic past `end_date`). Cannot be combined with `modality`, `context_bucket`, or `category`.' enum: - 'natural' - 'programming' example: 'natural' type: 'string' responses: '200': content: application/json: example: data: - date: '2026-05-11' model_permaslug: 'openai/gpt-4o-2024-05-13' total_tokens: '12345678' - date: '2026-05-11' model_permaslug: 'anthropic/claude-3.5-sonnet-20241022' total_tokens: '9876543' - date: '2026-05-11' model_permaslug: 'other' total_tokens: '4321098' meta: as_of: '2026-05-12T02:00:00Z' end_date: '2026-05-11' start_date: '2026-04-12' version: 'v1' schema: $ref: '#/components/schemas/RankingsDailyResponse' description: 'Up to 51 rows per day — the top 50 public models by `total_tokens` plus a single aggregated `other` row covering every model outside that top 50. Sorted by `date` ascending, then by `total_tokens` descending, with `other` pinned last within its date.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Daily token totals for top 50 models' tags: - 'Datasets' /embeddings: post: description: 'Submits an embedding request to the embeddings router' operationId: 'createEmbeddings' requestBody: content: application/json: schema: description: 'Embeddings request input' example: dimensions: 1536 input: 'The quick brown fox jumps over the lazy dog' model: 'openai/text-embedding-3-small' properties: dimensions: description: 'The number of dimensions for the output embeddings' example: 1536 minimum: 1 type: 'integer' encoding_format: description: 'The format of the output embeddings' enum: - 'float' - 'base64' example: 'float' type: 'string' input: anyOf: - minLength: 1 type: 'string' - items: minLength: 1 type: 'string' type: 'array' - items: type: 'number' type: 'array' - items: items: type: 'number' type: 'array' type: 'array' - items: properties: content: items: oneOf: - properties: text: minLength: 1 type: 'string' type: enum: - 'text' type: 'string' required: - 'type' - 'text' type: 'object' - properties: image_url: properties: url: type: 'string' required: - 'url' type: 'object' type: enum: - 'image_url' type: 'string' required: - 'type' - 'image_url' type: 'object' - $ref: '#/components/schemas/ContentPartInputAudio' - $ref: '#/components/schemas/ContentPartInputVideo' - $ref: '#/components/schemas/ContentPartInputFile' minItems: 1 type: 'array' required: - 'content' type: 'object' type: 'array' description: 'Text, token, or multimodal input(s) to embed' example: 'The quick brown fox jumps over the lazy dog' input_type: description: 'The type of input (e.g. search_query, search_document)' example: 'search_query' type: 'string' model: description: 'The model to use for embeddings' example: 'openai/text-embedding-3-small' type: 'string' provider: allOf: - $ref: '#/components/schemas/ProviderPreferences' - description: 'Provider routing preferences for the request.' user: description: 'A unique identifier for the end-user' example: 'user-1234' type: 'string' required: - 'input' - 'model' type: 'object' required: true responses: '200': content: application/json: schema: description: 'Embeddings response containing embedding vectors' example: data: - embedding: - 0.0023064255 - -0.009327292 - 0.015797347 index: 0 object: 'embedding' model: 'openai/text-embedding-3-small' object: 'list' usage: prompt_tokens: 8 total_tokens: 8 properties: data: description: 'List of embedding objects' example: - embedding: - 0.0023064255 - -0.009327292 - 0.015797347 index: 0 object: 'embedding' items: description: 'A single embedding object' example: embedding: - 0.0023064255 - -0.009327292 - 0.015797347 index: 0 object: 'embedding' properties: embedding: anyOf: - items: type: 'number' type: 'array' - type: 'string' description: 'Embedding vector as an array of floats or a base64 string' example: - 0.0023064255 - -0.009327292 - 0.015797347 index: description: 'Index of the embedding in the input list' example: 0 type: 'integer' object: enum: - 'embedding' type: 'string' required: - 'object' - 'embedding' type: 'object' type: 'array' id: description: 'Unique identifier for the embeddings response' example: 'embd-1234567890' type: 'string' model: description: 'The model used for embeddings' example: 'openai/text-embedding-3-small' type: 'string' object: enum: - 'list' type: 'string' usage: description: 'Token usage statistics' example: prompt_tokens: 8 total_tokens: 8 properties: cost: description: 'Cost of the request in credits' example: 0.0001 format: 'double' type: 'number' cost_details: $ref: '#/components/schemas/CostDetails' is_byok: description: 'Whether a request was made using a Bring Your Own Key configuration' type: 'boolean' prompt_tokens: description: 'Number of tokens in the input' example: 8 type: 'integer' prompt_tokens_details: description: 'Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included.' properties: audio_tokens: description: 'Number of audio tokens in the input' type: 'integer' file_tokens: description: 'Number of file/document tokens in the input' type: 'integer' image_tokens: description: 'Number of image tokens in the input' example: 258 type: 'integer' text_tokens: description: 'Number of text tokens in the input' example: 8 type: 'integer' video_tokens: description: 'Number of video tokens in the input' type: 'integer' type: 'object' total_tokens: description: 'Total number of tokens used' example: 8 type: 'integer' required: - 'prompt_tokens' - 'total_tokens' type: 'object' required: - 'object' - 'data' - 'model' type: 'object' text/event-stream: example: 'data: [DONE]' schema: description: 'Not used for embeddings - embeddings do not support streaming' type: 'string' x-speakeasy-sse-sentinel: '[DONE]' description: 'Embedding response' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Submit an embedding request' tags: - 'Embeddings' x-speakeasy-name-override: 'generate' /embeddings/models: get: description: 'Returns a list of all available embeddings models and their properties' operationId: 'listEmbeddingsModels' parameters: - description: 'Number of records to skip for pagination. When both offset and limit are omitted, the full list is returned' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination. When both offset and limit are omitted, the full list is returned' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 1000). When both offset and limit are omitted, the full list is returned' in: 'query' name: 'limit' required: false schema: default: 500 description: 'Maximum number of records to return (max 1000). When both offset and limit are omitted, the full list is returned' example: 500 maximum: 1000 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - architecture: input_modalities: - 'text' instruct_type: null modality: 'text->text' output_modalities: - 'embeddings' tokenizer: 'GPT' canonical_slug: 'openai/text-embedding-3-small' context_length: 8192 created: 1692901234 default_parameters: null description: 'OpenAI text embedding model optimized for performance.' expiration_date: null id: 'openai/text-embedding-3-small' knowledge_cutoff: null links: details: '/api/v1/models/openai/text-embedding-3-small/endpoints' name: 'Text Embedding 3 Small' per_request_limits: null pricing: completion: '0' image: '0' prompt: '0.00000002' request: '0' supported_parameters: [] supported_voices: null top_provider: context_length: 8192 is_moderated: false max_completion_tokens: null schema: $ref: '#/components/schemas/ModelsListResponse' description: 'Returns a list of embeddings models' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List all embeddings models' tags: - 'Embeddings' x-speakeasy-name-override: 'listModels' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /endpoints/zdr: get: operationId: 'listEndpointsZdr' responses: '200': content: application/json: example: data: - context_length: 8192 latency_last_30m: p50: 0.25 p75: 0.35 p90: 0.48 p99: 0.85 max_completion_tokens: 4096 max_prompt_tokens: 8192 model_id: 'openai/gpt-4' model_name: 'GPT-4' name: 'OpenAI: GPT-4' pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' provider_name: 'OpenAI' quantization: 'fp16' status: 0 supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supports_implicit_caching: true tag: 'openai' throughput_last_30m: p50: 45.2 p75: 38.5 p90: 28.3 p99: 15.1 uptime_last_1d: 99.8 uptime_last_30m: 99.5 uptime_last_5m: 100 schema: example: data: - context_length: 8192 latency_last_30m: p50: 0.25 p75: 0.35 p90: 0.48 p99: 0.85 max_completion_tokens: 4096 max_prompt_tokens: 8192 model_id: 'openai/gpt-4' model_name: 'GPT-4' name: 'OpenAI: GPT-4' pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' provider_name: 'OpenAI' quantization: 'fp16' status: 0 supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supports_implicit_caching: true tag: 'openai' throughput_last_30m: p50: 45.2 p75: 38.5 p90: 28.3 p99: 15.1 uptime_last_1d: 99.8 uptime_last_30m: 99.5 uptime_last_5m: 100 properties: data: items: $ref: '#/components/schemas/PublicEndpoint' type: 'array' required: - 'data' type: 'object' description: 'Returns a list of endpoints' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Preview the impact of ZDR on the available endpoints' tags: - 'Endpoints' x-speakeasy-name-override: 'listZdrEndpoints' /files: get: description: 'Lists files belonging to the workspace of the authenticating API key.' operationId: 'listFiles' parameters: - description: 'Maximum number of files to return (1–1000).' in: 'query' name: 'limit' required: false schema: description: 'Maximum number of files to return (1–1000).' example: 100 maximum: 1000 minimum: 1 type: 'integer' - description: 'Opaque pagination cursor from a previous response.' in: 'query' name: 'cursor' required: false schema: description: 'Opaque pagination cursor from a previous response.' example: 'eyJjdXJzb3IiOiJvcl9maWxlXzAxMUNOaGE4aUNKY1Uxd1hOUjZxNFY4dyJ9' type: 'string' - description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' in: 'query' name: 'workspace_id' required: false schema: description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' example: 'a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7' format: 'uuid' type: 'string' - description: 'Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage.' example: 'openai' in: 'query' name: 'provider' required: false schema: $ref: '#/components/schemas/FileProvider' - description: 'OpenAI-style forward cursor: the id to list after.' in: 'query' name: 'after' required: false schema: description: 'OpenAI-style forward cursor: the id to list after.' example: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'string' - description: 'Anthropic-style forward cursor: the id to list after.' in: 'query' name: 'after_id' required: false schema: description: 'Anthropic-style forward cursor: the id to list after.' example: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'string' - description: 'Anthropic-style reverse cursor. Not supported by OpenRouter storage.' in: 'query' name: 'before_id' required: false schema: description: 'Anthropic-style reverse cursor. Not supported by OpenRouter storage.' example: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'string' - description: 'Sort direction. Only `asc` is supported by OpenRouter storage.' in: 'query' name: 'order' required: false schema: description: 'Sort direction. Only `asc` is supported by OpenRouter storage.' enum: - 'asc' - 'desc' example: 'asc' type: 'string' responses: '200': content: application/json: example: cursor: null data: - created_at: '2025-01-01T00:00:00Z' downloadable: false filename: 'document.pdf' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' mime_type: 'application/pdf' size_bytes: 1024000 type: 'file' first_id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' has_more: false last_id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' schema: $ref: '#/components/schemas/FileListResponse' description: 'A page of files.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' summary: 'List files' tags: - 'Files' x-hidden: true x-speakeasy-name-override: 'list' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'cursor' type: 'cursor' outputs: nextCursor: '$.cursor' results: '$.data' type: 'cursor' post: description: 'Uploads a file to be referenced in future API calls. The file is stored under the workspace of the authenticating API key. Maximum file size: 100 MB.' operationId: 'uploadFile' parameters: - description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' in: 'query' name: 'workspace_id' required: false schema: description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' example: 'a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7' format: 'uuid' type: 'string' - description: 'Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage.' example: 'openai' in: 'query' name: 'provider' required: false schema: $ref: '#/components/schemas/FileProvider' requestBody: content: multipart/form-data: example: file: 'document.pdf' schema: properties: file: format: 'binary' type: 'string' required: - 'file' type: 'object' required: true responses: '200': content: application/json: example: created_at: '2025-01-01T00:00:00Z' downloadable: false filename: 'document.pdf' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' mime_type: 'application/pdf' size_bytes: 1024000 type: 'file' schema: $ref: '#/components/schemas/FileResponse' description: 'The uploaded file metadata.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '413': content: application/json: example: error: code: 413 message: 'Request payload too large' schema: $ref: '#/components/schemas/PayloadTooLargeResponse' description: 'Payload Too Large - Request payload exceeds size limits' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' summary: 'Upload a file' tags: - 'Files' x-hidden: true x-speakeasy-name-override: 'upload' /files/{file_id}: delete: description: 'Deletes a file owned by the requesting workspace. Deletion is irreversible.' operationId: 'deleteFile' parameters: - in: 'path' name: 'file_id' required: true schema: example: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'string' - description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' in: 'query' name: 'workspace_id' required: false schema: description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' example: 'a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7' format: 'uuid' type: 'string' - description: 'Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage.' example: 'openai' in: 'query' name: 'provider' required: false schema: $ref: '#/components/schemas/FileProvider' responses: '200': content: application/json: example: id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'file_deleted' schema: $ref: '#/components/schemas/FileDeleteResponse' description: 'The file was deleted.' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' summary: 'Delete a file' tags: - 'Files' x-hidden: true x-speakeasy-name-override: 'delete' get: description: 'Retrieves metadata for a single file owned by the requesting workspace.' operationId: 'getFileMetadata' parameters: - in: 'path' name: 'file_id' required: true schema: example: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'string' - description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' in: 'query' name: 'workspace_id' required: false schema: description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' example: 'a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7' format: 'uuid' type: 'string' - description: 'Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage.' example: 'openai' in: 'query' name: 'provider' required: false schema: $ref: '#/components/schemas/FileProvider' responses: '200': content: application/json: example: created_at: '2025-01-01T00:00:00Z' downloadable: false filename: 'document.pdf' id: 'or_file_011CNha8iCJcU1wXNR6q4V8w' mime_type: 'application/pdf' size_bytes: 1024000 type: 'file' schema: $ref: '#/components/schemas/FileResponse' description: 'The file metadata.' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' summary: 'Get file metadata' tags: - 'Files' x-hidden: true x-speakeasy-name-override: 'retrieve' /files/{file_id}/content: get: description: 'Downloads the raw bytes of a file. Only files created server-side are downloadable; uploaded files return 400.' operationId: 'downloadFileContent' parameters: - in: 'path' name: 'file_id' required: true schema: example: 'or_file_011CNha8iCJcU1wXNR6q4V8w' type: 'string' - description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' in: 'query' name: 'workspace_id' required: false schema: description: 'Workspace to scope the request to. Defaults to the caller’s default workspace.' example: 'a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7' format: 'uuid' type: 'string' - description: 'Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage.' example: 'openai' in: 'query' name: 'provider' required: false schema: $ref: '#/components/schemas/FileProvider' responses: '200': content: application/octet-stream: example: 'binary file contents' schema: format: 'binary' type: 'string' description: 'The raw file content.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' summary: 'Download file content' tags: - 'Files' x-hidden: true x-speakeasy-name-override: 'download' /generation: get: operationId: 'getGeneration' parameters: - description: 'The generation ID' in: 'query' name: 'id' required: true schema: description: 'The generation ID' example: 'gen-1234567890' minLength: 1 type: 'string' responses: '200': content: application/json: example: data: api_type: 'completions' app_id: 12345 cache_discount: null cancelled: false created_at: '2024-07-15T23:33:19.433273+00:00' data_region: 'global' external_user: 'user-123' finish_reason: 'stop' generation_time: 1200 http_referer: 'https://openrouter.ai/' id: 'gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG' is_byok: false latency: 1250 model: 'sao10k/l3-stheno-8b' moderation_latency: 50 native_finish_reason: 'stop' native_tokens_cached: 3 native_tokens_completion: 25 native_tokens_completion_images: 0 native_tokens_prompt: 10 native_tokens_reasoning: 5 num_fetches: 0 num_input_audio_prompt: 0 num_media_completion: 0 num_media_prompt: 1 num_search_results: 5 origin: 'https://openrouter.ai/' preset_id: 'a9e8d400-592a-494f-908c-375efa66cafd' provider_name: 'Infermatic' provider_responses: null request_id: 'req-1727282430-aBcDeFgHiJkLmNoPqRsT' router: 'openrouter/auto' service_tier: 'priority' session_id: null streamed: true tokens_completion: 25 tokens_prompt: 10 total_cost: 0.0015 upstream_id: 'chatcmpl-791bcf62-080e-4568-87d0-94c72e3b4946' upstream_inference_cost: 0.0012 usage: 0.0015 user_agent: 'Mozilla/5.0' web_search_engine: 'exa' schema: $ref: '#/components/schemas/GenerationResponse' description: 'Returns the request metadata for this generation' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Get request & usage metadata for a generation' tags: - 'Generations' /generation/content: get: operationId: 'listGenerationContent' parameters: - description: 'The generation ID' in: 'query' name: 'id' required: true schema: description: 'The generation ID' example: 'gen-1234567890' minLength: 1 type: 'string' responses: '200': content: application/json: example: data: input: messages: - content: 'What is the meaning of life?' role: 'user' output: completion: 'The meaning of life is a philosophical question...' reasoning: null schema: $ref: '#/components/schemas/GenerationContentResponse' description: 'Returns the stored prompt and completion content' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Get stored prompt and completion content for a generation' tags: - 'Generations' /generation/feedback: post: description: 'Submit structured feedback on a generation the authenticated user made. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'submitGenerationFeedback' requestBody: content: application/json: example: category: 'incorrect_response' comment: 'The model repeated the same paragraph three times.' generation_id: 'gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG' schema: $ref: '#/components/schemas/SubmitGenerationFeedbackRequest' required: true responses: '200': content: application/json: example: data: success: true schema: $ref: '#/components/schemas/SubmitGenerationFeedbackResponse' description: 'Feedback recorded successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Submit feedback for a generation' tags: - 'Generations' x-speakeasy-name-override: 'submitFeedback' /guardrails: get: description: 'List all guardrails for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listGuardrails' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' - description: 'Filter guardrails by workspace ID. By default, guardrails in the default workspace are returned.' in: 'query' name: 'workspace_id' required: false schema: description: 'Filter guardrails by workspace ID. By default, guardrails in the default workspace are returned.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' format: 'uuid' type: 'string' responses: '200': content: application/json: example: data: - allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'google' created_at: '2025-08-24T10:30:00Z' description: 'Guardrail for production environment' enforce_zdr: false id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: false limit_usd: 100 name: 'Production Guardrail' reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' total_count: 1 schema: $ref: '#/components/schemas/ListGuardrailsResponse' description: 'List of guardrails' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List guardrails' tags: - 'Guardrails' x-speakeasy-name-override: 'list' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' post: description: 'Create a new guardrail for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'createGuardrail' requestBody: content: application/json: example: allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'deepseek' description: 'A guardrail for limiting API usage' enforce_zdr_anthropic: true enforce_zdr_google: false enforce_zdr_openai: true enforce_zdr_other: false enforce_zdr_xai: false ignored_models: null ignored_providers: null limit_usd: 50 name: 'My New Guardrail' reset_interval: 'monthly' schema: $ref: '#/components/schemas/CreateGuardrailRequest' required: true responses: '201': content: application/json: example: data: allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'google' created_at: '2025-08-24T10:30:00Z' description: 'A guardrail for limiting API usage' enforce_zdr: null enforce_zdr_anthropic: true enforce_zdr_google: false enforce_zdr_openai: true enforce_zdr_other: false enforce_zdr_xai: false id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: false limit_usd: 50 name: 'My New Guardrail' reset_interval: 'monthly' updated_at: null workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' schema: $ref: '#/components/schemas/CreateGuardrailResponse' description: 'Guardrail created successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'create' /guardrails/{id}: delete: description: 'Delete an existing guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'deleteGuardrail' parameters: - description: 'The unique identifier of the guardrail to delete' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail to delete' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' responses: '200': content: application/json: example: deleted: true schema: $ref: '#/components/schemas/DeleteGuardrailResponse' description: 'Guardrail deleted successfully' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Delete a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'delete' get: description: 'Get a single guardrail by ID. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getGuardrail' parameters: - description: 'The unique identifier of the guardrail to retrieve' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail to retrieve' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' responses: '200': content: application/json: example: data: allowed_models: null allowed_providers: - 'openai' - 'anthropic' - 'google' created_at: '2025-08-24T10:30:00Z' description: 'Guardrail for production environment' enforce_zdr: false id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: false limit_usd: 100 name: 'Production Guardrail' reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' schema: $ref: '#/components/schemas/GetGuardrailResponse' description: 'Guardrail details' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Guardrail not found, or the workspace default guardrail has not been configured yet.' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'get' patch: description: 'Update an existing guardrail, or materialize an unconfigured workspace default guardrail. Collection fields use replace semantics: send the full desired set on every update. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updateGuardrail' parameters: - description: 'The unique identifier of the guardrail to update' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail to update' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' requestBody: content: application/json: example: description: 'Updated description' limit_usd: 75 name: 'Updated Guardrail Name' reset_interval: 'weekly' schema: $ref: '#/components/schemas/UpdateGuardrailRequest' required: true responses: '200': content: application/json: example: data: allowed_models: null allowed_providers: - 'openai' created_at: '2025-08-24T10:30:00Z' description: 'Updated description' enforce_zdr: null enforce_zdr_anthropic: true enforce_zdr_google: true enforce_zdr_openai: true enforce_zdr_other: true enforce_zdr_xai: true id: '550e8400-e29b-41d4-a716-446655440000' ignored_models: null ignored_providers: null include_byok_in_budgets: true limit_usd: 75 name: 'Updated Guardrail Name' reset_interval: 'weekly' updated_at: '2025-08-24T16:00:00Z' workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' schema: $ref: '#/components/schemas/UpdateGuardrailResponse' description: 'Guardrail updated successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Invalid request, or an attempt to change a workspace default guardrail''s name (which is derived from its workspace and not editable).' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Update a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'update' /guardrails/{id}/assignments/keys: get: description: 'List all API key assignments for a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listGuardrailKeyAssignments' parameters: - description: 'The unique identifier of the guardrail' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' key_hash: 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' key_label: 'prod-key' key_name: 'Production Key' total_count: 1 schema: $ref: '#/components/schemas/ListKeyAssignmentsResponse' description: 'List of key assignments' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List key assignments for a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'listGuardrailKeyAssignments' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' post: description: 'Assign multiple API keys to a specific guardrail. A key may hold at most one guardrail; assigning replaces any existing assignment. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'bulkAssignKeysToGuardrail' parameters: - description: 'The unique identifier of the guardrail' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' requestBody: content: application/json: example: key_hashes: - 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' schema: $ref: '#/components/schemas/BulkAssignKeysRequest' required: true responses: '200': content: application/json: example: assigned_count: 3 schema: $ref: '#/components/schemas/BulkAssignKeysResponse' description: 'Assignment result' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Bulk assign keys to a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'bulkAssignKeys' /guardrails/{id}/assignments/keys/remove: post: description: 'Unassign multiple API keys from a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'bulkUnassignKeysFromGuardrail' parameters: - description: 'The unique identifier of the guardrail' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' requestBody: content: application/json: example: key_hashes: - 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' schema: $ref: '#/components/schemas/BulkUnassignKeysRequest' required: true responses: '200': content: application/json: example: unassigned_count: 3 schema: $ref: '#/components/schemas/BulkUnassignKeysResponse' description: 'Unassignment result' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Bulk unassign keys from a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'bulkUnassignKeys' /guardrails/{id}/assignments/members: get: description: 'List all organization member assignments for a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listGuardrailMemberAssignments' parameters: - description: 'The unique identifier of the guardrail' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' organization_id: 'org_xyz789' user_id: 'user_abc123' total_count: 1 schema: $ref: '#/components/schemas/ListMemberAssignmentsResponse' description: 'List of member assignments' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List member assignments for a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'listGuardrailMemberAssignments' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' post: description: 'Assign multiple organization members to a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'bulkAssignMembersToGuardrail' parameters: - description: 'The unique identifier of the guardrail' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' requestBody: content: application/json: example: member_user_ids: - 'user_abc123' - 'user_def456' schema: $ref: '#/components/schemas/BulkAssignMembersRequest' required: true responses: '200': content: application/json: example: assigned_count: 2 schema: $ref: '#/components/schemas/BulkAssignMembersResponse' description: 'Assignment result' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Bulk assign members to a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'bulkAssignMembers' /guardrails/{id}/assignments/members/remove: post: description: 'Unassign multiple organization members from a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'bulkUnassignMembersFromGuardrail' parameters: - description: 'The unique identifier of the guardrail' in: 'path' name: 'id' required: true schema: description: 'The unique identifier of the guardrail' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' requestBody: content: application/json: example: member_user_ids: - 'user_abc123' - 'user_def456' schema: $ref: '#/components/schemas/BulkUnassignMembersRequest' required: true responses: '200': content: application/json: example: unassigned_count: 2 schema: $ref: '#/components/schemas/BulkUnassignMembersResponse' description: 'Unassignment result' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Bulk unassign members from a guardrail' tags: - 'Guardrails' x-speakeasy-name-override: 'bulkUnassignMembers' /guardrails/assignments/keys: get: description: 'List all API key guardrail assignments for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listKeyAssignments' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' key_hash: 'c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93' key_label: 'prod-key' key_name: 'Production Key' total_count: 1 schema: $ref: '#/components/schemas/ListKeyAssignmentsResponse' description: 'List of key assignments' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List all key assignments' tags: - 'Guardrails' x-speakeasy-name-override: 'listKeyAssignments' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /guardrails/assignments/members: get: description: 'List all organization member guardrail assignments for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listMemberAssignments' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - assigned_by: 'user_abc123' created_at: '2025-08-24T10:30:00Z' guardrail_id: '550e8400-e29b-41d4-a716-446655440001' id: '550e8400-e29b-41d4-a716-446655440000' organization_id: 'org_xyz789' user_id: 'user_abc123' total_count: 1 schema: $ref: '#/components/schemas/ListMemberAssignmentsResponse' description: 'List of member assignments' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List all member assignments' tags: - 'Guardrails' x-speakeasy-name-override: 'listMemberAssignments' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /images: post: description: 'Generates an image from a text prompt via the image generation router' operationId: 'createImages' requestBody: content: application/json: example: model: 'bytedance-seed/seedream-4.5' prompt: 'a red panda astronaut floating in space, studio lighting' schema: $ref: '#/components/schemas/ImageGenerationRequest' required: true responses: '200': content: application/json: example: created: 1748372400 data: - b64_json: '' usage: completion_tokens: 4175 cost: 0.04 prompt_tokens: 0 total_tokens: 4175 schema: $ref: '#/components/schemas/ImageGenerationResponse' text/event-stream: example: data: b64_json: '' partial_image_index: 0 type: 'image_generation.partial_image' schema: $ref: '#/components/schemas/ImageStreamingResponse' x-speakeasy-sse-sentinel: '[DONE]' description: 'Image generation response' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '413': content: application/json: example: error: code: 413 message: 'Request payload too large' schema: $ref: '#/components/schemas/PayloadTooLargeResponse' description: 'Payload Too Large - Request payload exceeds size limits' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Generate an image' tags: - 'Images' x-speakeasy-name-override: 'generate' /images/models: get: description: 'Lists every image generation model with its top-level supported-parameter superset and a URL to its full per-endpoint records.' operationId: 'listImageModels' responses: '200': content: application/json: example: data: - architecture: input_modalities: - 'text' output_modalities: - 'image' created: 1692901234 description: 'A text-to-image model.' endpoints: '/api/v1/images/models/bytedance-seed/seedream-4.5/endpoints' id: 'bytedance-seed/seedream-4.5' name: 'Seedream 4.5' supported_parameters: resolution: type: 'enum' values: - '1K' - '2K' - '4K' supports_streaming: false schema: $ref: '#/components/schemas/ImageModelsListResponse' description: 'List of image generation models' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List image generation models' tags: - 'Images' x-speakeasy-name-override: 'listModels' /images/models/{author}/{slug}/endpoints: get: description: 'Returns the full per-endpoint records for an image model: each endpoint''s definitive supported parameters, pricing, and passthrough allowlist.' operationId: 'listImageModelEndpoints' parameters: - description: 'Model author/organization' in: 'path' name: 'author' required: true schema: description: 'Model author/organization' example: 'bytedance-seed' type: 'string' - description: 'Model slug' in: 'path' name: 'slug' required: true schema: description: 'Model slug' example: 'seedream-4.5' type: 'string' responses: '200': content: application/json: example: endpoints: - allowed_passthrough_parameters: [] pricing: - billable: 'output_image' cost_usd: 0.05 unit: 'image' provider_name: 'Bytedance' provider_slug: 'bytedance' provider_tag: 'bytedance' supported_parameters: resolution: type: 'enum' values: - '1K' - '2K' - '4K' supports_streaming: false id: 'bytedance-seed/seedream-4.5' schema: $ref: '#/components/schemas/ImageModelEndpointsResponse' description: 'The full per-endpoint records for an image model' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List endpoints for an image model' tags: - 'Images' x-speakeasy-name-override: 'listModelEndpoints' /key: get: description: 'Get information on the API key associated with the current authentication session' operationId: 'getCurrentKey' responses: '200': content: application/json: example: data: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' expires_at: '2027-12-31T23:59:59Z' include_byok_in_limit: false is_free_tier: false is_management_key: false is_provisioning_key: false label: 'sk-or-v1-au7...890' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' rate_limit: interval: '1h' note: 'This field is deprecated and safe to ignore.' requests: 1000 usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 schema: example: data: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' expires_at: '2027-12-31T23:59:59Z' include_byok_in_limit: false is_free_tier: false is_management_key: false is_provisioning_key: false label: 'sk-or-v1-au7...890' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' rate_limit: interval: '1h' note: 'This field is deprecated and safe to ignore.' requests: 1000 usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 properties: data: description: 'Current API key information' example: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' expires_at: '2027-12-31T23:59:59Z' include_byok_in_limit: false is_free_tier: false is_management_key: false is_provisioning_key: false label: 'sk-or-v1-au7...890' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' rate_limit: interval: '1h' note: 'This field is deprecated and safe to ignore.' requests: 1000 usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 properties: byok_usage: description: 'Total external BYOK usage (in USD) for the API key' example: 17.38 format: 'double' type: 'number' byok_usage_daily: description: 'External BYOK usage (in USD) for the current UTC day' example: 17.38 format: 'double' type: 'number' byok_usage_monthly: description: 'External BYOK usage (in USD) for current UTC month' example: 17.38 format: 'double' type: 'number' byok_usage_weekly: description: 'External BYOK usage (in USD) for the current UTC week (Monday-Sunday)' example: 17.38 format: 'double' type: 'number' creator_user_id: description: 'The user ID of the key creator. For organization-owned keys, this is the member who created the key. For individual users, this is the user''s own ID.' example: 'user_2dHFtVWx2n56w6HkM0000000000' type: - 'string' - 'null' expires_at: description: 'ISO 8601 UTC timestamp when the API key expires, or null if no expiration' example: '2027-12-31T23:59:59Z' format: 'date-time' type: - 'string' - 'null' include_byok_in_limit: description: 'Whether to include external BYOK usage in the credit limit' example: false type: 'boolean' is_free_tier: description: 'Whether this is a free tier API key' example: false type: 'boolean' is_management_key: description: 'Whether this is a management key' example: false type: 'boolean' is_provisioning_key: deprecated: true description: 'Whether this is a management key' example: false type: 'boolean' label: description: 'Human-readable label for the API key' example: 'sk-or-v1-0e6...1c96' type: 'string' limit: description: 'Spending limit for the API key in USD' example: 100 format: 'double' type: - 'number' - 'null' limit_remaining: description: 'Remaining spending limit in USD' example: 74.5 format: 'double' type: - 'number' - 'null' limit_reset: description: 'Type of limit reset for the API key' example: 'monthly' type: - 'string' - 'null' rate_limit: deprecated: true description: 'Legacy rate limit information about a key. Will always return -1.' example: interval: '1h' note: 'This field is deprecated and safe to ignore.' requests: 1000 properties: interval: description: 'Rate limit interval' example: '1h' type: 'string' note: description: 'Note about the rate limit' example: 'This field is deprecated and safe to ignore.' type: 'string' requests: description: 'Number of requests allowed per interval' example: 1000 type: 'integer' required: - 'requests' - 'interval' - 'note' type: 'object' usage: description: 'Total OpenRouter credit usage (in USD) for the API key' example: 25.5 format: 'double' type: 'number' usage_daily: description: 'OpenRouter credit usage (in USD) for the current UTC day' example: 25.5 format: 'double' type: 'number' usage_monthly: description: 'OpenRouter credit usage (in USD) for the current UTC month' example: 25.5 format: 'double' type: 'number' usage_weekly: description: 'OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday)' example: 25.5 format: 'double' type: 'number' required: - 'label' - 'limit' - 'usage' - 'usage_daily' - 'usage_weekly' - 'usage_monthly' - 'byok_usage' - 'byok_usage_daily' - 'byok_usage_weekly' - 'byok_usage_monthly' - 'is_free_tier' - 'is_management_key' - 'is_provisioning_key' - 'limit_remaining' - 'limit_reset' - 'include_byok_in_limit' - 'creator_user_id' - 'rate_limit' type: 'object' required: - 'data' type: 'object' description: 'API key details' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get current API key' tags: - 'API Keys' x-speakeasy-name-override: 'getCurrentKeyMetadata' /keys: get: description: 'List all API keys for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'list' parameters: - description: 'Whether to include disabled API keys in the response' in: 'query' name: 'include_disabled' required: false schema: description: 'Whether to include disabled API keys in the response' example: 'false' type: 'string' x-openrouter-type: 'boolean' - description: 'Number of API keys to skip for pagination' in: 'query' name: 'offset' required: false schema: description: 'Number of API keys to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Filter API keys by workspace ID. By default, keys in the default workspace are returned.' in: 'query' name: 'workspace_id' required: false schema: description: 'Filter API keys by workspace ID. By default, keys in the default workspace are returned.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' format: 'uuid' type: 'string' responses: '200': content: application/json: example: data: - byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'Production API Key' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' schema: example: data: - byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'Production API Key' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: data: description: 'List of API keys' items: example: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'sk-or-v1-0e6...1c96' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: byok_usage: description: 'Total external BYOK usage (in USD) for the API key' example: 17.38 format: 'double' type: 'number' byok_usage_daily: description: 'External BYOK usage (in USD) for the current UTC day' example: 17.38 format: 'double' type: 'number' byok_usage_monthly: description: 'External BYOK usage (in USD) for current UTC month' example: 17.38 format: 'double' type: 'number' byok_usage_weekly: description: 'External BYOK usage (in USD) for the current UTC week (Monday-Sunday)' example: 17.38 format: 'double' type: 'number' created_at: description: 'ISO 8601 timestamp of when the API key was created' example: '2025-08-24T10:30:00Z' type: 'string' creator_user_id: description: 'The user ID of the key creator. For organization-owned keys, this is the member who created the key. For individual users, this is the user''s own ID.' example: 'user_2dHFtVWx2n56w6HkM0000000000' type: - 'string' - 'null' disabled: description: 'Whether the API key is disabled' example: false type: 'boolean' expires_at: description: 'ISO 8601 UTC timestamp when the API key expires, or null if no expiration' example: '2027-12-31T23:59:59Z' format: 'date-time' type: - 'string' - 'null' hash: description: 'Unique hash identifier for the API key' example: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' type: 'string' include_byok_in_limit: description: 'Whether to include external BYOK usage in the credit limit' example: false type: 'boolean' label: description: 'Human-readable label for the API key' example: 'sk-or-v1-0e6...1c96' type: 'string' limit: description: 'Spending limit for the API key in USD' example: 100 format: 'double' type: - 'number' - 'null' limit_remaining: description: 'Remaining spending limit in USD' example: 74.5 format: 'double' type: - 'number' - 'null' limit_reset: description: 'Type of limit reset for the API key' example: 'monthly' type: - 'string' - 'null' name: description: 'Name of the API key' example: 'My Production Key' type: 'string' updated_at: description: 'ISO 8601 timestamp of when the API key was last updated' example: '2025-08-24T15:45:00Z' type: - 'string' - 'null' usage: description: 'Total OpenRouter credit usage (in USD) for the API key' example: 25.5 format: 'double' type: 'number' usage_daily: description: 'OpenRouter credit usage (in USD) for the current UTC day' example: 25.5 format: 'double' type: 'number' usage_monthly: description: 'OpenRouter credit usage (in USD) for the current UTC month' example: 25.5 format: 'double' type: 'number' usage_weekly: description: 'OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday)' example: 25.5 format: 'double' type: 'number' workspace_id: description: 'The workspace ID this API key belongs to.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' type: 'string' required: - 'hash' - 'name' - 'label' - 'disabled' - 'limit' - 'limit_remaining' - 'limit_reset' - 'include_byok_in_limit' - 'usage' - 'usage_daily' - 'usage_weekly' - 'usage_monthly' - 'byok_usage' - 'byok_usage_daily' - 'byok_usage_weekly' - 'byok_usage_monthly' - 'created_at' - 'updated_at' - 'creator_user_id' - 'workspace_id' type: 'object' type: 'array' required: - 'data' type: 'object' description: 'List of API keys' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List API keys' tags: - 'API Keys' x-speakeasy-name-override: 'list' post: description: 'Create a new API key for the authenticated user. The plaintext `key` is returned only in this response. Treat it as a write-only, sensitive value; it cannot be retrieved later. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'createKeys' requestBody: content: application/json: example: expires_at: '2027-12-31T23:59:59Z' include_byok_in_limit: true limit: 50 limit_reset: 'monthly' name: 'My New API Key' schema: example: expires_at: '2027-12-31T23:59:59Z' include_byok_in_limit: true limit: 50 limit_reset: 'monthly' name: 'My New API Key' properties: creator_user_id: description: 'Optional user ID of the key creator. Only meaningful for organization-owned keys where a specific member is creating the key.' example: 'user_2dHFtVWx2n56w6HkM0000000000' minLength: 1 type: - 'string' - 'null' expires_at: description: 'Optional ISO 8601 UTC timestamp when the API key should expire. Must be UTC, other timezones will be rejected' example: '2027-12-31T23:59:59Z' format: 'date-time' type: - 'string' - 'null' include_byok_in_limit: description: 'Whether to include BYOK usage in the limit' example: true type: 'boolean' limit: description: 'Optional spending limit for the API key in USD' example: 50 format: 'double' type: - 'number' - 'null' limit_reset: description: 'Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.' enum: - 'daily' - 'weekly' - 'monthly' - null example: 'monthly' type: - 'string' - 'null' name: description: 'Name for the new API key' example: 'My New API Key' minLength: 1 type: 'string' workspace_id: description: 'The workspace to create the API key in. Defaults to the default workspace if not provided.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' format: 'uuid' type: 'string' required: - 'name' type: 'object' required: true responses: '201': content: application/json: example: data: byok_usage: 0 byok_usage_daily: 0 byok_usage_monthly: 0 byok_usage_weekly: 0 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: true label: 'My New API Key' limit: 50 limit_remaining: 50 limit_reset: 'monthly' name: 'My New API Key' updated_at: null usage: 0 usage_daily: 0 usage_monthly: 0 usage_weekly: 0 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' key: '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' schema: example: data: byok_usage: 0 byok_usage_daily: 0 byok_usage_monthly: 0 byok_usage_weekly: 0 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: true label: 'My New API Key' limit: 50 limit_remaining: 50 limit_reset: 'monthly' name: 'My New API Key' updated_at: null usage: 0 usage_daily: 0 usage_monthly: 0 usage_weekly: 0 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' key: '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' properties: data: description: 'The created API key information' example: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'sk-or-v1-0e6...1c96' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: byok_usage: description: 'Total external BYOK usage (in USD) for the API key' example: 17.38 format: 'double' type: 'number' byok_usage_daily: description: 'External BYOK usage (in USD) for the current UTC day' example: 17.38 format: 'double' type: 'number' byok_usage_monthly: description: 'External BYOK usage (in USD) for current UTC month' example: 17.38 format: 'double' type: 'number' byok_usage_weekly: description: 'External BYOK usage (in USD) for the current UTC week (Monday-Sunday)' example: 17.38 format: 'double' type: 'number' created_at: description: 'ISO 8601 timestamp of when the API key was created' example: '2025-08-24T10:30:00Z' type: 'string' creator_user_id: description: 'The user ID of the key creator. For organization-owned keys, this is the member who created the key. For individual users, this is the user''s own ID.' example: 'user_2dHFtVWx2n56w6HkM0000000000' type: - 'string' - 'null' disabled: description: 'Whether the API key is disabled' example: false type: 'boolean' expires_at: description: 'ISO 8601 UTC timestamp when the API key expires, or null if no expiration' example: '2027-12-31T23:59:59Z' format: 'date-time' type: - 'string' - 'null' hash: description: 'Unique hash identifier for the API key' example: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' type: 'string' include_byok_in_limit: description: 'Whether to include external BYOK usage in the credit limit' example: false type: 'boolean' label: description: 'Human-readable label for the API key' example: 'sk-or-v1-0e6...1c96' type: 'string' limit: description: 'Spending limit for the API key in USD' example: 100 format: 'double' type: - 'number' - 'null' limit_remaining: description: 'Remaining spending limit in USD' example: 74.5 format: 'double' type: - 'number' - 'null' limit_reset: description: 'Type of limit reset for the API key' example: 'monthly' type: - 'string' - 'null' name: description: 'Name of the API key' example: 'My Production Key' type: 'string' updated_at: description: 'ISO 8601 timestamp of when the API key was last updated' example: '2025-08-24T15:45:00Z' type: - 'string' - 'null' usage: description: 'Total OpenRouter credit usage (in USD) for the API key' example: 25.5 format: 'double' type: 'number' usage_daily: description: 'OpenRouter credit usage (in USD) for the current UTC day' example: 25.5 format: 'double' type: 'number' usage_monthly: description: 'OpenRouter credit usage (in USD) for the current UTC month' example: 25.5 format: 'double' type: 'number' usage_weekly: description: 'OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday)' example: 25.5 format: 'double' type: 'number' workspace_id: description: 'The workspace ID this API key belongs to.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' type: 'string' required: - 'hash' - 'name' - 'label' - 'disabled' - 'limit' - 'limit_remaining' - 'limit_reset' - 'include_byok_in_limit' - 'usage' - 'usage_daily' - 'usage_weekly' - 'usage_monthly' - 'byok_usage' - 'byok_usage_daily' - 'byok_usage_weekly' - 'byok_usage_monthly' - 'created_at' - 'updated_at' - 'creator_user_id' - 'workspace_id' type: 'object' key: description: 'The actual API key string (only shown once)' example: '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' type: 'string' required: - 'data' - 'key' type: 'object' description: 'API key created successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create a new API key' tags: - 'API Keys' x-speakeasy-name-override: 'create' /keys/{hash}: delete: description: 'Delete an existing API key. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'deleteKeys' parameters: - description: 'The hash identifier of the API key to delete' in: 'path' name: 'hash' required: true schema: description: 'The hash identifier of the API key to delete' example: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' type: 'string' responses: '200': content: application/json: example: deleted: true schema: example: deleted: true properties: deleted: const: true description: 'Confirmation that the API key was deleted' example: true type: 'boolean' required: - 'deleted' type: 'object' description: 'API key deleted successfully' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Delete an API key' tags: - 'API Keys' x-speakeasy-name-override: 'delete' get: description: 'Get a single API key by hash. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getKey' parameters: - description: 'The hash identifier of the API key to retrieve' in: 'path' name: 'hash' required: true schema: description: 'The hash identifier of the API key to retrieve' example: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' type: 'string' responses: '200': content: application/json: example: data: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'Production API Key' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' schema: example: data: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'Production API Key' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: data: description: 'The API key information' example: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'sk-or-v1-0e6...1c96' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: byok_usage: description: 'Total external BYOK usage (in USD) for the API key' example: 17.38 format: 'double' type: 'number' byok_usage_daily: description: 'External BYOK usage (in USD) for the current UTC day' example: 17.38 format: 'double' type: 'number' byok_usage_monthly: description: 'External BYOK usage (in USD) for current UTC month' example: 17.38 format: 'double' type: 'number' byok_usage_weekly: description: 'External BYOK usage (in USD) for the current UTC week (Monday-Sunday)' example: 17.38 format: 'double' type: 'number' created_at: description: 'ISO 8601 timestamp of when the API key was created' example: '2025-08-24T10:30:00Z' type: 'string' creator_user_id: description: 'The user ID of the key creator. For organization-owned keys, this is the member who created the key. For individual users, this is the user''s own ID.' example: 'user_2dHFtVWx2n56w6HkM0000000000' type: - 'string' - 'null' disabled: description: 'Whether the API key is disabled' example: false type: 'boolean' expires_at: description: 'ISO 8601 UTC timestamp when the API key expires, or null if no expiration' example: '2027-12-31T23:59:59Z' format: 'date-time' type: - 'string' - 'null' hash: description: 'Unique hash identifier for the API key' example: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' type: 'string' include_byok_in_limit: description: 'Whether to include external BYOK usage in the credit limit' example: false type: 'boolean' label: description: 'Human-readable label for the API key' example: 'sk-or-v1-0e6...1c96' type: 'string' limit: description: 'Spending limit for the API key in USD' example: 100 format: 'double' type: - 'number' - 'null' limit_remaining: description: 'Remaining spending limit in USD' example: 74.5 format: 'double' type: - 'number' - 'null' limit_reset: description: 'Type of limit reset for the API key' example: 'monthly' type: - 'string' - 'null' name: description: 'Name of the API key' example: 'My Production Key' type: 'string' updated_at: description: 'ISO 8601 timestamp of when the API key was last updated' example: '2025-08-24T15:45:00Z' type: - 'string' - 'null' usage: description: 'Total OpenRouter credit usage (in USD) for the API key' example: 25.5 format: 'double' type: 'number' usage_daily: description: 'OpenRouter credit usage (in USD) for the current UTC day' example: 25.5 format: 'double' type: 'number' usage_monthly: description: 'OpenRouter credit usage (in USD) for the current UTC month' example: 25.5 format: 'double' type: 'number' usage_weekly: description: 'OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday)' example: 25.5 format: 'double' type: 'number' workspace_id: description: 'The workspace ID this API key belongs to.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' type: 'string' required: - 'hash' - 'name' - 'label' - 'disabled' - 'limit' - 'limit_remaining' - 'limit_reset' - 'include_byok_in_limit' - 'usage' - 'usage_daily' - 'usage_weekly' - 'usage_monthly' - 'byok_usage' - 'byok_usage_daily' - 'byok_usage_weekly' - 'byok_usage_monthly' - 'created_at' - 'updated_at' - 'creator_user_id' - 'workspace_id' type: 'object' required: - 'data' type: 'object' description: 'API key details' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get a single API key' tags: - 'API Keys' x-speakeasy-name-override: 'get' patch: description: 'Update an existing API key. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updateKeys' parameters: - description: 'The hash identifier of the API key to update' in: 'path' name: 'hash' required: true schema: description: 'The hash identifier of the API key to update' example: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' type: 'string' requestBody: content: application/json: example: disabled: false include_byok_in_limit: true limit: 75 limit_reset: 'daily' name: 'Updated API Key Name' schema: example: disabled: false include_byok_in_limit: true limit: 75 limit_reset: 'daily' name: 'Updated API Key Name' properties: disabled: description: 'Whether to disable the API key' example: false type: 'boolean' include_byok_in_limit: description: 'Whether to include BYOK usage in the limit' example: true type: 'boolean' limit: description: 'New spending limit for the API key in USD' example: 75 format: 'double' type: - 'number' - 'null' limit_reset: description: 'New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.' enum: - 'daily' - 'weekly' - 'monthly' - null example: 'daily' type: - 'string' - 'null' name: description: 'New name for the API key' example: 'Updated API Key Name' type: 'string' type: 'object' required: true responses: '200': content: application/json: example: data: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: null hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: true label: 'Updated API Key Name' limit: 75 limit_remaining: 49.5 limit_reset: 'daily' name: 'Updated API Key Name' updated_at: '2025-08-24T16:00:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' schema: example: data: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: null hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: true label: 'Updated API Key Name' limit: 75 limit_remaining: 49.5 limit_reset: 'daily' name: 'Updated API Key Name' updated_at: '2025-08-24T16:00:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: data: description: 'The updated API key information' example: byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_monthly: 17.38 byok_usage_weekly: 17.38 created_at: '2025-08-24T10:30:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' disabled: false expires_at: '2027-12-31T23:59:59Z' hash: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' include_byok_in_limit: false label: 'sk-or-v1-0e6...1c96' limit: 100 limit_remaining: 74.5 limit_reset: 'monthly' name: 'My Production Key' updated_at: '2025-08-24T15:45:00Z' usage: 25.5 usage_daily: 25.5 usage_monthly: 25.5 usage_weekly: 25.5 workspace_id: '0df9e665-d932-5740-b2c7-b52af166bc11' properties: byok_usage: description: 'Total external BYOK usage (in USD) for the API key' example: 17.38 format: 'double' type: 'number' byok_usage_daily: description: 'External BYOK usage (in USD) for the current UTC day' example: 17.38 format: 'double' type: 'number' byok_usage_monthly: description: 'External BYOK usage (in USD) for current UTC month' example: 17.38 format: 'double' type: 'number' byok_usage_weekly: description: 'External BYOK usage (in USD) for the current UTC week (Monday-Sunday)' example: 17.38 format: 'double' type: 'number' created_at: description: 'ISO 8601 timestamp of when the API key was created' example: '2025-08-24T10:30:00Z' type: 'string' creator_user_id: description: 'The user ID of the key creator. For organization-owned keys, this is the member who created the key. For individual users, this is the user''s own ID.' example: 'user_2dHFtVWx2n56w6HkM0000000000' type: - 'string' - 'null' disabled: description: 'Whether the API key is disabled' example: false type: 'boolean' expires_at: description: 'ISO 8601 UTC timestamp when the API key expires, or null if no expiration' example: '2027-12-31T23:59:59Z' format: 'date-time' type: - 'string' - 'null' hash: description: 'Unique hash identifier for the API key' example: 'f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943' type: 'string' include_byok_in_limit: description: 'Whether to include external BYOK usage in the credit limit' example: false type: 'boolean' label: description: 'Human-readable label for the API key' example: 'sk-or-v1-0e6...1c96' type: 'string' limit: description: 'Spending limit for the API key in USD' example: 100 format: 'double' type: - 'number' - 'null' limit_remaining: description: 'Remaining spending limit in USD' example: 74.5 format: 'double' type: - 'number' - 'null' limit_reset: description: 'Type of limit reset for the API key' example: 'monthly' type: - 'string' - 'null' name: description: 'Name of the API key' example: 'My Production Key' type: 'string' updated_at: description: 'ISO 8601 timestamp of when the API key was last updated' example: '2025-08-24T15:45:00Z' type: - 'string' - 'null' usage: description: 'Total OpenRouter credit usage (in USD) for the API key' example: 25.5 format: 'double' type: 'number' usage_daily: description: 'OpenRouter credit usage (in USD) for the current UTC day' example: 25.5 format: 'double' type: 'number' usage_monthly: description: 'OpenRouter credit usage (in USD) for the current UTC month' example: 25.5 format: 'double' type: 'number' usage_weekly: description: 'OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday)' example: 25.5 format: 'double' type: 'number' workspace_id: description: 'The workspace ID this API key belongs to.' example: '0df9e665-d932-5740-b2c7-b52af166bc11' type: 'string' required: - 'hash' - 'name' - 'label' - 'disabled' - 'limit' - 'limit_remaining' - 'limit_reset' - 'include_byok_in_limit' - 'usage' - 'usage_daily' - 'usage_weekly' - 'usage_monthly' - 'byok_usage' - 'byok_usage_daily' - 'byok_usage_weekly' - 'byok_usage_monthly' - 'created_at' - 'updated_at' - 'creator_user_id' - 'workspace_id' type: 'object' required: - 'data' type: 'object' description: 'API key updated successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Update an API key' tags: - 'API Keys' x-speakeasy-name-override: 'update' /messages: post: description: 'Creates a message using the Anthropic Messages API format. Supports text, images, PDFs, tools, and extended thinking.' operationId: 'createMessages' parameters: - description: 'Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.' example: 'enabled' in: 'header' name: 'X-OpenRouter-Metadata' required: false schema: $ref: '#/components/schemas/MetadataLevel' requestBody: content: application/json: example: max_tokens: 1024 messages: - content: 'Hello, how are you?' role: 'user' model: 'anthropic/claude-sonnet-4' schema: $ref: '#/components/schemas/MessagesRequest' required: true responses: '200': content: application/json: example: container: null content: - citations: [] text: 'I''m doing well, thank you for asking! How can I help you today?' type: 'text' id: 'msg_abc123' model: 'anthropic/claude-sonnet-4' role: 'assistant' stop_details: null stop_reason: 'end_turn' stop_sequence: null type: 'message' usage: cache_creation: null cache_creation_input_tokens: null cache_read_input_tokens: null inference_geo: null input_tokens: 12 output_tokens: 18 output_tokens_details: null server_tool_use: null service_tier: 'standard' schema: $ref: '#/components/schemas/MessagesResult' text/event-stream: example: data: delta: text: 'Hello' type: 'text_delta' index: 0 type: 'content_block_delta' event: 'content_block_delta' schema: $ref: '#/components/schemas/MessagesStreamingResponse' x-speakeasy-sse-sentinel: '[DONE]' description: 'Successful response' '400': content: application/json: example: error: message: 'Invalid request: messages is required' type: 'invalid_request_error' type: 'error' schema: $ref: '#/components/schemas/MessagesErrorResponse' description: 'Invalid request error' '401': content: application/json: example: error: message: 'Invalid API key' type: 'authentication_error' type: 'error' schema: $ref: '#/components/schemas/MessagesErrorResponse' description: 'Authentication error' '403': content: application/json: examples: guardrail-blocked: summary: 'Guardrail blocked the request' value: error: code: 403 message: 'Request blocked: prompt injection patterns detected' metadata: patterns: - 'ignore all previous instructions' openrouter_metadata: attempt: 1 endpoints: available: - model: 'openai/gpt-4o' provider: 'OpenAI' selected: false total: 1 is_byok: false pipeline: - data: action: 'blocked' detected: true engines: - 'regex' patterns: - 'ignore all previous instructions' guardrail_id: 'grd_abc123' guardrail_scope: 'api-key' name: 'regex_pi_detection' summary: 'Blocked: prompt injection detected (1 pattern matched)' type: 'guardrail' region: 'iad' requested: 'openai/gpt-4o' strategy: 'direct' summary: 'available=1' insufficient-permissions: summary: 'Insufficient permissions' value: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions, or a guardrail blocked the request. When guardrails block and the `X-OpenRouter-Metadata: enabled` header is present, the response includes `openrouter_metadata` with full routing context and a `pipeline` array containing guardrail stage details.' '404': content: application/json: example: error: message: 'Model not found' type: 'not_found_error' type: 'error' schema: $ref: '#/components/schemas/MessagesErrorResponse' description: 'Not found error' '429': content: application/json: example: error: message: 'Rate limit exceeded' type: 'rate_limit_error' type: 'error' schema: $ref: '#/components/schemas/MessagesErrorResponse' description: 'Rate limit error' '500': content: application/json: example: error: message: 'Internal server error' type: 'api_error' type: 'error' schema: $ref: '#/components/schemas/MessagesErrorResponse' description: 'API error' '503': content: application/json: example: error: message: 'Service temporarily overloaded' type: 'overloaded_error' type: 'error' schema: $ref: '#/components/schemas/MessagesErrorResponse' description: 'Overloaded error' '529': content: application/json: example: error: message: 'Provider is temporarily overloaded' type: 'overloaded_error' type: 'error' schema: $ref: '#/components/schemas/MessagesErrorResponse' description: 'Overloaded error' summary: 'Create a message' tags: - 'Anthropic Messages' x-speakeasy-ignore: true x-speakeasy-name-override: 'create' x-speakeasy-stream-request-field: 'stream' /model/{author}/{slug}: get: description: 'Returns full details for a single model identified by its author and slug (e.g. openai/gpt-4). Supports variant suffixes (e.g. openai/gpt-4:free) and resolves known slug aliases.' operationId: 'getModel' parameters: - description: 'The author/organization of the model' in: 'path' name: 'author' required: true schema: description: 'The author/organization of the model' example: 'openai' type: 'string' - description: 'The model slug, optionally including a variant suffix (e.g. gpt-4 or gpt-4:free)' in: 'path' name: 'slug' required: true schema: description: 'The model slug, optionally including a variant suffix (e.g. gpt-4 or gpt-4:free)' example: 'gpt-4' type: 'string' responses: '200': content: application/json: example: data: architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' canonical_slug: 'openai/gpt-4' context_length: 8192 created: 1692901234 default_parameters: null description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' expiration_date: null id: 'openai/gpt-4' knowledge_cutoff: null links: details: '/api/v1/models/openai/gpt-4/endpoints' name: 'GPT-4' per_request_limits: null pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supported_voices: null top_provider: context_length: 8192 is_moderated: true max_completion_tokens: 4096 schema: $ref: '#/components/schemas/ModelResponse' description: 'Returns the model details' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get a model by its slug' tags: - 'Models' x-speakeasy-name-override: 'get' /models: get: operationId: 'getModels' parameters: - description: 'Number of records to skip for pagination. When both offset and limit are omitted, the full list is returned' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination. When both offset and limit are omitted, the full list is returned' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 1000). When both offset and limit are omitted, the full list is returned' in: 'query' name: 'limit' required: false schema: default: 500 description: 'Maximum number of records to return (max 1000). When both offset and limit are omitted, the full list is returned' example: 500 maximum: 1000 minimum: 1 type: 'integer' - description: 'Filter models by use case category' in: 'query' name: 'category' required: false schema: description: 'Filter models by use case category' enum: - 'programming' - 'roleplay' - 'marketing' - 'marketing/seo' - 'technology' - 'science' - 'translation' - 'legal' - 'finance' - 'health' - 'trivia' - 'academia' example: 'programming' type: 'string' - description: 'Filter models by supported parameter (comma-separated)' in: 'query' name: 'supported_parameters' required: false schema: description: 'Filter models by supported parameter (comma-separated)' example: 'temperature' type: 'string' - description: 'Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text".' in: 'query' name: 'output_modalities' required: false schema: description: 'Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text".' example: 'text' type: 'string' - description: 'Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low, coding-high-to-low, agentic-high-to-low (Artificial Analysis indices), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved.' in: 'query' name: 'sort' required: false schema: description: 'Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low, coding-high-to-low, agentic-high-to-low (Artificial Analysis indices), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved.' enum: - 'most-popular' - 'newest' - 'top-weekly' - 'pricing-low-to-high' - 'pricing-high-to-low' - 'context-high-to-low' - 'throughput-high-to-low' - 'latency-low-to-high' - 'intelligence-high-to-low' - 'coding-high-to-low' - 'agentic-high-to-low' - 'design-arena-elo-high-to-low' example: 'newest' type: 'string' - description: 'Return results as RSS feed' in: 'query' name: 'use_rss' required: false schema: description: 'Return results as RSS feed' example: 'true' type: 'string' - description: 'Use chat links in RSS feed items' in: 'query' name: 'use_rss_chat_links' required: false schema: description: 'Use chat links in RSS feed items' example: 'true' type: 'string' - description: 'Free-text search by model name or slug.' in: 'query' name: 'q' required: false schema: description: 'Free-text search by model name or slug.' example: 'gpt-4' type: 'string' - description: 'Filter models by input modality. Comma-separated list of: text, image, audio, file.' in: 'query' name: 'input_modalities' required: false schema: description: 'Filter models by input modality. Comma-separated list of: text, image, audio, file.' example: 'text,image' type: 'string' - description: 'Minimum context length (tokens). Models with smaller context are excluded.' in: 'query' name: 'context' required: false schema: description: 'Minimum context length (tokens). Models with smaller context are excluded.' example: 128000 minimum: 1 type: 'integer' - description: 'Minimum prompt price in $/M tokens.' in: 'query' name: 'min_price' required: false schema: description: 'Minimum prompt price in $/M tokens.' example: 0 minimum: 0 type: - 'number' - 'null' - description: 'Maximum prompt price in $/M tokens.' in: 'query' name: 'max_price' required: false schema: description: 'Maximum prompt price in $/M tokens.' example: 10 minimum: 0 type: - 'number' - 'null' - description: 'Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama).' in: 'query' name: 'arch' required: false schema: description: 'Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama).' example: 'GPT' type: 'string' - description: 'Filter models by the organization that created the model. Comma-separated list of author slugs.' in: 'query' name: 'model_authors' required: false schema: description: 'Filter models by the organization that created the model. Comma-separated list of author slugs.' example: 'openai,anthropic' type: 'string' - description: 'Filter models by hosting provider. Comma-separated list of provider names.' in: 'query' name: 'providers' required: false schema: description: 'Filter models by hosting provider. Comma-separated list of provider names.' example: 'OpenAI,Anthropic' type: 'string' - description: 'Filter by distillation capability. "true" returns only distillable models, "false" excludes them.' in: 'query' name: 'distillable' required: false schema: description: 'Filter by distillation capability. "true" returns only distillable models, "false" excludes them.' enum: - 'true' - 'false' example: 'true' type: 'string' - description: 'When set to "true", return only models with zero data retention endpoints.' in: 'query' name: 'zdr' required: false schema: description: 'When set to "true", return only models with zero data retention endpoints.' enum: - 'true' example: 'true' type: 'string' - description: 'Filter to models with endpoints in the given data region. Currently only "eu" is supported.' in: 'query' name: 'region' required: false schema: description: 'Filter to models with endpoints in the given data region. Currently only "eu" is supported.' enum: - 'eu' example: 'eu' type: 'string' - description: 'Minimum completion (output) price in $/M tokens.' in: 'query' name: 'min_output_price' required: false schema: description: 'Minimum completion (output) price in $/M tokens.' example: 0 minimum: 0 type: - 'number' - 'null' - description: 'Maximum completion (output) price in $/M tokens.' in: 'query' name: 'max_output_price' required: false schema: description: 'Maximum completion (output) price in $/M tokens.' example: 10 minimum: 0 type: - 'number' - 'null' - description: 'Minimum model age in days since its creation date.' in: 'query' name: 'min_age_days' required: false schema: description: 'Minimum model age in days since its creation date.' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum model age in days since its creation date.' in: 'query' name: 'max_age_days' required: false schema: description: 'Maximum model age in days since its creation date.' example: 90 minimum: 0 type: - 'integer' - 'null' - description: 'Minimum Artificial Analysis intelligence index.' in: 'query' name: 'min_intelligence_index' required: false schema: description: 'Minimum Artificial Analysis intelligence index.' example: 50 minimum: 0 type: - 'number' - 'null' - description: 'Maximum Artificial Analysis intelligence index.' in: 'query' name: 'max_intelligence_index' required: false schema: description: 'Maximum Artificial Analysis intelligence index.' example: 100 minimum: 0 type: - 'number' - 'null' - description: 'Minimum Artificial Analysis coding index.' in: 'query' name: 'min_coding_index' required: false schema: description: 'Minimum Artificial Analysis coding index.' example: 50 minimum: 0 type: - 'number' - 'null' - description: 'Maximum Artificial Analysis coding index.' in: 'query' name: 'max_coding_index' required: false schema: description: 'Maximum Artificial Analysis coding index.' example: 100 minimum: 0 type: - 'number' - 'null' - description: 'Minimum Artificial Analysis agentic index.' in: 'query' name: 'min_agentic_index' required: false schema: description: 'Minimum Artificial Analysis agentic index.' example: 50 minimum: 0 type: - 'number' - 'null' - description: 'Maximum Artificial Analysis agentic index.' in: 'query' name: 'max_agentic_index' required: false schema: description: 'Maximum Artificial Analysis agentic index.' example: 100 minimum: 0 type: - 'number' - 'null' - description: 'Minimum tool-calling success rate, as a fraction in [0, 1] (e.g. 0.9 = 90% of requests finishing with a tool_calls finish reason).' in: 'query' name: 'min_tool_success_rate' required: false schema: description: 'Minimum tool-calling success rate, as a fraction in [0, 1] (e.g. 0.9 = 90% of requests finishing with a tool_calls finish reason).' example: 0.9 maximum: 1 minimum: 0 type: - 'number' - 'null' - description: 'Maximum tool-calling success rate, as a fraction in [0, 1].' in: 'query' name: 'max_tool_success_rate' required: false schema: description: 'Maximum tool-calling success rate, as a fraction in [0, 1].' example: 1 maximum: 1 minimum: 0 type: - 'number' - 'null' responses: '200': content: application/json: example: data: - architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' canonical_slug: 'openai/gpt-4' context_length: 8192 created: 1692901234 default_parameters: null description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' expiration_date: null id: 'openai/gpt-4' knowledge_cutoff: null links: details: '/api/v1/models/openai/gpt-4/endpoints' name: 'GPT-4' per_request_limits: null pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supported_voices: null top_provider: context_length: 8192 is_moderated: true max_completion_tokens: 4096 schema: $ref: '#/components/schemas/ModelsListResponse' application/rss+xml: example: 'OpenRouter Models' schema: example: 'OpenRouter Models' type: 'string' description: 'Returns a list of models or RSS feed' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List all models and their properties' tags: - 'Models' x-speakeasy-name-override: 'list' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /models/{author}/{slug}/endpoints: get: operationId: 'listEndpoints' parameters: - description: 'The author/organization of the model' in: 'path' name: 'author' required: true schema: description: 'The author/organization of the model' example: 'openai' type: 'string' - description: 'The model slug' in: 'path' name: 'slug' required: true schema: description: 'The model slug' example: 'gpt-4' type: 'string' responses: '200': content: application/json: example: data: architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' created: 1692901234 description: 'GPT-4 is a large multimodal model.' endpoints: [] id: 'openai/gpt-4' name: 'GPT-4' schema: example: data: architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' created: 1692901234 description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' endpoints: - context_length: 8192 latency_last_30m: p50: 0.25 p75: 0.35 p90: 0.48 p99: 0.85 max_completion_tokens: 4096 max_prompt_tokens: 8192 model_id: 'openai/gpt-4' model_name: 'GPT-4' name: 'OpenAI: GPT-4' pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' provider_name: 'OpenAI' quantization: 'fp16' status: 0 supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supports_implicit_caching: true tag: 'openai' throughput_last_30m: p50: 45.2 p75: 38.5 p90: 28.3 p99: 15.1 uptime_last_1d: 99.8 uptime_last_30m: 99.5 uptime_last_5m: 100 id: 'openai/gpt-4' name: 'GPT-4' properties: data: $ref: '#/components/schemas/ListEndpointsResponse' required: - 'data' type: 'object' description: 'Returns a list of endpoints' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List all endpoints for a model' tags: - 'Endpoints' x-speakeasy-name-override: 'list' /models/count: get: operationId: 'listModelsCount' parameters: - description: 'Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text".' in: 'query' name: 'output_modalities' required: false schema: description: 'Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text".' example: 'text' type: 'string' responses: '200': content: application/json: example: data: count: 150 schema: $ref: '#/components/schemas/ModelsCountResponse' description: 'Returns the total count of available models' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get total count of available models' tags: - 'Models' x-speakeasy-name-override: 'count' /models/user: get: description: 'List models filtered by user provider preferences, [privacy settings](https://openrouter.ai/docs/guides/privacy/provider-logging), and [guardrails](https://openrouter.ai/docs/guides/features/guardrails). If requesting through `eu.openrouter.ai/api/v1/...` the results will be filtered to models that satisfy [EU in-region routing](https://openrouter.ai/docs/guides/privacy/provider-logging#enterprise-eu-in-region-routing).' operationId: 'listModelsUser' parameters: - description: 'Number of records to skip for pagination. When both offset and limit are omitted, the full list is returned' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination. When both offset and limit are omitted, the full list is returned' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 1000). When both offset and limit are omitted, the full list is returned' in: 'query' name: 'limit' required: false schema: default: 500 description: 'Maximum number of records to return (max 1000). When both offset and limit are omitted, the full list is returned' example: 500 maximum: 1000 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - architecture: input_modalities: - 'text' instruct_type: 'chatml' modality: 'text->text' output_modalities: - 'text' tokenizer: 'GPT' canonical_slug: 'openai/gpt-4' context_length: 8192 created: 1692901234 default_parameters: null description: 'GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.' expiration_date: null id: 'openai/gpt-4' knowledge_cutoff: null links: details: '/api/v1/models/openai/gpt-4/endpoints' name: 'GPT-4' per_request_limits: null pricing: completion: '0.00006' image: '0' prompt: '0.00003' request: '0' supported_parameters: - 'temperature' - 'top_p' - 'max_tokens' supported_voices: null top_provider: context_length: 8192 is_moderated: true max_completion_tokens: 4096 schema: $ref: '#/components/schemas/ModelsListResponse' description: 'Returns a list of models filtered by user provider preferences' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - bearer: [] summary: 'List models filtered by user provider preferences, privacy settings, and guardrails' tags: - 'Models' x-speakeasy-name-override: 'listForUser' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /observability/destinations: get: description: 'List the observability destinations configured for the authenticated entity''s default workspace. Use the `workspace_id` query parameter to scope the result to a different workspace. Only destinations with stable release status are surfaced — destinations of other types are excluded. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listObservabilityDestinations' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' - description: 'Optional workspace ID to filter by. Defaults to the authenticated entity''s default workspace.' in: 'query' name: 'workspace_id' required: false schema: description: 'Optional workspace ID to filter by. Defaults to the authenticated entity''s default workspace.' example: '550e8400-e29b-41d4-a716-446655440000' format: 'uuid' type: 'string' responses: '200': content: application/json: example: data: - api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' total_count: 1 schema: $ref: '#/components/schemas/ListObservabilityDestinationsResponse' description: 'List of observability destinations' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List observability destinations' tags: - 'Observability' x-speakeasy-name-override: 'list' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' post: description: 'Create a new observability destination. A maximum of 5 destinations per type is allowed. Defaults to the authenticated entity''s default workspace; use the `workspace_id` body field to scope to a different workspace. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'createObservabilityDestination' requestBody: content: application/json: example: config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' name: 'Production Langfuse' type: 'langfuse' schema: $ref: '#/components/schemas/CreateObservabilityDestinationRequest' required: true responses: '201': content: application/json: example: data: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' schema: $ref: '#/components/schemas/CreateObservabilityDestinationResponse' description: 'Destination created successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '409': content: application/json: example: error: code: 409 message: 'Resource conflict. Please try again later.' schema: $ref: '#/components/schemas/ConflictResponse' description: 'Conflict - Resource conflict or concurrent modification' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create an observability destination' tags: - 'Observability' x-speakeasy-name-override: 'create' /observability/destinations/{id}: delete: description: 'Delete an existing observability destination. This performs a soft delete. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'deleteObservabilityDestination' parameters: - description: 'The destination ID (UUID).' in: 'path' name: 'id' required: true schema: description: 'The destination ID (UUID).' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' responses: '200': content: application/json: example: deleted: true schema: $ref: '#/components/schemas/DeleteObservabilityDestinationResponse' description: 'Destination deleted successfully' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Delete an observability destination' tags: - 'Observability' x-speakeasy-name-override: 'delete' get: description: 'Fetch a single observability destination by its UUID. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getObservabilityDestination' parameters: - description: 'The destination ID (UUID).' in: 'path' name: 'id' required: true schema: description: 'The destination ID (UUID).' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' responses: '200': content: application/json: example: data: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' schema: $ref: '#/components/schemas/GetObservabilityDestinationResponse' description: 'The observability destination' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get an observability destination' tags: - 'Observability' x-speakeasy-name-override: 'get' patch: description: 'Update an existing observability destination. Only the fields provided in the request body are updated. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updateObservabilityDestination' parameters: - description: 'The destination ID (UUID).' in: 'path' name: 'id' required: true schema: description: 'The destination ID (UUID).' example: '99999999-aaaa-bbbb-cccc-dddddddddddd' format: 'uuid' type: 'string' requestBody: content: application/json: example: enabled: false name: 'Updated Langfuse' schema: $ref: '#/components/schemas/UpdateObservabilityDestinationRequest' required: true responses: '200': content: application/json: example: data: api_key_hashes: null config: baseUrl: 'https://us.cloud.langfuse.com' publicKey: 'pk-l...EfGh' secretKey: 'sk-l...AbCd' created_at: '2025-08-24T10:30:00Z' enabled: true filter_rules: null id: '99999999-aaaa-bbbb-cccc-dddddddddddd' name: 'Production Langfuse' privacy_mode: false sampling_rate: 1 type: 'langfuse' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' schema: $ref: '#/components/schemas/UpdateObservabilityDestinationResponse' description: 'Destination updated successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '409': content: application/json: example: error: code: 409 message: 'Resource conflict. Please try again later.' schema: $ref: '#/components/schemas/ConflictResponse' description: 'Conflict - Resource conflict or concurrent modification' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Update an observability destination' tags: - 'Observability' x-speakeasy-name-override: 'update' /organization/members: get: description: 'List all members of the organization associated with the authenticated management key. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listOrganizationMembers' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - email: 'jane.doe@example.com' first_name: 'Jane' id: 'user_2dHFtVWx2n56w6HkM0000000000' last_name: 'Doe' role: 'org:member' total_count: 25 schema: properties: data: description: 'List of organization members' items: properties: email: description: 'Email address of the member' example: 'jane.doe@example.com' type: 'string' first_name: description: 'First name of the member' example: 'Jane' type: - 'string' - 'null' id: description: 'User ID of the organization member' example: 'user_2dHFtVWx2n56w6HkM0000000000' type: 'string' last_name: description: 'Last name of the member' example: 'Doe' type: - 'string' - 'null' role: description: 'Role of the member in the organization' enum: - 'org:admin' - 'org:member' example: 'org:member' type: 'string' required: - 'id' - 'first_name' - 'last_name' - 'email' - 'role' type: 'object' type: 'array' total_count: description: 'Total number of members in the organization' example: 25 type: 'integer' required: - 'data' - 'total_count' type: 'object' description: 'List of organization members' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List organization members' tags: - 'Organization' x-speakeasy-name-override: 'listMembers' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /presets: get: description: 'Lists all presets for the authenticated user, ordered by most recently updated first.' operationId: 'listPresets' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' total_count: 1 schema: $ref: '#/components/schemas/ListPresetsResponse' description: 'Paginated list of presets.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - apiKey: [] summary: 'List presets' tags: - 'Presets' x-speakeasy-name-override: 'list' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /presets/{slug}: get: description: 'Retrieves a preset by its slug with its currently designated version inline.' operationId: 'getPreset' parameters: - description: 'URL-safe slug identifying the preset.' in: 'path' name: 'slug' required: true schema: description: 'URL-safe slug identifying the preset.' example: 'my-preset' minLength: 1 type: 'string' responses: '200': content: application/json: example: data: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version: config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' schema: $ref: '#/components/schemas/GetPresetResponse' description: 'Preset with its designated version.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - apiKey: [] summary: 'Get a preset' tags: - 'Presets' x-speakeasy-name-override: 'get' /presets/{slug}/chat/completions: post: description: 'Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.' operationId: 'createPresetsChatCompletions' parameters: - description: 'URL-safe slug identifying the preset. Created if it does not exist.' in: 'path' name: 'slug' required: true schema: description: 'URL-safe slug identifying the preset. Created if it does not exist.' example: 'my-preset' minLength: 1 type: 'string' requestBody: content: application/json: example: messages: - content: 'You are a helpful assistant.' role: 'system' - content: 'Hello!' role: 'user' model: 'openai/gpt-5.4' temperature: 0.7 schema: $ref: '#/components/schemas/ChatRequest' required: true responses: '200': content: application/json: example: data: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version: config: model: 'openai/gpt-5.4' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' schema: $ref: '#/components/schemas/CreatePresetFromInferenceResponse' description: 'Preset created or updated successfully.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '409': content: application/json: example: error: code: 409 message: 'Resource conflict. Please try again later.' schema: $ref: '#/components/schemas/ConflictResponse' description: 'Conflict - Resource conflict or concurrent modification' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - apiKey: [] summary: 'Create a preset from a chat-completions request body' tags: - 'Presets' /presets/{slug}/messages: post: description: 'Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.' operationId: 'createPresetsMessages' parameters: - description: 'URL-safe slug identifying the preset. Created if it does not exist.' in: 'path' name: 'slug' required: true schema: description: 'URL-safe slug identifying the preset. Created if it does not exist.' example: 'my-preset' minLength: 1 type: 'string' requestBody: content: application/json: example: max_tokens: 1024 messages: - content: 'Hello!' role: 'user' model: 'anthropic/claude-4.6-sonnet' system: 'You are a helpful assistant.' schema: $ref: '#/components/schemas/MessagesRequest' required: true responses: '200': content: application/json: example: data: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version: config: max_tokens: 1024 model: 'anthropic/claude-4.6-sonnet' created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' schema: $ref: '#/components/schemas/CreatePresetFromInferenceResponse' description: 'Preset created or updated successfully.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '409': content: application/json: example: error: code: 409 message: 'Resource conflict. Please try again later.' schema: $ref: '#/components/schemas/ConflictResponse' description: 'Conflict - Resource conflict or concurrent modification' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - apiKey: [] summary: 'Create a preset from a messages request body' tags: - 'Presets' /presets/{slug}/responses: post: description: 'Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.' operationId: 'createPresetsResponses' parameters: - description: 'URL-safe slug identifying the preset. Created if it does not exist.' in: 'path' name: 'slug' required: true schema: description: 'URL-safe slug identifying the preset. Created if it does not exist.' example: 'my-preset' minLength: 1 type: 'string' requestBody: content: application/json: example: input: 'Hello!' instructions: 'You are a helpful assistant.' model: 'openai/gpt-5.4' schema: $ref: '#/components/schemas/ResponsesRequest' required: true responses: '200': content: application/json: example: data: created_at: '2026-04-20T10:00:00Z' creator_user_id: 'user_2dHFtVWx2n56w6HkM0000000000' description: null designated_version: config: model: 'openai/gpt-5.4' created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 designated_version_id: '550e8400-e29b-41d4-a716-446655440000' id: '650e8400-e29b-41d4-a716-446655440001' name: 'my-preset' slug: 'my-preset' status: 'active' status_updated_at: null updated_at: '2026-04-20T10:00:00Z' workspace_id: '750e8400-e29b-41d4-a716-446655440002' schema: $ref: '#/components/schemas/CreatePresetFromInferenceResponse' description: 'Preset created or updated successfully.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '409': content: application/json: example: error: code: 409 message: 'Resource conflict. Please try again later.' schema: $ref: '#/components/schemas/ConflictResponse' description: 'Conflict - Resource conflict or concurrent modification' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - apiKey: [] summary: 'Create a preset from a responses request body' tags: - 'Presets' /presets/{slug}/versions: get: description: 'Lists all versions of a preset, ordered by version number ascending (oldest first).' operationId: 'listPresetVersions' parameters: - description: 'URL-safe slug identifying the preset.' in: 'path' name: 'slug' required: true schema: description: 'URL-safe slug identifying the preset.' example: 'my-preset' minLength: 1 type: 'string' - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 total_count: 1 schema: $ref: '#/components/schemas/ListPresetVersionsResponse' description: 'Paginated list of preset versions.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - apiKey: [] summary: 'List versions of a preset' tags: - 'Presets' x-speakeasy-name-override: 'listVersions' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /presets/{slug}/versions/{version}: get: description: 'Retrieves a specific version of a preset by its slug and version number.' operationId: 'getPresetVersion' parameters: - description: 'URL-safe slug identifying the preset.' in: 'path' name: 'slug' required: true schema: description: 'URL-safe slug identifying the preset.' example: 'my-preset' minLength: 1 type: 'string' - description: 'Version number of the preset.' in: 'path' name: 'version' required: true schema: description: 'Version number of the preset.' example: '1' minLength: 1 type: 'string' responses: '200': content: application/json: example: data: config: model: 'openai/gpt-4o' temperature: 0.7 created_at: '2026-04-20T10:00:00Z' creator_id: 'user_2dHFtVWx2n56w6HkM0000000000' id: '550e8400-e29b-41d4-a716-446655440000' preset_id: '650e8400-e29b-41d4-a716-446655440001' system_prompt: 'You are a helpful assistant.' updated_at: '2026-04-20T10:00:00Z' version: 1 schema: $ref: '#/components/schemas/GetPresetVersionResponse' description: 'The requested preset version.' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' security: - apiKey: [] summary: 'Get a specific version of a preset' tags: - 'Presets' x-speakeasy-name-override: 'getVersion' /providers: get: operationId: 'listProviders' responses: '200': content: application/json: example: data: - datacenters: - 'US' - 'IE' headquarters: 'US' name: 'OpenAI' privacy_policy_url: 'https://openai.com/privacy' slug: 'openai' status_page_url: 'https://status.openai.com' terms_of_service_url: 'https://openai.com/terms' schema: example: data: - datacenters: - 'US' - 'IE' headquarters: 'US' name: 'OpenAI' privacy_policy_url: 'https://openai.com/privacy' slug: 'openai' status_page_url: 'https://status.openai.com' terms_of_service_url: 'https://openai.com/terms' properties: data: items: example: datacenters: - 'US' - 'IE' headquarters: 'US' name: 'OpenAI' privacy_policy_url: 'https://openai.com/privacy' slug: 'openai' status_page_url: 'https://status.openai.com' terms_of_service_url: 'https://openai.com/terms' properties: datacenters: description: 'ISO 3166-1 Alpha-2 country codes of the provider datacenter locations' example: - 'US' - 'IE' items: enum: - 'AD' - 'AE' - 'AF' - 'AG' - 'AI' - 'AL' - 'AM' - 'AO' - 'AQ' - 'AR' - 'AS' - 'AT' - 'AU' - 'AW' - 'AX' - 'AZ' - 'BA' - 'BB' - 'BD' - 'BE' - 'BF' - 'BG' - 'BH' - 'BI' - 'BJ' - 'BL' - 'BM' - 'BN' - 'BO' - 'BQ' - 'BR' - 'BS' - 'BT' - 'BV' - 'BW' - 'BY' - 'BZ' - 'CA' - 'CC' - 'CD' - 'CF' - 'CG' - 'CH' - 'CI' - 'CK' - 'CL' - 'CM' - 'CN' - 'CO' - 'CR' - 'CU' - 'CV' - 'CW' - 'CX' - 'CY' - 'CZ' - 'DE' - 'DJ' - 'DK' - 'DM' - 'DO' - 'DZ' - 'EC' - 'EE' - 'EG' - 'EH' - 'ER' - 'ES' - 'ET' - 'FI' - 'FJ' - 'FK' - 'FM' - 'FO' - 'FR' - 'GA' - 'GB' - 'GD' - 'GE' - 'GF' - 'GG' - 'GH' - 'GI' - 'GL' - 'GM' - 'GN' - 'GP' - 'GQ' - 'GR' - 'GS' - 'GT' - 'GU' - 'GW' - 'GY' - 'HK' - 'HM' - 'HN' - 'HR' - 'HT' - 'HU' - 'ID' - 'IE' - 'IL' - 'IM' - 'IN' - 'IO' - 'IQ' - 'IR' - 'IS' - 'IT' - 'JE' - 'JM' - 'JO' - 'JP' - 'KE' - 'KG' - 'KH' - 'KI' - 'KM' - 'KN' - 'KP' - 'KR' - 'KW' - 'KY' - 'KZ' - 'LA' - 'LB' - 'LC' - 'LI' - 'LK' - 'LR' - 'LS' - 'LT' - 'LU' - 'LV' - 'LY' - 'MA' - 'MC' - 'MD' - 'ME' - 'MF' - 'MG' - 'MH' - 'MK' - 'ML' - 'MM' - 'MN' - 'MO' - 'MP' - 'MQ' - 'MR' - 'MS' - 'MT' - 'MU' - 'MV' - 'MW' - 'MX' - 'MY' - 'MZ' - 'NA' - 'NC' - 'NE' - 'NF' - 'NG' - 'NI' - 'NL' - 'NO' - 'NP' - 'NR' - 'NU' - 'NZ' - 'OM' - 'PA' - 'PE' - 'PF' - 'PG' - 'PH' - 'PK' - 'PL' - 'PM' - 'PN' - 'PR' - 'PS' - 'PT' - 'PW' - 'PY' - 'QA' - 'RE' - 'RO' - 'RS' - 'RU' - 'RW' - 'SA' - 'SB' - 'SC' - 'SD' - 'SE' - 'SG' - 'SH' - 'SI' - 'SJ' - 'SK' - 'SL' - 'SM' - 'SN' - 'SO' - 'SR' - 'SS' - 'ST' - 'SV' - 'SX' - 'SY' - 'SZ' - 'TC' - 'TD' - 'TF' - 'TG' - 'TH' - 'TJ' - 'TK' - 'TL' - 'TM' - 'TN' - 'TO' - 'TR' - 'TT' - 'TV' - 'TW' - 'TZ' - 'UA' - 'UG' - 'UM' - 'US' - 'UY' - 'UZ' - 'VA' - 'VC' - 'VE' - 'VG' - 'VI' - 'VN' - 'VU' - 'WF' - 'WS' - 'YE' - 'YT' - 'ZA' - 'ZM' - 'ZW' type: 'string' type: - 'array' - 'null' headquarters: description: 'ISO 3166-1 Alpha-2 country code of the provider headquarters' enum: - 'AD' - 'AE' - 'AF' - 'AG' - 'AI' - 'AL' - 'AM' - 'AO' - 'AQ' - 'AR' - 'AS' - 'AT' - 'AU' - 'AW' - 'AX' - 'AZ' - 'BA' - 'BB' - 'BD' - 'BE' - 'BF' - 'BG' - 'BH' - 'BI' - 'BJ' - 'BL' - 'BM' - 'BN' - 'BO' - 'BQ' - 'BR' - 'BS' - 'BT' - 'BV' - 'BW' - 'BY' - 'BZ' - 'CA' - 'CC' - 'CD' - 'CF' - 'CG' - 'CH' - 'CI' - 'CK' - 'CL' - 'CM' - 'CN' - 'CO' - 'CR' - 'CU' - 'CV' - 'CW' - 'CX' - 'CY' - 'CZ' - 'DE' - 'DJ' - 'DK' - 'DM' - 'DO' - 'DZ' - 'EC' - 'EE' - 'EG' - 'EH' - 'ER' - 'ES' - 'ET' - 'FI' - 'FJ' - 'FK' - 'FM' - 'FO' - 'FR' - 'GA' - 'GB' - 'GD' - 'GE' - 'GF' - 'GG' - 'GH' - 'GI' - 'GL' - 'GM' - 'GN' - 'GP' - 'GQ' - 'GR' - 'GS' - 'GT' - 'GU' - 'GW' - 'GY' - 'HK' - 'HM' - 'HN' - 'HR' - 'HT' - 'HU' - 'ID' - 'IE' - 'IL' - 'IM' - 'IN' - 'IO' - 'IQ' - 'IR' - 'IS' - 'IT' - 'JE' - 'JM' - 'JO' - 'JP' - 'KE' - 'KG' - 'KH' - 'KI' - 'KM' - 'KN' - 'KP' - 'KR' - 'KW' - 'KY' - 'KZ' - 'LA' - 'LB' - 'LC' - 'LI' - 'LK' - 'LR' - 'LS' - 'LT' - 'LU' - 'LV' - 'LY' - 'MA' - 'MC' - 'MD' - 'ME' - 'MF' - 'MG' - 'MH' - 'MK' - 'ML' - 'MM' - 'MN' - 'MO' - 'MP' - 'MQ' - 'MR' - 'MS' - 'MT' - 'MU' - 'MV' - 'MW' - 'MX' - 'MY' - 'MZ' - 'NA' - 'NC' - 'NE' - 'NF' - 'NG' - 'NI' - 'NL' - 'NO' - 'NP' - 'NR' - 'NU' - 'NZ' - 'OM' - 'PA' - 'PE' - 'PF' - 'PG' - 'PH' - 'PK' - 'PL' - 'PM' - 'PN' - 'PR' - 'PS' - 'PT' - 'PW' - 'PY' - 'QA' - 'RE' - 'RO' - 'RS' - 'RU' - 'RW' - 'SA' - 'SB' - 'SC' - 'SD' - 'SE' - 'SG' - 'SH' - 'SI' - 'SJ' - 'SK' - 'SL' - 'SM' - 'SN' - 'SO' - 'SR' - 'SS' - 'ST' - 'SV' - 'SX' - 'SY' - 'SZ' - 'TC' - 'TD' - 'TF' - 'TG' - 'TH' - 'TJ' - 'TK' - 'TL' - 'TM' - 'TN' - 'TO' - 'TR' - 'TT' - 'TV' - 'TW' - 'TZ' - 'UA' - 'UG' - 'UM' - 'US' - 'UY' - 'UZ' - 'VA' - 'VC' - 'VE' - 'VG' - 'VI' - 'VN' - 'VU' - 'WF' - 'WS' - 'YE' - 'YT' - 'ZA' - 'ZM' - 'ZW' - null example: 'US' type: - 'string' - 'null' name: description: 'Display name of the provider' example: 'OpenAI' type: 'string' privacy_policy_url: description: 'URL to the provider''s privacy policy' example: 'https://openai.com/privacy' type: - 'string' - 'null' slug: description: 'URL-friendly identifier for the provider' example: 'openai' type: 'string' status_page_url: description: 'URL to the provider''s status page' example: 'https://status.openai.com' type: - 'string' - 'null' terms_of_service_url: description: 'URL to the provider''s terms of service' example: 'https://openai.com/terms' type: - 'string' - 'null' required: - 'name' - 'slug' - 'privacy_policy_url' type: 'object' type: 'array' required: - 'data' type: 'object' description: 'Returns a list of providers' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List all providers' tags: - 'Providers' x-speakeasy-name-override: 'list' /rerank: post: description: 'Submits a rerank request to the rerank router' operationId: 'createRerank' requestBody: content: application/json: schema: description: 'Rerank request input' example: documents: - 'Paris is the capital of France.' - 'Berlin is the capital of Germany.' model: 'cohere/rerank-v3.5' query: 'What is the capital of France?' top_n: 3 properties: documents: description: 'The list of documents to rerank. Documents may be plain strings, or structured objects with `text` and/or `image` for multimodal models.' example: - 'Paris is the capital of France.' - 'Berlin is the capital of Germany.' items: anyOf: - type: 'string' - description: 'A structured document with optional text and/or image content. At least one of `text` or `image` must be provided.' properties: image: description: 'An image associated with the document, as a remote URL (http/https) or a base64-encoded data URI (data:image/...).' example: 'https://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Phytogenic.png' type: 'string' text: description: 'The document text' example: 'AI enables robots to perceive, plan, and act autonomously.' type: 'string' type: 'object' description: 'A document to rerank. Either a plain string, or a structured object with optional `text` and/or `image`.' minItems: 1 type: 'array' model: description: 'The rerank model to use' example: 'cohere/rerank-v3.5' type: 'string' provider: allOf: - $ref: '#/components/schemas/ProviderPreferences' - description: 'Provider routing preferences for the request.' query: description: 'The search query to rerank documents against' example: 'What is the capital of France?' type: 'string' top_n: description: 'Number of most relevant documents to return' example: 3 minimum: 1 type: 'integer' required: - 'model' - 'query' - 'documents' type: 'object' required: true responses: '200': content: application/json: schema: description: 'Rerank response containing ranked results' example: id: 'gen-rerank-1234567890-abc' model: 'cohere/rerank-v3.5' results: - document: text: 'Paris is the capital of France.' index: 0 relevance_score: 0.98 usage: search_units: 1 total_tokens: 150 properties: id: description: 'Unique identifier for the rerank response (ORID format)' example: 'gen-rerank-1234567890-abc' type: 'string' model: description: 'The model used for reranking' example: 'cohere/rerank-v3.5' type: 'string' provider: description: 'The provider that served the rerank request' example: 'Cohere' type: 'string' results: description: 'List of rerank results sorted by relevance' example: - document: text: 'Paris is the capital of France.' index: 0 relevance_score: 0.98 items: description: 'A single rerank result' example: document: text: 'Paris is the capital of France.' index: 0 relevance_score: 0.98 properties: document: description: 'The document object echoing the original input (text and/or image)' properties: image: description: 'The image (URL or data URI) from the original document' example: 'https://example.com/image.png' type: 'string' text: description: 'The document text' example: 'Paris is the capital of France.' type: 'string' type: 'object' index: description: 'Index of the document in the original input list' example: 0 type: 'integer' relevance_score: description: 'Relevance score of the document to the query' example: 0.98 format: 'double' type: 'number' required: - 'index' - 'relevance_score' - 'document' type: 'object' type: 'array' usage: description: 'Usage statistics' example: search_units: 1 total_tokens: 150 properties: cost: description: 'Cost of the request in credits' example: 0.001 format: 'double' type: 'number' search_units: description: 'Number of search units consumed (Cohere billing)' example: 1 type: 'integer' total_tokens: description: 'Total number of tokens used' example: 150 type: 'integer' type: 'object' required: - 'model' - 'results' type: 'object' text/event-stream: example: 'data: [DONE]' schema: description: 'Not used for rerank - rerank does not support streaming' type: 'string' x-speakeasy-sse-sentinel: '[DONE]' description: 'Rerank response' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Submit a rerank request' tags: - 'Rerank' x-speakeasy-name-override: 'rerank' /responses: post: description: 'Creates a streaming or non-streaming response using OpenResponses API format' operationId: 'createResponses' parameters: - description: 'Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.' example: 'enabled' in: 'header' name: 'X-OpenRouter-Metadata' required: false schema: $ref: '#/components/schemas/MetadataLevel' requestBody: content: application/json: example: input: 'Tell me a joke' model: 'openai/gpt-4o' schema: $ref: '#/components/schemas/ResponsesRequest' required: true responses: '200': content: application/json: example: completed_at: 1700000010 created_at: 1700000000 error: null frequency_penalty: null id: 'resp_abc123' incomplete_details: null instructions: null max_output_tokens: null metadata: null model: 'openai/gpt-4o' object: 'response' output: - content: - annotations: [] text: 'Why did the chicken cross the road? To get to the other side!' type: 'output_text' id: 'msg-abc123' role: 'assistant' status: 'completed' type: 'message' parallel_tool_calls: true presence_penalty: null status: 'completed' temperature: null tool_choice: 'auto' tools: [] top_p: null usage: input_tokens: 10 input_tokens_details: cached_tokens: 0 output_tokens: 20 output_tokens_details: reasoning_tokens: 0 total_tokens: 30 schema: $ref: '#/components/schemas/OpenResponsesResult' text/event-stream: example: data: content_index: 0 delta: 'Hello' item_id: 'item-1' logprobs: [] output_index: 0 sequence_number: 4 type: 'response.output_text.delta' schema: $ref: '#/components/schemas/ResponsesStreamingResponse' x-speakeasy-sse-sentinel: '[DONE]' description: 'Successful response' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '403': content: application/json: examples: guardrail-blocked: summary: 'Guardrail blocked the request' value: error: code: 403 message: 'Request blocked: prompt injection patterns detected' metadata: patterns: - 'ignore all previous instructions' openrouter_metadata: attempt: 1 endpoints: available: - model: 'openai/gpt-4o' provider: 'OpenAI' selected: false total: 1 is_byok: false pipeline: - data: action: 'blocked' detected: true engines: - 'regex' patterns: - 'ignore all previous instructions' guardrail_id: 'grd_abc123' guardrail_scope: 'api-key' name: 'regex_pi_detection' summary: 'Blocked: prompt injection detected (1 pattern matched)' type: 'guardrail' region: 'iad' requested: 'openai/gpt-4o' strategy: 'direct' summary: 'available=1' insufficient-permissions: summary: 'Insufficient permissions' value: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions, or a guardrail blocked the request. When guardrails block and the `X-OpenRouter-Metadata: enabled` header is present, the response includes `openrouter_metadata` with full routing context and a `pipeline` array containing guardrail stage details.' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '408': content: application/json: example: error: code: 408 message: 'Operation timed out. Please try again later.' schema: $ref: '#/components/schemas/RequestTimeoutResponse' description: 'Request Timeout - Operation exceeded time limit' '413': content: application/json: example: error: code: 413 message: 'Request payload too large' schema: $ref: '#/components/schemas/PayloadTooLargeResponse' description: 'Payload Too Large - Request payload exceeds size limits' '422': content: application/json: example: error: code: 422 message: 'Invalid argument' schema: $ref: '#/components/schemas/UnprocessableEntityResponse' description: 'Unprocessable Entity - Semantic validation failure' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' '503': content: application/json: example: error: code: 503 message: 'Service temporarily unavailable' schema: $ref: '#/components/schemas/ServiceUnavailableResponse' description: 'Service Unavailable - Service temporarily unavailable' '524': content: application/json: example: error: code: 524 message: 'Request timed out. Please try again later.' schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' description: 'Infrastructure Timeout - Provider request timed out at edge network' '529': content: application/json: example: error: code: 529 message: 'Provider returned error' schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' summary: 'Create a response' tags: - 'Responses' x-speakeasy-name-override: 'send' x-speakeasy-stream-request-field: 'stream' /scim/group-mappings: get: description: 'List SCIM group-to-workspace mappings for the organization. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listScimGroupMappings' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: schema: $ref: '#/components/schemas/ListScimGroupMappingsResponse' description: 'List of SCIM group mappings' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List SCIM group mappings' tags: - 'SCIM' x-speakeasy-name-override: 'listMappings' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' post: description: 'Create a SCIM group-to-workspace role mapping. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'createScimGroupMapping' requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateScimGroupMappingRequest' required: true responses: '201': content: application/json: schema: $ref: '#/components/schemas/CreateScimGroupMappingResponse' description: 'SCIM group mapping created' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '409': content: application/json: example: error: code: 409 message: 'Resource conflict. Please try again later.' schema: $ref: '#/components/schemas/ConflictResponse' description: 'Conflict - Resource conflict or concurrent modification' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create a SCIM group mapping' tags: - 'SCIM' x-speakeasy-name-override: 'create' /scim/group-mappings/{id}: delete: description: 'Delete a SCIM group-to-workspace mapping. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'deleteScimGroupMapping' parameters: - in: 'path' name: 'id' required: true schema: format: 'uuid' type: 'string' - description: 'Required. Whether to keep workspace members after deleting the mapping. `false` **removes** the members this mapping granted access to; `true` deletes the mapping while leaving membership intact as manually-managed. There is deliberately no default — omitting it returns `400` so the destructive path cannot be reached by accident. Mirrors the dashboard, whose `DeleteMappingSchema.keepMembers` is likewise required.' in: 'query' name: 'keep_members' required: true schema: anyOf: - enum: - 'true' - 'false' type: 'string' - type: 'boolean' description: 'Required. Whether to keep workspace members after deleting the mapping. `false` **removes** the members this mapping granted access to; `true` deletes the mapping while leaving membership intact as manually-managed. There is deliberately no default — omitting it returns `400` so the destructive path cannot be reached by accident. Mirrors the dashboard, whose `DeleteMappingSchema.keepMembers` is likewise required.' example: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeleteScimGroupMappingResponse' description: 'SCIM group mapping deleted' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Delete a SCIM group mapping' tags: - 'SCIM' x-speakeasy-name-override: 'delete' get: description: 'Get a SCIM group-to-workspace mapping. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getScimGroupMapping' parameters: - in: 'path' name: 'id' required: true schema: format: 'uuid' type: 'string' responses: '200': content: application/json: schema: $ref: '#/components/schemas/GetScimGroupMappingResponse' description: 'SCIM group mapping' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get a SCIM group mapping' tags: - 'SCIM' x-speakeasy-name-override: 'read' patch: description: 'Update a SCIM group mapping role. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updateScimGroupMapping' parameters: - in: 'path' name: 'id' required: true schema: format: 'uuid' type: 'string' requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateScimGroupMappingRequest' required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/UpdateScimGroupMappingResponse' description: 'SCIM group mapping updated' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Update a SCIM group mapping' tags: - 'SCIM' x-speakeasy-name-override: 'update' /scim/groups: get: description: 'List SCIM groups for the organization. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listScimGroups' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: schema: $ref: '#/components/schemas/ListScimGroupsResponse' description: 'List of SCIM groups' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List SCIM groups' tags: - 'SCIM' x-speakeasy-name-override: 'listGroups' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /videos: post: description: 'Submits a video generation request and returns a polling URL to check status' operationId: 'createVideos' requestBody: content: application/json: example: aspect_ratio: '16:9' duration: 8 model: 'google/veo-3.1' prompt: 'A serene mountain landscape at sunset' resolution: '720p' schema: $ref: '#/components/schemas/VideoGenerationRequest' required: true responses: '202': content: application/json: example: generation_id: 'gen-xyz789' id: 'job-abc123' polling_url: '/api/v1/videos/job-abc123' status: 'pending' schema: $ref: '#/components/schemas/VideoGenerationResponse' description: 'Video generation request accepted' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '402': content: application/json: example: error: code: 402 message: 'Insufficient credits. Add more using https://openrouter.ai/credits' schema: $ref: '#/components/schemas/PaymentRequiredResponse' description: 'Payment Required - Insufficient credits or quota to complete request' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '429': content: application/json: example: error: code: 429 message: 'Rate limit exceeded' schema: $ref: '#/components/schemas/TooManyRequestsResponse' description: 'Too Many Requests - Rate limit exceeded' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Submit a video generation request' tags: - 'Video Generation' x-speakeasy-name-override: 'generate' /videos/{jobId}: get: description: 'Returns job status and content URLs when completed' operationId: 'getVideos' parameters: - in: 'path' name: 'jobId' required: true schema: example: 'job-abc123' minLength: 1 type: 'string' responses: '200': content: application/json: example: generation_id: 'gen-xyz789' id: 'job-abc123' polling_url: '/api/v1/videos/job-abc123' status: 'completed' unsigned_urls: - 'https://storage.example.com/video.mp4' usage: cost: 0.5 schema: $ref: '#/components/schemas/VideoGenerationResponse' description: 'Video generation status' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Poll video generation status' tags: - 'Video Generation' x-speakeasy-name-override: 'getGeneration' /videos/{jobId}/content: get: description: 'Streams the generated video content from the upstream provider' operationId: 'listVideosContent' parameters: - in: 'path' name: 'jobId' required: true schema: example: 'job-abc123' minLength: 1 type: 'string' - in: 'query' name: 'index' required: false schema: default: 0 example: 0 minimum: 0 type: - 'integer' - 'null' responses: '200': content: video/mp4: example: '' schema: format: 'binary' type: 'string' description: 'Video content stream. The body is the raw video bytes proxied from the upstream provider, and the Content-Type reflects the provider media type (video/mp4).' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' '502': content: application/json: example: error: code: 502 message: 'Provider returned error' schema: $ref: '#/components/schemas/BadGatewayResponse' description: 'Bad Gateway - Provider/upstream API failure' summary: 'Download generated video content' tags: - 'Video Generation' x-speakeasy-name-override: 'getVideoContent' /videos/models: get: description: 'Returns a list of all available video generation models and their properties' operationId: 'listVideosModels' responses: '200': content: application/json: example: data: - allowed_passthrough_parameters: [] canonical_slug: 'google/veo-3.1' created: 1700000000 description: 'Google video generation model' generate_audio: true id: 'google/veo-3.1' name: 'Veo 3.1' pricing_skus: generate: '0.50' seed: null supported_aspect_ratios: - '16:9' supported_durations: - 5 - 8 supported_frame_images: - 'first_frame' - 'last_frame' supported_resolutions: - '720p' supported_sizes: null schema: $ref: '#/components/schemas/VideoModelsListResponse' description: 'Returns a list of video generation models' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List all video generation models' tags: - 'Video Generation' /workspaces: get: description: 'List all workspaces for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listWorkspaces' parameters: - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Production' slug: 'production' updated_at: '2025-08-24T15:45:00Z' total_count: 1 schema: $ref: '#/components/schemas/ListWorkspacesResponse' description: 'List of workspaces' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List workspaces' tags: - 'Workspaces' x-speakeasy-name-override: 'list' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' post: description: 'Create a new workspace for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'createWorkspace' requestBody: content: application/json: example: default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' name: 'Production' slug: 'production' schema: $ref: '#/components/schemas/CreateWorkspaceRequest' required: true responses: '201': content: application/json: example: data: created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Production' slug: 'production' updated_at: null schema: $ref: '#/components/schemas/CreateWorkspaceResponse' description: 'Workspace created successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create a workspace' tags: - 'Workspaces' x-speakeasy-name-override: 'create' /workspaces/{id}: delete: description: 'Delete an existing workspace. The default workspace cannot be deleted. Workspaces with active API keys cannot be deleted; remove the keys first. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'deleteWorkspace' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' responses: '200': content: application/json: example: deleted: true schema: $ref: '#/components/schemas/DeleteWorkspaceResponse' description: 'Workspace deleted successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Delete a workspace' tags: - 'Workspaces' x-speakeasy-name-override: 'delete' get: description: 'Get a single workspace by ID or slug. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'getWorkspace' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' responses: '200': content: application/json: example: data: created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Production' slug: 'production' updated_at: '2025-08-24T15:45:00Z' schema: $ref: '#/components/schemas/GetWorkspaceResponse' description: 'Workspace details' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Get a workspace' tags: - 'Workspaces' x-speakeasy-name-override: 'get' patch: description: 'Update an existing workspace by ID or slug. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'updateWorkspace' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' requestBody: content: application/json: example: name: 'Updated Workspace' slug: 'updated-workspace' schema: $ref: '#/components/schemas/UpdateWorkspaceRequest' required: true responses: '200': content: application/json: example: data: created_at: '2025-08-24T10:30:00Z' created_by: 'user_abc123' default_guardrail_id: '595d5849-7e86-51fd-a7c0-705c34e4afff' default_image_model: 'openai/dall-e-3' default_provider_sort: 'price' default_text_model: 'openai/gpt-4o' description: 'Production environment workspace' id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false io_logging_api_key_ids: null io_logging_sampling_rate: 1 is_data_discount_logging_enabled: true is_observability_broadcast_enabled: false is_observability_io_logging_enabled: false name: 'Updated Workspace' slug: 'updated-workspace' updated_at: '2025-08-25T10:00:00Z' schema: $ref: '#/components/schemas/UpdateWorkspaceResponse' description: 'Workspace updated successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Update a workspace' tags: - 'Workspaces' x-speakeasy-name-override: 'update' /workspaces/{id}/budgets: get: description: 'List all budgets configured for a workspace. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listWorkspaceBudgets' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' responses: '200': content: application/json: example: data: - created_at: '2025-08-24T10:30:00Z' id: '770e8400-e29b-41d4-a716-446655440000' limit_usd: 100 reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: false schema: $ref: '#/components/schemas/ListWorkspaceBudgetsResponse' description: 'Budgets retrieved successfully' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List workspace budgets' tags: - 'Workspaces' x-speakeasy-name-override: 'listBudgets' /workspaces/{id}/budgets/{interval}: delete: description: 'Remove the budget for a given interval. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'deleteWorkspaceBudget' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' - description: 'Budget reset interval. Use "lifetime" for a one-time budget that never resets.' example: 'monthly' in: 'path' name: 'interval' required: true schema: $ref: '#/components/schemas/WorkspaceBudgetInterval' responses: '200': content: application/json: example: deleted: true schema: $ref: '#/components/schemas/DeleteWorkspaceBudgetResponse' description: 'Budget deleted successfully' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Delete a workspace budget' tags: - 'Workspaces' x-speakeasy-name-override: 'deleteBudget' put: description: 'Create or update the budget for a given interval. Budget limits must strictly decrease as the interval narrows (lifetime > monthly > weekly > daily). The optional `include_byok_in_budgets` flag is a workspace-wide setting: when provided it applies to every budget interval for the workspace, not just the interval in this request. Note that a change made here is applied to budget enforcement immediately, but an already-open workspace settings page in the web dashboard may keep showing the previous value until it is reloaded. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'upsertWorkspaceBudget' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' - description: 'Budget reset interval. Use "lifetime" for a one-time budget that never resets.' example: 'monthly' in: 'path' name: 'interval' required: true schema: $ref: '#/components/schemas/WorkspaceBudgetInterval' requestBody: content: application/json: example: include_byok_in_budgets: true limit_usd: 100 schema: $ref: '#/components/schemas/UpsertWorkspaceBudgetRequest' required: true responses: '200': content: application/json: example: data: created_at: '2025-08-24T10:30:00Z' id: '770e8400-e29b-41d4-a716-446655440000' limit_usd: 100 reset_interval: 'monthly' updated_at: '2025-08-24T15:45:00Z' workspace_id: '550e8400-e29b-41d4-a716-446655440000' include_byok_in_budgets: true schema: $ref: '#/components/schemas/UpsertWorkspaceBudgetResponse' description: 'Budget created or updated successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Create or update a workspace budget' tags: - 'Workspaces' x-speakeasy-name-override: 'setBudget' /workspaces/{id}/members: get: description: 'List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'listWorkspaceMembers' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' - description: 'Number of records to skip for pagination' in: 'query' name: 'offset' required: false schema: default: 0 description: 'Number of records to skip for pagination' example: 0 minimum: 0 type: - 'integer' - 'null' - description: 'Maximum number of records to return (max 100)' in: 'query' name: 'limit' required: false schema: default: 50 description: 'Maximum number of records to return (max 100)' example: 50 maximum: 100 minimum: 1 type: 'integer' responses: '200': content: application/json: example: data: - created_at: '2025-08-24T10:30:00Z' id: '660e8400-e29b-41d4-a716-446655440000' role: 'member' user_id: 'user_abc123' workspace_id: '550e8400-e29b-41d4-a716-446655440000' total_count: 1 schema: $ref: '#/components/schemas/ListWorkspaceMembersResponse' description: 'List of workspace members' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'List workspace members' tags: - 'Workspaces' x-speakeasy-name-override: 'listMembers' x-speakeasy-pagination: inputs: - in: 'parameters' name: 'offset' type: 'offset' - in: 'parameters' name: 'limit' type: 'limit' outputs: results: '$.data' type: 'offsetLimit' /workspaces/{id}/members/add: post: description: 'Add multiple organization members to a workspace. Members are assigned the same role they hold in the organization. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'bulkAddWorkspaceMembers' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' requestBody: content: application/json: example: user_ids: - 'user_abc123' - 'user_def456' schema: $ref: '#/components/schemas/BulkAddWorkspaceMembersRequest' required: true responses: '200': content: application/json: example: added_count: 1 data: - created_at: '2025-08-24T10:30:00Z' id: '660e8400-e29b-41d4-a716-446655440000' role: 'member' user_id: 'user_abc123' workspace_id: '550e8400-e29b-41d4-a716-446655440000' schema: $ref: '#/components/schemas/BulkAddWorkspaceMembersResponse' description: 'Members added successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Bulk add members to a workspace' tags: - 'Workspaces' x-speakeasy-name-override: 'bulkAddMembers' /workspaces/{id}/members/remove: post: description: 'Remove multiple members from a workspace. Members with active API keys in the workspace cannot be removed. SCIM-managed members cannot be removed; changes must be made in your identity provider. [Management key](/docs/guides/overview/auth/management-api-keys) required.' operationId: 'bulkRemoveWorkspaceMembers' parameters: - description: 'The workspace ID (UUID) or slug' in: 'path' name: 'id' required: true schema: description: 'The workspace ID (UUID) or slug' example: 'production' minLength: 1 type: 'string' requestBody: content: application/json: example: user_ids: - 'user_abc123' - 'user_def456' schema: $ref: '#/components/schemas/BulkRemoveWorkspaceMembersRequest' required: true responses: '200': content: application/json: example: removed_count: 2 schema: $ref: '#/components/schemas/BulkRemoveWorkspaceMembersResponse' description: 'Members removed successfully' '400': content: application/json: example: error: code: 400 message: 'Invalid request parameters' schema: $ref: '#/components/schemas/BadRequestResponse' description: 'Bad Request - Invalid request parameters or malformed input' '401': content: application/json: example: error: code: 401 message: 'Missing Authentication header' schema: $ref: '#/components/schemas/UnauthorizedResponse' description: 'Unauthorized - Authentication required or invalid credentials' '403': content: application/json: example: error: code: 403 message: 'Only management keys can perform this operation' schema: $ref: '#/components/schemas/ForbiddenResponse' description: 'Forbidden - Authentication successful but insufficient permissions' '404': content: application/json: example: error: code: 404 message: 'Resource not found' schema: $ref: '#/components/schemas/NotFoundResponse' description: 'Not Found - Resource does not exist' '500': content: application/json: example: error: code: 500 message: 'Internal Server Error' schema: $ref: '#/components/schemas/InternalServerResponse' description: 'Internal Server Error - Unexpected server error' summary: 'Bulk remove members from a workspace' tags: - 'Workspaces' x-speakeasy-name-override: 'bulkRemoveMembers' security: - apiKey: [] servers: - description: 'Production server' url: 'https://openrouter.ai/api/v1' x-speakeasy-server-id: 'production' tags: - description: 'API key management endpoints' name: 'API Keys' - description: 'Analytics and usage endpoints' name: 'Analytics' - description: 'Anthropic Messages endpoints' name: 'Anthropic Messages' - description: 'BYOK endpoints' name: 'BYOK' - description: 'Benchmarks endpoints' name: 'Benchmarks' - description: 'Chat completion endpoints' name: 'Chat' - description: 'Task classification market-share endpoints' name: 'Classifications' - description: 'Credit management endpoints' name: 'Credits' - description: 'Datasets endpoints' name: 'Datasets' - description: 'Text embedding endpoints' name: 'Embeddings' - description: 'Endpoint information' name: 'Endpoints' - description: 'Files endpoints' name: 'Files' - description: 'Generation history endpoints' name: 'Generations' - description: 'Guardrails endpoints' name: 'Guardrails' - description: 'Images endpoints' name: 'Images' - description: 'Model information endpoints' name: 'Models' - description: 'OAuth authentication endpoints' name: 'OAuth' - description: 'Observability endpoints' name: 'Observability' - description: 'Organization endpoints' name: 'Organization' - description: 'Presets endpoints' name: 'Presets' - description: 'Provider information endpoints' name: 'Providers' - description: 'Rerank endpoints' name: 'Rerank' - description: 'OpenAI-compatible Responses API endpoints' name: 'Responses' - description: 'SCIM endpoints' name: 'SCIM' - description: 'Speech-to-text endpoints' name: 'STT' x-displayName: 'Transcriptions' - description: 'Text-to-speech endpoints' name: 'TTS' x-displayName: 'Speech' - description: 'Video Generation endpoints' name: 'Video Generation' - description: 'Workspaces endpoints' name: 'Workspaces' - description: 'beta.Analytics endpoints' name: 'beta.Analytics' x-retry-strategy: initialDelay: 500 maxAttempts: 3 maxDelay: 60000 type: 'exponential' x-speakeasy-retries: backoff: exponent: 1.5 initialInterval: 500 maxElapsedTime: 3600000 maxInterval: 60000 retryConnectionErrors: true statusCodes: - '5XX' strategy: 'backoff'