openapi: 3.1.0 info: title: OpenRouter API version: 1.0.0 description: OpenAI-compatible API with additional OpenRouter features contact: name: OpenRouter Support url: https://openrouter.ai/docs email: support@openrouter.ai license: name: MIT url: https://opensource.org/licenses/MIT servers: - url: https://openrouter.ai/api/v1 description: Production server x-speakeasy-server-id: production security: - apiKey: [] externalDocs: description: OpenRouter Documentation url: https://openrouter.ai/docs components: schemas: OpenAIResponsesResponseStatus: type: string enum: - completed - incomplete - in_progress - failed - cancelled - queued FileCitation: type: object properties: type: type: string enum: - file_citation file_id: type: string filename: type: string index: type: number required: - type - file_id - filename - index example: type: file_citation file_id: file-abc123 filename: research_paper.pdf index: 0 URLCitation: type: object properties: type: type: string enum: - url_citation url: type: string title: type: string start_index: type: number end_index: type: number required: - type - url - title - start_index - end_index example: type: url_citation start_index: 0 end_index: 42 title: OpenRouter Documentation url: https://openrouter.ai/docs FilePath: type: object properties: type: type: string enum: - file_path file_id: type: string index: type: number required: - type - file_id - index example: type: file_path file_id: file-xyz789 index: 0 OpenAIResponsesAnnotation: anyOf: - $ref: '#/components/schemas/FileCitation' - $ref: '#/components/schemas/URLCitation' - $ref: '#/components/schemas/FilePath' ResponseOutputText: type: object properties: type: type: string enum: - output_text text: type: string annotations: type: array items: $ref: '#/components/schemas/OpenAIResponsesAnnotation' logprobs: type: array items: type: object properties: token: type: string bytes: type: array items: type: number logprob: type: number top_logprobs: type: array items: type: object properties: token: type: string bytes: type: array items: type: number logprob: type: number required: - token - bytes - logprob required: - token - bytes - logprob - top_logprobs required: - type - text example: type: output_text text: The capital of France is Paris. annotations: - type: url_citation start_index: 0 end_index: 42 title: Paris - Wikipedia url: https://en.wikipedia.org/wiki/Paris OpenAIResponsesRefusalContent: type: object properties: type: type: string enum: - refusal refusal: type: string required: - type - refusal example: type: refusal refusal: I'm sorry, I cannot assist with that request OutputMessage: type: object properties: id: type: string role: type: string enum: - assistant type: type: string enum: - message status: anyOf: - type: string enum: - completed - type: string enum: - incomplete - type: string enum: - in_progress content: type: array items: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' required: - id - role - type - content example: id: msg-abc123 role: assistant type: message status: completed content: - type: output_text text: Hello! How can I help you today? ResponsesOutputMessage: allOf: - $ref: '#/components/schemas/OutputMessage' - type: object properties: {} example: id: msg-123 type: message role: assistant status: completed content: - type: output_text text: Hello! How can I help you? annotations: [] description: An output message item ReasoningTextContent: type: object properties: type: type: string enum: - reasoning_text text: type: string required: - type - text example: type: reasoning_text text: Let me think step by step about this problem... ReasoningSummaryText: type: object properties: type: type: string enum: - summary_text text: type: string required: - type - text example: type: summary_text text: Analyzed the problem using first principles OutputItemReasoning: type: object properties: type: type: string enum: - reasoning id: type: string content: type: array items: $ref: '#/components/schemas/ReasoningTextContent' summary: type: array items: $ref: '#/components/schemas/ReasoningSummaryText' encrypted_content: type: string nullable: true status: anyOf: - type: string enum: - completed - type: string enum: - incomplete - type: string enum: - in_progress required: - type - id - summary example: type: reasoning id: reasoning-abc123 summary: - type: summary_text text: Analyzed the problem using first principles ResponsesOutputItemReasoning: allOf: - $ref: '#/components/schemas/OutputItemReasoning' - type: object properties: content: type: array nullable: true items: $ref: '#/components/schemas/ReasoningTextContent' signature: type: string nullable: true description: A signature for the reasoning content, used for verification example: EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj... format: type: string nullable: true enum: - unknown - openai-responses-v1 - azure-openai-responses-v1 - xai-responses-v1 - anthropic-claude-v1 - google-gemini-v1 description: The format of the reasoning content example: anthropic-claude-v1 example: id: reasoning-123 type: reasoning status: completed summary: - type: summary_text text: Analyzed the problem and found the optimal solution. content: - type: reasoning_text text: First, we analyze the problem... signature: EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj... format: anthropic-claude-v1 description: An output item containing reasoning OutputItemFunctionCall: type: object properties: type: type: string enum: - function_call id: type: string name: type: string arguments: type: string call_id: type: string status: anyOf: - type: string enum: - completed - type: string enum: - incomplete - type: string enum: - in_progress required: - type - name - arguments - call_id example: type: function_call id: call-abc123 name: get_weather arguments: '{"location":"San Francisco","unit":"celsius"}' call_id: call-abc123 ResponsesOutputItemFunctionCall: allOf: - $ref: '#/components/schemas/OutputItemFunctionCall' - type: object properties: {} example: type: function_call id: call-abc123 name: get_weather arguments: '{"location":"San Francisco","unit":"celsius"}' call_id: call-abc123 WebSearchStatus: type: string enum: - completed - searching - in_progress - failed example: completed OutputItemWebSearchCall: type: object properties: type: type: string enum: - web_search_call id: type: string status: $ref: '#/components/schemas/WebSearchStatus' required: - type - id - status example: type: web_search_call id: search-abc123 status: completed ResponsesWebSearchCallOutput: allOf: - $ref: '#/components/schemas/OutputItemWebSearchCall' - type: object properties: {} example: type: web_search_call id: search-abc123 status: completed OutputItemFileSearchCall: type: object properties: type: type: string enum: - file_search_call id: type: string queries: type: array items: type: string status: $ref: '#/components/schemas/WebSearchStatus' required: - type - id - queries - status example: type: file_search_call id: filesearch-abc123 queries: - machine learning algorithms - neural networks status: completed ResponsesOutputItemFileSearchCall: allOf: - $ref: '#/components/schemas/OutputItemFileSearchCall' - type: object properties: {} example: type: file_search_call id: filesearch-abc123 queries: - machine learning algorithms - neural networks status: completed ImageGenerationStatus: type: string enum: - in_progress - completed - generating - failed example: completed OutputItemImageGenerationCall: type: object properties: type: type: string enum: - image_generation_call id: type: string result: type: string nullable: true default: null status: $ref: '#/components/schemas/ImageGenerationStatus' required: - type - id - status example: type: image_generation_call id: imagegen-abc123 result: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== status: completed ResponsesImageGenerationCall: allOf: - $ref: '#/components/schemas/OutputItemImageGenerationCall' - type: object properties: {} example: type: image_generation_call id: imagegen-abc123 result: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== status: completed ResponsesOutputItem: anyOf: - $ref: '#/components/schemas/ResponsesOutputMessage' - $ref: '#/components/schemas/ResponsesOutputItemReasoning' - $ref: '#/components/schemas/ResponsesOutputItemFunctionCall' - $ref: '#/components/schemas/ResponsesWebSearchCallOutput' - $ref: '#/components/schemas/ResponsesOutputItemFileSearchCall' - $ref: '#/components/schemas/ResponsesImageGenerationCall' description: An output item from the response example: id: msg-abc123 role: assistant type: message status: completed content: - type: output_text text: Hello! How can I help you today? ResponsesErrorField: type: object nullable: true properties: code: type: string 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 message: type: string required: - code - message description: Error information returned from the API example: code: rate_limit_exceeded message: Rate limit exceeded. Please try again later. OpenAIResponsesIncompleteDetails: type: object nullable: true properties: reason: type: string enum: - max_output_tokens - content_filter OpenAIResponsesUsage: type: object properties: input_tokens: type: number input_tokens_details: type: object properties: cached_tokens: type: number required: - cached_tokens output_tokens: type: number output_tokens_details: type: object properties: reasoning_tokens: type: number required: - reasoning_tokens total_tokens: type: number required: - input_tokens - input_tokens_details - output_tokens - output_tokens_details - total_tokens OpenResponsesUsage: allOf: - $ref: '#/components/schemas/OpenAIResponsesUsage' - type: object nullable: true properties: cost: type: number nullable: true description: Cost of the completion is_byok: type: boolean description: Whether a request was made using a Bring Your Own Key configuration cost_details: type: object properties: upstream_inference_cost: type: number nullable: true upstream_inference_input_cost: type: number upstream_inference_output_cost: type: number required: - upstream_inference_input_cost - upstream_inference_output_cost description: Token usage information for the response example: input_tokens: 10 output_tokens: 25 total_tokens: 35 input_tokens_details: cached_tokens: 0 output_tokens_details: reasoning_tokens: 0 cost: 0.0012 cost_details: upstream_inference_cost: null upstream_inference_input_cost: 0.0008 upstream_inference_output_cost: 0.0004 ResponseInputText: type: object properties: type: type: string enum: - input_text text: type: string required: - type - text description: Text input content item example: type: input_text text: Hello, how can I help you? ResponseInputImage: type: object properties: type: type: string enum: - input_image detail: type: string enum: - auto - high - low image_url: type: string nullable: true required: - type - detail description: Image input content item example: type: input_image detail: auto image_url: https://example.com/image.jpg ResponseInputFile: type: object properties: type: type: string enum: - input_file file_id: type: string nullable: true file_data: type: string filename: type: string file_url: type: string required: - type description: File input content item example: type: input_file file_id: file-abc123 filename: document.pdf ResponseInputAudio: type: object properties: type: type: string enum: - input_audio input_audio: type: object properties: data: type: string format: type: string enum: - mp3 - wav required: - data - format required: - type - input_audio description: Audio input content item example: type: input_audio input_audio: data: SGVsbG8gV29ybGQ= format: mp3 ToolCallStatus: type: string nullable: true enum: - in_progress - completed - incomplete example: completed OpenAIResponsesInput: anyOf: - type: string - type: array items: anyOf: - type: object properties: type: type: string enum: - message role: anyOf: - type: string enum: - user - type: string enum: - system - type: string enum: - assistant - type: string enum: - developer content: anyOf: - type: array items: oneOf: - $ref: '#/components/schemas/ResponseInputText' - $ref: '#/components/schemas/ResponseInputImage' - $ref: '#/components/schemas/ResponseInputFile' - $ref: '#/components/schemas/ResponseInputAudio' discriminator: propertyName: type mapping: input_text: '#/components/schemas/ResponseInputText' input_image: '#/components/schemas/ResponseInputImage' input_file: '#/components/schemas/ResponseInputFile' input_audio: '#/components/schemas/ResponseInputAudio' - type: string required: - role - content - type: object properties: id: type: string type: type: string enum: - message role: anyOf: - type: string enum: - user - type: string enum: - system - type: string enum: - developer content: type: array items: oneOf: - $ref: '#/components/schemas/ResponseInputText' - $ref: '#/components/schemas/ResponseInputImage' - $ref: '#/components/schemas/ResponseInputFile' - $ref: '#/components/schemas/ResponseInputAudio' discriminator: propertyName: type mapping: input_text: '#/components/schemas/ResponseInputText' input_image: '#/components/schemas/ResponseInputImage' input_file: '#/components/schemas/ResponseInputFile' input_audio: '#/components/schemas/ResponseInputAudio' required: - id - role - content - type: object properties: type: type: string enum: - function_call_output id: type: string nullable: true call_id: type: string output: type: string status: $ref: '#/components/schemas/ToolCallStatus' required: - type - call_id - output - type: object properties: type: type: string enum: - function_call call_id: type: string name: type: string arguments: type: string id: type: string status: $ref: '#/components/schemas/ToolCallStatus' required: - type - call_id - name - arguments - $ref: '#/components/schemas/OutputItemImageGenerationCall' - $ref: '#/components/schemas/OutputMessage' - nullable: true OpenResponsesRequestMetadata: type: object nullable: true additionalProperties: type: string maxLength: 512 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: user_id: '123' session_id: abc-def-ghi OpenResponsesFunctionTool: type: object properties: type: type: string enum: - function name: type: string description: type: string nullable: true strict: type: boolean nullable: true parameters: type: object nullable: true additionalProperties: nullable: true required: - type - name - parameters description: Function tool definition example: type: function name: get_weather description: Get the current weather in a location parameters: type: object properties: location: type: string description: The city and state unit: type: string enum: - celsius - fahrenheit required: - location ResponsesSearchContextSize: type: string enum: - low - medium - high description: Size of the search context for web search tools example: medium WebSearchPreviewToolUserLocation: type: object nullable: true properties: type: type: string enum: - approximate city: type: string nullable: true country: type: string nullable: true region: type: string nullable: true timezone: type: string nullable: true required: - type OpenResponsesWebSearchPreviewTool: type: object properties: type: type: string enum: - web_search_preview search_context_size: $ref: '#/components/schemas/ResponsesSearchContextSize' user_location: $ref: '#/components/schemas/WebSearchPreviewToolUserLocation' required: - type description: Web search preview tool configuration example: type: web_search_preview OpenResponsesWebSearchPreview20250311Tool: type: object properties: type: type: string enum: - web_search_preview_2025_03_11 search_context_size: $ref: '#/components/schemas/ResponsesSearchContextSize' user_location: $ref: '#/components/schemas/WebSearchPreviewToolUserLocation' required: - type description: Web search preview tool configuration (2025-03-11 version) example: type: web_search_preview_2025_03_11 ResponsesWebSearchUserLocation: type: object nullable: true properties: type: type: string enum: - approximate city: type: string nullable: true country: type: string nullable: true region: type: string nullable: true timezone: type: string nullable: true description: User location information for web search example: type: approximate city: San Francisco country: USA region: California timezone: America/Los_Angeles OpenResponsesWebSearchTool: type: object properties: type: type: string enum: - web_search filters: type: object nullable: true properties: allowed_domains: type: array nullable: true items: type: string search_context_size: $ref: '#/components/schemas/ResponsesSearchContextSize' user_location: $ref: '#/components/schemas/ResponsesWebSearchUserLocation' required: - type description: Web search tool configuration example: type: web_search filters: allowed_domains: - example.com OpenResponsesWebSearch20250826Tool: type: object properties: type: type: string enum: - web_search_2025_08_26 filters: type: object nullable: true properties: allowed_domains: type: array nullable: true items: type: string search_context_size: $ref: '#/components/schemas/ResponsesSearchContextSize' user_location: $ref: '#/components/schemas/ResponsesWebSearchUserLocation' required: - type description: Web search tool configuration (2025-08-26 version) example: type: web_search_2025_08_26 filters: allowed_domains: - example.com OpenAIResponsesToolChoice: anyOf: - type: string enum: - auto - type: string enum: - none - type: string enum: - required - type: object properties: type: type: string enum: - function name: type: string required: - type - name - type: object properties: type: anyOf: - type: string enum: - web_search_preview_2025_03_11 - type: string enum: - web_search_preview required: - type OpenAIResponsesPrompt: type: object nullable: true properties: id: type: string variables: type: object nullable: true additionalProperties: anyOf: - type: string - $ref: '#/components/schemas/ResponseInputText' - $ref: '#/components/schemas/ResponseInputImage' - $ref: '#/components/schemas/ResponseInputFile' required: - id OpenAIResponsesReasoningEffort: type: string nullable: true enum: - xhigh - high - medium - low - minimal - none ReasoningSummaryVerbosity: type: string nullable: true enum: - auto - concise - detailed example: auto OpenAIResponsesReasoningConfig: type: object nullable: true properties: effort: $ref: '#/components/schemas/OpenAIResponsesReasoningEffort' summary: $ref: '#/components/schemas/ReasoningSummaryVerbosity' OpenAIResponsesServiceTier: type: string nullable: true enum: - auto - default - flex - priority - scale OpenAIResponsesTruncation: type: string nullable: true enum: - auto - disabled ResponsesFormatText: type: object properties: type: type: string enum: - text required: - type description: Plain text response format example: type: text ResponsesFormatTextJSONSchemaConfig: type: object properties: type: type: string enum: - json_schema name: type: string description: type: string strict: type: boolean nullable: true schema: type: object additionalProperties: nullable: true required: - type - name - schema description: JSON schema constrained response format example: type: json_schema name: user_info description: User information schema schema: type: object properties: name: type: string age: type: number required: - name ResponseFormatTextConfig: anyOf: - $ref: '#/components/schemas/ResponsesFormatText' - $ref: '#/components/schemas/ResponseFormatJSONObject' - $ref: '#/components/schemas/ResponsesFormatTextJSONSchemaConfig' description: Text response format configuration example: type: text ResponseTextConfig: type: object properties: format: $ref: '#/components/schemas/ResponseFormatTextConfig' verbosity: type: string nullable: true enum: - high - low - medium description: Text output configuration including format and verbosity example: format: type: text verbosity: medium OpenAIResponsesNonStreamingResponse: type: object properties: id: type: string object: type: string enum: - response created_at: type: number model: type: string status: $ref: '#/components/schemas/OpenAIResponsesResponseStatus' completed_at: type: number nullable: true output: type: array items: oneOf: - $ref: '#/components/schemas/OutputMessage' - $ref: '#/components/schemas/OutputItemReasoning' - $ref: '#/components/schemas/OutputItemFunctionCall' - $ref: '#/components/schemas/OutputItemWebSearchCall' - $ref: '#/components/schemas/OutputItemFileSearchCall' - $ref: '#/components/schemas/OutputItemImageGenerationCall' discriminator: propertyName: type mapping: message: '#/components/schemas/OutputMessage' reasoning: '#/components/schemas/OutputItemReasoning' function_call: '#/components/schemas/OutputItemFunctionCall' web_search_call: '#/components/schemas/OutputItemWebSearchCall' file_search_call: '#/components/schemas/OutputItemFileSearchCall' image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' user: type: string nullable: true output_text: type: string prompt_cache_key: type: string nullable: true safety_identifier: type: string nullable: true error: $ref: '#/components/schemas/ResponsesErrorField' incomplete_details: $ref: '#/components/schemas/OpenAIResponsesIncompleteDetails' usage: $ref: '#/components/schemas/OpenAIResponsesUsage' max_tool_calls: type: number nullable: true top_logprobs: type: number max_output_tokens: type: number nullable: true temperature: type: number nullable: true top_p: type: number nullable: true presence_penalty: type: number nullable: true frequency_penalty: type: number nullable: true instructions: $ref: '#/components/schemas/OpenAIResponsesInput' metadata: $ref: '#/components/schemas/OpenResponsesRequestMetadata' tools: type: array items: oneOf: - allOf: - $ref: '#/components/schemas/OpenResponsesFunctionTool' - type: object properties: {} description: Function tool definition example: type: function name: get_weather description: Get the current weather in a location parameters: type: object properties: location: type: string description: The city and state unit: type: string enum: - celsius - fahrenheit required: - location - $ref: '#/components/schemas/OpenResponsesWebSearchPreviewTool' - $ref: '#/components/schemas/OpenResponsesWebSearchPreview20250311Tool' - $ref: '#/components/schemas/OpenResponsesWebSearchTool' - $ref: '#/components/schemas/OpenResponsesWebSearch20250826Tool' tool_choice: $ref: '#/components/schemas/OpenAIResponsesToolChoice' parallel_tool_calls: type: boolean prompt: $ref: '#/components/schemas/OpenAIResponsesPrompt' background: type: boolean nullable: true previous_response_id: type: string nullable: true reasoning: $ref: '#/components/schemas/OpenAIResponsesReasoningConfig' service_tier: $ref: '#/components/schemas/OpenAIResponsesServiceTier' store: type: boolean truncation: $ref: '#/components/schemas/OpenAIResponsesTruncation' text: $ref: '#/components/schemas/ResponseTextConfig' 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 OpenResponsesNonStreamingResponse: allOf: - $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' - type: object properties: output: type: array items: $ref: '#/components/schemas/ResponsesOutputItem' usage: $ref: '#/components/schemas/OpenResponsesUsage' description: Complete non-streaming response from the Responses API example: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: completed output: - type: message id: msg-abc123 status: completed role: assistant content: - type: output_text text: Hello! How can I help you today? annotations: [] usage: input_tokens: 10 output_tokens: 25 total_tokens: 35 input_tokens_details: cached_tokens: 0 output_tokens_details: reasoning_tokens: 0 tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null temperature: null top_p: null max_output_tokens: null metadata: null instructions: null OpenResponsesCreatedEvent: type: object properties: type: type: string enum: - response.created response: $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' sequence_number: type: number required: - type - response - sequence_number description: Event emitted when a response is created example: type: response.created response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: in_progress output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 0 OpenResponsesInProgressEvent: type: object properties: type: type: string enum: - response.in_progress response: $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' sequence_number: type: number required: - type - response - sequence_number description: Event emitted when a response is in progress example: type: response.in_progress response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: in_progress output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 1 OpenResponsesCompletedEvent: type: object properties: type: type: string enum: - response.completed response: $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' sequence_number: type: number required: - type - response - sequence_number description: Event emitted when a response has completed successfully example: type: response.completed response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: completed output: - id: item-1 type: message status: completed role: assistant content: - type: output_text text: Hello! How can I help you? annotations: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 10 OpenResponsesIncompleteEvent: type: object properties: type: type: string enum: - response.incomplete response: $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' sequence_number: type: number required: - type - response - sequence_number description: Event emitted when a response is incomplete example: type: response.incomplete response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: incomplete output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 5 OpenResponsesFailedEvent: type: object properties: type: type: string enum: - response.failed response: $ref: '#/components/schemas/OpenAIResponsesNonStreamingResponse' sequence_number: type: number required: - type - response - sequence_number description: Event emitted when a response has failed example: type: response.failed response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: failed output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 3 OpenAIResponsesErrorEvent: type: object properties: type: type: string enum: - error code: type: string nullable: true message: type: string param: type: string nullable: true sequence_number: type: number required: - type - code - message - param - sequence_number description: Event emitted when an error occurs during streaming example: type: error code: rate_limit_exceeded message: Rate limit exceeded. Please try again later. param: null sequence_number: 2 OpenResponsesErrorEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesErrorEvent' - type: object properties: {} description: Event emitted when an error occurs during streaming example: type: error code: rate_limit_exceeded message: Rate limit exceeded. Please try again later. param: null sequence_number: 2 OpenResponsesOutputItemAddedEvent: type: object properties: type: type: string enum: - response.output_item.added output_index: type: number item: oneOf: - $ref: '#/components/schemas/OutputMessage' - $ref: '#/components/schemas/OutputItemReasoning' - $ref: '#/components/schemas/OutputItemFunctionCall' - $ref: '#/components/schemas/OutputItemWebSearchCall' - $ref: '#/components/schemas/OutputItemFileSearchCall' - $ref: '#/components/schemas/OutputItemImageGenerationCall' discriminator: propertyName: type mapping: message: '#/components/schemas/OutputMessage' reasoning: '#/components/schemas/OutputItemReasoning' function_call: '#/components/schemas/OutputItemFunctionCall' web_search_call: '#/components/schemas/OutputItemWebSearchCall' file_search_call: '#/components/schemas/OutputItemFileSearchCall' image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' sequence_number: type: number required: - type - output_index - item - sequence_number description: Event emitted when a new output item is added to the response example: type: response.output_item.added output_index: 0 item: id: item-1 type: message status: in_progress role: assistant content: [] sequence_number: 2 OpenResponsesOutputItemDoneEvent: type: object properties: type: type: string enum: - response.output_item.done output_index: type: number item: oneOf: - $ref: '#/components/schemas/OutputMessage' - $ref: '#/components/schemas/OutputItemReasoning' - $ref: '#/components/schemas/OutputItemFunctionCall' - $ref: '#/components/schemas/OutputItemWebSearchCall' - $ref: '#/components/schemas/OutputItemFileSearchCall' - $ref: '#/components/schemas/OutputItemImageGenerationCall' discriminator: propertyName: type mapping: message: '#/components/schemas/OutputMessage' reasoning: '#/components/schemas/OutputItemReasoning' function_call: '#/components/schemas/OutputItemFunctionCall' web_search_call: '#/components/schemas/OutputItemWebSearchCall' file_search_call: '#/components/schemas/OutputItemFileSearchCall' image_generation_call: '#/components/schemas/OutputItemImageGenerationCall' sequence_number: type: number required: - type - output_index - item - sequence_number description: Event emitted when an output item is complete example: type: response.output_item.done output_index: 0 item: id: item-1 type: message status: completed role: assistant content: - type: output_text text: Hello! How can I help you? annotations: [] sequence_number: 8 OpenResponsesContentPartAddedEvent: type: object properties: type: type: string enum: - response.content_part.added output_index: type: number item_id: type: string content_index: type: number part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' sequence_number: type: number required: - type - output_index - item_id - content_index - part - sequence_number description: Event emitted when a new content part is added to an output item example: type: response.content_part.added output_index: 0 item_id: item-1 content_index: 0 part: type: output_text text: '' annotations: [] sequence_number: 3 OpenResponsesContentPartDoneEvent: type: object properties: type: type: string enum: - response.content_part.done output_index: type: number item_id: type: string content_index: type: number part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' sequence_number: type: number required: - type - output_index - item_id - content_index - part - sequence_number description: Event emitted when a content part is complete example: type: response.content_part.done output_index: 0 item_id: item-1 content_index: 0 part: type: output_text text: Hello! How can I help you? annotations: [] sequence_number: 7 OpenResponsesTopLogprobs: type: object properties: token: type: string logprob: type: number description: Alternative token with its log probability example: token: hello logprob: -0.5 OpenResponsesLogProbs: type: object properties: logprob: type: number token: type: string top_logprobs: type: array items: $ref: '#/components/schemas/OpenResponsesTopLogprobs' required: - logprob - token description: Log probability information for a token example: logprob: -0.1 token: world top_logprobs: - token: hello logprob: -0.5 OpenResponsesTextDeltaEvent: type: object properties: type: type: string enum: - response.output_text.delta logprobs: type: array items: $ref: '#/components/schemas/OpenResponsesLogProbs' output_index: type: number item_id: type: string content_index: type: number delta: type: string sequence_number: type: number required: - type - logprobs - output_index - item_id - content_index - delta - sequence_number description: Event emitted when a text delta is streamed example: type: response.output_text.delta logprobs: [] output_index: 0 item_id: item-1 content_index: 0 delta: Hello sequence_number: 4 OpenResponsesTextDoneEvent: type: object properties: type: type: string enum: - response.output_text.done output_index: type: number item_id: type: string content_index: type: number text: type: string sequence_number: type: number logprobs: type: array items: $ref: '#/components/schemas/OpenResponsesLogProbs' required: - type - output_index - item_id - content_index - text - sequence_number - logprobs description: Event emitted when text streaming is complete example: type: response.output_text.done output_index: 0 item_id: item-1 content_index: 0 text: Hello! How can I help you? sequence_number: 6 logprobs: [] OpenResponsesRefusalDeltaEvent: type: object properties: type: type: string enum: - response.refusal.delta output_index: type: number item_id: type: string content_index: type: number delta: type: string sequence_number: type: number required: - type - output_index - item_id - content_index - delta - sequence_number description: Event emitted when a refusal delta is streamed example: type: response.refusal.delta output_index: 0 item_id: item-1 content_index: 0 delta: I'm sorry sequence_number: 4 OpenResponsesRefusalDoneEvent: type: object properties: type: type: string enum: - response.refusal.done output_index: type: number item_id: type: string content_index: type: number refusal: type: string sequence_number: type: number required: - type - output_index - item_id - content_index - refusal - sequence_number description: Event emitted when refusal streaming is complete example: type: response.refusal.done output_index: 0 item_id: item-1 content_index: 0 refusal: I'm sorry, but I can't assist with that request. sequence_number: 6 OpenResponsesOutputTextAnnotationAddedEvent: type: object properties: type: type: string enum: - response.output_text.annotation.added output_index: type: number item_id: type: string content_index: type: number sequence_number: type: number annotation_index: type: number annotation: $ref: '#/components/schemas/OpenAIResponsesAnnotation' required: - type - output_index - item_id - content_index - sequence_number - annotation_index - annotation description: Event emitted when a text annotation is added to output example: type: response.output_text.annotation.added output_index: 0 item_id: item-1 content_index: 0 sequence_number: 5 annotation_index: 0 annotation: type: url_citation url: https://example.com title: Example start_index: 0 end_index: 7 OpenResponsesFunctionCallArgumentsDeltaEvent: type: object properties: type: type: string enum: - response.function_call_arguments.delta item_id: type: string output_index: type: number delta: type: string sequence_number: type: number required: - type - item_id - output_index - delta - sequence_number description: Event emitted when function call arguments are being streamed example: type: response.function_call_arguments.delta item_id: item-1 output_index: 0 delta: '{"city": "San' sequence_number: 4 OpenResponsesFunctionCallArgumentsDoneEvent: type: object properties: type: type: string enum: - response.function_call_arguments.done item_id: type: string output_index: type: number name: type: string arguments: type: string sequence_number: type: number required: - type - item_id - output_index - name - arguments - sequence_number description: Event emitted when function call arguments streaming is complete example: type: response.function_call_arguments.done item_id: item-1 output_index: 0 name: get_weather arguments: '{"city": "San Francisco", "units": "celsius"}' sequence_number: 6 OpenAIResponsesReasoningDeltaEvent: type: object properties: type: type: string enum: - response.reasoning_text.delta output_index: type: number item_id: type: string content_index: type: number delta: type: string sequence_number: type: number required: - type - output_index - item_id - content_index - delta - sequence_number description: Event emitted when reasoning text delta is streamed example: type: response.reasoning_text.delta output_index: 0 item_id: item-1 content_index: 0 delta: First, we need sequence_number: 4 OpenResponsesReasoningDeltaEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesReasoningDeltaEvent' - type: object properties: {} description: Event emitted when reasoning text delta is streamed example: type: response.reasoning_text.delta output_index: 0 item_id: item-1 content_index: 0 delta: First, we need sequence_number: 4 OpenAIResponsesReasoningDoneEvent: type: object properties: type: type: string enum: - response.reasoning_text.done output_index: type: number item_id: type: string content_index: type: number text: type: string sequence_number: type: number required: - type - output_index - item_id - content_index - text - sequence_number description: Event emitted when reasoning text streaming is complete example: type: response.reasoning_text.done output_index: 0 item_id: item-1 content_index: 0 text: First, we need to identify the key components and then combine them logically. sequence_number: 6 OpenResponsesReasoningDoneEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesReasoningDoneEvent' - type: object properties: {} description: Event emitted when reasoning text streaming is complete example: type: response.reasoning_text.done output_index: 0 item_id: item-1 content_index: 0 text: First, we need to identify the key components and then combine them logically. sequence_number: 6 OpenAIResponsesReasoningSummaryPartAddedEvent: type: object properties: type: type: string enum: - response.reasoning_summary_part.added output_index: type: number item_id: type: string summary_index: type: number part: $ref: '#/components/schemas/ReasoningSummaryText' sequence_number: type: number required: - type - output_index - item_id - summary_index - part - sequence_number description: Event emitted when a reasoning summary part is added example: type: response.reasoning_summary_part.added output_index: 0 item_id: item-1 summary_index: 0 part: type: summary_text text: '' sequence_number: 3 OpenResponsesReasoningSummaryPartAddedEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryPartAddedEvent' - type: object properties: {} description: Event emitted when a reasoning summary part is added example: type: response.reasoning_summary_part.added output_index: 0 item_id: item-1 summary_index: 0 part: type: summary_text text: '' sequence_number: 3 OpenResponsesReasoningSummaryPartDoneEvent: type: object properties: type: type: string enum: - response.reasoning_summary_part.done output_index: type: number item_id: type: string summary_index: type: number part: $ref: '#/components/schemas/ReasoningSummaryText' sequence_number: type: number required: - type - output_index - item_id - summary_index - part - sequence_number description: Event emitted when a reasoning summary part is complete example: type: response.reasoning_summary_part.done output_index: 0 item_id: item-1 summary_index: 0 part: type: summary_text text: Analyzing the problem step by step to find the optimal solution. sequence_number: 7 OpenAIResponsesReasoningSummaryTextDeltaEvent: type: object properties: type: type: string enum: - response.reasoning_summary_text.delta item_id: type: string output_index: type: number summary_index: type: number delta: type: string sequence_number: type: number required: - type - item_id - output_index - summary_index - delta - sequence_number description: Event emitted when reasoning summary text delta is streamed example: type: response.reasoning_summary_text.delta item_id: item-1 output_index: 0 summary_index: 0 delta: Analyzing sequence_number: 4 OpenResponsesReasoningSummaryTextDeltaEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryTextDeltaEvent' - type: object properties: {} description: Event emitted when reasoning summary text delta is streamed example: type: response.reasoning_summary_text.delta item_id: item-1 output_index: 0 summary_index: 0 delta: Analyzing sequence_number: 4 OpenAIResponsesReasoningSummaryTextDoneEvent: type: object properties: type: type: string enum: - response.reasoning_summary_text.done item_id: type: string output_index: type: number summary_index: type: number text: type: string sequence_number: type: number required: - type - item_id - output_index - summary_index - text - sequence_number description: Event emitted when reasoning summary text streaming is complete example: type: response.reasoning_summary_text.done item_id: item-1 output_index: 0 summary_index: 0 text: Analyzing the problem step by step to find the optimal solution. sequence_number: 6 OpenResponsesReasoningSummaryTextDoneEvent: allOf: - $ref: '#/components/schemas/OpenAIResponsesReasoningSummaryTextDoneEvent' - type: object properties: {} description: Event emitted when reasoning summary text streaming is complete example: type: response.reasoning_summary_text.done item_id: item-1 output_index: 0 summary_index: 0 text: Analyzing the problem step by step to find the optimal solution. sequence_number: 6 OpenAIResponsesImageGenCallInProgress: type: object properties: type: type: string enum: - response.image_generation_call.in_progress item_id: type: string output_index: type: number sequence_number: type: number required: - type - item_id - output_index - sequence_number OpenResponsesImageGenCallInProgress: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallInProgress' - type: object properties: {} description: Image generation call in progress example: type: response.image_generation_call.in_progress output_index: 0 sequence_number: 1 item_id: call-123 OpenAIResponsesImageGenCallGenerating: type: object properties: type: type: string enum: - response.image_generation_call.generating item_id: type: string output_index: type: number sequence_number: type: number required: - type - item_id - output_index - sequence_number OpenResponsesImageGenCallGenerating: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallGenerating' - type: object properties: {} description: Image generation call is generating example: type: response.image_generation_call.generating output_index: 0 sequence_number: 2 item_id: call-123 OpenAIResponsesImageGenCallPartialImage: type: object properties: type: type: string enum: - response.image_generation_call.partial_image item_id: type: string output_index: type: number sequence_number: type: number partial_image_b64: type: string partial_image_index: type: number required: - type - item_id - output_index - sequence_number - partial_image_b64 - partial_image_index OpenResponsesImageGenCallPartialImage: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallPartialImage' - type: object properties: {} description: Image generation call with partial image example: type: response.image_generation_call.partial_image output_index: 0 sequence_number: 3 item_id: call-123 partial_image_b64: base64encodedimage... partial_image_index: 0 OpenAIResponsesImageGenCallCompleted: type: object properties: type: type: string enum: - response.image_generation_call.completed item_id: type: string output_index: type: number sequence_number: type: number required: - type - item_id - output_index - sequence_number OpenResponsesImageGenCallCompleted: allOf: - $ref: '#/components/schemas/OpenAIResponsesImageGenCallCompleted' - type: object properties: {} description: Image generation call completed example: type: response.image_generation_call.completed output_index: 0 sequence_number: 4 item_id: call-123 OpenResponsesStreamEvent: oneOf: - allOf: - $ref: '#/components/schemas/OpenResponsesCreatedEvent' - type: object properties: response: $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' description: Event emitted when a response is created example: type: response.created response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: in_progress output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 0 - allOf: - $ref: '#/components/schemas/OpenResponsesInProgressEvent' - type: object properties: response: $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' description: Event emitted when a response is in progress example: type: response.in_progress response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: in_progress output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 1 - allOf: - $ref: '#/components/schemas/OpenResponsesCompletedEvent' - type: object properties: response: $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' description: Event emitted when a response has completed successfully example: type: response.completed response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: completed output: - id: item-1 type: message status: completed role: assistant content: - type: output_text text: Hello! How can I help you? annotations: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 10 - allOf: - $ref: '#/components/schemas/OpenResponsesIncompleteEvent' - type: object properties: response: $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' description: Event emitted when a response is incomplete example: type: response.incomplete response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: incomplete output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 5 - allOf: - $ref: '#/components/schemas/OpenResponsesFailedEvent' - type: object properties: response: $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' description: Event emitted when a response has failed example: type: response.failed response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: failed output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 3 - $ref: '#/components/schemas/OpenResponsesErrorEvent' - allOf: - $ref: '#/components/schemas/OpenResponsesOutputItemAddedEvent' - type: object properties: item: $ref: '#/components/schemas/ResponsesOutputItem' description: Event emitted when a new output item is added to the response example: type: response.output_item.added output_index: 0 item: id: item-1 type: message status: in_progress role: assistant content: [] sequence_number: 2 - allOf: - $ref: '#/components/schemas/OpenResponsesOutputItemDoneEvent' - type: object properties: item: $ref: '#/components/schemas/ResponsesOutputItem' description: Event emitted when an output item is complete example: type: response.output_item.done output_index: 0 item: id: item-1 type: message status: completed role: assistant content: - type: output_text text: Hello! How can I help you? annotations: [] sequence_number: 8 - allOf: - $ref: '#/components/schemas/OpenResponsesContentPartAddedEvent' - type: object properties: part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/ReasoningTextContent' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' description: Event emitted when a new content part is added to an output item example: type: response.content_part.added output_index: 0 item_id: item-1 content_index: 0 part: type: output_text text: '' annotations: [] sequence_number: 3 - allOf: - $ref: '#/components/schemas/OpenResponsesContentPartDoneEvent' - type: object properties: part: anyOf: - $ref: '#/components/schemas/ResponseOutputText' - $ref: '#/components/schemas/ReasoningTextContent' - $ref: '#/components/schemas/OpenAIResponsesRefusalContent' description: Event emitted when a content part is complete example: type: response.content_part.done output_index: 0 item_id: item-1 content_index: 0 part: type: output_text text: Hello! How can I help you? annotations: [] sequence_number: 7 - allOf: - $ref: '#/components/schemas/OpenResponsesTextDeltaEvent' - type: object properties: {} description: Event emitted when a text delta is streamed example: type: response.output_text.delta logprobs: [] output_index: 0 item_id: item-1 content_index: 0 delta: Hello sequence_number: 4 - allOf: - $ref: '#/components/schemas/OpenResponsesTextDoneEvent' - type: object properties: {} description: Event emitted when text streaming is complete example: type: response.output_text.done output_index: 0 item_id: item-1 content_index: 0 text: Hello! How can I help you? sequence_number: 6 logprobs: [] - allOf: - $ref: '#/components/schemas/OpenResponsesRefusalDeltaEvent' - type: object properties: {} description: Event emitted when a refusal delta is streamed example: type: response.refusal.delta output_index: 0 item_id: item-1 content_index: 0 delta: I'm sorry sequence_number: 4 - allOf: - $ref: '#/components/schemas/OpenResponsesRefusalDoneEvent' - type: object properties: {} description: Event emitted when refusal streaming is complete example: type: response.refusal.done output_index: 0 item_id: item-1 content_index: 0 refusal: I'm sorry, but I can't assist with that request. sequence_number: 6 - allOf: - $ref: '#/components/schemas/OpenResponsesOutputTextAnnotationAddedEvent' - type: object properties: {} description: Event emitted when a text annotation is added to output example: type: response.output_text.annotation.added output_index: 0 item_id: item-1 content_index: 0 sequence_number: 5 annotation_index: 0 annotation: type: url_citation url: https://example.com title: Example start_index: 0 end_index: 7 - allOf: - $ref: '#/components/schemas/OpenResponsesFunctionCallArgumentsDeltaEvent' - type: object properties: {} description: Event emitted when function call arguments are being streamed example: type: response.function_call_arguments.delta item_id: item-1 output_index: 0 delta: '{"city": "San' sequence_number: 4 - allOf: - $ref: '#/components/schemas/OpenResponsesFunctionCallArgumentsDoneEvent' - type: object properties: {} description: Event emitted when function call arguments streaming is complete example: type: response.function_call_arguments.done item_id: item-1 output_index: 0 name: get_weather arguments: '{"city": "San Francisco", "units": "celsius"}' sequence_number: 6 - $ref: '#/components/schemas/OpenResponsesReasoningDeltaEvent' - $ref: '#/components/schemas/OpenResponsesReasoningDoneEvent' - $ref: '#/components/schemas/OpenResponsesReasoningSummaryPartAddedEvent' - allOf: - $ref: '#/components/schemas/OpenResponsesReasoningSummaryPartDoneEvent' - type: object properties: {} description: Event emitted when a reasoning summary part is complete example: type: response.reasoning_summary_part.done output_index: 0 item_id: item-1 summary_index: 0 part: type: summary_text text: Analyzing the problem step by step to find the optimal solution. sequence_number: 7 - $ref: '#/components/schemas/OpenResponsesReasoningSummaryTextDeltaEvent' - $ref: '#/components/schemas/OpenResponsesReasoningSummaryTextDoneEvent' - $ref: '#/components/schemas/OpenResponsesImageGenCallInProgress' - $ref: '#/components/schemas/OpenResponsesImageGenCallGenerating' - $ref: '#/components/schemas/OpenResponsesImageGenCallPartialImage' - $ref: '#/components/schemas/OpenResponsesImageGenCallCompleted' description: Union of all possible event types emitted during response streaming example: type: response.created response: id: resp-abc123 object: response created_at: 1704067200 model: gpt-4 status: in_progress output: [] tools: [] tool_choice: auto parallel_tool_calls: true error: null incomplete_details: null metadata: null instructions: null temperature: null top_p: null max_output_tokens: null sequence_number: 0 BadRequestResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for BadRequestResponse example: code: 400 message: Invalid request parameters BadRequestResponse: type: object properties: error: $ref: '#/components/schemas/BadRequestResponseErrorData' user_id: type: string nullable: true required: - error description: Bad Request - Invalid request parameters or malformed input example: error: code: 400 message: Invalid request parameters UnauthorizedResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for UnauthorizedResponse example: code: 401 message: Missing Authentication header UnauthorizedResponse: type: object properties: error: $ref: '#/components/schemas/UnauthorizedResponseErrorData' user_id: type: string nullable: true required: - error description: Unauthorized - Authentication required or invalid credentials example: error: code: 401 message: Missing Authentication header PaymentRequiredResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for PaymentRequiredResponse example: code: 402 message: Insufficient credits. Add more using https://openrouter.ai/credits PaymentRequiredResponse: type: object properties: error: $ref: '#/components/schemas/PaymentRequiredResponseErrorData' user_id: type: string nullable: true required: - error description: Payment Required - Insufficient credits or quota to complete request example: error: code: 402 message: Insufficient credits. Add more using https://openrouter.ai/credits NotFoundResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for NotFoundResponse example: code: 404 message: Resource not found NotFoundResponse: type: object properties: error: $ref: '#/components/schemas/NotFoundResponseErrorData' user_id: type: string nullable: true required: - error description: Not Found - Resource does not exist example: error: code: 404 message: Resource not found RequestTimeoutResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for RequestTimeoutResponse example: code: 408 message: Operation timed out. Please try again later. RequestTimeoutResponse: type: object properties: error: $ref: '#/components/schemas/RequestTimeoutResponseErrorData' user_id: type: string nullable: true required: - error description: Request Timeout - Operation exceeded time limit example: error: code: 408 message: Operation timed out. Please try again later. PayloadTooLargeResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for PayloadTooLargeResponse example: code: 413 message: Request payload too large PayloadTooLargeResponse: type: object properties: error: $ref: '#/components/schemas/PayloadTooLargeResponseErrorData' user_id: type: string nullable: true required: - error description: Payload Too Large - Request payload exceeds size limits example: error: code: 413 message: Request payload too large UnprocessableEntityResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for UnprocessableEntityResponse example: code: 422 message: Invalid argument UnprocessableEntityResponse: type: object properties: error: $ref: '#/components/schemas/UnprocessableEntityResponseErrorData' user_id: type: string nullable: true required: - error description: Unprocessable Entity - Semantic validation failure example: error: code: 422 message: Invalid argument TooManyRequestsResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for TooManyRequestsResponse example: code: 429 message: Rate limit exceeded TooManyRequestsResponse: type: object properties: error: $ref: '#/components/schemas/TooManyRequestsResponseErrorData' user_id: type: string nullable: true required: - error description: Too Many Requests - Rate limit exceeded example: error: code: 429 message: Rate limit exceeded InternalServerResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for InternalServerResponse example: code: 500 message: Internal Server Error InternalServerResponse: type: object properties: error: $ref: '#/components/schemas/InternalServerResponseErrorData' user_id: type: string nullable: true required: - error description: Internal Server Error - Unexpected server error example: error: code: 500 message: Internal Server Error BadGatewayResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for BadGatewayResponse example: code: 502 message: Provider returned error BadGatewayResponse: type: object properties: error: $ref: '#/components/schemas/BadGatewayResponseErrorData' user_id: type: string nullable: true required: - error description: Bad Gateway - Provider/upstream API failure example: error: code: 502 message: Provider returned error ServiceUnavailableResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for ServiceUnavailableResponse example: code: 503 message: Service temporarily unavailable ServiceUnavailableResponse: type: object properties: error: $ref: '#/components/schemas/ServiceUnavailableResponseErrorData' user_id: type: string nullable: true required: - error description: Service Unavailable - Service temporarily unavailable example: error: code: 503 message: Service temporarily unavailable EdgeNetworkTimeoutResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for EdgeNetworkTimeoutResponse example: code: 524 message: Request timed out. Please try again later. EdgeNetworkTimeoutResponse: type: object properties: error: $ref: '#/components/schemas/EdgeNetworkTimeoutResponseErrorData' user_id: type: string nullable: true required: - error description: Infrastructure Timeout - Provider request timed out at edge network example: error: code: 524 message: Request timed out. Please try again later. ProviderOverloadedResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for ProviderOverloadedResponse example: code: 529 message: Provider returned error ProviderOverloadedResponse: type: object properties: error: $ref: '#/components/schemas/ProviderOverloadedResponseErrorData' user_id: type: string nullable: true required: - error description: Provider Overloaded - Provider is temporarily overloaded example: error: code: 529 message: Provider returned error OpenResponsesReasoning: allOf: - $ref: '#/components/schemas/OutputItemReasoning' - type: object properties: content: type: array nullable: true items: $ref: '#/components/schemas/ReasoningTextContent' signature: type: string nullable: true format: type: string nullable: true enum: - unknown - openai-responses-v1 - azure-openai-responses-v1 - xai-responses-v1 - anthropic-claude-v1 - google-gemini-v1 example: type: reasoning id: reasoning-abc123 summary: - type: summary_text text: Step by step analysis description: Reasoning output item with signature and format extensions ResponseInputVideo: type: object properties: type: type: string enum: - input_video video_url: type: string description: A base64 data URL or remote URL that resolves to a video file required: - type - video_url description: Video input content item example: type: input_video video_url: https://example.com/video.mp4 OpenResponsesEasyInputMessage: type: object properties: type: type: string enum: - message role: anyOf: - type: string enum: - user - type: string enum: - system - type: string enum: - assistant - type: string enum: - developer content: anyOf: - type: array items: oneOf: - $ref: '#/components/schemas/ResponseInputText' - allOf: - $ref: '#/components/schemas/ResponseInputImage' - type: object properties: {} description: Image input content item example: type: input_image detail: auto image_url: https://example.com/image.jpg - $ref: '#/components/schemas/ResponseInputFile' - $ref: '#/components/schemas/ResponseInputAudio' - $ref: '#/components/schemas/ResponseInputVideo' - type: string required: - role - content OpenResponsesInputMessageItem: type: object properties: id: type: string type: type: string enum: - message role: anyOf: - type: string enum: - user - type: string enum: - system - type: string enum: - developer content: type: array items: oneOf: - $ref: '#/components/schemas/ResponseInputText' - allOf: - $ref: '#/components/schemas/ResponseInputImage' - type: object properties: {} description: Image input content item example: type: input_image detail: auto image_url: https://example.com/image.jpg - $ref: '#/components/schemas/ResponseInputFile' - $ref: '#/components/schemas/ResponseInputAudio' - $ref: '#/components/schemas/ResponseInputVideo' required: - role - content OpenResponsesFunctionToolCall: type: object properties: type: type: string enum: - function_call call_id: type: string name: type: string arguments: type: string id: type: string status: $ref: '#/components/schemas/ToolCallStatus' required: - type - call_id - name - arguments - id description: A function call initiated by the model example: id: call-abc123 type: function_call call_id: call-abc123 name: get_weather arguments: '{"location":"San Francisco"}' status: completed OpenResponsesFunctionCallOutput: type: object properties: type: type: string enum: - function_call_output id: type: string nullable: true call_id: type: string output: type: string status: $ref: '#/components/schemas/ToolCallStatus' required: - type - call_id - output description: The output from a function call execution example: type: function_call_output id: output-abc123 call_id: call-abc123 output: '{"temperature":72,"conditions":"sunny"}' status: completed OpenResponsesInput: anyOf: - type: string - type: array items: anyOf: - $ref: '#/components/schemas/OpenResponsesReasoning' - $ref: '#/components/schemas/OpenResponsesEasyInputMessage' - $ref: '#/components/schemas/OpenResponsesInputMessageItem' - $ref: '#/components/schemas/OpenResponsesFunctionToolCall' - $ref: '#/components/schemas/OpenResponsesFunctionCallOutput' - $ref: '#/components/schemas/ResponsesOutputMessage' - $ref: '#/components/schemas/ResponsesOutputItemReasoning' - $ref: '#/components/schemas/ResponsesOutputItemFunctionCall' - $ref: '#/components/schemas/ResponsesWebSearchCallOutput' - $ref: '#/components/schemas/ResponsesOutputItemFileSearchCall' - $ref: '#/components/schemas/ResponsesImageGenerationCall' description: Input for a response request - can be a string or array of items example: - role: user content: What is the weather today? OpenResponsesResponseText: allOf: - $ref: '#/components/schemas/ResponseTextConfig' - type: object properties: {} description: Text output configuration including format and verbosity example: format: type: text verbosity: medium OpenResponsesReasoningConfig: allOf: - $ref: '#/components/schemas/OpenAIResponsesReasoningConfig' - type: object nullable: true properties: max_tokens: type: number nullable: true enabled: type: boolean nullable: true description: Configuration for reasoning mode in the response example: summary: auto enabled: true ResponsesOutputModality: type: string enum: - text - image OpenAIResponsesIncludable: type: string enum: - file_search_call.results - message.input_image.image_url - computer_call_output.output.image_url - reasoning.encrypted_content - code_interpreter_call.outputs DataCollection: type: string nullable: true enum: - deny - allow description: >- Data collection setting. If no available model provider meets the requirement, your request will return an error. - allow: (default) allow providers which store user data non-transiently and may train on it - deny: use only providers which do not collect user data. example: allow ProviderName: type: string enum: - AI21 - AionLabs - Alibaba - Ambient - Amazon Bedrock - Amazon Nova - Anthropic - Arcee AI - AtlasCloud - Avian - Azure - BaseTen - BytePlus - Black Forest Labs - Cerebras - Chutes - Cirrascale - Clarifai - Cloudflare - Cohere - Crusoe - DeepInfra - DeepSeek - Featherless - Fireworks - Friendli - GMICloud - Google - Google AI Studio - Groq - Hyperbolic - Inception - Inceptron - InferenceNet - Ionstream - Infermatic - Io Net - Inflection - Liquid - Mara - Mancer 2 - Minimax - ModelRun - Mistral - Modular - Moonshot AI - Morph - NCompass - Nebius - NextBit - Novita - Nvidia - OpenAI - OpenInference - Parasail - Perplexity - Phala - Relace - SambaNova - Seed - SiliconFlow - Sourceful - StepFun - Stealth - StreamLake - Switchpoint - Together - Upstage - Venice - WandB - Xiaomi - xAI - Z.AI - FakeProvider example: OpenAI Quantization: type: string enum: - int4 - int8 - fp4 - fp6 - fp8 - fp16 - bf16 - fp32 - unknown example: fp16 ProviderSort: type: string enum: - price - throughput - latency description: The provider sorting strategy (price, throughput, latency) example: price ProviderSortConfig: type: object properties: by: type: string nullable: true enum: - price - throughput - latency description: The provider sorting strategy (price, throughput, latency) example: price partition: type: string nullable: true enum: - model - none 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. example: model description: The provider sorting strategy (price, throughput, latency) example: by: price partition: model BigNumberUnion: type: string description: Price per million prompt tokens example: 1000 PercentileThroughputCutoffs: type: object properties: p50: type: number nullable: true description: Minimum p50 throughput (tokens/sec) p75: type: number nullable: true description: Minimum p75 throughput (tokens/sec) p90: type: number nullable: true description: Minimum p90 throughput (tokens/sec) p99: type: number nullable: true description: Minimum p99 throughput (tokens/sec) description: Percentile-based throughput cutoffs. All specified cutoffs must be met for an endpoint to be preferred. example: p50: 100 p90: 50 PreferredMinThroughput: anyOf: - type: number - $ref: '#/components/schemas/PercentileThroughputCutoffs' - nullable: true 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 PercentileLatencyCutoffs: type: object properties: p50: type: number nullable: true description: Maximum p50 latency (seconds) p75: type: number nullable: true description: Maximum p75 latency (seconds) p90: type: number nullable: true description: Maximum p90 latency (seconds) p99: type: number nullable: true description: Maximum p99 latency (seconds) description: Percentile-based latency cutoffs. All specified cutoffs must be met for an endpoint to be preferred. example: p50: 5 p90: 10 PreferredMaxLatency: anyOf: - type: number - $ref: '#/components/schemas/PercentileLatencyCutoffs' - nullable: true 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 WebSearchEngine: type: string enum: - native - exa description: The search engine to use for web search. PDFParserEngine: type: string enum: - mistral-ocr - pdf-text - native description: The engine to use for parsing PDF files. PDFParserOptions: type: object properties: engine: $ref: '#/components/schemas/PDFParserEngine' description: Options for PDF parsing. OpenResponsesRequest: type: object properties: input: $ref: '#/components/schemas/OpenResponsesInput' instructions: type: string nullable: true metadata: $ref: '#/components/schemas/OpenResponsesRequestMetadata' tools: type: array items: oneOf: - allOf: - $ref: '#/components/schemas/OpenResponsesFunctionTool' - type: object properties: {} description: Function tool definition example: type: function name: get_weather description: Get the current weather in a location parameters: type: object properties: location: type: string description: The city and state unit: type: string enum: - celsius - fahrenheit required: - location - $ref: '#/components/schemas/OpenResponsesWebSearchPreviewTool' - $ref: '#/components/schemas/OpenResponsesWebSearchPreview20250311Tool' - $ref: '#/components/schemas/OpenResponsesWebSearchTool' - $ref: '#/components/schemas/OpenResponsesWebSearch20250826Tool' tool_choice: $ref: '#/components/schemas/OpenAIResponsesToolChoice' parallel_tool_calls: type: boolean nullable: true model: type: string models: type: array items: type: string text: $ref: '#/components/schemas/OpenResponsesResponseText' reasoning: $ref: '#/components/schemas/OpenResponsesReasoningConfig' max_output_tokens: type: number nullable: true temperature: type: number nullable: true minimum: 0 maximum: 2 top_p: type: number nullable: true minimum: 0 top_logprobs: type: integer nullable: true minimum: 0 maximum: 20 max_tool_calls: type: integer nullable: true presence_penalty: type: number nullable: true minimum: -2 maximum: 2 frequency_penalty: type: number nullable: true minimum: -2 maximum: 2 top_k: type: number image_config: type: object additionalProperties: anyOf: - type: string - type: number description: >- Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/features/multimodal/image-generation for more details. example: aspect_ratio: '16:9' modalities: type: array items: $ref: '#/components/schemas/ResponsesOutputModality' description: Output modalities for the response. Supported values are "text" and "image". example: - text - image prompt_cache_key: type: string nullable: true previous_response_id: type: string nullable: true prompt: $ref: '#/components/schemas/OpenAIResponsesPrompt' include: type: array nullable: true items: $ref: '#/components/schemas/OpenAIResponsesIncludable' background: type: boolean nullable: true safety_identifier: type: string nullable: true store: type: boolean const: false default: false service_tier: type: string enum: - auto default: auto truncation: allOf: - $ref: '#/components/schemas/OpenAIResponsesTruncation' - example: auto stream: type: boolean default: false provider: type: object nullable: true properties: allow_fallbacks: type: boolean nullable: true description: > Whether to allow backup providers to serve requests - true: (default) when the primary provider (or your custom providers in "order") is unavailable, use the next best provider. - false: use only the primary/custom provider, and return the upstream error if it's unavailable. require_parameters: type: boolean nullable: true 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. data_collection: $ref: '#/components/schemas/DataCollection' zdr: type: boolean nullable: true 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 enforce_distillable_text: type: boolean nullable: true 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 order: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string 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. only: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. ignore: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. quantizations: type: array nullable: true items: $ref: '#/components/schemas/Quantization' description: A list of quantization levels to filter the provider by. sort: anyOf: - $ref: '#/components/schemas/ProviderSort' - $ref: '#/components/schemas/ProviderSortConfig' - nullable: true description: >- The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed. example: price max_price: type: object properties: prompt: $ref: '#/components/schemas/BigNumberUnion' completion: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per million completion tokens image: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per image audio: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per audio unit request: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per request description: >- The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. preferred_min_throughput: $ref: '#/components/schemas/PreferredMinThroughput' preferred_max_latency: $ref: '#/components/schemas/PreferredMaxLatency' additionalProperties: false description: When multiple model providers are available, optionally indicate your routing preference. plugins: type: array items: oneOf: - type: object properties: id: type: string enum: - auto-router enabled: type: boolean description: Set to false to disable the auto-router plugin for this request. Defaults to true. allowed_models: type: array items: type: string 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/* required: - id - type: object properties: id: type: string enum: - moderation required: - id - type: object properties: id: type: string enum: - web enabled: type: boolean description: Set to false to disable the web-search plugin for this request. Defaults to true. max_results: type: number search_prompt: type: string engine: $ref: '#/components/schemas/WebSearchEngine' required: - id - type: object properties: id: type: string enum: - file-parser enabled: type: boolean description: Set to false to disable the file-parser plugin for this request. Defaults to true. pdf: $ref: '#/components/schemas/PDFParserOptions' required: - id - type: object properties: id: type: string enum: - response-healing enabled: type: boolean description: Set to false to disable the response-healing plugin for this request. Defaults to true. required: - id description: Plugins you want to enable for this request, including their settings. route: type: string nullable: true enum: - fallback - sort 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"). x-speakeasy-deprecation-message: Use providers.sort.partition instead. x-speakeasy-ignore: true x-fern-ignore: true user: type: string maxLength: 128 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 128 characters. session_id: type: string maxLength: 128 description: >- A unique identifier for grouping related requests (e.g., a conversation or agent workflow) for observability. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 128 characters. trace: type: object properties: trace_id: type: string trace_name: type: string span_name: type: string generation_name: type: string parent_span_id: type: string additionalProperties: nullable: true 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. description: Request schema for Responses endpoint example: model: anthropic/claude-4.5-sonnet-20250929 input: - type: message content: Hello, how are you? role: user temperature: 0.7 top_p: 0.9 tools: - type: function name: get_current_weather description: Get the current weather in a given location parameters: type: object properties: location: type: string BaseAnthropicMessagesResponse: type: object properties: id: type: string type: type: string enum: - message role: type: string enum: - assistant content: type: array items: oneOf: - type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - file_id - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - file_id - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - file_id - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index required: - type - text - citations - type: object properties: type: type: string enum: - tool_use id: type: string name: type: string input: nullable: true required: - type - id - name - type: object properties: type: type: string enum: - thinking thinking: type: string signature: type: string required: - type - thinking - signature - type: object properties: type: type: string enum: - redacted_thinking data: type: string required: - type - data - type: object properties: type: type: string enum: - server_tool_use id: type: string name: type: string enum: - web_search input: nullable: true required: - type - id - name - type: object properties: type: type: string enum: - web_search_tool_result tool_use_id: type: string content: anyOf: - type: array items: type: object properties: type: type: string enum: - web_search_result encrypted_content: type: string page_age: type: string nullable: true title: type: string url: type: string required: - type - encrypted_content - page_age - title - url - type: object properties: type: type: string enum: - web_search_tool_result_error error_code: type: string enum: - invalid_tool_input - unavailable - max_uses_exceeded - too_many_requests - query_too_long required: - type - error_code required: - type - tool_use_id - content model: type: string stop_reason: type: string nullable: true enum: - end_turn - max_tokens - stop_sequence - tool_use - pause_turn - refusal stop_sequence: type: string nullable: true usage: type: object properties: input_tokens: type: number output_tokens: type: number cache_creation_input_tokens: type: number nullable: true cache_read_input_tokens: type: number nullable: true cache_creation: type: object nullable: true properties: ephemeral_5m_input_tokens: type: number ephemeral_1h_input_tokens: type: number required: - ephemeral_5m_input_tokens - ephemeral_1h_input_tokens inference_geo: type: string nullable: true server_tool_use: type: object nullable: true properties: web_search_requests: type: number required: - web_search_requests service_tier: type: string nullable: true enum: - standard - priority - batch required: - input_tokens - output_tokens - cache_creation_input_tokens - cache_read_input_tokens - cache_creation - inference_geo - server_tool_use - service_tier required: - id - type - role - content - model - stop_reason - stop_sequence - usage AnthropicMessagesResponse: allOf: - $ref: '#/components/schemas/BaseAnthropicMessagesResponse' - type: object properties: {} description: Non-streaming response from the Anthropic Messages API with OpenRouter extensions example: id: msg_01XFDUDYJgAACzvnptvVoYEL type: message role: assistant content: - type: text text: Hello! I'm doing well, thank you for asking. citations: null model: claude-sonnet-4-5-20250929 stop_reason: end_turn stop_sequence: null usage: input_tokens: 12 output_tokens: 15 cache_creation_input_tokens: null cache_read_input_tokens: null cache_creation: null inference_geo: null server_tool_use: null service_tier: standard AnthropicMessagesStreamEvent: oneOf: - type: object properties: type: type: string enum: - message_start message: type: object properties: id: type: string type: type: string enum: - message role: type: string enum: - assistant content: type: array items: oneOf: - type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - file_id - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - file_id - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - file_id - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index required: - type - text - citations - type: object properties: type: type: string enum: - tool_use id: type: string name: type: string input: nullable: true required: - type - id - name - type: object properties: type: type: string enum: - thinking thinking: type: string signature: type: string required: - type - thinking - signature - type: object properties: type: type: string enum: - redacted_thinking data: type: string required: - type - data - type: object properties: type: type: string enum: - server_tool_use id: type: string name: type: string enum: - web_search input: nullable: true required: - type - id - name - type: object properties: type: type: string enum: - web_search_tool_result tool_use_id: type: string content: anyOf: - type: array items: type: object properties: type: type: string enum: - web_search_result encrypted_content: type: string page_age: type: string nullable: true title: type: string url: type: string required: - type - encrypted_content - page_age - title - url - type: object properties: type: type: string enum: - web_search_tool_result_error error_code: type: string enum: - invalid_tool_input - unavailable - max_uses_exceeded - too_many_requests - query_too_long required: - type - error_code required: - type - tool_use_id - content model: type: string stop_reason: nullable: true stop_sequence: nullable: true usage: type: object properties: input_tokens: type: number output_tokens: type: number cache_creation_input_tokens: type: number nullable: true cache_read_input_tokens: type: number nullable: true cache_creation: type: object nullable: true properties: ephemeral_5m_input_tokens: type: number ephemeral_1h_input_tokens: type: number required: - ephemeral_5m_input_tokens - ephemeral_1h_input_tokens inference_geo: type: string nullable: true server_tool_use: type: object nullable: true properties: web_search_requests: type: number required: - web_search_requests service_tier: type: string nullable: true enum: - standard - priority - batch required: - input_tokens - output_tokens - cache_creation_input_tokens - cache_read_input_tokens - cache_creation - inference_geo - server_tool_use - service_tier required: - id - type - role - content - model - stop_reason - stop_sequence - usage required: - type - message - type: object properties: type: type: string enum: - message_delta delta: type: object properties: stop_reason: type: string nullable: true enum: - end_turn - max_tokens - stop_sequence - tool_use - pause_turn - refusal stop_sequence: type: string nullable: true required: - stop_reason - stop_sequence usage: type: object properties: input_tokens: type: number nullable: true output_tokens: type: number cache_creation_input_tokens: type: number nullable: true cache_read_input_tokens: type: number nullable: true server_tool_use: type: object nullable: true properties: web_search_requests: type: number required: - web_search_requests required: - input_tokens - output_tokens - cache_creation_input_tokens - cache_read_input_tokens - server_tool_use required: - type - delta - usage - type: object properties: type: type: string enum: - message_stop required: - type - type: object properties: type: type: string enum: - content_block_start index: type: number content_block: oneOf: - type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - file_id - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - file_id - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - file_id - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index required: - type - text - citations - type: object properties: type: type: string enum: - tool_use id: type: string name: type: string input: nullable: true required: - type - id - name - type: object properties: type: type: string enum: - thinking thinking: type: string signature: type: string required: - type - thinking - signature - type: object properties: type: type: string enum: - redacted_thinking data: type: string required: - type - data - type: object properties: type: type: string enum: - server_tool_use id: type: string name: type: string enum: - web_search input: nullable: true required: - type - id - name - type: object properties: type: type: string enum: - web_search_tool_result tool_use_id: type: string content: anyOf: - type: array items: type: object properties: type: type: string enum: - web_search_result encrypted_content: type: string page_age: type: string nullable: true title: type: string url: type: string required: - type - encrypted_content - page_age - title - url - type: object properties: type: type: string enum: - web_search_tool_result_error error_code: type: string enum: - invalid_tool_input - unavailable - max_uses_exceeded - too_many_requests - query_too_long required: - type - error_code required: - type - tool_use_id - content required: - type - index - content_block - type: object properties: type: type: string enum: - content_block_delta index: type: number delta: oneOf: - type: object properties: type: type: string enum: - text_delta text: type: string required: - type - text - type: object properties: type: type: string enum: - input_json_delta partial_json: type: string required: - type - partial_json - type: object properties: type: type: string enum: - thinking_delta thinking: type: string required: - type - thinking - type: object properties: type: type: string enum: - signature_delta signature: type: string required: - type - signature - type: object properties: type: type: string enum: - citations_delta citation: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - file_id - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - file_id - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number file_id: type: string nullable: true required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - file_id - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index required: - type - citation required: - type - index - delta - type: object properties: type: type: string enum: - content_block_stop index: type: number required: - type - index - type: object properties: type: type: string enum: - ping required: - type - type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error description: Union of all possible streaming events OpenRouterAnthropicMessageParam: type: object properties: role: type: string enum: - user - assistant content: anyOf: - type: string - type: array items: oneOf: - type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - text - type: object properties: type: type: string enum: - image source: oneOf: - type: object properties: type: type: string enum: - base64 media_type: type: string enum: - image/jpeg - image/png - image/gif - image/webp data: type: string required: - type - media_type - data - type: object properties: type: type: string enum: - url url: type: string required: - type - url cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - source - type: object properties: type: type: string enum: - document source: oneOf: - type: object properties: type: type: string enum: - base64 media_type: type: string enum: - application/pdf data: type: string required: - type - media_type - data - type: object properties: type: type: string enum: - text media_type: type: string enum: - text/plain data: type: string required: - type - media_type - data - type: object properties: type: type: string enum: - content content: anyOf: - type: string - type: array items: oneOf: - type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - text - type: object properties: type: type: string enum: - image source: oneOf: - type: object properties: type: type: string enum: - base64 media_type: type: string enum: - image/jpeg - image/png - image/gif - image/webp data: type: string required: - type - media_type - data - type: object properties: type: type: string enum: - url url: type: string required: - type - url cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - source required: - type - content - type: object properties: type: type: string enum: - url url: type: string required: - type - url citations: type: object nullable: true properties: enabled: type: boolean context: type: string nullable: true title: type: string nullable: true cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - source - type: object properties: type: type: string enum: - tool_use id: type: string name: type: string input: nullable: true cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - id - name - type: object properties: type: type: string enum: - tool_result tool_use_id: type: string content: anyOf: - type: string - type: array items: anyOf: - type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - text - type: object properties: type: type: string enum: - image source: oneOf: - type: object properties: type: type: string enum: - base64 media_type: type: string enum: - image/jpeg - image/png - image/gif - image/webp data: type: string required: - type - media_type - data - type: object properties: type: type: string enum: - url url: type: string required: - type - url cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - source is_error: type: boolean cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - tool_use_id - type: object properties: type: type: string enum: - thinking thinking: type: string signature: type: string required: - type - thinking - signature - type: object properties: type: type: string enum: - redacted_thinking data: type: string required: - type - data - type: object properties: type: type: string enum: - server_tool_use id: type: string name: type: string enum: - web_search input: nullable: true cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - id - name - type: object properties: type: type: string enum: - web_search_tool_result tool_use_id: type: string content: anyOf: - type: array items: type: object properties: type: type: string enum: - web_search_result encrypted_content: type: string title: type: string url: type: string page_age: type: string nullable: true required: - type - encrypted_content - title - url - type: object properties: type: type: string enum: - web_search_tool_result_error error_code: type: string enum: - invalid_tool_input - unavailable - max_uses_exceeded - too_many_requests - query_too_long required: - type - error_code cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - tool_use_id - content - type: object properties: type: type: string enum: - search_result source: type: string title: type: string content: type: array items: type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - text citations: type: object properties: enabled: type: boolean cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - source - title - content required: - role - content description: Anthropic message with OpenRouter extensions AnthropicOutputConfig: type: object properties: effort: type: string nullable: true enum: - low - medium - high - max 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`, or `max`. example: medium description: Configuration for controlling output behavior. Currently supports the effort parameter for Claude Opus 4.5. AnthropicMessagesRequest: type: object properties: model: type: string max_tokens: type: number messages: type: array items: $ref: '#/components/schemas/OpenRouterAnthropicMessageParam' system: anyOf: - type: string - type: array items: type: object properties: type: type: string enum: - text text: type: string citations: type: array nullable: true items: oneOf: - type: object properties: type: type: string enum: - char_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_char_index: type: number end_char_index: type: number required: - type - cited_text - document_index - document_title - start_char_index - end_char_index - type: object properties: type: type: string enum: - page_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_page_number: type: number end_page_number: type: number required: - type - cited_text - document_index - document_title - start_page_number - end_page_number - type: object properties: type: type: string enum: - content_block_location cited_text: type: string document_index: type: number document_title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - document_index - document_title - start_block_index - end_block_index - type: object properties: type: type: string enum: - web_search_result_location cited_text: type: string encrypted_index: type: string title: type: string nullable: true url: type: string required: - type - cited_text - encrypted_index - title - url - type: object properties: type: type: string enum: - search_result_location cited_text: type: string search_result_index: type: number source: type: string title: type: string nullable: true start_block_index: type: number end_block_index: type: number required: - type - cited_text - search_result_index - source - title - start_block_index - end_block_index cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - text metadata: type: object properties: user_id: type: string nullable: true stop_sequences: type: array items: type: string stream: type: boolean temperature: type: number top_p: type: number top_k: type: number tools: type: array items: oneOf: - type: object properties: name: type: string description: type: string input_schema: type: object properties: type: type: string enum: - object properties: nullable: true required: type: array nullable: true items: type: string required: - type additionalProperties: nullable: true type: type: string enum: - custom cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - name - input_schema - type: object properties: type: type: string enum: - bash_20250124 name: type: string enum: - bash cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - name - type: object properties: type: type: string enum: - text_editor_20250124 name: type: string enum: - str_replace_editor cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - name - type: object properties: type: type: string enum: - web_search_20250305 name: type: string enum: - web_search allowed_domains: type: array nullable: true items: type: string blocked_domains: type: array nullable: true items: type: string max_uses: type: number nullable: true user_location: type: object nullable: true properties: type: type: string enum: - approximate city: type: string nullable: true country: type: string nullable: true region: type: string nullable: true timezone: type: string nullable: true required: - type cache_control: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type required: - type - name tool_choice: oneOf: - type: object properties: type: type: string enum: - auto disable_parallel_tool_use: type: boolean required: - type - type: object properties: type: type: string enum: - any disable_parallel_tool_use: type: boolean required: - type - type: object properties: type: type: string enum: - none required: - type - type: object properties: type: type: string enum: - tool name: type: string disable_parallel_tool_use: type: boolean required: - type - name thinking: oneOf: - type: object properties: type: type: string enum: - enabled budget_tokens: type: number required: - type - budget_tokens - type: object properties: type: type: string enum: - disabled required: - type - type: object properties: type: type: string enum: - adaptive required: - type service_tier: type: string enum: - auto - standard_only provider: type: object nullable: true properties: allow_fallbacks: type: boolean nullable: true description: > Whether to allow backup providers to serve requests - true: (default) when the primary provider (or your custom providers in "order") is unavailable, use the next best provider. - false: use only the primary/custom provider, and return the upstream error if it's unavailable. require_parameters: type: boolean nullable: true 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. data_collection: $ref: '#/components/schemas/DataCollection' zdr: type: boolean nullable: true 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 enforce_distillable_text: type: boolean nullable: true 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 order: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string 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. only: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. ignore: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. quantizations: type: array nullable: true items: $ref: '#/components/schemas/Quantization' description: A list of quantization levels to filter the provider by. sort: allOf: - $ref: '#/components/schemas/ProviderSort' - anyOf: - $ref: '#/components/schemas/ProviderSort' - $ref: '#/components/schemas/ProviderSortConfig' - nullable: true description: >- The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed. max_price: type: object properties: prompt: $ref: '#/components/schemas/BigNumberUnion' completion: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per million completion tokens image: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per image audio: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per audio unit request: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per request description: >- The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. preferred_min_throughput: $ref: '#/components/schemas/PreferredMinThroughput' preferred_max_latency: $ref: '#/components/schemas/PreferredMaxLatency' additionalProperties: false description: When multiple model providers are available, optionally indicate your routing preference. plugins: type: array items: oneOf: - type: object properties: id: type: string enum: - auto-router enabled: type: boolean description: Set to false to disable the auto-router plugin for this request. Defaults to true. allowed_models: type: array items: type: string 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/* required: - id - type: object properties: id: type: string enum: - moderation required: - id - type: object properties: id: type: string enum: - web enabled: type: boolean description: Set to false to disable the web-search plugin for this request. Defaults to true. max_results: type: number search_prompt: type: string engine: $ref: '#/components/schemas/WebSearchEngine' required: - id - type: object properties: id: type: string enum: - file-parser enabled: type: boolean description: Set to false to disable the file-parser plugin for this request. Defaults to true. pdf: $ref: '#/components/schemas/PDFParserOptions' required: - id - type: object properties: id: type: string enum: - response-healing enabled: type: boolean description: Set to false to disable the response-healing plugin for this request. Defaults to true. required: - id description: Plugins you want to enable for this request, including their settings. route: type: string nullable: true enum: - fallback - sort 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"). x-speakeasy-deprecation-message: Use providers.sort.partition instead. x-speakeasy-ignore: true x-fern-ignore: true user: type: string maxLength: 128 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 128 characters. session_id: type: string maxLength: 128 description: >- A unique identifier for grouping related requests (e.g., a conversation or agent workflow) for observability. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 128 characters. trace: type: object properties: trace_id: type: string trace_name: type: string span_name: type: string generation_name: type: string parent_span_id: type: string additionalProperties: nullable: true 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. models: type: array items: type: string output_config: $ref: '#/components/schemas/AnthropicOutputConfig' required: - model - max_tokens - messages description: Request schema for Anthropic Messages API endpoint example: model: anthropic/claude-4.5-sonnet-20250929 max_tokens: 1024 messages: - role: user content: Hello, how are you? temperature: 0.7 ActivityItem: type: object properties: date: type: string description: Date of the activity (YYYY-MM-DD format) example: '2025-08-24' model: type: string description: Model slug (e.g., "openai/gpt-4.1") example: openai/gpt-4.1 model_permaslug: type: string description: Model permaslug (e.g., "openai/gpt-4.1-2025-04-14") example: openai/gpt-4.1-2025-04-14 endpoint_id: type: string description: Unique identifier for the endpoint example: 550e8400-e29b-41d4-a716-446655440000 provider_name: type: string description: Name of the provider serving this endpoint example: OpenAI usage: type: number description: Total cost in USD (OpenRouter credits spent) example: 0.015 byok_usage_inference: type: number description: BYOK inference cost in USD (external credits spent) example: 0.012 requests: type: number description: Number of requests made example: 5 prompt_tokens: type: number description: Total prompt tokens used example: 50 completion_tokens: type: number description: Total completion tokens generated example: 125 reasoning_tokens: type: number description: Total reasoning tokens used example: 25 required: - date - model - model_permaslug - endpoint_id - provider_name - usage - byok_usage_inference - requests - prompt_tokens - completion_tokens - reasoning_tokens example: date: '2025-08-24' model: openai/gpt-4.1 model_permaslug: openai/gpt-4.1-2025-04-14 endpoint_id: 550e8400-e29b-41d4-a716-446655440000 provider_name: OpenAI usage: 0.015 byok_usage_inference: 0.012 requests: 5 prompt_tokens: 50 completion_tokens: 125 reasoning_tokens: 25 ForbiddenResponseErrorData: type: object properties: code: type: integer message: type: string metadata: type: object nullable: true additionalProperties: nullable: true required: - code - message description: Error data for ForbiddenResponse example: code: 403 message: Only management keys can perform this operation ForbiddenResponse: type: object properties: error: $ref: '#/components/schemas/ForbiddenResponseErrorData' user_id: type: string nullable: true required: - error description: Forbidden - Authentication successful but insufficient permissions example: error: code: 403 message: Only management keys can perform this operation ChatCompletionFinishReason: type: string enum: - tool_calls - stop - length - content_filter - error example: stop ChatMessageContentItemCacheControl: type: object properties: type: type: string enum: - ephemeral ttl: type: string enum: - 5m - 1h required: - type description: Cache control for the content part example: type: ephemeral ttl: 5m ChatMessageContentItemText: type: object properties: type: type: string enum: - text text: type: string cache_control: $ref: '#/components/schemas/ChatMessageContentItemCacheControl' required: - type - text description: Text content part example: type: text text: Hello, world! ChatMessageContentItemImage: type: object properties: type: type: string enum: - image_url image_url: type: object properties: url: type: string description: 'URL of the image (data: URLs supported)' detail: type: string enum: - auto - low - high description: Image detail level for vision models required: - url required: - type - image_url description: Image content part for vision models example: type: image_url image_url: url: https://example.com/image.jpg detail: auto ChatMessageContentItemAudio: type: object properties: type: type: string enum: - input_audio input_audio: type: object properties: data: type: string description: Base64 encoded audio data format: type: string description: >- Audio format (e.g., wav, mp3, flac, m4a, ogg, aiff, aac, pcm16, pcm24). Supported formats vary by provider. required: - data - format required: - type - input_audio description: Audio input content part. Supported audio formats vary by provider. example: type: input_audio input_audio: data: SGVsbG8gV29ybGQ= format: wav VideoInput: type: object properties: url: type: string description: 'URL of the video (data: URLs supported)' required: - url description: Video input object ChatMessageContentItemVideoLegacy: type: object properties: type: type: string enum: - input_video video_url: $ref: '#/components/schemas/VideoInput' required: - type - video_url description: Video input content part (legacy format - deprecated) deprecated: true example: type: input_video video_url: url: https://example.com/video.mp4 ChatMessageContentItemVideo: type: object properties: type: type: string enum: - video_url video_url: $ref: '#/components/schemas/VideoInput' required: - type - video_url description: Video input content part example: type: video_url video_url: url: https://example.com/video.mp4 ChatMessageContentItem: oneOf: - $ref: '#/components/schemas/ChatMessageContentItemText' - $ref: '#/components/schemas/ChatMessageContentItemImage' - $ref: '#/components/schemas/ChatMessageContentItemAudio' - oneOf: - $ref: '#/components/schemas/ChatMessageContentItemVideoLegacy' - $ref: '#/components/schemas/ChatMessageContentItemVideo' discriminator: propertyName: type mapping: input_video: '#/components/schemas/ChatMessageContentItemVideoLegacy' video_url: '#/components/schemas/ChatMessageContentItemVideo' discriminator: propertyName: type description: Content part for chat completion messages example: type: text text: Hello, world! ChatMessageToolCall: type: object properties: id: type: string description: Tool call identifier type: type: string enum: - function function: type: object properties: name: type: string description: Function name to call arguments: type: string description: Function arguments as JSON string required: - name - arguments required: - id - type - function description: Tool call made by the assistant example: id: call_abc123 type: function function: name: get_current_weather arguments: '{"location": "Boston, MA"}' ReasoningDetailSummary: type: object properties: type: type: string enum: - reasoning.summary summary: type: string id: type: string nullable: true format: type: string nullable: true enum: - unknown - openai-responses-v1 - azure-openai-responses-v1 - xai-responses-v1 - anthropic-claude-v1 - google-gemini-v1 index: type: number required: - type - summary description: Reasoning detail summary schema example: type: reasoning.summary summary: The model analyzed the problem by first identifying key constraints, then evaluating possible solutions... ReasoningDetailEncrypted: type: object properties: type: type: string enum: - reasoning.encrypted data: type: string id: type: string nullable: true format: type: string nullable: true enum: - unknown - openai-responses-v1 - azure-openai-responses-v1 - xai-responses-v1 - anthropic-claude-v1 - google-gemini-v1 index: type: number required: - type - data description: Reasoning detail encrypted schema example: type: reasoning.encrypted data: encrypted data ReasoningDetailText: type: object properties: type: type: string enum: - reasoning.text text: type: string nullable: true signature: type: string nullable: true id: type: string nullable: true format: type: string nullable: true enum: - unknown - openai-responses-v1 - azure-openai-responses-v1 - xai-responses-v1 - anthropic-claude-v1 - google-gemini-v1 index: type: number required: - type description: Reasoning detail text schema example: type: reasoning.text text: The model analyzed the problem by first identifying key constraints, then evaluating possible solutions... signature: signature ReasoningDetailUnion: oneOf: - $ref: '#/components/schemas/ReasoningDetailSummary' - $ref: '#/components/schemas/ReasoningDetailEncrypted' - $ref: '#/components/schemas/ReasoningDetailText' discriminator: propertyName: type mapping: reasoning.summary: '#/components/schemas/ReasoningDetailSummary' reasoning.encrypted: '#/components/schemas/ReasoningDetailEncrypted' reasoning.text: '#/components/schemas/ReasoningDetailText' description: Reasoning detail union schema example: type: reasoning.summary summary: The model analyzed the problem by first identifying key constraints, then evaluating possible solutions... AssistantMessageReasoningDetails: type: array items: $ref: '#/components/schemas/ReasoningDetailUnion' description: Reasoning details for extended thinking models AssistantMessageImages: type: array items: type: object properties: image_url: type: object properties: url: type: string description: URL or base64-encoded data of the generated image required: - url required: - image_url description: Generated images from image generation models example: - image_url: url: data:image/png;base64,iVBORw0KGgo... AssistantMessage: type: object properties: role: type: string enum: - assistant content: anyOf: - type: string - type: array items: $ref: '#/components/schemas/ChatMessageContentItem' - nullable: true description: Assistant message content name: type: string description: Optional name for the assistant tool_calls: type: array items: $ref: '#/components/schemas/ChatMessageToolCall' description: Tool calls made by the assistant refusal: type: string nullable: true description: Refusal message if content was refused reasoning: type: string nullable: true description: Reasoning output reasoning_details: $ref: '#/components/schemas/AssistantMessageReasoningDetails' images: $ref: '#/components/schemas/AssistantMessageImages' required: - role description: Assistant message for requests and responses example: role: assistant content: The capital of France is Paris. ChatMessageTokenLogprob: type: object properties: token: type: string description: The token logprob: type: number description: Log probability of the token bytes: type: array nullable: true items: type: number description: UTF-8 bytes of the token top_logprobs: type: array items: type: object properties: token: type: string logprob: type: number bytes: type: array nullable: true items: type: number required: - token - logprob - bytes description: Top alternative tokens with probabilities required: - token - logprob - bytes - top_logprobs description: Token log probability information example: token: ' Hello' logprob: -0.612345 bytes: null top_logprobs: - token: ' Hello' logprob: -0.612345 bytes: null ChatMessageTokenLogprobs: type: object nullable: true properties: content: type: array nullable: true items: $ref: '#/components/schemas/ChatMessageTokenLogprob' description: Log probabilities for content tokens refusal: type: array nullable: true items: $ref: '#/components/schemas/ChatMessageTokenLogprob' description: Log probabilities for refusal tokens required: - content - refusal description: Log probabilities for the completion example: content: - token: ' Hello' logprob: -0.612345 bytes: null top_logprobs: [] refusal: null ChatResponseChoice: type: object properties: finish_reason: anyOf: - $ref: '#/components/schemas/ChatCompletionFinishReason' - nullable: true - nullable: true index: type: number description: Choice index example: 0 message: $ref: '#/components/schemas/AssistantMessage' logprobs: $ref: '#/components/schemas/ChatMessageTokenLogprobs' required: - finish_reason - index - message description: Chat completion choice example: finish_reason: stop index: 0 message: role: assistant content: The capital of France is Paris. logprobs: null ChatGenerationTokenUsage: type: object properties: completion_tokens: type: number description: Number of tokens in the completion prompt_tokens: type: number description: Number of tokens in the prompt total_tokens: type: number description: Total number of tokens completion_tokens_details: type: object nullable: true properties: reasoning_tokens: type: number nullable: true description: Tokens used for reasoning audio_tokens: type: number nullable: true description: Tokens used for audio output accepted_prediction_tokens: type: number nullable: true description: Accepted prediction tokens rejected_prediction_tokens: type: number nullable: true description: Rejected prediction tokens description: Detailed completion token usage prompt_tokens_details: type: object nullable: true properties: cached_tokens: type: number description: Cached prompt tokens cache_write_tokens: type: number description: Tokens written to cache. Only returned for models with explicit caching and cache write pricing. audio_tokens: type: number description: Audio input tokens video_tokens: type: number description: Video input tokens description: Detailed prompt token usage required: - completion_tokens - prompt_tokens - total_tokens description: Token usage statistics example: completion_tokens: 15 prompt_tokens: 10 total_tokens: 25 completion_tokens_details: reasoning_tokens: 5 prompt_tokens_details: cached_tokens: 2 ChatResponse: type: object properties: id: type: string description: Unique completion identifier example: chatcmpl-123 choices: type: array items: $ref: '#/components/schemas/ChatResponseChoice' description: List of completion choices created: type: number description: Unix timestamp of creation example: 1677652288 model: type: string description: Model used for completion example: openai/gpt-4 object: type: string enum: - chat.completion system_fingerprint: type: string nullable: true description: System fingerprint example: fp_44709d6fcb usage: $ref: '#/components/schemas/ChatGenerationTokenUsage' required: - id - choices - created - model - object description: Chat completion response example: id: chatcmpl-123 object: chat.completion created: 1677652288 model: openai/gpt-4 choices: - index: 0 message: role: assistant content: The capital of France is Paris. finish_reason: stop usage: prompt_tokens: 10 completion_tokens: 15 total_tokens: 25 ChatStreamingMessageToolCall: type: object properties: index: type: number description: Tool call index in the array example: 0 id: type: string description: Tool call identifier example: call_abc123 type: type: string enum: - function description: Tool call type example: function function: type: object properties: name: type: string description: Function name example: get_weather arguments: type: string description: Function arguments as JSON string example: '{"location":' description: Function call details required: - index description: Tool call delta for streaming responses example: index: 0 id: call_abc123 type: function function: name: get_weather arguments: '{"location":' ChatStreamingMessageChunk: type: object properties: role: type: string enum: - assistant description: The role of the message author example: assistant content: type: string nullable: true description: Message content delta example: Hello reasoning: type: string nullable: true description: Reasoning content delta example: I need to refusal: type: string nullable: true description: Refusal message delta example: null tool_calls: type: array items: $ref: '#/components/schemas/ChatStreamingMessageToolCall' description: Tool calls delta reasoning_details: $ref: '#/components/schemas/AssistantMessageReasoningDetails' description: Delta changes in streaming response example: role: assistant content: Hello ChatStreamingChoice: type: object properties: delta: $ref: '#/components/schemas/ChatStreamingMessageChunk' finish_reason: anyOf: - $ref: '#/components/schemas/ChatCompletionFinishReason' - nullable: true - nullable: true index: type: number description: Choice index example: 0 logprobs: $ref: '#/components/schemas/ChatMessageTokenLogprobs' required: - delta - finish_reason - index description: Streaming completion choice chunk example: index: 0 delta: role: assistant content: Hello finish_reason: null ChatStreamingResponseChunk: type: object properties: id: type: string description: Unique chunk identifier example: chatcmpl-123 choices: type: array items: $ref: '#/components/schemas/ChatStreamingChoice' description: List of streaming chunk choices created: type: number description: Unix timestamp of creation example: 1677652288 model: type: string description: Model used for completion example: openai/gpt-4 object: type: string enum: - chat.completion.chunk system_fingerprint: type: string nullable: true description: System fingerprint example: fp_44709d6fcb error: type: object properties: message: type: string description: Error message example: Rate limit exceeded code: type: number description: Error code example: 429 required: - message - code description: Error information example: message: Rate limit exceeded code: 429 usage: $ref: '#/components/schemas/ChatGenerationTokenUsage' required: - id - choices - created - model - object description: Streaming chat completion chunk x-speakeasy-entity: ChatStreamChunk example: id: chatcmpl-123 object: chat.completion.chunk created: 1677652288 model: openai/gpt-4 choices: - index: 0 delta: role: assistant content: Hello finish_reason: null SystemMessage: type: object properties: role: type: string enum: - system content: anyOf: - type: string - type: array items: $ref: '#/components/schemas/ChatMessageContentItemText' description: System message content example: You are a helpful assistant. name: type: string description: Optional name for the system message example: Assistant Config required: - role - content description: System message for setting behavior example: role: system content: You are a helpful assistant. name: Assistant Config UserMessage: type: object properties: role: type: string enum: - user content: anyOf: - type: string - type: array items: $ref: '#/components/schemas/ChatMessageContentItem' description: User message content example: What is the capital of France? name: type: string description: Optional name for the user example: User required: - role - content description: User message example: role: user content: What is the capital of France? DeveloperMessage: type: object properties: role: type: string enum: - developer content: anyOf: - type: string - type: array items: $ref: '#/components/schemas/ChatMessageContentItemText' description: Developer message content example: This is a message from the developer. name: type: string description: Optional name for the developer message example: Developer required: - role - content description: Developer message example: role: developer content: This is a message from the developer. ToolResponseMessage: type: object properties: role: type: string enum: - tool content: anyOf: - type: string - type: array items: $ref: '#/components/schemas/ChatMessageContentItem' description: Tool response content example: The weather in San Francisco is 72°F and sunny. tool_call_id: type: string description: ID of the assistant message tool call this message responds to example: call_abc123 required: - role - content - tool_call_id description: Tool response message example: role: tool content: The weather in San Francisco is 72°F and sunny. tool_call_id: call_abc123 Message: oneOf: - $ref: '#/components/schemas/SystemMessage' - $ref: '#/components/schemas/UserMessage' - $ref: '#/components/schemas/DeveloperMessage' - $ref: '#/components/schemas/AssistantMessage' - $ref: '#/components/schemas/ToolResponseMessage' discriminator: propertyName: role description: Chat completion message with role-based discrimination example: role: user content: What is the capital of France? ModelName: type: string description: Model to use for completion example: openai/gpt-4 ModelNames: type: array items: allOf: - $ref: '#/components/schemas/ModelName' - description: Available OpenRouter chat completion models description: Models to use for completion example: - openai/gpt-4 - openai/gpt-4o ResponseFormatText: type: object properties: type: type: string enum: - text required: - type description: Default text response format example: type: text ResponseFormatJSONObject: type: object properties: type: type: string enum: - json_object required: - type description: JSON object response format example: type: json_object JSONSchemaConfig: type: object properties: name: type: string maxLength: 64 description: Schema name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars) example: math_response description: type: string description: Schema description for the model example: A mathematical response schema: type: object additionalProperties: nullable: true description: JSON Schema object example: type: object properties: answer: type: number required: - answer strict: type: boolean nullable: true description: Enable strict schema adherence example: false required: - name description: JSON Schema configuration object example: name: math_response description: A mathematical response schema: type: object properties: answer: type: number required: - answer strict: true ResponseFormatJSONSchema: type: object properties: type: type: string enum: - json_schema json_schema: $ref: '#/components/schemas/JSONSchemaConfig' required: - type - json_schema description: JSON Schema response format for structured outputs example: type: json_schema json_schema: name: math_response schema: type: object properties: answer: type: number required: - answer ResponseFormatTextGrammar: type: object properties: type: type: string enum: - grammar grammar: type: string description: Custom grammar for text generation example: root ::= "yes" | "no" required: - type - grammar description: Custom grammar response format example: type: grammar grammar: root ::= "yes" | "no" ResponseFormatTextPython: type: object properties: type: type: string enum: - python required: - type description: Python code response format example: type: python ChatStreamOptions: type: object nullable: true properties: include_usage: type: boolean description: 'Deprecated: This field has no effect. Full usage details are always included.' example: true deprecated: true description: Streaming configuration options example: include_usage: true NamedToolChoice: type: object properties: type: type: string enum: - function function: type: object properties: name: type: string description: Function name to call example: get_weather required: - name required: - type - function description: Named tool choice for specific function example: type: function function: name: get_weather ToolChoiceOption: anyOf: - type: string enum: - none - type: string enum: - auto - type: string enum: - required - $ref: '#/components/schemas/NamedToolChoice' description: Tool choice configuration example: auto ToolDefinitionJson: type: object properties: type: type: string enum: - function function: type: object properties: name: type: string maxLength: 64 description: Function name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars) example: get_weather description: type: string description: Function description for the model example: Get the current weather for a location parameters: type: object additionalProperties: nullable: true description: Function parameters as JSON Schema object example: type: object properties: location: type: string description: City name required: - location strict: type: boolean nullable: true description: Enable strict schema adherence example: false required: - name description: Function definition for tool calling example: name: get_weather description: Get the current weather for a location parameters: type: object properties: location: type: string description: City name required: - location cache_control: $ref: '#/components/schemas/ChatMessageContentItemCacheControl' required: - type - function description: Tool definition for function calling example: type: function function: name: get_weather description: Get the current weather for a location parameters: type: object properties: location: type: string description: City name unit: type: string enum: - celsius - fahrenheit required: - location DebugOptions: type: object properties: echo_upstream_body: type: boolean 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 description: Debug options for inspecting request transformations (streaming only) example: echo_upstream_body: true ChatGenerationParams: type: object properties: provider: type: object nullable: true properties: allow_fallbacks: type: boolean nullable: true description: > Whether to allow backup providers to serve requests - true: (default) when the primary provider (or your custom providers in "order") is unavailable, use the next best provider. - false: use only the primary/custom provider, and return the upstream error if it's unavailable. require_parameters: type: boolean nullable: true 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. data_collection: $ref: '#/components/schemas/DataCollection' zdr: type: boolean nullable: true 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 enforce_distillable_text: type: boolean nullable: true 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 order: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string 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. only: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. ignore: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. quantizations: type: array nullable: true items: $ref: '#/components/schemas/Quantization' description: A list of quantization levels to filter the provider by. sort: allOf: - $ref: '#/components/schemas/ProviderSort' - anyOf: - $ref: '#/components/schemas/ProviderSort' - $ref: '#/components/schemas/ProviderSortConfig' - nullable: true description: >- The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed. max_price: type: object properties: prompt: $ref: '#/components/schemas/BigNumberUnion' completion: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per million completion tokens image: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per image audio: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per audio unit request: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per request description: >- The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. preferred_min_throughput: $ref: '#/components/schemas/PreferredMinThroughput' preferred_max_latency: $ref: '#/components/schemas/PreferredMaxLatency' additionalProperties: false description: When multiple model providers are available, optionally indicate your routing preference. plugins: type: array items: oneOf: - type: object properties: id: type: string enum: - auto-router enabled: type: boolean description: Set to false to disable the auto-router plugin for this request. Defaults to true. allowed_models: type: array items: type: string 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/* required: - id - type: object properties: id: type: string enum: - moderation required: - id - type: object properties: id: type: string enum: - web enabled: type: boolean description: Set to false to disable the web-search plugin for this request. Defaults to true. max_results: type: number search_prompt: type: string engine: $ref: '#/components/schemas/WebSearchEngine' required: - id - type: object properties: id: type: string enum: - file-parser enabled: type: boolean description: Set to false to disable the file-parser plugin for this request. Defaults to true. pdf: $ref: '#/components/schemas/PDFParserOptions' required: - id - type: object properties: id: type: string enum: - response-healing enabled: type: boolean description: Set to false to disable the response-healing plugin for this request. Defaults to true. required: - id description: Plugins you want to enable for this request, including their settings. route: type: string nullable: true enum: - fallback - sort 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"). x-speakeasy-deprecation-message: Use providers.sort.partition instead. x-speakeasy-ignore: true x-fern-ignore: true user: type: string description: Unique user identifier example: user-123 session_id: type: string maxLength: 128 description: >- A unique identifier for grouping related requests (e.g., a conversation or agent workflow) for observability. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 128 characters. trace: type: object properties: trace_id: type: string trace_name: type: string span_name: type: string generation_name: type: string parent_span_id: type: string additionalProperties: nullable: true 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. messages: type: array items: $ref: '#/components/schemas/Message' minItems: 1 description: List of messages for the conversation example: - role: user content: Hello! model: $ref: '#/components/schemas/ModelName' models: $ref: '#/components/schemas/ModelNames' frequency_penalty: type: number nullable: true minimum: -2 maximum: 2 description: Frequency penalty (-2.0 to 2.0) example: 0 logit_bias: type: object nullable: true additionalProperties: type: number description: Token logit bias adjustments example: '50256': -100 logprobs: type: boolean nullable: true description: Return log probabilities example: false top_logprobs: type: number nullable: true minimum: 0 maximum: 20 description: Number of top log probabilities to return (0-20) example: 5 max_completion_tokens: type: number nullable: true minimum: 1 description: Maximum tokens in completion example: 100 max_tokens: type: number nullable: true minimum: 1 description: Maximum tokens (deprecated, use max_completion_tokens) example: 100 metadata: type: object additionalProperties: type: string description: Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values) example: user_id: user-123 session_id: session-456 presence_penalty: type: number nullable: true minimum: -2 maximum: 2 description: Presence penalty (-2.0 to 2.0) example: 0 reasoning: type: object properties: effort: type: string nullable: true enum: - xhigh - high - medium - low - minimal - none description: Constrains effort on reasoning for reasoning models example: medium summary: anyOf: - $ref: '#/components/schemas/ReasoningSummaryVerbosity' - nullable: true - nullable: true description: Configuration options for reasoning models example: effort: medium summary: concise response_format: oneOf: - $ref: '#/components/schemas/ResponseFormatText' - $ref: '#/components/schemas/ResponseFormatJSONObject' - $ref: '#/components/schemas/ResponseFormatJSONSchema' - $ref: '#/components/schemas/ResponseFormatTextGrammar' - $ref: '#/components/schemas/ResponseFormatTextPython' discriminator: propertyName: type description: Response format configuration example: type: json_object seed: type: integer nullable: true description: Random seed for deterministic outputs example: 42 stop: anyOf: - type: string - type: array items: type: string maxItems: 4 - nullable: true description: Stop sequences (up to 4) example: - |+ stream: type: boolean default: false description: Enable streaming response example: false stream_options: $ref: '#/components/schemas/ChatStreamOptions' temperature: type: number nullable: true minimum: 0 maximum: 2 default: 1 description: Sampling temperature (0-2) example: 0.7 parallel_tool_calls: type: boolean nullable: true tool_choice: $ref: '#/components/schemas/ToolChoiceOption' tools: type: array items: $ref: '#/components/schemas/ToolDefinitionJson' description: Available tools for function calling example: - type: function function: name: get_weather description: Get weather top_p: type: number nullable: true minimum: 0 maximum: 1 default: 1 description: Nucleus sampling parameter (0-1) example: 1 debug: $ref: '#/components/schemas/DebugOptions' image_config: type: object additionalProperties: anyOf: - type: string - type: number - type: array items: nullable: true 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' modalities: type: array items: type: string enum: - text - image description: Output modalities for the response. Supported values are "text" and "image". example: - text - image required: - messages description: Chat completion request parameters example: messages: - role: system content: You are a helpful assistant. - role: user content: What is the capital of France? model: openai/gpt-4 temperature: 0.7 max_tokens: 150 CreateChargeRequest: type: object properties: amount: type: number sender: type: string chain_id: type: integer enum: - 1 - 137 - 8453 required: - amount - sender - chain_id description: Create a Coinbase charge for crypto payment example: amount: 100 sender: '0x1234567890123456789012345678901234567890' chain_id: 1 ProviderPreferences: type: object properties: allow_fallbacks: type: boolean nullable: true description: > Whether to allow backup providers to serve requests - true: (default) when the primary provider (or your custom providers in "order") is unavailable, use the next best provider. - false: use only the primary/custom provider, and return the upstream error if it's unavailable. require_parameters: type: boolean nullable: true 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. data_collection: $ref: '#/components/schemas/DataCollection' zdr: type: boolean nullable: true 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 enforce_distillable_text: type: boolean nullable: true 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 order: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string 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. only: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. ignore: type: array nullable: true items: anyOf: - $ref: '#/components/schemas/ProviderName' - type: string description: >- List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. quantizations: type: array nullable: true items: $ref: '#/components/schemas/Quantization' description: A list of quantization levels to filter the provider by. sort: allOf: - $ref: '#/components/schemas/ProviderSort' - anyOf: - $ref: '#/components/schemas/ProviderSort' - $ref: '#/components/schemas/ProviderSortConfig' - nullable: true description: >- The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed. max_price: type: object properties: prompt: $ref: '#/components/schemas/BigNumberUnion' completion: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per million completion tokens image: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per image audio: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per audio unit request: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: Price per request description: >- The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. preferred_min_throughput: $ref: '#/components/schemas/PreferredMinThroughput' preferred_max_latency: $ref: '#/components/schemas/PreferredMaxLatency' description: Provider routing preferences for the request. PublicPricing: type: object properties: prompt: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number completion: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number request: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number image: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number image_token: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number image_output: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number audio: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number audio_output: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number input_audio_cache: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number web_search: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number internal_reasoning: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number input_cache_read: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number input_cache_write: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number discount: type: number required: - prompt - completion description: Pricing information for the model example: prompt: '0.00003' completion: '0.00006' request: '0' image: '0' ModelGroup: type: string enum: - Router - Media - Other - GPT - Claude - Gemini - Grok - Cohere - Nova - Qwen - Yi - DeepSeek - Mistral - Llama2 - Llama3 - Llama4 - PaLM - RWKV - Qwen3 example: GPT description: Tokenizer type used by the model InputModality: type: string enum: - text - image - file - audio - video example: text OutputModality: type: string enum: - text - image - embeddings - audio example: text ModelArchitecture: type: object properties: tokenizer: $ref: '#/components/schemas/ModelGroup' instruct_type: type: string nullable: true 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 example: chatml description: Instruction format type modality: type: string nullable: true description: Primary modality of the model example: text->text input_modalities: type: array items: $ref: '#/components/schemas/InputModality' description: Supported input modalities output_modalities: type: array items: $ref: '#/components/schemas/OutputModality' description: Supported output modalities required: - modality - input_modalities - output_modalities description: Model architecture information example: tokenizer: GPT instruct_type: chatml modality: text->text input_modalities: - text output_modalities: - text TopProviderInfo: type: object properties: context_length: type: number nullable: true description: Context length from the top provider example: 8192 max_completion_tokens: type: number nullable: true description: Maximum completion tokens from the top provider example: 4096 is_moderated: type: boolean description: Whether the top provider moderates content example: true required: - is_moderated description: Information about the top provider for this model example: context_length: 8192 max_completion_tokens: 4096 is_moderated: true PerRequestLimits: type: object nullable: true properties: prompt_tokens: type: number example: 1000 description: Maximum prompt tokens per request completion_tokens: type: number example: 1000 description: Maximum completion tokens per request required: - prompt_tokens - completion_tokens description: Per-request token limits example: prompt_tokens: 1000 completion_tokens: 1000 Parameter: type: string enum: - temperature - top_p - top_k - min_p - top_a - frequency_penalty - presence_penalty - repetition_penalty - max_tokens - logit_bias - logprobs - top_logprobs - seed - response_format - structured_outputs - stop - tools - tool_choice - parallel_tool_calls - include_reasoning - reasoning - reasoning_effort - web_search_options - verbosity example: temperature DefaultParameters: type: object nullable: true properties: temperature: type: number nullable: true minimum: 0 maximum: 2 top_p: type: number nullable: true minimum: 0 maximum: 1 frequency_penalty: type: number nullable: true minimum: -2 maximum: 2 additionalProperties: false description: Default parameters for this model example: temperature: 0.7 top_p: 0.9 frequency_penalty: 0 Model: type: object properties: id: type: string description: Unique identifier for the model example: openai/gpt-4 canonical_slug: type: string description: Canonical slug for the model example: openai/gpt-4 hugging_face_id: type: string nullable: true description: Hugging Face model identifier, if applicable example: microsoft/DialoGPT-medium name: type: string description: Display name of the model example: GPT-4 created: type: number description: Unix timestamp of when the model was created example: 1692901234 description: type: string description: Description of the model example: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. pricing: $ref: '#/components/schemas/PublicPricing' context_length: type: number nullable: true description: Maximum context length in tokens example: 8192 architecture: $ref: '#/components/schemas/ModelArchitecture' top_provider: $ref: '#/components/schemas/TopProviderInfo' per_request_limits: $ref: '#/components/schemas/PerRequestLimits' supported_parameters: type: array items: $ref: '#/components/schemas/Parameter' description: List of supported parameters for this model default_parameters: $ref: '#/components/schemas/DefaultParameters' expiration_date: type: string nullable: true 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' required: - id - canonical_slug - name - created - pricing - context_length - architecture - top_provider - per_request_limits - supported_parameters - default_parameters description: Information about an AI model available on OpenRouter example: id: openai/gpt-4 canonical_slug: openai/gpt-4 name: GPT-4 created: 1692901234 description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. pricing: prompt: '0.00003' completion: '0.00006' request: '0' image: '0' context_length: 8192 architecture: tokenizer: GPT instruct_type: chatml modality: text->text input_modalities: - text output_modalities: - text top_provider: context_length: 8192 max_completion_tokens: 4096 is_moderated: true per_request_limits: null supported_parameters: - temperature - top_p - max_tokens default_parameters: null expiration_date: null ModelsListResponseData: type: array items: $ref: '#/components/schemas/Model' description: List of available models ModelsListResponse: type: object properties: data: $ref: '#/components/schemas/ModelsListResponseData' required: - data description: List of available models example: data: - id: openai/gpt-4 canonical_slug: openai/gpt-4 name: GPT-4 created: 1692901234 description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. pricing: prompt: '0.00003' completion: '0.00006' request: '0' image: '0' context_length: 8192 architecture: tokenizer: GPT instruct_type: chatml modality: text->text input_modalities: - text output_modalities: - text top_provider: context_length: 8192 max_completion_tokens: 4096 is_moderated: true per_request_limits: null supported_parameters: - temperature - top_p - max_tokens - frequency_penalty - presence_penalty default_parameters: null expiration_date: null ModelsCountResponse: type: object properties: data: type: object properties: count: type: number description: Total number of available models example: 150 required: - count description: Model count data example: count: 150 required: - data description: Model count data example: data: count: 150 InstructType: type: string nullable: true 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 description: Instruction format type EndpointStatus: type: integer enum: - 0 - -1 - -2 - -3 - -5 - -10 example: 0 PercentileStats: type: object nullable: true properties: p50: type: number description: Median (50th percentile) example: 25.5 p75: type: number description: 75th percentile example: 35.2 p90: type: number description: 90th percentile example: 48.7 p99: type: number description: 99th percentile example: 85.3 required: - p50 - p75 - p90 - p99 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. PublicEndpoint: type: object properties: name: type: string model_id: type: string description: The unique identifier for the model (permaslug) example: openai/gpt-4 model_name: type: string context_length: type: number pricing: type: object properties: prompt: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number completion: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number request: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number image: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number image_token: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number image_output: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number audio: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number audio_output: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number input_audio_cache: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number web_search: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number internal_reasoning: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number input_cache_read: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number input_cache_write: allOf: - $ref: '#/components/schemas/BigNumberUnion' - description: A number or string value representing a large number discount: type: number required: - prompt - completion provider_name: $ref: '#/components/schemas/ProviderName' tag: type: string quantization: allOf: - $ref: '#/components/schemas/Quantization' - nullable: true max_completion_tokens: type: number nullable: true max_prompt_tokens: type: number nullable: true supported_parameters: type: array items: $ref: '#/components/schemas/Parameter' status: $ref: '#/components/schemas/EndpointStatus' uptime_last_30m: type: number nullable: true supports_implicit_caching: type: boolean latency_last_30m: $ref: '#/components/schemas/PercentileStats' 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. required: - name - model_id - model_name - context_length - pricing - provider_name - tag - quantization - max_completion_tokens - max_prompt_tokens - supported_parameters - uptime_last_30m - supports_implicit_caching - latency_last_30m - throughput_last_30m description: Information about a specific model endpoint example: name: 'OpenAI: GPT-4' model_id: openai/gpt-4 model_name: GPT-4 context_length: 8192 pricing: prompt: '0.00003' completion: '0.00006' request: '0' image: '0' provider_name: OpenAI tag: openai quantization: fp16 max_completion_tokens: 4096 max_prompt_tokens: 8192 supported_parameters: - temperature - top_p - max_tokens status: 0 uptime_last_30m: 99.5 supports_implicit_caching: true latency_last_30m: p50: 0.25 p75: 0.35 p90: 0.48 p99: 0.85 throughput_last_30m: p50: 45.2 p75: 38.5 p90: 28.3 p99: 15.1 ListEndpointsResponse: type: object properties: id: type: string description: Unique identifier for the model example: openai/gpt-4 name: type: string description: Display name of the model example: GPT-4 created: type: number description: Unix timestamp of when the model was created example: 1692901234 description: type: string description: Description of the model example: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. architecture: allOf: - $ref: '#/components/schemas/ModelArchitecture' - properties: tokenizer: allOf: - $ref: '#/components/schemas/ModelGroup' - nullable: true instruct_type: $ref: '#/components/schemas/InstructType' modality: type: string nullable: true description: Primary modality of the model example: text input_modalities: type: array items: $ref: '#/components/schemas/InputModality' description: Supported input modalities output_modalities: type: array items: $ref: '#/components/schemas/OutputModality' description: Supported output modalities required: - tokenizer - instruct_type - modality - input_modalities - output_modalities example: tokenizer: GPT instruct_type: chatml modality: text endpoints: type: array items: $ref: '#/components/schemas/PublicEndpoint' description: List of available endpoints for this model required: - id - name - created - description - architecture - endpoints description: List of available endpoints for a model example: id: openai/gpt-4 name: GPT-4 created: 1692901234 description: GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. architecture: tokenizer: GPT instruct_type: chatml modality: text->text input_modalities: - text output_modalities: - text endpoints: - name: 'OpenAI: GPT-4' model_name: GPT-4 context_length: 8192 pricing: prompt: '0.00003' completion: '0.00006' request: '0' image: '0' provider_name: OpenAI tag: openai quantization: fp16 max_completion_tokens: 4096 max_prompt_tokens: 8192 supported_parameters: - temperature - top_p - max_tokens - frequency_penalty - presence_penalty status: default uptime_last_30m: 99.5 supports_implicit_caching: true latency_last_30m: p50: 0.25 p75: 0.35 p90: 0.48 p99: 0.85 throughput_last_30m: p50: 45.2 p75: 38.5 p90: 28.3 p99: 15.1 parameters: {} securitySchemes: bearer: type: http scheme: bearer description: API key as bearer token in Authorization header paths: /responses: post: x-speakeasy-name-override: send x-speakeasy-stream-request-field: stream tags: - beta.responses summary: Create a response description: Creates a streaming or non-streaming response using OpenResponses API format requestBody: content: application/json: schema: $ref: '#/components/schemas/OpenResponsesRequest' required: true responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/OpenResponsesNonStreamingResponse' text/event-stream: schema: type: object properties: data: $ref: '#/components/schemas/OpenResponsesStreamEvent' required: - data x-speakeasy-sse-sentinel: '[DONE]' '400': description: Bad Request - Invalid request parameters or malformed input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '402': description: Payment Required - Insufficient credits or quota to complete request content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredResponse' '404': description: Not Found - Resource does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '408': description: Request Timeout - Operation exceeded time limit content: application/json: schema: $ref: '#/components/schemas/RequestTimeoutResponse' '413': description: Payload Too Large - Request payload exceeds size limits content: application/json: schema: $ref: '#/components/schemas/PayloadTooLargeResponse' '422': description: Unprocessable Entity - Semantic validation failure content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' '502': description: Bad Gateway - Provider/upstream API failure content: application/json: schema: $ref: '#/components/schemas/BadGatewayResponse' '503': description: Service Unavailable - Service temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ServiceUnavailableResponse' '524': description: Infrastructure Timeout - Request timed out at our edge network content: application/json: schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' '529': description: Provider Overloaded - Provider is temporarily overloaded content: application/json: schema: $ref: '#/components/schemas/ProviderOverloadedResponse' operationId: createResponses /messages: post: x-speakeasy-ignore: true x-speakeasy-name-override: create x-speakeasy-stream-request-field: stream tags: - Anthropic Messages summary: Create a message description: >- Creates a message using the Anthropic Messages API format. Supports text, images, PDFs, tools, and extended thinking. requestBody: content: application/json: schema: $ref: '#/components/schemas/AnthropicMessagesRequest' required: true responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/AnthropicMessagesResponse' text/event-stream: schema: type: object properties: event: type: string data: $ref: '#/components/schemas/AnthropicMessagesStreamEvent' required: - event - data x-speakeasy-sse-sentinel: '[DONE]' '400': description: Invalid request error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error '401': description: Authentication error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error '403': description: Permission denied error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error '404': description: Not found error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error '429': description: Rate limit error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error '500': description: API error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error '503': description: Overloaded error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error '529': description: Overloaded error content: application/json: schema: type: object properties: type: type: string enum: - error error: type: object properties: type: type: string message: type: string required: - type - message required: - type - error operationId: createMessages /activity: get: tags: - Analytics operationId: getUserActivity summary: Get user activity grouped by endpoint 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. parameters: - schema: type: string description: Filter by a single UTC date in the last 30 days (YYYY-MM-DD format). example: '2025-08-24' required: false description: Filter by a single UTC date in the last 30 days (YYYY-MM-DD format). name: date in: query responses: '200': description: Returns user activity data grouped by endpoint content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/ActivityItem' description: List of activity items required: - data example: data: - date: '2025-08-24' model: openai/gpt-4.1 model_permaslug: openai/gpt-4.1-2025-04-14 endpoint_id: 550e8400-e29b-41d4-a716-446655440000 provider_name: OpenAI usage: 0.015 byok_usage_inference: 0.012 requests: 5 prompt_tokens: 50 completion_tokens: 125 reasoning_tokens: 25 '400': description: Bad Request - Invalid date format or date range content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '403': description: Forbidden - Only management keys can fetch activity content: application/json: schema: $ref: '#/components/schemas/ForbiddenResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /chat/completions: post: x-speakeasy-group: chat x-speakeasy-name-override: send x-speakeasy-stream-request-field: stream tags: - Chat summary: Create a chat completion operationId: sendChatCompletionRequest description: >- Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes. requestBody: content: application/json: schema: $ref: '#/components/schemas/ChatGenerationParams' required: true responses: '200': description: Successful chat completion response content: application/json: schema: $ref: '#/components/schemas/ChatResponse' text/event-stream: schema: type: object properties: data: $ref: '#/components/schemas/ChatStreamingResponseChunk' required: - data x-speakeasy-sse-sentinel: '[DONE]' '400': description: Bad Request - Invalid request parameters or malformed input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '402': description: Payment Required - Insufficient credits or quota to complete request content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredResponse' '404': description: Not Found - Resource does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '408': description: Request Timeout - Operation exceeded time limit content: application/json: schema: $ref: '#/components/schemas/RequestTimeoutResponse' '413': description: Payload Too Large - Request payload exceeds size limits content: application/json: schema: $ref: '#/components/schemas/PayloadTooLargeResponse' '422': description: Unprocessable Entity - Semantic validation failure content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' '502': description: Bad Gateway - Provider/upstream API failure content: application/json: schema: $ref: '#/components/schemas/BadGatewayResponse' '503': description: Service Unavailable - Service temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ServiceUnavailableResponse' '524': description: Infrastructure Timeout - Request timed out at our edge network content: application/json: schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' '529': description: Provider Overloaded - Provider is temporarily overloaded content: application/json: schema: $ref: '#/components/schemas/ProviderOverloadedResponse' /credits: get: x-speakeasy-name-override: getCredits tags: - Credits summary: Get remaining credits operationId: getCredits description: >- Get total credits purchased and used for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required. responses: '200': description: Returns the total credits purchased and used content: application/json: schema: type: object properties: data: type: object properties: total_credits: type: number description: Total credits purchased example: 100.5 total_usage: type: number description: Total credits used example: 25.75 required: - total_credits - total_usage example: total_credits: 100.5 total_usage: 25.75 required: - data description: Total credits purchased and used example: data: total_credits: 100.5 total_usage: 25.75 '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '403': description: Forbidden - Only management keys can fetch credits content: application/json: schema: $ref: '#/components/schemas/ForbiddenResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /credits/coinbase: post: security: - bearer: [] x-speakeasy-name-override: createCoinbaseCharge tags: - Credits summary: Create a Coinbase charge for crypto payment operationId: createCoinbaseCharge description: Create a Coinbase charge for crypto payment requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateChargeRequest' required: true responses: '200': description: Returns the calldata to fulfill the transaction content: application/json: schema: type: object properties: data: type: object properties: id: type: string created_at: type: string expires_at: type: string web3_data: type: object properties: transfer_intent: type: object properties: call_data: type: object properties: deadline: type: string fee_amount: type: string id: type: string operator: type: string prefix: type: string recipient: type: string recipient_amount: type: string recipient_currency: type: string refund_destination: type: string signature: type: string required: - deadline - fee_amount - id - operator - prefix - recipient - recipient_amount - recipient_currency - refund_destination - signature metadata: type: object properties: chain_id: type: number contract_address: type: string sender: type: string required: - chain_id - contract_address - sender required: - call_data - metadata required: - transfer_intent required: - id - created_at - expires_at - web3_data required: - data '400': description: Bad Request - Invalid credit amount or request body content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /embeddings: post: x-speakeasy-name-override: generate tags: - Embeddings summary: Submit an embedding request description: Submits an embedding request to the embeddings router requestBody: content: application/json: schema: type: object properties: input: anyOf: - type: string - type: array items: type: string - type: array items: type: number - type: array items: type: array items: type: number - type: array items: type: object properties: content: type: array items: oneOf: - type: object properties: type: type: string enum: - text text: type: string required: - type - text - type: object properties: type: type: string enum: - image_url image_url: type: object properties: url: type: string required: - url required: - type - image_url required: - content model: type: string encoding_format: type: string enum: - float - base64 dimensions: type: integer minimum: 0 exclusiveMinimum: true user: type: string provider: $ref: '#/components/schemas/ProviderPreferences' input_type: type: string required: - input - model required: true responses: '200': description: Embedding response content: application/json: schema: type: object properties: id: type: string object: type: string enum: - list data: type: array items: type: object properties: object: type: string enum: - embedding embedding: anyOf: - type: array items: type: number - type: string index: type: number required: - object - embedding model: type: string usage: type: object properties: prompt_tokens: type: number total_tokens: type: number cost: type: number required: - prompt_tokens - total_tokens required: - object - data - model text/event-stream: schema: type: string description: Not used for embeddings - embeddings do not support streaming x-speakeasy-sse-sentinel: '[DONE]' '400': description: Bad Request - Invalid request parameters or malformed input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '402': description: Payment Required - Insufficient credits or quota to complete request content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredResponse' '404': description: Not Found - Resource does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' '502': description: Bad Gateway - Provider/upstream API failure content: application/json: schema: $ref: '#/components/schemas/BadGatewayResponse' '503': description: Service Unavailable - Service temporarily unavailable content: application/json: schema: $ref: '#/components/schemas/ServiceUnavailableResponse' '524': description: Cloudflare Timeout - Provider request timed out at CDN edge content: application/json: schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' '529': description: Provider Overloaded - Provider is temporarily overloaded content: application/json: schema: $ref: '#/components/schemas/ProviderOverloadedResponse' operationId: createEmbeddings /embeddings/models: get: tags: - Embeddings x-speakeasy-name-override: listModels summary: List all embeddings models description: Returns a list of all available embeddings models and their properties responses: '200': description: Returns a list of embeddings models content: application/json: schema: $ref: '#/components/schemas/ModelsListResponse' '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: listEmbeddingsModels /generation: get: tags: - Generations summary: Get request & usage metadata for a generation parameters: - schema: type: string minLength: 1 required: true name: id in: query responses: '200': description: Returns the request metadata for this generation content: application/json: schema: type: object properties: data: type: object properties: id: type: string description: Unique identifier for the generation example: gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG upstream_id: type: string nullable: true description: Upstream provider's identifier for this generation example: chatcmpl-791bcf62-080e-4568-87d0-94c72e3b4946 total_cost: type: number description: Total cost of the generation in USD example: 0.0015 cache_discount: type: number nullable: true description: Discount applied due to caching example: 0.0002 upstream_inference_cost: type: number nullable: true description: Cost charged by the upstream provider example: 0.0012 created_at: type: string description: ISO 8601 timestamp of when the generation was created example: '2024-07-15T23:33:19.433273+00:00' model: type: string description: Model used for the generation example: sao10k/l3-stheno-8b app_id: type: number nullable: true description: ID of the app that made the request example: 12345 streamed: type: boolean nullable: true description: Whether the response was streamed example: true cancelled: type: boolean nullable: true description: Whether the generation was cancelled example: false provider_name: type: string nullable: true description: Name of the provider that served the request example: Infermatic latency: type: number nullable: true description: Total latency in milliseconds example: 1250 moderation_latency: type: number nullable: true description: Moderation latency in milliseconds example: 50 generation_time: type: number nullable: true description: Time taken for generation in milliseconds example: 1200 finish_reason: type: string nullable: true description: Reason the generation finished example: stop tokens_prompt: type: number nullable: true description: Number of tokens in the prompt example: 10 tokens_completion: type: number nullable: true description: Number of tokens in the completion example: 25 native_tokens_prompt: type: number nullable: true description: Native prompt tokens as reported by provider example: 10 native_tokens_completion: type: number nullable: true description: Native completion tokens as reported by provider example: 25 native_tokens_completion_images: type: number nullable: true description: Native completion image tokens as reported by provider example: 0 native_tokens_reasoning: type: number nullable: true description: Native reasoning tokens as reported by provider example: 5 native_tokens_cached: type: number nullable: true description: Native cached tokens as reported by provider example: 3 num_media_prompt: type: number nullable: true description: Number of media items in the prompt example: 1 num_input_audio_prompt: type: number nullable: true description: Number of audio inputs in the prompt example: 0 num_media_completion: type: number nullable: true description: Number of media items in the completion example: 0 num_search_results: type: number nullable: true description: Number of search results included example: 5 origin: type: string description: Origin URL of the request example: https://openrouter.ai/ usage: type: number description: Usage amount in USD example: 0.0015 is_byok: type: boolean description: Whether this used bring-your-own-key example: false native_finish_reason: type: string nullable: true description: Native finish reason as reported by provider example: stop external_user: type: string nullable: true description: External user identifier example: user-123 api_type: type: string nullable: true enum: - completions - embeddings description: Type of API used for the generation router: type: string nullable: true description: Router used for the request (e.g., openrouter/auto) example: openrouter/auto provider_responses: type: array nullable: true items: type: object properties: id: type: string endpoint_id: type: string model_permaslug: type: string provider_name: type: string enum: - AnyScale - Atoma - Cent-ML - CrofAI - Enfer - GoPomelo - HuggingFace - Hyperbolic 2 - InoCloud - Kluster - Lambda - Lepton - Lynn 2 - Lynn - Mancer - Meta - Modal - Nineteen - OctoAI - Recursal - Reflection - Replicate - SambaNova 2 - SF Compute - Targon - Together 2 - Ubicloud - 01.AI - AI21 - AionLabs - Alibaba - Ambient - Amazon Bedrock - Amazon Nova - Anthropic - Arcee AI - AtlasCloud - Avian - Azure - BaseTen - BytePlus - Black Forest Labs - Cerebras - Chutes - Cirrascale - Clarifai - Cloudflare - Cohere - Crusoe - DeepInfra - DeepSeek - Featherless - Fireworks - Friendli - GMICloud - Google - Google AI Studio - Groq - Hyperbolic - Inception - Inceptron - InferenceNet - Ionstream - Infermatic - Io Net - Inflection - Liquid - Mara - Mancer 2 - Minimax - ModelRun - Mistral - Modular - Moonshot AI - Morph - NCompass - Nebius - NextBit - Novita - Nvidia - OpenAI - OpenInference - Parasail - Perplexity - Phala - Relace - SambaNova - Seed - SiliconFlow - Sourceful - StepFun - Stealth - StreamLake - Switchpoint - Together - Upstage - Venice - WandB - Xiaomi - xAI - Z.AI - FakeProvider status: type: number nullable: true latency: type: number is_byok: type: boolean required: - status description: List of provider responses for this generation, including fallback attempts 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 - 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 - origin - usage - is_byok - native_finish_reason - external_user - api_type - router - provider_responses description: Generation data required: - data description: Generation response '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '402': description: Payment Required - Insufficient credits or quota to complete request content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredResponse' '404': description: Not Found - Generation not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' '502': description: Bad Gateway - Provider/upstream API failure content: application/json: schema: $ref: '#/components/schemas/BadGatewayResponse' '524': description: Infrastructure Timeout - Request timed out at our edge network content: application/json: schema: $ref: '#/components/schemas/EdgeNetworkTimeoutResponse' '529': description: Provider Overloaded - Provider is temporarily overloaded content: application/json: schema: $ref: '#/components/schemas/ProviderOverloadedResponse' operationId: getGeneration /models/count: get: tags: - Models x-speakeasy-name-override: count summary: Get total count of available models responses: '200': description: Returns the total count of available models content: application/json: schema: $ref: '#/components/schemas/ModelsCountResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: listModelsCount /models: get: tags: - Models x-speakeasy-name-override: list summary: List all models and their properties parameters: - schema: type: string enum: - programming - roleplay - marketing - marketing/seo - technology - science - translation - legal - finance - health - trivia - academia description: Filter models by use case category example: programming required: false description: Filter models by use case category name: category in: query - schema: type: string required: false name: supported_parameters in: query - schema: type: string required: false name: use_rss in: query - schema: type: string required: false name: use_rss_chat_links in: query responses: '200': description: Returns a list of models or RSS feed content: application/json: schema: $ref: '#/components/schemas/ModelsListResponse' application/rss+xml: schema: type: string '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: getModels /models/user: get: tags: - Models x-speakeasy-name-override: listForUser description: >- List models filtered by user provider preferences, [privacy settings](https://openrouter.ai/docs/guides/privacy/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/logging#enterprise-eu-in-region-routing). summary: List models filtered by user provider preferences, privacy settings, and guardrails security: - bearer: [] responses: '200': description: Returns a list of models filtered by user provider preferences content: application/json: schema: $ref: '#/components/schemas/ModelsListResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Not Found - No eligible endpoints found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: listModelsUser /models/{author}/{slug}/endpoints: get: tags: - Endpoints operationId: listEndpoints x-speakeasy-name-override: list summary: List all endpoints for a model parameters: - schema: type: string required: true name: author in: path - schema: type: string required: true name: slug in: path responses: '200': description: Returns a list of endpoints content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/ListEndpointsResponse' required: - data '404': description: Not Found - Model does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /endpoints/zdr: get: tags: - Endpoints x-speakeasy-name-override: listZdrEndpoints summary: Preview the impact of ZDR on the available endpoints responses: '200': description: Returns a list of endpoints content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/PublicEndpoint' required: - data '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: listEndpointsZdr /providers: get: tags: - Providers x-speakeasy-name-override: list summary: List all providers operationId: listProviders responses: '200': description: Returns a list of providers content: application/json: schema: type: object properties: data: type: array items: type: object properties: name: type: string description: Display name of the provider example: OpenAI slug: type: string description: URL-friendly identifier for the provider example: openai privacy_policy_url: type: string nullable: true description: URL to the provider's privacy policy example: https://openai.com/privacy terms_of_service_url: type: string nullable: true description: URL to the provider's terms of service example: https://openai.com/terms status_page_url: type: string nullable: true description: URL to the provider's status page example: https://status.openai.com required: - name - slug - privacy_policy_url example: name: OpenAI slug: openai privacy_policy_url: https://openai.com/privacy terms_of_service_url: https://openai.com/terms status_page_url: https://status.openai.com required: - data '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /keys: get: operationId: list x-speakeasy-name-override: list tags: - API Keys summary: List API keys description: >- List all API keys for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string description: Whether to include disabled API keys in the response example: 'false' required: false description: Whether to include disabled API keys in the response name: include_disabled in: query - schema: type: string description: Number of API keys to skip for pagination example: '0' required: false description: Number of API keys to skip for pagination name: offset in: query responses: '200': description: List of API keys content: application/json: schema: type: object properties: data: type: array items: type: object properties: hash: type: string description: Unique hash identifier for the API key example: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: type: string description: Name of the API key example: My Production Key label: type: string description: Human-readable label for the API key example: sk-or-v1-0e6...1c96 disabled: type: boolean description: Whether the API key is disabled example: false limit: type: number nullable: true description: Spending limit for the API key in USD example: 100 limit_remaining: type: number nullable: true description: Remaining spending limit in USD example: 74.5 limit_reset: type: string nullable: true description: Type of limit reset for the API key example: monthly include_byok_in_limit: type: boolean description: Whether to include external BYOK usage in the credit limit example: false usage: type: number description: Total OpenRouter credit usage (in USD) for the API key example: 25.5 usage_daily: type: number description: OpenRouter credit usage (in USD) for the current UTC day example: 25.5 usage_weekly: type: number description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) example: 25.5 usage_monthly: type: number description: OpenRouter credit usage (in USD) for the current UTC month example: 25.5 byok_usage: type: number description: Total external BYOK usage (in USD) for the API key example: 17.38 byok_usage_daily: type: number description: External BYOK usage (in USD) for the current UTC day example: 17.38 byok_usage_weekly: type: number description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) example: 17.38 byok_usage_monthly: type: number description: External BYOK usage (in USD) for current UTC month example: 17.38 created_at: type: string description: ISO 8601 timestamp of when the API key was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the API key was last updated example: '2025-08-24T15:45:00Z' expires_at: type: string nullable: true format: date-time description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration example: '2027-12-31T23:59:59Z' 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 example: hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: My Production Key label: sk-or-v1-0e6...1c96 disabled: false limit: 100 limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' expires_at: '2027-12-31T23:59:59Z' description: List of API keys required: - data example: data: - hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: My Production Key label: Production API Key disabled: false limit: 100 limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' expires_at: '2027-12-31T23:59:59Z' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' post: x-speakeasy-name-override: create tags: - API Keys summary: Create a new API key description: >- Create a new API key for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required. requestBody: content: application/json: schema: type: object properties: name: type: string minLength: 1 description: Name for the new API key example: My New API Key limit: type: number nullable: true description: Optional spending limit for the API key in USD example: 50 limit_reset: type: string nullable: true enum: - daily - weekly - monthly 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. example: monthly include_byok_in_limit: type: boolean description: Whether to include BYOK usage in the limit example: true expires_at: type: string nullable: true format: date-time 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' required: - name example: name: My New API Key limit: 50 limit_reset: monthly include_byok_in_limit: true expires_at: '2027-12-31T23:59:59Z' required: true responses: '201': description: API key created successfully content: application/json: schema: type: object properties: data: type: object properties: hash: type: string description: Unique hash identifier for the API key example: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: type: string description: Name of the API key example: My Production Key label: type: string description: Human-readable label for the API key example: sk-or-v1-0e6...1c96 disabled: type: boolean description: Whether the API key is disabled example: false limit: type: number nullable: true description: Spending limit for the API key in USD example: 100 limit_remaining: type: number nullable: true description: Remaining spending limit in USD example: 74.5 limit_reset: type: string nullable: true description: Type of limit reset for the API key example: monthly include_byok_in_limit: type: boolean description: Whether to include external BYOK usage in the credit limit example: false usage: type: number description: Total OpenRouter credit usage (in USD) for the API key example: 25.5 usage_daily: type: number description: OpenRouter credit usage (in USD) for the current UTC day example: 25.5 usage_weekly: type: number description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) example: 25.5 usage_monthly: type: number description: OpenRouter credit usage (in USD) for the current UTC month example: 25.5 byok_usage: type: number description: Total external BYOK usage (in USD) for the API key example: 17.38 byok_usage_daily: type: number description: External BYOK usage (in USD) for the current UTC day example: 17.38 byok_usage_weekly: type: number description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) example: 17.38 byok_usage_monthly: type: number description: External BYOK usage (in USD) for current UTC month example: 17.38 created_at: type: string description: ISO 8601 timestamp of when the API key was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the API key was last updated example: '2025-08-24T15:45:00Z' expires_at: type: string nullable: true format: date-time description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration example: '2027-12-31T23:59:59Z' 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 example: hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: My Production Key label: sk-or-v1-0e6...1c96 disabled: false limit: 100 limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' expires_at: '2027-12-31T23:59:59Z' description: The created API key information key: type: string description: The actual API key string (only shown once) example: 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 required: - data - key example: data: hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: My New API Key label: My New API Key disabled: false limit: 50 limit_remaining: 50 limit_reset: monthly include_byok_in_limit: true usage: 0 usage_daily: 0 usage_weekly: 0 usage_monthly: 0 byok_usage: 0 byok_usage_daily: 0 byok_usage_weekly: 0 byok_usage_monthly: 0 created_at: '2025-08-24T10:30:00Z' updated_at: null expires_at: '2027-12-31T23:59:59Z' key: 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 '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: createKeys /keys/{hash}: patch: x-speakeasy-name-override: update tags: - API Keys summary: Update an API key description: Update an existing API key. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string description: The hash identifier of the API key to update example: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 required: true description: The hash identifier of the API key to update name: hash in: path requestBody: content: application/json: schema: type: object properties: name: type: string description: New name for the API key example: Updated API Key Name disabled: type: boolean description: Whether to disable the API key example: false limit: type: number nullable: true description: New spending limit for the API key in USD example: 75 limit_reset: type: string nullable: true enum: - daily - weekly - monthly 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. example: daily include_byok_in_limit: type: boolean description: Whether to include BYOK usage in the limit example: true example: name: Updated API Key Name disabled: false limit: 75 limit_reset: daily include_byok_in_limit: true required: true responses: '200': description: API key updated successfully content: application/json: schema: type: object properties: data: type: object properties: hash: type: string description: Unique hash identifier for the API key example: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: type: string description: Name of the API key example: My Production Key label: type: string description: Human-readable label for the API key example: sk-or-v1-0e6...1c96 disabled: type: boolean description: Whether the API key is disabled example: false limit: type: number nullable: true description: Spending limit for the API key in USD example: 100 limit_remaining: type: number nullable: true description: Remaining spending limit in USD example: 74.5 limit_reset: type: string nullable: true description: Type of limit reset for the API key example: monthly include_byok_in_limit: type: boolean description: Whether to include external BYOK usage in the credit limit example: false usage: type: number description: Total OpenRouter credit usage (in USD) for the API key example: 25.5 usage_daily: type: number description: OpenRouter credit usage (in USD) for the current UTC day example: 25.5 usage_weekly: type: number description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) example: 25.5 usage_monthly: type: number description: OpenRouter credit usage (in USD) for the current UTC month example: 25.5 byok_usage: type: number description: Total external BYOK usage (in USD) for the API key example: 17.38 byok_usage_daily: type: number description: External BYOK usage (in USD) for the current UTC day example: 17.38 byok_usage_weekly: type: number description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) example: 17.38 byok_usage_monthly: type: number description: External BYOK usage (in USD) for current UTC month example: 17.38 created_at: type: string description: ISO 8601 timestamp of when the API key was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the API key was last updated example: '2025-08-24T15:45:00Z' expires_at: type: string nullable: true format: date-time description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration example: '2027-12-31T23:59:59Z' 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 example: hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: My Production Key label: sk-or-v1-0e6...1c96 disabled: false limit: 100 limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' expires_at: '2027-12-31T23:59:59Z' description: The updated API key information required: - data example: data: hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: Updated API Key Name label: Updated API Key Name disabled: false limit: 75 limit_remaining: 49.5 limit_reset: daily include_byok_in_limit: true usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T16:00:00Z' expires_at: null '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Not Found - API key does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: updateKeys delete: x-speakeasy-name-override: delete tags: - API Keys summary: Delete an API key description: Delete an existing API key. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string description: The hash identifier of the API key to delete example: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 required: true description: The hash identifier of the API key to delete name: hash in: path responses: '200': description: API key deleted successfully content: application/json: schema: type: object properties: deleted: type: boolean const: true description: Confirmation that the API key was deleted example: true required: - deleted example: deleted: true '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Not Found - API key does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: deleteKeys get: operationId: getKey x-speakeasy-name-override: get tags: - API Keys summary: Get a single API key description: Get a single API key by hash. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string description: The hash identifier of the API key to retrieve example: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 required: true description: The hash identifier of the API key to retrieve name: hash in: path responses: '200': description: API key details content: application/json: schema: type: object properties: data: type: object properties: hash: type: string description: Unique hash identifier for the API key example: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: type: string description: Name of the API key example: My Production Key label: type: string description: Human-readable label for the API key example: sk-or-v1-0e6...1c96 disabled: type: boolean description: Whether the API key is disabled example: false limit: type: number nullable: true description: Spending limit for the API key in USD example: 100 limit_remaining: type: number nullable: true description: Remaining spending limit in USD example: 74.5 limit_reset: type: string nullable: true description: Type of limit reset for the API key example: monthly include_byok_in_limit: type: boolean description: Whether to include external BYOK usage in the credit limit example: false usage: type: number description: Total OpenRouter credit usage (in USD) for the API key example: 25.5 usage_daily: type: number description: OpenRouter credit usage (in USD) for the current UTC day example: 25.5 usage_weekly: type: number description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) example: 25.5 usage_monthly: type: number description: OpenRouter credit usage (in USD) for the current UTC month example: 25.5 byok_usage: type: number description: Total external BYOK usage (in USD) for the API key example: 17.38 byok_usage_daily: type: number description: External BYOK usage (in USD) for the current UTC day example: 17.38 byok_usage_weekly: type: number description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) example: 17.38 byok_usage_monthly: type: number description: External BYOK usage (in USD) for current UTC month example: 17.38 created_at: type: string description: ISO 8601 timestamp of when the API key was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the API key was last updated example: '2025-08-24T15:45:00Z' expires_at: type: string nullable: true format: date-time description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration example: '2027-12-31T23:59:59Z' 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 example: hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: My Production Key label: sk-or-v1-0e6...1c96 disabled: false limit: 100 limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' expires_at: '2027-12-31T23:59:59Z' description: The API key information required: - data example: data: hash: f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 name: My Production Key label: Production API Key disabled: false limit: 100 limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' expires_at: '2027-12-31T23:59:59Z' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Not Found - API key does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '429': description: Too Many Requests - Rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/TooManyRequestsResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails: get: operationId: listGuardrails x-speakeasy-name-override: list tags: - Guardrails summary: List guardrails description: >- List all guardrails for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string description: Number of records to skip for pagination example: '0' required: false description: Number of records to skip for pagination name: offset in: query - schema: type: string description: Maximum number of records to return (max 100) example: '50' required: false description: Maximum number of records to return (max 100) name: limit in: query responses: '200': description: List of guardrails content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string format: uuid description: Unique identifier for the guardrail example: 550e8400-e29b-41d4-a716-446655440000 name: type: string description: Name of the guardrail example: Production Guardrail description: type: string nullable: true description: Description of the guardrail example: Guardrail for production environment limit_usd: type: number nullable: true minimum: 0 exclusiveMinimum: true description: Spending limit in USD example: 100 reset_interval: type: string nullable: true enum: - daily - weekly - monthly description: Interval at which the limit resets (daily, weekly, monthly) example: monthly allowed_providers: type: array nullable: true items: type: string description: List of allowed provider IDs example: - openai - anthropic - google allowed_models: type: array nullable: true items: type: string 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 enforce_zdr: type: boolean nullable: true description: Whether to enforce zero data retention example: false created_at: type: string description: ISO 8601 timestamp of when the guardrail was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the guardrail was last updated example: '2025-08-24T15:45:00Z' required: - id - name - created_at example: id: 550e8400-e29b-41d4-a716-446655440000 name: Production Guardrail description: Guardrail for production environment limit_usd: 100 reset_interval: monthly allowed_providers: - openai - anthropic - google allowed_models: null enforce_zdr: false created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' description: List of guardrails total_count: type: number description: Total number of guardrails example: 25 required: - data - total_count example: data: - id: 550e8400-e29b-41d4-a716-446655440000 name: Production Guardrail description: Guardrail for production environment limit_usd: 100 reset_interval: monthly allowed_providers: - openai - anthropic - google allowed_models: null enforce_zdr: false created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' total_count: 1 '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' post: operationId: createGuardrail x-speakeasy-name-override: create tags: - Guardrails summary: Create a guardrail description: >- Create a new guardrail for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required. requestBody: content: application/json: schema: type: object properties: name: type: string minLength: 1 maxLength: 200 description: Name for the new guardrail example: My New Guardrail description: type: string nullable: true maxLength: 1000 description: Description of the guardrail example: A guardrail for limiting API usage limit_usd: type: number nullable: true minimum: 0 exclusiveMinimum: true description: Spending limit in USD example: 50 reset_interval: type: string nullable: true enum: - daily - weekly - monthly description: Interval at which the limit resets (daily, weekly, monthly) example: monthly allowed_providers: type: array nullable: true items: type: string minItems: 1 description: List of allowed provider IDs example: - openai - anthropic - deepseek allowed_models: type: array nullable: true items: type: string minItems: 1 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 enforce_zdr: type: boolean nullable: true description: Whether to enforce zero data retention example: false required: - name example: name: My New Guardrail description: A guardrail for limiting API usage limit_usd: 50 reset_interval: monthly allowed_providers: - openai - anthropic - deepseek allowed_models: null enforce_zdr: false required: true responses: '201': description: Guardrail created successfully content: application/json: schema: type: object properties: data: type: object properties: id: type: string format: uuid description: Unique identifier for the guardrail example: 550e8400-e29b-41d4-a716-446655440000 name: type: string description: Name of the guardrail example: Production Guardrail description: type: string nullable: true description: Description of the guardrail example: Guardrail for production environment limit_usd: type: number nullable: true minimum: 0 exclusiveMinimum: true description: Spending limit in USD example: 100 reset_interval: type: string nullable: true enum: - daily - weekly - monthly description: Interval at which the limit resets (daily, weekly, monthly) example: monthly allowed_providers: type: array nullable: true items: type: string description: List of allowed provider IDs example: - openai - anthropic - google allowed_models: type: array nullable: true items: type: string 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 enforce_zdr: type: boolean nullable: true description: Whether to enforce zero data retention example: false created_at: type: string description: ISO 8601 timestamp of when the guardrail was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the guardrail was last updated example: '2025-08-24T15:45:00Z' required: - id - name - created_at example: id: 550e8400-e29b-41d4-a716-446655440000 name: Production Guardrail description: Guardrail for production environment limit_usd: 100 reset_interval: monthly allowed_providers: - openai - anthropic - google allowed_models: null enforce_zdr: false created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' description: The created guardrail required: - data example: data: id: 550e8400-e29b-41d4-a716-446655440000 name: My New Guardrail description: A guardrail for limiting API usage limit_usd: 50 reset_interval: monthly allowed_providers: - openai - anthropic - google allowed_models: null enforce_zdr: false created_at: '2025-08-24T10:30:00Z' updated_at: null '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails/{id}: get: operationId: getGuardrail x-speakeasy-name-override: get tags: - Guardrails summary: Get a guardrail description: Get a single guardrail by ID. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail to retrieve example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail to retrieve name: id in: path responses: '200': description: Guardrail details content: application/json: schema: type: object properties: data: type: object properties: id: type: string format: uuid description: Unique identifier for the guardrail example: 550e8400-e29b-41d4-a716-446655440000 name: type: string description: Name of the guardrail example: Production Guardrail description: type: string nullable: true description: Description of the guardrail example: Guardrail for production environment limit_usd: type: number nullable: true minimum: 0 exclusiveMinimum: true description: Spending limit in USD example: 100 reset_interval: type: string nullable: true enum: - daily - weekly - monthly description: Interval at which the limit resets (daily, weekly, monthly) example: monthly allowed_providers: type: array nullable: true items: type: string description: List of allowed provider IDs example: - openai - anthropic - google allowed_models: type: array nullable: true items: type: string 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 enforce_zdr: type: boolean nullable: true description: Whether to enforce zero data retention example: false created_at: type: string description: ISO 8601 timestamp of when the guardrail was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the guardrail was last updated example: '2025-08-24T15:45:00Z' required: - id - name - created_at example: id: 550e8400-e29b-41d4-a716-446655440000 name: Production Guardrail description: Guardrail for production environment limit_usd: 100 reset_interval: monthly allowed_providers: - openai - anthropic - google allowed_models: null enforce_zdr: false created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' description: The guardrail required: - data example: data: id: 550e8400-e29b-41d4-a716-446655440000 name: Production Guardrail description: Guardrail for production environment limit_usd: 100 reset_interval: monthly allowed_providers: - openai - anthropic - google allowed_models: null enforce_zdr: false created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Not Found - Guardrail does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' patch: operationId: updateGuardrail x-speakeasy-name-override: update tags: - Guardrails summary: Update a guardrail description: Update an existing guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail to update example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail to update name: id in: path requestBody: content: application/json: schema: type: object properties: name: type: string minLength: 1 maxLength: 200 description: New name for the guardrail example: Updated Guardrail Name description: type: string nullable: true maxLength: 1000 description: New description for the guardrail example: Updated description limit_usd: type: number nullable: true minimum: 0 exclusiveMinimum: true description: New spending limit in USD example: 75 reset_interval: type: string nullable: true enum: - daily - weekly - monthly description: Interval at which the limit resets (daily, weekly, monthly) example: monthly allowed_providers: type: array nullable: true items: type: string minItems: 1 description: New list of allowed provider IDs example: - openai - anthropic - deepseek allowed_models: type: array nullable: true items: type: string minItems: 1 description: Array of model identifiers (slug or canonical_slug accepted) example: - openai/gpt-5.2 enforce_zdr: type: boolean nullable: true description: Whether to enforce zero data retention example: true example: name: Updated Guardrail Name description: Updated description limit_usd: 75 reset_interval: weekly required: true responses: '200': description: Guardrail updated successfully content: application/json: schema: type: object properties: data: type: object properties: id: type: string format: uuid description: Unique identifier for the guardrail example: 550e8400-e29b-41d4-a716-446655440000 name: type: string description: Name of the guardrail example: Production Guardrail description: type: string nullable: true description: Description of the guardrail example: Guardrail for production environment limit_usd: type: number nullable: true minimum: 0 exclusiveMinimum: true description: Spending limit in USD example: 100 reset_interval: type: string nullable: true enum: - daily - weekly - monthly description: Interval at which the limit resets (daily, weekly, monthly) example: monthly allowed_providers: type: array nullable: true items: type: string description: List of allowed provider IDs example: - openai - anthropic - google allowed_models: type: array nullable: true items: type: string 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 enforce_zdr: type: boolean nullable: true description: Whether to enforce zero data retention example: false created_at: type: string description: ISO 8601 timestamp of when the guardrail was created example: '2025-08-24T10:30:00Z' updated_at: type: string nullable: true description: ISO 8601 timestamp of when the guardrail was last updated example: '2025-08-24T15:45:00Z' required: - id - name - created_at example: id: 550e8400-e29b-41d4-a716-446655440000 name: Production Guardrail description: Guardrail for production environment limit_usd: 100 reset_interval: monthly allowed_providers: - openai - anthropic - google allowed_models: null enforce_zdr: false created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T15:45:00Z' description: The updated guardrail required: - data example: data: id: 550e8400-e29b-41d4-a716-446655440000 name: Updated Guardrail Name description: Updated description limit_usd: 75 reset_interval: weekly allowed_providers: - openai allowed_models: null enforce_zdr: true created_at: '2025-08-24T10:30:00Z' updated_at: '2025-08-24T16:00:00Z' '400': description: Bad Request - Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Not Found - Guardrail does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' delete: operationId: deleteGuardrail x-speakeasy-name-override: delete tags: - Guardrails summary: Delete a guardrail description: Delete an existing guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail to delete example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail to delete name: id in: path responses: '200': description: Guardrail deleted successfully content: application/json: schema: type: object properties: deleted: type: boolean const: true description: Confirmation that the guardrail was deleted example: true required: - deleted example: deleted: true '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Not Found - Guardrail does not exist content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails/assignments/keys: get: operationId: listKeyAssignments x-speakeasy-name-override: listKeyAssignments tags: - Guardrails summary: List all key assignments description: >- List all API key guardrail assignments for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string description: Number of records to skip for pagination example: '0' required: false description: Number of records to skip for pagination name: offset in: query - schema: type: string description: Maximum number of records to return (max 100) example: '50' required: false description: Maximum number of records to return (max 100) name: limit in: query responses: '200': description: List of key assignments content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string format: uuid description: Unique identifier for the assignment example: 550e8400-e29b-41d4-a716-446655440000 key_hash: type: string description: Hash of the assigned API key example: c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93 guardrail_id: type: string format: uuid description: ID of the guardrail example: 550e8400-e29b-41d4-a716-446655440001 key_name: type: string description: Name of the API key example: Production Key key_label: type: string description: Label of the API key example: prod-key assigned_by: type: string nullable: true description: User ID of who made the assignment example: user_abc123 created_at: type: string description: ISO 8601 timestamp of when the assignment was created example: '2025-08-24T10:30:00Z' required: - id - key_hash - guardrail_id - key_name - key_label - assigned_by - created_at description: List of key assignments total_count: type: number description: Total number of key assignments for this guardrail example: 25 required: - data - total_count '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails/assignments/members: get: operationId: listMemberAssignments x-speakeasy-name-override: listMemberAssignments tags: - Guardrails summary: List all member assignments description: >- List all organization member guardrail assignments for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string description: Number of records to skip for pagination example: '0' required: false description: Number of records to skip for pagination name: offset in: query - schema: type: string description: Maximum number of records to return (max 100) example: '50' required: false description: Maximum number of records to return (max 100) name: limit in: query responses: '200': description: List of member assignments content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string format: uuid description: Unique identifier for the assignment example: 550e8400-e29b-41d4-a716-446655440000 user_id: type: string description: Clerk user ID of the assigned member example: user_abc123 organization_id: type: string description: Organization ID example: org_xyz789 guardrail_id: type: string format: uuid description: ID of the guardrail example: 550e8400-e29b-41d4-a716-446655440001 assigned_by: type: string nullable: true description: User ID of who made the assignment example: user_abc123 created_at: type: string description: ISO 8601 timestamp of when the assignment was created example: '2025-08-24T10:30:00Z' required: - id - user_id - organization_id - guardrail_id - assigned_by - created_at description: List of member assignments total_count: type: number description: Total number of member assignments example: 10 required: - data - total_count '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails/{id}/assignments/keys: get: operationId: listGuardrailKeyAssignments x-speakeasy-name-override: listGuardrailKeyAssignments tags: - Guardrails summary: List key assignments for a guardrail description: >- List all API key assignments for a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail name: id in: path - schema: type: string description: Number of records to skip for pagination example: '0' required: false description: Number of records to skip for pagination name: offset in: query - schema: type: string description: Maximum number of records to return (max 100) example: '50' required: false description: Maximum number of records to return (max 100) name: limit in: query responses: '200': description: List of key assignments content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string format: uuid description: Unique identifier for the assignment example: 550e8400-e29b-41d4-a716-446655440000 key_hash: type: string description: Hash of the assigned API key example: c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93 guardrail_id: type: string format: uuid description: ID of the guardrail example: 550e8400-e29b-41d4-a716-446655440001 key_name: type: string description: Name of the API key example: Production Key key_label: type: string description: Label of the API key example: prod-key assigned_by: type: string nullable: true description: User ID of who made the assignment example: user_abc123 created_at: type: string description: ISO 8601 timestamp of when the assignment was created example: '2025-08-24T10:30:00Z' required: - id - key_hash - guardrail_id - key_name - key_label - assigned_by - created_at description: List of key assignments total_count: type: number description: Total number of key assignments for this guardrail example: 25 required: - data - total_count '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Guardrail not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' post: operationId: bulkAssignKeysToGuardrail x-speakeasy-name-override: bulkAssignKeys tags: - Guardrails summary: Bulk assign keys to a guardrail description: >- Assign multiple API keys to a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail name: id in: path requestBody: content: application/json: schema: type: object properties: key_hashes: type: array items: type: string minLength: 1 minItems: 1 description: Array of API key hashes to assign to the guardrail example: - c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93 required: - key_hashes required: true responses: '200': description: Assignment result content: application/json: schema: type: object properties: assigned_count: type: number description: Number of keys successfully assigned example: 3 required: - assigned_count '400': description: Bad Request - Invalid input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Guardrail not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails/{id}/assignments/members: get: operationId: listGuardrailMemberAssignments x-speakeasy-name-override: listGuardrailMemberAssignments tags: - Guardrails summary: List member assignments for a guardrail description: >- List all organization member assignments for a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail name: id in: path - schema: type: string description: Number of records to skip for pagination example: '0' required: false description: Number of records to skip for pagination name: offset in: query - schema: type: string description: Maximum number of records to return (max 100) example: '50' required: false description: Maximum number of records to return (max 100) name: limit in: query responses: '200': description: List of member assignments content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string format: uuid description: Unique identifier for the assignment example: 550e8400-e29b-41d4-a716-446655440000 user_id: type: string description: Clerk user ID of the assigned member example: user_abc123 organization_id: type: string description: Organization ID example: org_xyz789 guardrail_id: type: string format: uuid description: ID of the guardrail example: 550e8400-e29b-41d4-a716-446655440001 assigned_by: type: string nullable: true description: User ID of who made the assignment example: user_abc123 created_at: type: string description: ISO 8601 timestamp of when the assignment was created example: '2025-08-24T10:30:00Z' required: - id - user_id - organization_id - guardrail_id - assigned_by - created_at description: List of member assignments total_count: type: number description: Total number of member assignments example: 10 required: - data - total_count '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Guardrail not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' post: operationId: bulkAssignMembersToGuardrail x-speakeasy-name-override: bulkAssignMembers tags: - Guardrails summary: Bulk assign members to a guardrail description: >- Assign multiple organization members to a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail name: id in: path requestBody: content: application/json: schema: type: object properties: member_user_ids: type: array items: type: string minLength: 1 minItems: 1 description: Array of member user IDs to assign to the guardrail example: - user_abc123 - user_def456 required: - member_user_ids required: true responses: '200': description: Assignment result content: application/json: schema: type: object properties: assigned_count: type: number description: Number of members successfully assigned example: 2 required: - assigned_count '400': description: Bad Request - Invalid input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Guardrail not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails/{id}/assignments/keys/remove: post: operationId: bulkUnassignKeysFromGuardrail x-speakeasy-name-override: bulkUnassignKeys tags: - Guardrails summary: Bulk unassign keys from a guardrail description: >- Unassign multiple API keys from a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail name: id in: path requestBody: content: application/json: schema: type: object properties: key_hashes: type: array items: type: string minLength: 1 minItems: 1 description: Array of API key hashes to unassign from the guardrail example: - c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93 required: - key_hashes required: true responses: '200': description: Unassignment result content: application/json: schema: type: object properties: unassigned_count: type: number description: Number of keys successfully unassigned example: 3 required: - unassigned_count '400': description: Bad Request - Invalid input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Guardrail not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /guardrails/{id}/assignments/members/remove: post: operationId: bulkUnassignMembersFromGuardrail x-speakeasy-name-override: bulkUnassignMembers tags: - Guardrails summary: Bulk unassign members from a guardrail description: >- Unassign multiple organization members from a specific guardrail. [Management key](/docs/guides/overview/auth/management-api-keys) required. parameters: - schema: type: string format: uuid description: The unique identifier of the guardrail example: 550e8400-e29b-41d4-a716-446655440000 required: true description: The unique identifier of the guardrail name: id in: path requestBody: content: application/json: schema: type: object properties: member_user_ids: type: array items: type: string minLength: 1 minItems: 1 description: Array of member user IDs to unassign from the guardrail example: - user_abc123 - user_def456 required: - member_user_ids required: true responses: '200': description: Unassignment result content: application/json: schema: type: object properties: unassigned_count: type: number description: Number of members successfully unassigned example: 2 required: - unassigned_count '400': description: Bad Request - Invalid input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Missing or invalid authentication content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '404': description: Guardrail not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /key: get: operationId: getCurrentKey x-speakeasy-name-override: getCurrentKeyMetadata tags: - API Keys summary: Get current API key description: Get information on the API key associated with the current authentication session responses: '200': description: API key details content: application/json: schema: type: object properties: data: type: object properties: label: type: string description: Human-readable label for the API key example: sk-or-v1-0e6...1c96 limit: type: number nullable: true description: Spending limit for the API key in USD example: 100 usage: type: number description: Total OpenRouter credit usage (in USD) for the API key example: 25.5 usage_daily: type: number description: OpenRouter credit usage (in USD) for the current UTC day example: 25.5 usage_weekly: type: number description: OpenRouter credit usage (in USD) for the current UTC week (Monday-Sunday) example: 25.5 usage_monthly: type: number description: OpenRouter credit usage (in USD) for the current UTC month example: 25.5 byok_usage: type: number description: Total external BYOK usage (in USD) for the API key example: 17.38 byok_usage_daily: type: number description: External BYOK usage (in USD) for the current UTC day example: 17.38 byok_usage_weekly: type: number description: External BYOK usage (in USD) for the current UTC week (Monday-Sunday) example: 17.38 byok_usage_monthly: type: number description: External BYOK usage (in USD) for current UTC month example: 17.38 is_free_tier: type: boolean description: Whether this is a free tier API key example: false is_management_key: type: boolean description: Whether this is a management key example: false is_provisioning_key: type: boolean description: Whether this is a management key deprecated: true example: false limit_remaining: type: number nullable: true description: Remaining spending limit in USD example: 74.5 limit_reset: type: string nullable: true description: Type of limit reset for the API key example: monthly include_byok_in_limit: type: boolean description: Whether to include external BYOK usage in the credit limit example: false expires_at: type: string nullable: true format: date-time description: ISO 8601 UTC timestamp when the API key expires, or null if no expiration example: '2027-12-31T23:59:59Z' rate_limit: type: object properties: requests: type: number description: Number of requests allowed per interval example: 1000 interval: type: string description: Rate limit interval example: 1h note: type: string description: Note about the rate limit example: This field is deprecated and safe to ignore. required: - requests - interval - note description: Legacy rate limit information about a key. Will always return -1. deprecated: true example: requests: 1000 interval: 1h note: This field is deprecated and safe to ignore. 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 - rate_limit description: Current API key information example: label: sk-or-v1-au7...890 limit: 100 usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 is_free_tier: false is_management_key: false is_provisioning_key: false limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false expires_at: '2027-12-31T23:59:59Z' rate_limit: requests: 1000 interval: 1h note: This field is deprecated and safe to ignore. required: - data example: data: label: sk-or-v1-au7...890 limit: 100 usage: 25.5 usage_daily: 25.5 usage_weekly: 25.5 usage_monthly: 25.5 byok_usage: 17.38 byok_usage_daily: 17.38 byok_usage_weekly: 17.38 byok_usage_monthly: 17.38 is_free_tier: false is_management_key: false is_provisioning_key: false limit_remaining: 74.5 limit_reset: monthly include_byok_in_limit: false expires_at: '2027-12-31T23:59:59Z' rate_limit: requests: 1000 interval: 1h note: This field is deprecated and safe to ignore. '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /auth/keys: post: operationId: exchangeAuthCodeForAPIKey tags: - OAuth summary: Exchange authorization code for API key description: Exchange an authorization code from the PKCE flow for a user-controlled API key requestBody: content: application/json: schema: type: object properties: code: type: string description: The authorization code received from the OAuth redirect example: auth_code_abc123def456 code_verifier: type: string description: The code verifier if code_challenge was used in the authorization request example: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk code_challenge_method: type: string nullable: true enum: - S256 - plain description: The method used to generate the code challenge example: S256 required: - code example: code: auth_code_abc123def456 code_verifier: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk code_challenge_method: S256 required: true responses: '200': description: Successfully exchanged code for an API key content: application/json: schema: type: object properties: key: type: string description: The API key to use for OpenRouter requests example: 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 user_id: type: string nullable: true description: User ID associated with the API key example: user_2yOPcMpKoQhcd4bVgSMlELRaIah required: - key - user_id example: key: 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 user_id: user_2yOPcMpKoQhcd4bVgSMlELRaIah '400': description: Bad Request - Invalid request parameters or malformed input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '403': description: Forbidden - Authentication successful but insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ForbiddenResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' /auth/keys/code: post: x-speakeasy-name-override: createAuthCode tags: - OAuth summary: Create authorization code description: Create an authorization code for the PKCE flow to generate a user-controlled API key requestBody: content: application/json: schema: type: object properties: callback_url: type: string format: uri description: >- The callback URL to redirect to after authorization. Note, only https URLs on ports 443 and 3000 are allowed. example: https://myapp.com/auth/callback code_challenge: type: string description: PKCE code challenge for enhanced security example: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM code_challenge_method: type: string enum: - S256 - plain description: The method used to generate the code challenge example: S256 limit: type: number description: Credit limit for the API key to be created example: 100 expires_at: type: string nullable: true format: date-time description: Optional expiration time for the API key to be created key_label: type: string maxLength: 100 description: Optional custom label for the API key. Defaults to the app name if not provided. example: My Custom Key usage_limit_type: type: string enum: - daily - weekly - monthly description: Optional credit limit reset interval. When set, the credit limit resets on this interval. example: monthly spawn_agent: type: string description: Agent identifier for spawn telemetry x-speakeasy-ignore: true x-fern-ignore: true spawn_cloud: type: string description: Cloud identifier for spawn telemetry x-speakeasy-ignore: true x-fern-ignore: true required: - callback_url example: callback_url: https://myapp.com/auth/callback code_challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM code_challenge_method: S256 limit: 100 required: true responses: '200': description: Successfully created authorization code content: application/json: schema: type: object properties: data: type: object properties: id: type: string description: The authorization code ID to use in the exchange request example: auth_code_xyz789 app_id: type: number description: The application ID associated with this auth code example: 12345 created_at: type: string description: ISO 8601 timestamp of when the auth code was created example: '2025-08-24T10:30:00Z' required: - id - app_id - created_at description: Auth code data example: id: auth_code_xyz789 app_id: 12345 created_at: '2025-08-24T10:30:00Z' required: - data '400': description: Bad Request - Invalid request parameters or malformed input content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' '401': description: Unauthorized - Authentication required or invalid credentials content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' '500': description: Internal Server Error - Unexpected server error content: application/json: schema: $ref: '#/components/schemas/InternalServerResponse' operationId: createAuthKeysCode tags: - name: API Keys description: API key management endpoints - name: Analytics description: Analytics and usage endpoints - name: Anthropic Messages description: Anthropic Messages endpoints - name: Chat description: Chat completion endpoints - name: Credits description: Credit management endpoints - name: Embeddings description: Text embedding endpoints - name: Endpoints description: Endpoint information - name: Generations description: Generation history endpoints - name: Guardrails description: Guardrails endpoints - name: Models description: Model information endpoints - name: OAuth description: OAuth authentication endpoints - name: Providers description: Provider information endpoints - name: beta.responses description: beta.responses endpoints x-fern-base-path: / x-retry-strategy: type: exponential initialDelay: 500 maxDelay: 60000 maxAttempts: 3