{"openapi":"3.0.3","info":{"title":"Berget AI API","description":"OpenAI-compatible inference API for chat completions, embeddings, audio transcription, and model discovery.\n\n## Quick Start\n\n1. Get an API key from the dashboard\n2. Set your API key as an environment variable:\n```bash\nexport BERGET_API_KEY=\"your-api-key-here\"\n```\n3. Make your first request:\n```bash\ncurl -X POST https://api.berget.ai/v1/chat/completions \\\n  --header \"Authorization: Bearer $BERGET_API_KEY\" \\\n  --header \"Content-Type: application/json\" \\\n  --data '{\"model\": \"mistral-small\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]}'\n```","version":"1.0.0","contact":{"name":"Berget AI Support","email":"support@berget.ai","url":"https://berget.ai/support"},"license":{"name":"Proprietary","url":"https://berget.ai/terms"}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT or API key","description":"Bearer token or API key. Pass either a JWT token or an API key (sk_ber_*) in the Authorization header as: Bearer <token>"}},"schemas":{"ModelInput":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Unique identifier for the model"},"object":{"type":"string","enum":["model"],"description":"Object type, always \"model\""},"created":{"type":"number","description":"Unix timestamp when the model was created"},"owned_by":{"type":"string","minLength":1,"description":"Organization that owns the model"},"name":{"type":"string","minLength":1,"description":"Display name of the model"},"pricing":{"type":"object","properties":{"currency":{"type":"string","description":"Currency code (always \"EUR\")"},"input":{"type":"number","description":"Cost per input token in EUR"},"output":{"type":"number","description":"Cost per output token in EUR"},"unit":{"type":"string","description":"Pricing unit (e.g. \"€ / M Token\")"}},"required":["currency","input","output","unit"],"description":"Pricing information for the model"},"capabilities":{"type":"object","properties":{"classification":{"default":false,"description":"Whether the model supports classification tasks","type":"boolean"},"embeddings":{"default":false,"description":"Whether the model supports generating embeddings","type":"boolean"},"formatted_output":{"default":false,"description":"Whether the model supports formatted output","type":"boolean"},"function_calling":{"default":false,"description":"Whether the model supports function calling","type":"boolean"},"json_mode":{"default":false,"description":"Whether the model supports JSON mode","type":"boolean"},"streaming":{"default":false,"description":"Whether the model supports streaming output","type":"boolean"},"vision":{"default":false,"description":"Whether the model supports vision/image input","type":"boolean"}},"description":"Capabilities of the model"},"quantization":{"description":"Quantization method used","type":"string","enum":["BF16","FP8","FP16","INT4","INT8","MXFP4"]},"aliases":{"type":"array","items":{"type":"string"},"description":"Alternative names/aliases for the model"},"license":{"type":"string","description":"License of the model"},"lifecycle_state":{"type":"string","description":"Lifecycle state of the model (legacy — use lifecycle_status)"},"lifecycle_status":{"type":"string","enum":["preview","active","deprecated"],"description":"Lifecycle status of the model. Supersedes lifecycle_state."},"model_path":{"type":"string","description":"Path to the model"},"model_size":{"type":"number","description":"Size of the model in billions of parameters"},"model_type":{"type":"string","description":"Type of the model"},"parent":{"nullable":true,"description":"Parent model ID","type":"string"},"permission":{"type":"array","items":{},"description":"List of permissions"},"root":{"type":"string","description":"Root model ID"},"status":{"type":"object","properties":{"up":{"type":"boolean","description":"Whether the model endpoint is reachable"},"latency":{"description":"Round-trip latency of the last health check in milliseconds","type":"number"}},"required":["up"],"description":"Current status of the model endpoint"},"release_date":{"type":"string","description":"Release date of the model (YYYY-MM-DD)"},"end_of_life":{"description":"End-of-life date of the model (YYYY-MM-DD)","type":"string"}},"required":["id","object","created","owned_by","name","pricing","capabilities","aliases","license","lifecycle_state","lifecycle_status","model_path","model_size","model_type","parent","permission","root","status","release_date"]},"ModelListResponseInput":{"type":"object","properties":{"object":{"type":"string","enum":["list"],"description":"Object type, always \"list\""},"data":{"type":"array","items":{"$ref":"#/components/schemas/ModelInput"},"description":"List of models"}},"required":["object","data"]},"ChatMessageInput":{"type":"object","properties":{"role":{"type":"string","enum":["developer","system","user","assistant","tool","function"],"description":"Role of the message sender"},"content":{"description":"Content of the message (string, array of parts, or null). Required unless tool_calls or function_call is specified.","anyOf":[{"type":"string"},{"type":"array","items":{"anyOf":[{"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"},"detail":{"type":"string","enum":["auto","low","high"]}},"required":["url"]}},"required":["type","image_url"]},{"type":"object","properties":{"type":{"type":"string","enum":["input_audio"]},"input_audio":{"type":"object","properties":{"data":{"type":"string"},"format":{"type":"string","enum":["wav","mp3"]}},"required":["data","format"]}},"required":["type","input_audio"]},{"type":"object","properties":{"type":{"type":"string","enum":["video_url"]},"video_url":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}},"required":["type","video_url"]}]}}],"nullable":true},"name":{"description":"Optional name for the sender","type":"string"},"tool_calls":{"description":"Tool calls generated by the assistant","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the tool call"},"type":{"type":"string","enum":["function"],"description":"Tool call type, always \"function\""},"function":{"type":"object","properties":{"name":{"type":"string","description":"Name of the function"},"arguments":{"type":"string","description":"JSON-encoded arguments for the function"}},"required":["name","arguments"],"description":"Function call details"}},"required":["id","type","function"],"additionalProperties":{}}},"function_call":{"description":"Legacy function call","type":"object","properties":{"arguments":{"type":"string"},"name":{"type":"string"}},"required":["arguments","name"]},"tool_call_id":{"description":"ID of the tool call this message is a response to","type":"string"},"reasoning_content":{"description":"Reasoning trace from the provider reasoning parser","nullable":true,"type":"string"},"reasoning":{"description":"Alias of reasoning_content","nullable":true,"type":"string"}},"required":["role"],"additionalProperties":{}},"ChatCompletionRequestInput":{"type":"object","properties":{"model":{"type":"string","minLength":1,"description":"ID of the model to use"},"messages":{"minItems":1,"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["developer","system","user","assistant","tool","function"],"description":"Role of the message sender"},"content":{"description":"Content of the message (string, array of parts, or null). Required unless tool_calls or function_call is specified.","anyOf":[{"type":"string"},{"type":"array","items":{"anyOf":[{"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"},"detail":{"type":"string","enum":["auto","low","high"]}},"required":["url"]}},"required":["type","image_url"]},{"type":"object","properties":{"type":{"type":"string","enum":["input_audio"]},"input_audio":{"type":"object","properties":{"data":{"type":"string"},"format":{"type":"string","enum":["wav","mp3"]}},"required":["data","format"]}},"required":["type","input_audio"]},{"type":"object","properties":{"type":{"type":"string","enum":["video_url"]},"video_url":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}},"required":["type","video_url"]}]}}],"nullable":true},"name":{"description":"Optional name for the sender","type":"string"},"tool_calls":{"description":"Tool calls generated by the assistant","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the tool call"},"type":{"type":"string","enum":["function"],"description":"Tool call type, always \"function\""},"function":{"type":"object","properties":{"name":{"type":"string","description":"Name of the function"},"arguments":{"type":"string","description":"JSON-encoded arguments for the function"}},"required":["name","arguments"],"description":"Function call details"}},"required":["id","type","function"],"additionalProperties":{}}},"function_call":{"description":"Legacy function call","type":"object","properties":{"arguments":{"type":"string"},"name":{"type":"string"}},"required":["arguments","name"]},"tool_call_id":{"description":"ID of the tool call this message is a response to","type":"string"},"reasoning_content":{"description":"Reasoning trace from the provider reasoning parser","nullable":true,"type":"string"},"reasoning":{"description":"Alias of reasoning_content","nullable":true,"type":"string"}},"required":["role"]},"description":"Array of chat messages"},"stream":{"default":false,"description":"Whether to stream the response","type":"boolean"},"temperature":{"description":"Sampling temperature (0–2). Higher = more random","type":"number","minimum":0,"maximum":2},"top_p":{"description":"Nucleus sampling cutoff","type":"number","minimum":0,"maximum":1},"top_logprobs":{"description":"Number of top log probabilities to return","type":"number","minimum":0,"maximum":20},"max_tokens":{"description":"Maximum tokens to generate","type":"number"},"max_completion_tokens":{"description":"Maximum completion tokens (OpenAI-style alias)","type":"number"},"n":{"description":"Number of completions to generate","type":"integer","minimum":1,"maximum":128},"stop":{"description":"Stop sequence(s)","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"seed":{"description":"Random seed for determinism","type":"number"},"frequency_penalty":{"description":"Frequency penalty (–2 to 2)","type":"number","minimum":-2,"maximum":2},"presence_penalty":{"description":"Presence penalty (–2 to 2)","type":"number","minimum":-2,"maximum":2},"logit_bias":{"description":"Logit bias map per token","type":"object","additionalProperties":{"type":"number"}},"logprobs":{"description":"Return log probabilities","anyOf":[{"type":"boolean"},{"type":"number"}]},"reasoning_effort":{"description":"Vendor-neutral reasoning control, converted to provider-specific parameters. Note: thinking cannot be disabled on models that always think (e.g. Kimi K3); on those, \"none\" maps to the provider's lowest thinking budget.","type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"thinking":{"description":"Moonshot/Kimi K2-specific parameter to control reasoning. When type is \"disabled\", the model returns only final content without chain-of-thought. Not supported by Kimi K3, which always thinks — use reasoning_effort instead.","type":"object","properties":{"type":{"type":"string","enum":["disabled","enabled","adaptive"],"description":"Reasoning behavior. Use \"disabled\" to get clean final content (no chain-of-thought)."}},"required":["type"]},"json_mode":{"description":"DEPRECATED: Use response_format instead.","type":"boolean"},"function_call":{"description":"DEPRECATED: Use tool_choice instead. Controls how the model uses functions. Will be auto-converted to tool_choice format.","anyOf":[{"type":"string","enum":["auto","none"]},{"type":"object","properties":{"name":{"type":"string","description":"The name of the function to call"}},"required":["name"]}]},"functions":{"description":"DEPRECATED: Use tools instead. List of functions the model may generate JSON for. Will be auto-converted to tools format.","type":"array","items":{}},"modalities":{"description":"Output modalities","type":"array","items":{"type":"string","enum":["text","audio"]}},"audio":{"description":"Audio output settings","type":"object","properties":{"voice":{"type":"string"},"format":{"type":"string"}},"required":["voice","format"]},"tools":{"description":"List of tools available to the model","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object","additionalProperties":{}},"strict":{"type":"boolean"}},"required":["name"]}},"required":["type","function"]}},"tool_choice":{"description":"Tool selection strategy","anyOf":[{"type":"string","enum":["none","auto","required"]},{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"required":["type","function"]}]},"parallel_tool_calls":{"default":true,"description":"Allow parallel tool calls","type":"boolean"},"response_format":{"description":"Desired response format","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["json_object"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["json_schema"]},"json_schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"schema":{"type":"object","additionalProperties":{}},"strict":{"type":"boolean"}},"required":["name","schema"]}},"required":["type","json_schema"]}]},"stream_options":{"description":"Streaming options","type":"object","properties":{"include_usage":{"description":"Include usage in streaming chunks","type":"boolean"}}},"service_tier":{"description":"Service tier preference","type":"string","enum":["auto","default"]},"user":{"description":"End-user identifier for rate limiting","type":"string"},"top_k":{"description":"Top-k sampling (vLLM & SGLang only)","type":"number"},"min_p":{"description":"Min-p sampling (vLLM & SGLang only)","type":"number"},"repetition_penalty":{"description":"Repetition penalty (vLLM & SGLang only)","type":"number"},"stop_token_ids":{"description":"Token ids that stop generation (vLLM & SGLang only)","type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"required":["model","messages"],"additionalProperties":{}},"ChatCompletionResponseInput":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the chat completion"},"object":{"type":"string","enum":["chat.completion"],"description":"Object type, always \"chat.completion\""},"created":{"type":"number","description":"Unix timestamp when the completion was created"},"model":{"type":"string","description":"ID of the model used"},"system_fingerprint":{"description":"System fingerprint for reproducibility","nullable":true,"type":"string"},"service_tier":{"description":"Service tier used","nullable":true,"type":"string"},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"message":{"type":"object","properties":{"role":{"type":"string"},"content":{"nullable":true,"type":"string"},"reasoning_content":{"description":"Reasoning trace from the provider reasoning parser","nullable":true,"type":"string"},"reasoning":{"description":"Reasoning trace (alternate key used by some parsers)","nullable":true,"type":"string"},"tool_calls":{"nullable":true,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the tool call"},"type":{"type":"string","enum":["function"],"description":"Tool call type, always \"function\""},"function":{"type":"object","properties":{"name":{"type":"string","description":"Name of the function"},"arguments":{"type":"string","description":"JSON-encoded arguments for the function"}},"required":["name","arguments"],"description":"Function call details"}},"required":["id","type","function"],"additionalProperties":{}}},"function_call":{"nullable":true,"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"]},"refusal":{"description":"Reason for refusal","nullable":true,"type":"string"},"annotations":{"description":"Annotations (e.g. web-search URL citations)","nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["url_citation"],"description":"Annotation type, always \"url_citation\""},"url_citation":{"type":"object","properties":{"end_index":{"type":"number","description":"Index of the last character of the citation"},"start_index":{"type":"number","description":"Index of the first character of the citation"},"url":{"type":"string","description":"URL of the cited web resource"},"title":{"type":"string","description":"Title of the cited web resource"}},"required":["end_index","start_index","url","title"],"description":"URL citation details"}},"required":["type","url_citation"],"additionalProperties":{}}},"audio":{"description":"Audio output","nullable":true,"type":"object","properties":{"id":{"type":"string","description":"Audio ID"},"data":{"description":"Base64-encoded audio data","type":"string"},"expires_at":{"description":"Unix timestamp when the audio expires","type":"number"},"transcript":{"description":"Transcript of the audio","type":"string"}},"required":["id"]}},"required":["role","content"],"additionalProperties":{},"description":"Message object"},"finish_reason":{"nullable":true,"description":"Reason the completion finished","type":"string"},"logprobs":{"description":"Log probabilities","nullable":true,"type":"object","properties":{"content":{"description":"Content log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"]}}},"required":["token","bytes","logprob","top_logprobs"]}},"refusal":{"description":"Refusal log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"]}}},"required":["token","bytes","logprob","top_logprobs"]}}}}},"required":["index","message","finish_reason"],"additionalProperties":{},"description":"Completion choice"},"description":"Array of completion choices"},"usage":{"description":"Token usage information. Optional because some vLLM/SGLang backends return HTTP 200 with a valid completion but no `usage` object; the pipeline skips token-derived side effects (metrics, CO₂, billing) when absent and forwards the response untouched.","type":"object","properties":{"prompt_tokens":{"type":"number","description":"Number of prompt tokens"},"completion_tokens":{"type":"number","description":"Number of completion tokens"},"total_tokens":{"type":"number","description":"Total number of tokens"},"prompt_tokens_details":{"description":"Prompt token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"cached_tokens":{"description":"Number of cached tokens","type":"number"},"cache_write_tokens":{"description":"Number of tokens written to the prompt cache","type":"number"}},"additionalProperties":{}},"completion_tokens_details":{"description":"Completion token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"reasoning_tokens":{"description":"Number of reasoning tokens","type":"number"},"accepted_prediction_tokens":{"description":"Number of accepted prediction tokens","type":"number"},"rejected_prediction_tokens":{"description":"Number of rejected prediction tokens","type":"number"}},"additionalProperties":{}}},"required":["prompt_tokens","completion_tokens","total_tokens"],"additionalProperties":{}}},"required":["id","object","created","model","choices"],"additionalProperties":{}},"ChatCompletionChunkInput":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the chat completion chunk"},"object":{"type":"string","enum":["chat.completion.chunk"],"description":"Object type, always \"chat.completion.chunk\""},"created":{"type":"number","description":"Unix timestamp when the chunk was created"},"model":{"type":"string","description":"ID of the model used"},"system_fingerprint":{"description":"System fingerprint for reproducibility","nullable":true,"type":"string"},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number","description":"Index of the choice"},"delta":{"type":"object","properties":{"role":{"description":"Role of the message sender","nullable":true,"type":"string"},"content":{"description":"Content delta","nullable":true,"type":"string"},"tool_calls":{"description":"Tool call deltas","nullable":true,"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"id":{"nullable":true,"type":"string"},"type":{"nullable":true,"type":"string"},"function":{"nullable":true,"type":"object","properties":{"name":{"nullable":true,"type":"string"},"arguments":{"nullable":true,"type":"string"}}}},"required":["index"]}},"function_call":{"description":"Legacy function call delta","type":"object","properties":{"name":{"description":"Name of the function","type":"string"},"arguments":{"description":"JSON-encoded function arguments","type":"string"}}},"refusal":{"description":"Reason for refusal","nullable":true,"type":"string"},"annotations":{"description":"Annotation deltas (e.g. web-search URL citations)","nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["url_citation"],"description":"Annotation type, always \"url_citation\""},"url_citation":{"type":"object","properties":{"end_index":{"type":"number","description":"Index of the last character of the citation"},"start_index":{"type":"number","description":"Index of the first character of the citation"},"url":{"type":"string","description":"URL of the cited web resource"},"title":{"type":"string","description":"Title of the cited web resource"}},"required":["end_index","start_index","url","title"],"description":"URL citation details"}},"required":["type","url_citation"],"additionalProperties":{}}},"audio":{"description":"Audio output delta","type":"object","properties":{"id":{"description":"Audio ID","type":"string"},"data":{"description":"Base64-encoded audio data","type":"string"},"expires_at":{"description":"Unix timestamp when the audio expires","type":"number"},"transcript":{"description":"Transcript of the audio","type":"string"}}}},"description":"Delta object"},"finish_reason":{"description":"Reason the completion finished","nullable":true,"type":"string"},"logprobs":{"description":"Log probabilities","nullable":true,"type":"object","properties":{"content":{"description":"Content log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"]}}},"required":["token","bytes","logprob","top_logprobs"]}},"refusal":{"description":"Refusal log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"]}}},"required":["token","bytes","logprob","top_logprobs"]}}}}},"required":["index","delta"],"description":"Streaming choice"},"description":"Array of streaming choices"},"usage":{"description":"Token usage information (sent in final chunk when stream_options.include_usage is true)","nullable":true,"type":"object","properties":{"prompt_tokens":{"type":"number","description":"Number of prompt tokens"},"completion_tokens":{"type":"number","description":"Number of completion tokens"},"total_tokens":{"type":"number","description":"Total number of tokens"},"prompt_tokens_details":{"description":"Prompt token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"cached_tokens":{"description":"Number of cached tokens","type":"number"},"cache_write_tokens":{"description":"Number of tokens written to the prompt cache","type":"number"}}},"completion_tokens_details":{"description":"Completion token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"reasoning_tokens":{"description":"Number of reasoning tokens","type":"number"},"accepted_prediction_tokens":{"description":"Number of accepted prediction tokens","type":"number"},"rejected_prediction_tokens":{"description":"Number of rejected prediction tokens","type":"number"}}}},"required":["prompt_tokens","completion_tokens","total_tokens"]}},"required":["id","object","created","model","choices"],"additionalProperties":{}},"CreateTranscriptionRequestInput":{"type":"object","properties":{"file":{},"model":{"type":"string","minLength":1,"description":"ID of the model to use"},"language":{"description":"ISO-639-1 language code (e.g. en, sv, de)","type":"string","minLength":2,"maxLength":2,"pattern":"^[A-Za-z]{2}$"},"prompt":{"description":"Optional text to steer style or continue a prior segment","type":"string"},"response_format":{"default":"json","description":"Output format","type":"string","enum":["json","text","srt","verbose_json","vtt","vtt_json","aud","diarized_json"]},"temperature":{"type":"string"},"include":{"description":"Extra data to include. 'logprobs' requires response_format=json and gpt-4o-transcribe models.","minItems":1,"type":"array","items":{"type":"string","enum":["logprobs"]}},"timestamp_granularities":{"type":"string"},"stream":{"default":false,"description":"Stream results via SSE","nullable":true,"type":"boolean"},"chunking_strategy":{"description":"How audio is cut into chunks: auto, a VadConfig object, or null","anyOf":[{"type":"string","enum":["auto"]},{"type":"object","properties":{"type":{"type":"string","enum":["server_vad"],"description":"Must be 'server_vad'"},"prefix_padding_ms":{"default":300,"description":"Audio to include before detected speech (ms)","type":"integer","minimum":0,"maximum":9007199254740991},"silence_duration_ms":{"default":200,"description":"Silence needed to mark speech stop (ms)","type":"integer","minimum":0,"maximum":9007199254740991},"threshold":{"default":0.5,"description":"VAD sensitivity 0..1","type":"number","minimum":0,"maximum":1}},"required":["type"]}],"nullable":true},"known_speaker_names":{"description":"Diarization speaker identifiers, up to 4","maxItems":4,"type":"array","items":{"type":"string","minLength":1}},"known_speaker_references":{"description":"Diarization reference clips as base64 data URLs, up to 4","maxItems":4,"type":"array","items":{"type":"string","pattern":"^data:audio\\/[A-Za-z0-9.+-]+;base64,"}},"align":{"default":true,"description":"Enable word-level alignment (required for subtitle formats)","type":"boolean"},"diarize":{"default":false,"description":"Enable speaker diarization (requires align=true)","type":"boolean"},"speaker_embeddings":{"default":false,"description":"Include speaker embeddings in diarization output","type":"boolean"},"highlight_words":{"default":false,"description":"Highlight words in vtt/srt output","type":"boolean"},"suppress_numerals":{"default":true,"description":"Spell out numbers instead of numerals","type":"boolean"},"hotwords":{"description":"Comma-separated hotwords to bias toward","type":"string"},"batch_size":{"description":"Inference batch size","type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"chunk_size":{"description":"VAD chunk size in seconds","type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991}},"required":["file","model"],"additionalProperties":{}},"CreateTranscriptionResponseInput":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"],"additionalProperties":{}},"VerboseCreateTranscriptionResponseInput":{"type":"object","properties":{"text":{"type":"string"},"duration":{"type":"number"},"language":{"type":"string"},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string"},"speaker":{"description":"Speaker label (WhisperX diarization)","type":"string"}},"required":["id","start","end","text"]}},"words":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker label (WhisperX diarization)","type":"string"},"score":{"description":"Word alignment confidence (WhisperX align)","type":"number"}},"required":["word","start","end"]}},"vtt_text":{"description":"WebVTT text when response_format=vtt_json","type":"string"}},"required":["text","duration","language","segments"],"additionalProperties":{}},"EmbeddingRequestInput":{"type":"object","properties":{"model":{"type":"string","minLength":1,"description":"ID of the model to use"},"input":{"anyOf":[{"type":"string","minLength":1},{"minItems":1,"maxItems":2048,"type":"array","items":{"type":"string","minLength":1}},{"minItems":1,"maxItems":8192,"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"minItems":1,"maxItems":2048,"type":"array","items":{"minItems":1,"maxItems":8192,"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}}],"description":"Input text(s) or token ID(s) to embed"},"dimensions":{"description":"Number of dimensions in the output","type":"integer","minimum":1,"maximum":9007199254740991},"encoding_format":{"default":"float","description":"Format of the embeddings","type":"string","enum":["float","base64"]},"user":{"description":"End-user identifier for rate limiting","type":"string"}},"required":["model","input"],"additionalProperties":{}},"EmbeddingResponseInput":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"type":"object","properties":{"object":{"type":"string","enum":["embedding"]},"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"embedding":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"string"}],"description":"The embedding vector (float array or base64-encoded string)"}},"required":["object","index","embedding"]}},"model":{"type":"string","description":"ID of the model used"},"usage":{"type":"object","properties":{"prompt_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of prompt tokens"},"total_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total number of tokens"}},"required":["prompt_tokens","total_tokens"]}},"required":["object","data","model","usage"],"additionalProperties":{}},"CohereRerankDocumentInput":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text of the document to rerank"}},"required":["text"],"additionalProperties":{}},"CohereRerankRequestInput":{"type":"object","properties":{"model":{"description":"The identifier of the model to use. Optional in v1, though callers should send it.","type":"string"},"query":{"type":"string","minLength":1,"description":"The search query"},"documents":{"minItems":1,"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"$ref":"#/components/schemas/CohereRerankDocumentInput"}]},"description":"A list of document objects or strings to rerank"},"top_n":{"description":"The number of most relevant documents/indices to return. Defaults to the length of documents.","type":"integer","minimum":1,"maximum":9007199254740991},"rank_fields":{"description":"For object documents, which keys to consider for reranking, in priority order. Forwarded to the upstream provider when supported.","type":"array","items":{"type":"string"}},"return_documents":{"default":false,"description":"If true, returns document text/objects in results. Defaults to false per Cohere v1 spec.","type":"boolean"},"max_chunks_per_doc":{"default":10,"description":"The maximum number of chunks to produce internally from a document. Forwarded to upstream when supported.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["query","documents"],"additionalProperties":{}},"CohereRerankResponseInput":{"type":"object","properties":{"id":{"description":"Unique identifier for the rerank operation","type":"string"},"model":{"type":"string","description":"Canonical model ID"},"object":{"description":"Object type discriminator.","type":"string","enum":["reranking"]},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number","description":"Index into the original list of documents"},"relevance_score":{"type":"number","description":"Relevance score (0–1)"},"document":{"description":"Echo of the input document, present only when return_documents is true","anyOf":[{"type":"string"},{"$ref":"#/components/schemas/CohereRerankDocumentInput"}]}},"required":["index","relevance_score"]},"description":"An ordered list of ranked documents"},"meta":{"description":"Request metadata. Not all fields are populated by upstream providers.","type":"object","properties":{"api_version":{"type":"object","properties":{"version":{"type":"string"},"is_deprecated":{"type":"boolean"},"is_experimental":{"type":"boolean"}},"required":["version"]},"billed_units":{"type":"object","properties":{"images":{"type":"number"},"input_tokens":{"type":"number"},"image_tokens":{"type":"number"},"output_tokens":{"type":"number"},"search_units":{"type":"number"},"classifications":{"type":"number"}}},"tokens":{"type":"object","properties":{"input_tokens":{"type":"number"},"output_tokens":{"type":"number"}}},"cached_tokens":{"type":"number"}}},"usage":{"description":"Token usage (Berget/upstream extension; not part of the Cohere v1 spec).","type":"object","properties":{"prompt_tokens":{"type":"number"},"total_tokens":{"type":"number"}},"required":["total_tokens"]}},"required":["model","results"],"additionalProperties":{}},"Model":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Unique identifier for the model"},"object":{"type":"string","enum":["model"],"description":"Object type, always \"model\""},"created":{"type":"number","description":"Unix timestamp when the model was created"},"owned_by":{"type":"string","minLength":1,"description":"Organization that owns the model"},"name":{"type":"string","minLength":1,"description":"Display name of the model"},"pricing":{"type":"object","properties":{"currency":{"type":"string","description":"Currency code (always \"EUR\")"},"input":{"type":"number","description":"Cost per input token in EUR"},"output":{"type":"number","description":"Cost per output token in EUR"},"unit":{"type":"string","description":"Pricing unit (e.g. \"€ / M Token\")"}},"required":["currency","input","output","unit"],"additionalProperties":false,"description":"Pricing information for the model"},"capabilities":{"type":"object","properties":{"classification":{"default":false,"description":"Whether the model supports classification tasks","type":"boolean"},"embeddings":{"default":false,"description":"Whether the model supports generating embeddings","type":"boolean"},"formatted_output":{"default":false,"description":"Whether the model supports formatted output","type":"boolean"},"function_calling":{"default":false,"description":"Whether the model supports function calling","type":"boolean"},"json_mode":{"default":false,"description":"Whether the model supports JSON mode","type":"boolean"},"streaming":{"default":false,"description":"Whether the model supports streaming output","type":"boolean"},"vision":{"default":false,"description":"Whether the model supports vision/image input","type":"boolean"}},"required":["classification","embeddings","formatted_output","function_calling","json_mode","streaming","vision"],"additionalProperties":false,"description":"Capabilities of the model"},"quantization":{"description":"Quantization method used","type":"string","enum":["BF16","FP8","FP16","INT4","INT8","MXFP4"]},"aliases":{"type":"array","items":{"type":"string"},"description":"Alternative names/aliases for the model"},"license":{"type":"string","description":"License of the model"},"lifecycle_state":{"type":"string","description":"Lifecycle state of the model (legacy — use lifecycle_status)"},"lifecycle_status":{"type":"string","enum":["preview","active","deprecated"],"description":"Lifecycle status of the model. Supersedes lifecycle_state."},"model_path":{"type":"string","description":"Path to the model"},"model_size":{"type":"number","description":"Size of the model in billions of parameters"},"model_type":{"type":"string","description":"Type of the model"},"parent":{"nullable":true,"description":"Parent model ID","type":"string"},"permission":{"type":"array","items":{},"description":"List of permissions"},"root":{"type":"string","description":"Root model ID"},"status":{"type":"object","properties":{"up":{"type":"boolean","description":"Whether the model endpoint is reachable"},"latency":{"description":"Round-trip latency of the last health check in milliseconds","type":"number"}},"required":["up"],"additionalProperties":false,"description":"Current status of the model endpoint"},"release_date":{"type":"string","description":"Release date of the model (YYYY-MM-DD)"},"end_of_life":{"description":"End-of-life date of the model (YYYY-MM-DD)","type":"string"}},"required":["id","object","created","owned_by","name","pricing","capabilities","aliases","license","lifecycle_state","lifecycle_status","model_path","model_size","model_type","parent","permission","root","status","release_date"],"additionalProperties":false},"ModelListResponse":{"type":"object","properties":{"object":{"type":"string","enum":["list"],"description":"Object type, always \"list\""},"data":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"description":"List of models"}},"required":["object","data"],"additionalProperties":false},"ChatMessage":{"type":"object","properties":{"role":{"type":"string","enum":["developer","system","user","assistant","tool","function"],"description":"Role of the message sender"},"content":{"description":"Content of the message (string, array of parts, or null). Required unless tool_calls or function_call is specified.","anyOf":[{"type":"string"},{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"text":{"type":"string"}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["image_url"]},"image_url":{"type":"object","properties":{"url":{"type":"string"},"detail":{"type":"string","enum":["auto","low","high"]}},"required":["url"],"additionalProperties":false}},"required":["type","image_url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["input_audio"]},"input_audio":{"type":"object","properties":{"data":{"type":"string"},"format":{"type":"string","enum":["wav","mp3"]}},"required":["data","format"],"additionalProperties":false}},"required":["type","input_audio"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["video_url"]},"video_url":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false}},"required":["type","video_url"],"additionalProperties":false}]}}],"nullable":true},"name":{"description":"Optional name for the sender","type":"string"},"tool_calls":{"description":"Tool calls generated by the assistant","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the tool call"},"type":{"type":"string","enum":["function"],"description":"Tool call type, always \"function\""},"function":{"type":"object","properties":{"name":{"type":"string","description":"Name of the function"},"arguments":{"type":"string","description":"JSON-encoded arguments for the function"}},"required":["name","arguments"],"additionalProperties":false,"description":"Function call details"}},"required":["id","type","function"],"additionalProperties":{}}},"function_call":{"description":"Legacy function call","type":"object","properties":{"arguments":{"type":"string"},"name":{"type":"string"}},"required":["arguments","name"],"additionalProperties":false},"tool_call_id":{"description":"ID of the tool call this message is a response to","type":"string"},"reasoning_content":{"description":"Reasoning trace from the provider reasoning parser","nullable":true,"type":"string"},"reasoning":{"description":"Alias of reasoning_content","nullable":true,"type":"string"}},"required":["role"],"additionalProperties":{}},"ChatCompletionRequest":{"type":"object","properties":{"model":{"type":"string","minLength":1,"description":"ID of the model to use"},"messages":{"minItems":1,"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["developer","system","user","assistant","tool","function"],"description":"Role of the message sender"},"content":{"description":"Content of the message (string, array of parts, or null). Required unless tool_calls or function_call is specified.","anyOf":[{"type":"string"},{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]},"text":{"type":"string"}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["image_url"]},"image_url":{"type":"object","properties":{"url":{"type":"string"},"detail":{"type":"string","enum":["auto","low","high"]}},"required":["url"],"additionalProperties":false}},"required":["type","image_url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["input_audio"]},"input_audio":{"type":"object","properties":{"data":{"type":"string"},"format":{"type":"string","enum":["wav","mp3"]}},"required":["data","format"],"additionalProperties":false}},"required":["type","input_audio"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["video_url"]},"video_url":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false}},"required":["type","video_url"],"additionalProperties":false}]}}],"nullable":true},"name":{"description":"Optional name for the sender","type":"string"},"tool_calls":{"description":"Tool calls generated by the assistant","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the tool call"},"type":{"type":"string","enum":["function"],"description":"Tool call type, always \"function\""},"function":{"type":"object","properties":{"name":{"type":"string","description":"Name of the function"},"arguments":{"type":"string","description":"JSON-encoded arguments for the function"}},"required":["name","arguments"],"additionalProperties":false,"description":"Function call details"}},"required":["id","type","function"],"additionalProperties":{}}},"function_call":{"description":"Legacy function call","type":"object","properties":{"arguments":{"type":"string"},"name":{"type":"string"}},"required":["arguments","name"],"additionalProperties":false},"tool_call_id":{"description":"ID of the tool call this message is a response to","type":"string"},"reasoning_content":{"description":"Reasoning trace from the provider reasoning parser","nullable":true,"type":"string"},"reasoning":{"description":"Alias of reasoning_content","nullable":true,"type":"string"}},"required":["role"],"additionalProperties":false},"description":"Array of chat messages"},"stream":{"default":false,"description":"Whether to stream the response","type":"boolean"},"temperature":{"description":"Sampling temperature (0–2). Higher = more random","type":"number","minimum":0,"maximum":2},"top_p":{"description":"Nucleus sampling cutoff","type":"number","minimum":0,"maximum":1},"top_logprobs":{"description":"Number of top log probabilities to return","type":"number","minimum":0,"maximum":20},"max_tokens":{"description":"Maximum tokens to generate","type":"number"},"max_completion_tokens":{"description":"Maximum completion tokens (OpenAI-style alias)","type":"number"},"n":{"description":"Number of completions to generate","type":"integer","minimum":1,"maximum":128},"stop":{"description":"Stop sequence(s)","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"seed":{"description":"Random seed for determinism","type":"number"},"frequency_penalty":{"description":"Frequency penalty (–2 to 2)","type":"number","minimum":-2,"maximum":2},"presence_penalty":{"description":"Presence penalty (–2 to 2)","type":"number","minimum":-2,"maximum":2},"logit_bias":{"description":"Logit bias map per token","type":"object","additionalProperties":{"type":"number"}},"logprobs":{"description":"Return log probabilities","anyOf":[{"type":"boolean"},{"type":"number"}]},"reasoning_effort":{"description":"Vendor-neutral reasoning control, converted to provider-specific parameters. Note: thinking cannot be disabled on models that always think (e.g. Kimi K3); on those, \"none\" maps to the provider's lowest thinking budget.","type":"string","enum":["none","minimal","low","medium","high","xhigh","max"]},"thinking":{"description":"Moonshot/Kimi K2-specific parameter to control reasoning. When type is \"disabled\", the model returns only final content without chain-of-thought. Not supported by Kimi K3, which always thinks — use reasoning_effort instead.","type":"object","properties":{"type":{"type":"string","enum":["disabled","enabled","adaptive"],"description":"Reasoning behavior. Use \"disabled\" to get clean final content (no chain-of-thought)."}},"required":["type"],"additionalProperties":false},"json_mode":{"description":"DEPRECATED: Use response_format instead.","type":"boolean"},"function_call":{"description":"DEPRECATED: Use tool_choice instead. Controls how the model uses functions. Will be auto-converted to tool_choice format.","anyOf":[{"type":"string","enum":["auto","none"]},{"type":"object","properties":{"name":{"type":"string","description":"The name of the function to call"}},"required":["name"],"additionalProperties":false}]},"functions":{"description":"DEPRECATED: Use tools instead. List of functions the model may generate JSON for. Will be auto-converted to tools format.","type":"array","items":{}},"modalities":{"description":"Output modalities","type":"array","items":{"type":"string","enum":["text","audio"]}},"audio":{"description":"Audio output settings","type":"object","properties":{"voice":{"type":"string"},"format":{"type":"string"}},"required":["voice","format"],"additionalProperties":false},"tools":{"description":"List of tools available to the model","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object","additionalProperties":{}},"strict":{"type":"boolean"}},"required":["name"],"additionalProperties":false}},"required":["type","function"],"additionalProperties":false}},"tool_choice":{"description":"Tool selection strategy","anyOf":[{"type":"string","enum":["none","auto","required"]},{"type":"object","properties":{"type":{"type":"string","enum":["function"]},"function":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"],"additionalProperties":false}},"required":["type","function"],"additionalProperties":false}]},"parallel_tool_calls":{"default":true,"description":"Allow parallel tool calls","type":"boolean"},"response_format":{"description":"Desired response format","anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["text"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["json_object"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["json_schema"]},"json_schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"schema":{"type":"object","additionalProperties":{}},"strict":{"type":"boolean"}},"required":["name","schema"],"additionalProperties":false}},"required":["type","json_schema"],"additionalProperties":false}]},"stream_options":{"description":"Streaming options","type":"object","properties":{"include_usage":{"description":"Include usage in streaming chunks","type":"boolean"}},"additionalProperties":false},"service_tier":{"description":"Service tier preference","type":"string","enum":["auto","default"]},"user":{"description":"End-user identifier for rate limiting","type":"string"},"top_k":{"description":"Top-k sampling (vLLM & SGLang only)","type":"number"},"min_p":{"description":"Min-p sampling (vLLM & SGLang only)","type":"number"},"repetition_penalty":{"description":"Repetition penalty (vLLM & SGLang only)","type":"number"},"stop_token_ids":{"description":"Token ids that stop generation (vLLM & SGLang only)","type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"required":["model","messages","stream","parallel_tool_calls"],"additionalProperties":{}},"ChatCompletionResponse":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the chat completion"},"object":{"type":"string","enum":["chat.completion"],"description":"Object type, always \"chat.completion\""},"created":{"type":"number","description":"Unix timestamp when the completion was created"},"model":{"type":"string","description":"ID of the model used"},"system_fingerprint":{"description":"System fingerprint for reproducibility","nullable":true,"type":"string"},"service_tier":{"description":"Service tier used","nullable":true,"type":"string"},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"message":{"type":"object","properties":{"role":{"type":"string"},"content":{"nullable":true,"type":"string"},"reasoning_content":{"description":"Reasoning trace from the provider reasoning parser","nullable":true,"type":"string"},"reasoning":{"description":"Reasoning trace (alternate key used by some parsers)","nullable":true,"type":"string"},"tool_calls":{"nullable":true,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the tool call"},"type":{"type":"string","enum":["function"],"description":"Tool call type, always \"function\""},"function":{"type":"object","properties":{"name":{"type":"string","description":"Name of the function"},"arguments":{"type":"string","description":"JSON-encoded arguments for the function"}},"required":["name","arguments"],"additionalProperties":false,"description":"Function call details"}},"required":["id","type","function"],"additionalProperties":{}}},"function_call":{"nullable":true,"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"string"}},"required":["name","arguments"],"additionalProperties":false},"refusal":{"description":"Reason for refusal","nullable":true,"type":"string"},"annotations":{"description":"Annotations (e.g. web-search URL citations)","nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["url_citation"],"description":"Annotation type, always \"url_citation\""},"url_citation":{"type":"object","properties":{"end_index":{"type":"number","description":"Index of the last character of the citation"},"start_index":{"type":"number","description":"Index of the first character of the citation"},"url":{"type":"string","description":"URL of the cited web resource"},"title":{"type":"string","description":"Title of the cited web resource"}},"required":["end_index","start_index","url","title"],"additionalProperties":false,"description":"URL citation details"}},"required":["type","url_citation"],"additionalProperties":{}}},"audio":{"description":"Audio output","nullable":true,"type":"object","properties":{"id":{"type":"string","description":"Audio ID"},"data":{"description":"Base64-encoded audio data","type":"string"},"expires_at":{"description":"Unix timestamp when the audio expires","type":"number"},"transcript":{"description":"Transcript of the audio","type":"string"}},"required":["id"],"additionalProperties":false}},"required":["role","content"],"additionalProperties":{},"description":"Message object"},"finish_reason":{"nullable":true,"description":"Reason the completion finished","type":"string"},"logprobs":{"description":"Log probabilities","nullable":true,"type":"object","properties":{"content":{"description":"Content log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"],"additionalProperties":false}}},"required":["token","bytes","logprob","top_logprobs"],"additionalProperties":false}},"refusal":{"description":"Refusal log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"],"additionalProperties":false}}},"required":["token","bytes","logprob","top_logprobs"],"additionalProperties":false}}},"additionalProperties":false}},"required":["index","message","finish_reason"],"additionalProperties":{},"description":"Completion choice"},"description":"Array of completion choices"},"usage":{"description":"Token usage information. Optional because some vLLM/SGLang backends return HTTP 200 with a valid completion but no `usage` object; the pipeline skips token-derived side effects (metrics, CO₂, billing) when absent and forwards the response untouched.","type":"object","properties":{"prompt_tokens":{"type":"number","description":"Number of prompt tokens"},"completion_tokens":{"type":"number","description":"Number of completion tokens"},"total_tokens":{"type":"number","description":"Total number of tokens"},"prompt_tokens_details":{"description":"Prompt token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"cached_tokens":{"description":"Number of cached tokens","type":"number"},"cache_write_tokens":{"description":"Number of tokens written to the prompt cache","type":"number"}},"additionalProperties":{}},"completion_tokens_details":{"description":"Completion token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"reasoning_tokens":{"description":"Number of reasoning tokens","type":"number"},"accepted_prediction_tokens":{"description":"Number of accepted prediction tokens","type":"number"},"rejected_prediction_tokens":{"description":"Number of rejected prediction tokens","type":"number"}},"additionalProperties":{}}},"required":["prompt_tokens","completion_tokens","total_tokens"],"additionalProperties":{}}},"required":["id","object","created","model","choices"],"additionalProperties":{}},"ChatCompletionChunk":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the chat completion chunk"},"object":{"type":"string","enum":["chat.completion.chunk"],"description":"Object type, always \"chat.completion.chunk\""},"created":{"type":"number","description":"Unix timestamp when the chunk was created"},"model":{"type":"string","description":"ID of the model used"},"system_fingerprint":{"description":"System fingerprint for reproducibility","nullable":true,"type":"string"},"choices":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number","description":"Index of the choice"},"delta":{"type":"object","properties":{"role":{"description":"Role of the message sender","nullable":true,"type":"string"},"content":{"description":"Content delta","nullable":true,"type":"string"},"tool_calls":{"description":"Tool call deltas","nullable":true,"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"id":{"nullable":true,"type":"string"},"type":{"nullable":true,"type":"string"},"function":{"nullable":true,"type":"object","properties":{"name":{"nullable":true,"type":"string"},"arguments":{"nullable":true,"type":"string"}},"additionalProperties":false}},"required":["index"],"additionalProperties":false}},"function_call":{"description":"Legacy function call delta","type":"object","properties":{"name":{"description":"Name of the function","type":"string"},"arguments":{"description":"JSON-encoded function arguments","type":"string"}},"additionalProperties":false},"refusal":{"description":"Reason for refusal","nullable":true,"type":"string"},"annotations":{"description":"Annotation deltas (e.g. web-search URL citations)","nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["url_citation"],"description":"Annotation type, always \"url_citation\""},"url_citation":{"type":"object","properties":{"end_index":{"type":"number","description":"Index of the last character of the citation"},"start_index":{"type":"number","description":"Index of the first character of the citation"},"url":{"type":"string","description":"URL of the cited web resource"},"title":{"type":"string","description":"Title of the cited web resource"}},"required":["end_index","start_index","url","title"],"additionalProperties":false,"description":"URL citation details"}},"required":["type","url_citation"],"additionalProperties":{}}},"audio":{"description":"Audio output delta","type":"object","properties":{"id":{"description":"Audio ID","type":"string"},"data":{"description":"Base64-encoded audio data","type":"string"},"expires_at":{"description":"Unix timestamp when the audio expires","type":"number"},"transcript":{"description":"Transcript of the audio","type":"string"}},"additionalProperties":false}},"additionalProperties":false,"description":"Delta object"},"finish_reason":{"description":"Reason the completion finished","nullable":true,"type":"string"},"logprobs":{"description":"Log probabilities","nullable":true,"type":"object","properties":{"content":{"description":"Content log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"],"additionalProperties":false}}},"required":["token","bytes","logprob","top_logprobs"],"additionalProperties":false}},"refusal":{"description":"Refusal log probabilities","nullable":true,"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"},"top_logprobs":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"bytes":{"nullable":true,"type":"array","items":{"type":"number"}},"logprob":{"type":"number"}},"required":["token","bytes","logprob"],"additionalProperties":false}}},"required":["token","bytes","logprob","top_logprobs"],"additionalProperties":false}}},"additionalProperties":false}},"required":["index","delta"],"additionalProperties":false,"description":"Streaming choice"},"description":"Array of streaming choices"},"usage":{"description":"Token usage information (sent in final chunk when stream_options.include_usage is true)","nullable":true,"type":"object","properties":{"prompt_tokens":{"type":"number","description":"Number of prompt tokens"},"completion_tokens":{"type":"number","description":"Number of completion tokens"},"total_tokens":{"type":"number","description":"Total number of tokens"},"prompt_tokens_details":{"description":"Prompt token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"cached_tokens":{"description":"Number of cached tokens","type":"number"},"cache_write_tokens":{"description":"Number of tokens written to the prompt cache","type":"number"}},"additionalProperties":false},"completion_tokens_details":{"description":"Completion token details","nullable":true,"type":"object","properties":{"audio_tokens":{"description":"Number of audio tokens","type":"number"},"reasoning_tokens":{"description":"Number of reasoning tokens","type":"number"},"accepted_prediction_tokens":{"description":"Number of accepted prediction tokens","type":"number"},"rejected_prediction_tokens":{"description":"Number of rejected prediction tokens","type":"number"}},"additionalProperties":false}},"required":["prompt_tokens","completion_tokens","total_tokens"],"additionalProperties":false}},"required":["id","object","created","model","choices"],"additionalProperties":{}},"CreateTranscriptionRequest":{"type":"object","properties":{"file":{},"model":{"type":"string","minLength":1,"description":"ID of the model to use"},"language":{"description":"ISO-639-1 language code (e.g. en, sv, de)","type":"string","minLength":2,"maxLength":2,"pattern":"^[A-Za-z]{2}$"},"prompt":{"description":"Optional text to steer style or continue a prior segment","type":"string"},"response_format":{"default":"json","description":"Output format","type":"string","enum":["json","text","srt","verbose_json","vtt","vtt_json","aud","diarized_json"]},"temperature":{"type":"string"},"include":{"description":"Extra data to include. 'logprobs' requires response_format=json and gpt-4o-transcribe models.","minItems":1,"type":"array","items":{"type":"string","enum":["logprobs"]}},"timestamp_granularities":{"type":"string"},"stream":{"default":false,"description":"Stream results via SSE","nullable":true,"type":"boolean"},"chunking_strategy":{"description":"How audio is cut into chunks: auto, a VadConfig object, or null","anyOf":[{"type":"string","enum":["auto"]},{"type":"object","properties":{"type":{"type":"string","enum":["server_vad"],"description":"Must be 'server_vad'"},"prefix_padding_ms":{"default":300,"description":"Audio to include before detected speech (ms)","type":"integer","minimum":0,"maximum":9007199254740991},"silence_duration_ms":{"default":200,"description":"Silence needed to mark speech stop (ms)","type":"integer","minimum":0,"maximum":9007199254740991},"threshold":{"default":0.5,"description":"VAD sensitivity 0..1","type":"number","minimum":0,"maximum":1}},"required":["type","prefix_padding_ms","silence_duration_ms","threshold"],"additionalProperties":false}],"nullable":true},"known_speaker_names":{"description":"Diarization speaker identifiers, up to 4","maxItems":4,"type":"array","items":{"type":"string","minLength":1}},"known_speaker_references":{"description":"Diarization reference clips as base64 data URLs, up to 4","maxItems":4,"type":"array","items":{"type":"string","pattern":"^data:audio\\/[A-Za-z0-9.+-]+;base64,"}},"align":{"default":true,"description":"Enable word-level alignment (required for subtitle formats)","type":"boolean"},"diarize":{"default":false,"description":"Enable speaker diarization (requires align=true)","type":"boolean"},"speaker_embeddings":{"default":false,"description":"Include speaker embeddings in diarization output","type":"boolean"},"highlight_words":{"default":false,"description":"Highlight words in vtt/srt output","type":"boolean"},"suppress_numerals":{"default":true,"description":"Spell out numbers instead of numerals","type":"boolean"},"hotwords":{"description":"Comma-separated hotwords to bias toward","type":"string"},"batch_size":{"description":"Inference batch size","type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"chunk_size":{"description":"VAD chunk size in seconds","type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991}},"required":["file","model","response_format","stream","align","diarize","speaker_embeddings","highlight_words","suppress_numerals"],"additionalProperties":{}},"CreateTranscriptionResponse":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"],"additionalProperties":{}},"VerboseCreateTranscriptionResponse":{"type":"object","properties":{"text":{"type":"string"},"duration":{"type":"number"},"language":{"type":"string"},"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"start":{"type":"number"},"end":{"type":"number"},"text":{"type":"string"},"speaker":{"description":"Speaker label (WhisperX diarization)","type":"string"}},"required":["id","start","end","text"],"additionalProperties":false}},"words":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"speaker":{"description":"Speaker label (WhisperX diarization)","type":"string"},"score":{"description":"Word alignment confidence (WhisperX align)","type":"number"}},"required":["word","start","end"],"additionalProperties":false}},"vtt_text":{"description":"WebVTT text when response_format=vtt_json","type":"string"}},"required":["text","duration","language","segments"],"additionalProperties":{}},"EmbeddingRequest":{"type":"object","properties":{"model":{"type":"string","minLength":1,"description":"ID of the model to use"},"input":{"anyOf":[{"type":"string","minLength":1},{"minItems":1,"maxItems":2048,"type":"array","items":{"type":"string","minLength":1}},{"minItems":1,"maxItems":8192,"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"minItems":1,"maxItems":2048,"type":"array","items":{"minItems":1,"maxItems":8192,"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}}],"description":"Input text(s) or token ID(s) to embed"},"dimensions":{"description":"Number of dimensions in the output","type":"integer","minimum":1,"maximum":9007199254740991},"encoding_format":{"default":"float","description":"Format of the embeddings","type":"string","enum":["float","base64"]},"user":{"description":"End-user identifier for rate limiting","type":"string"}},"required":["model","input","encoding_format"],"additionalProperties":{}},"EmbeddingResponse":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"type":"object","properties":{"object":{"type":"string","enum":["embedding"]},"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"embedding":{"anyOf":[{"type":"array","items":{"type":"number"}},{"type":"string"}],"description":"The embedding vector (float array or base64-encoded string)"}},"required":["object","index","embedding"],"additionalProperties":false}},"model":{"type":"string","description":"ID of the model used"},"usage":{"type":"object","properties":{"prompt_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of prompt tokens"},"total_tokens":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total number of tokens"}},"required":["prompt_tokens","total_tokens"],"additionalProperties":false}},"required":["object","data","model","usage"],"additionalProperties":{}},"CohereRerankDocument":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text of the document to rerank"}},"required":["text"],"additionalProperties":{}},"CohereRerankRequest":{"type":"object","properties":{"model":{"description":"The identifier of the model to use. Optional in v1, though callers should send it.","type":"string"},"query":{"type":"string","minLength":1,"description":"The search query"},"documents":{"minItems":1,"type":"array","items":{"anyOf":[{"type":"string","minLength":1},{"$ref":"#/components/schemas/CohereRerankDocument"}]},"description":"A list of document objects or strings to rerank"},"top_n":{"description":"The number of most relevant documents/indices to return. Defaults to the length of documents.","type":"integer","minimum":1,"maximum":9007199254740991},"rank_fields":{"description":"For object documents, which keys to consider for reranking, in priority order. Forwarded to the upstream provider when supported.","type":"array","items":{"type":"string"}},"return_documents":{"default":false,"description":"If true, returns document text/objects in results. Defaults to false per Cohere v1 spec.","type":"boolean"},"max_chunks_per_doc":{"default":10,"description":"The maximum number of chunks to produce internally from a document. Forwarded to upstream when supported.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["query","documents","return_documents","max_chunks_per_doc"],"additionalProperties":{}},"CohereRerankResponse":{"type":"object","properties":{"id":{"description":"Unique identifier for the rerank operation","type":"string"},"model":{"type":"string","description":"Canonical model ID"},"object":{"description":"Object type discriminator.","type":"string","enum":["reranking"]},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number","description":"Index into the original list of documents"},"relevance_score":{"type":"number","description":"Relevance score (0–1)"},"document":{"description":"Echo of the input document, present only when return_documents is true","anyOf":[{"type":"string"},{"$ref":"#/components/schemas/CohereRerankDocument"}]}},"required":["index","relevance_score"],"additionalProperties":false},"description":"An ordered list of ranked documents"},"meta":{"description":"Request metadata. Not all fields are populated by upstream providers.","type":"object","properties":{"api_version":{"type":"object","properties":{"version":{"type":"string"},"is_deprecated":{"type":"boolean"},"is_experimental":{"type":"boolean"}},"required":["version"],"additionalProperties":false},"billed_units":{"type":"object","properties":{"images":{"type":"number"},"input_tokens":{"type":"number"},"image_tokens":{"type":"number"},"output_tokens":{"type":"number"},"search_units":{"type":"number"},"classifications":{"type":"number"}},"additionalProperties":false},"tokens":{"type":"object","properties":{"input_tokens":{"type":"number"},"output_tokens":{"type":"number"}},"additionalProperties":false},"cached_tokens":{"type":"number"}},"additionalProperties":false},"usage":{"description":"Token usage (Berget/upstream extension; not part of the Cohere v1 spec).","type":"object","properties":{"prompt_tokens":{"type":"number"},"total_tokens":{"type":"number"}},"required":["total_tokens"],"additionalProperties":false}},"required":["model","results"],"additionalProperties":{}}}},"paths":{"/v1/models/":{"get":{"operationId":"listModels","summary":"List available models","tags":["Models"],"description":"Returns a list of available models that can be used with the API.\n\nThis endpoint is compatible with OpenAI's models endpoint, making it easy to switch between providers.","security":[],"responses":{"200":{"description":"List of available models","content":{"application/json":{"schema":{"description":"List of available models","allOf":[{"$ref":"#/components/schemas/ModelListResponse"}]}}}}}}},"/v1/models/{*}":{"get":{"summary":"Get model details by ID","tags":["Models"],"description":"Retrieves detailed information about a specific model including pricing, context window, and capabilities.\n\nThe model ID can be a canonical ID (e.g. `openai/gpt-oss-120b`) or a registered alias (e.g. `gpt-oss`).","parameters":[{"schema":{"type":"string"},"in":"path","name":"*","required":true,"description":"Canonical model ID or alias"}],"security":[],"responses":{"200":{"description":"Model details","content":{"application/json":{"schema":{"description":"Model details","allOf":[{"$ref":"#/components/schemas/Model"}]}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Model not found"}}}}}}},"/v1/chat/completions":{"post":{"operationId":"createChatCompletion","summary":"Create a chat completion","tags":["Chat"],"description":"Creates a model response for the given chat conversation.\n\nThis endpoint is compatible with OpenAI's chat completions API, making it easy to switch between providers.\n\n## Quick Start\n\n1. Get an API key from the dashboard\n2. Set your API key as an environment variable:\n```bash\nexport BERGET_API_KEY=\"your-api-key-here\"\n```\n3. Make a simple request:\n```bash\ncurl -X POST https://api.berget.ai/v1/chat/completions \\n  --header \"Authorization: Bearer $BERGET_API_KEY\" \\n  --header \"Content-Type: application/json\" \\n  --data '{\n    \"model\": \"mistral-small\",\n    \"messages\": [\n      {\"role\": \"user\", \"content\": \"Knock knock?\"}\n    ]\n  }'\n```\n\n## Examples\n\n### System prompt:\n```json\n{\n  \"model\": \"gpt-oss\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n    {\"role\": \"user\", \"content\": \"Hello!\"}\n  ],\n  \"temperature\": 0.7\n}\n```\n\n### JSON mode:\n```json\n{\n  \"model\": \"gpt-oss\",\n  \"messages\": [\n    {\"role\": \"user\", \"content\": \"List 3 Swedish cities\"}\n  ],\n  \"response_format\": {\"type\": \"json_object\"}\n}\n```\n\n### Tool calling:\n```json\n{\n  \"model\": \"meta-llama/Llama-3.1-70B-Instruct\",\n  \"messages\": [{\"role\": \"user\", \"content\": \"What's the weather?\"}],\n  \"tools\": [\n    {\n      \"type\": \"function\",\n      \"function\": {\n        \"name\": \"get_weather\",\n        \"description\": \"Get current weather\",\n        \"parameters\": {\n          \"type\": \"object\",\n          \"properties\": {\"location\": {\"type\": \"string\"}}\n        }\n      }\n    }\n  ]\n}\n```\n\n## Features\n\n- **Streaming**: Set `stream: true` for Server-Sent Events (SSE)\n- **Images**: Include `image_url` objects in message content for vision models\n- **JSON mode**: Use `response_format: {type: \"json_object\"}` or `json_schema`\n- **Tool calling**: All models support function calling\n\n## Extended sampling parameters\n\nBerget supports additional sampling parameters that are forwarded to vLLM and SGLang backends:\n- `top_k` — Top-k sampling\n- `min_p` — Min-p sampling\n- `repetition_penalty` — Repetition penalty\n\nAny other unrecognized fields are forwarded passthrough to the provider.\n\nAll our models support tool calling. See available models at https://berget.ai/models.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequestInput"}}}},"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful chat completion. Response shape follows OpenAI's ChatCompletion format. Set `stream: true` to receive a Server-Sent Events (SSE) stream instead of a JSON body.","content":{"application/json":{"schema":{"description":"Successful chat completion. Response shape follows OpenAI's ChatCompletion format. Set `stream: true` to receive a Server-Sent Events (SSE) stream instead of a JSON body.","allOf":[{"$ref":"#/components/schemas/ChatCompletionResponse"}]}}}},"400":{"description":"Invalid request (malformed body, missing required fields, etc.)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Invalid request (malformed body, missing required fields, etc.)"}}}},"401":{"description":"Authentication error — missing, malformed, or expired token","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Authentication error — missing, malformed, or expired token"}}}},"403":{"description":"Permission error — insufficient credits or plan restrictions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Permission error — insufficient credits or plan restrictions"}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Model not found"}}}},"413":{"description":"Payload too large — request body exceeds the maximum allowed size","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Payload too large — request body exceeds the maximum allowed size"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Rate limit exceeded"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Server error"}}}},"503":{"description":"Service unavailable (model overloaded or provider unreachable)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Service unavailable (model overloaded or provider unreachable)"}}}}}}},"/v1/embeddings/":{"post":{"operationId":"createEmbedding","summary":"Create embeddings","tags":["Embeddings"],"description":"Creates embeddings for the provided input text. Compatible with OpenAI's embeddings API.\n\nEmbeddings are vector representations of text that can be used for:\n- Semantic search\n- Clustering\n- Recommendations\n- Anomaly detection\n- Classification\n\n## Quick Start\n\nThe simplest request only requires the input text:\n```json\n{\n  \"input\": \"This is a sample text to create embeddings for.\"\n}\n```\n\nThe API will use the default model (intfloat/multilingual-e5-large-instruct) which supports 100+ languages.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingRequestInput"}}}},"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Invalid request"}}}},"401":{"description":"Authentication error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Authentication error"}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Model not found"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Rate limit exceeded"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Server error"}}}},"503":{"description":"Service unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Service unavailable"}}}}}}},"/v1/audio/transcriptions":{"post":{"operationId":"createTranscription","summary":"Create a transcription","tags":["Audio"],"description":"Transcribes audio into the input language. OpenAI-compatible; WhisperX-specific options (align, diarize, speaker_embeddings) are supported as extensions.\n\nSupported formats: mp3, mp4, mpeg, mpga, m4a, wav, webm.\n\n## Response\n\nWith `response_format=verbose_json` the response follows the OpenAI shape: `text`, `duration`, `language`, and a flat `segments` array (each `{ id, start, end, text, speaker? }`). When word timestamps are available they are returned as a flat `words` array. Segments are **not** nested under `segments.segments`.\n\n## Quick Start\n\n```bash\ncurl -X POST https://api.berget.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -F file=@audio.mp3 \\\n  -F model=KBLab/kb-whisper-large\n```\n\n## WhisperX Features\n\n### Word-Level Timestamps (align)\nEnable `align=true` for precise word timing. Required for subtitle formats (srt, vtt).\n\n### Speaker Diarization (diarize)\nEnable `diarize=true` to identify and separate different speakers.\n\n### Speaker Embeddings\nEnable `speaker_embeddings=true` to include speaker identity vectors.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"description":"The audio file to transcribe (binary)"},"model":{"description":"ID of the model to use","type":"string"},"language":{"description":"ISO-639-1 language code","type":"string"},"prompt":{"description":"Optional text to steer transcription style","type":"string"},"response_format":{"description":"Output format","type":"string"},"temperature":{"description":"Sampling temperature (0–1)","type":"string"},"timestamp_granularities":{"description":"Granularities CSV","type":"string"},"include":{"description":"Extra data to include","type":"string"},"stream":{"description":"Stream via SSE","type":"string"},"chunking_strategy":{"type":"string"},"known_speaker_names":{"type":"string"},"known_speaker_references":{"type":"string"},"align":{"type":"string"},"diarize":{"type":"string"},"speaker_embeddings":{"type":"string"},"highlight_words":{"type":"string"},"suppress_numerals":{"type":"string"},"hotwords":{"type":"string"},"batch_size":{"type":"string"},"chunk_size":{"type":"string"}}}}}},"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Transcription response. `verbose_json`/`diarized_json` return the verbose object with a flat `segments` array (each `{ id, start, end, text, speaker? }`), plus `text`, `duration`, `language`, and a flat `words` array when available. `json` returns `{ text }`; text/srt/vtt return a string.","content":{"application/json":{"schema":{"anyOf":[{"type":"string"}],"description":"Transcription response. `verbose_json`/`diarized_json` return the verbose object with a flat `segments` array (each `{ id, start, end, text, speaker? }`), plus `text`, `duration`, `language`, and a flat `words` array when available. `json` returns `{ text }`; text/srt/vtt return a string."}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Invalid request"}}}},"401":{"description":"Authentication error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Authentication error"}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Model not found"}}}},"413":{"description":"Audio file too large","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Audio file too large"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Rate limit exceeded"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Server error"}}}},"503":{"description":"Service unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Service unavailable"}}}}}}},"/v1/rerank/":{"post":{"operationId":"rerank","summary":"Rerank documents","tags":["Rerank"],"description":"Reranks a list of documents based on their relevance to a query.\n\nThis endpoint is useful for:\n- Improving search results by reranking based on semantic similarity\n- Sorting documents by relevance to a specific query\n- Enhancing retrieval-augmented generation (RAG) systems\n\nCompatible with the Cohere rerank API format.\n\n## Quick Start\n\nBasic usage only requires a query and documents:\n```json\n{\n  \"query\": \"What is machine learning?\",\n  \"documents\": [\n    \"Machine learning is a branch of artificial intelligence.\",\n    \"Natural language processing is used in many applications.\",\n    \"Deep learning is a subset of machine learning.\"\n  ]\n}\n```\n\nThe API will use the default model (BAAI/bge-reranker-v2-m3) and return the top 3 most relevant documents.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohereRerankRequestInput"}}}},"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successfully reranked documents","content":{"application/json":{"schema":{"description":"Successfully reranked documents","allOf":[{"$ref":"#/components/schemas/CohereRerankResponse"}]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Invalid request"}}}},"401":{"description":"Authentication error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Authentication error"}}}},"403":{"description":"Permission error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Permission error"}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Model not found"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Server error"}}}},"503":{"description":"Service unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Service unavailable"}}}}}}},"/v1/seat/budget":{"get":{"operationId":"getSeatBudget","summary":"Get seat budget consumption","tags":["Seat"],"description":"Current consumption of the authenticated seat across its rolling windows, as fractions (percent-only — no monetary amounts). Reads the exact counters the chat admission limiter enforces against.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","enum":["seat_budget"],"description":"Object type discriminator"},"seat_id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Odoo seat ID the budget is scoped to"},"tier":{"type":"string","description":"Seat tier from the auth claims"},"shadow_mode":{"type":"boolean","description":"True when the limiter only observes (no 429s) — clients should render tentatively"},"periods":{"type":"object","properties":{"monthly":{"type":"object","properties":{"used_fraction":{"type":"number","minimum":0,"description":"Fraction of this period budget consumed (0-1)"},"reset_in_seconds":{"nullable":true,"description":"Seconds until the rolling window resets; null when the window is inactive","type":"number"},"models":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1},"description":"Per-model share of this period consumption (of used, not of budget)"}},"required":["used_fraction","reset_in_seconds","models"],"additionalProperties":false,"description":"Consumption within one rolling window"},"weekly":{"type":"object","properties":{"used_fraction":{"type":"number","minimum":0,"description":"Fraction of this period budget consumed (0-1)"},"reset_in_seconds":{"nullable":true,"description":"Seconds until the rolling window resets; null when the window is inactive","type":"number"},"models":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1},"description":"Per-model share of this period consumption (of used, not of budget)"}},"required":["used_fraction","reset_in_seconds","models"],"additionalProperties":false,"description":"Consumption within one rolling window"},"daily":{"type":"object","properties":{"used_fraction":{"type":"number","minimum":0,"description":"Fraction of this period budget consumed (0-1)"},"reset_in_seconds":{"nullable":true,"description":"Seconds until the rolling window resets; null when the window is inactive","type":"number"},"models":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1},"description":"Per-model share of this period consumption (of used, not of budget)"}},"required":["used_fraction","reset_in_seconds","models"],"additionalProperties":false,"description":"Consumption within one rolling window"}},"additionalProperties":false,"description":"Only enabled periods (budget > 0) are present"},"model_limits":{"type":"object","additionalProperties":{"type":"object","properties":{"monthly":{"type":"number","minimum":0,"maximum":1},"weekly":{"type":"number","minimum":0,"maximum":1},"daily":{"type":"number","minimum":0,"maximum":1}},"required":["monthly","weekly","daily"],"additionalProperties":false},"description":"Hard per-model usage caps (fraction of each period budget). A seat is rate-limited for a listed model once that model alone crosses the fraction, even with total budget left."}},"required":["object","seat_id","tier","shadow_mode","periods","model_limits"],"additionalProperties":false}}}},"401":{"description":"Authentication error — missing, malformed, or expired token","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Authentication error — missing, malformed, or expired token"}}}},"404":{"description":"No seat budget for this plan","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"No seat budget for this plan"}}}},"503":{"description":"Seat unresolved or budget storage unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Seat unresolved or budget storage unavailable"}}}}}}},"/v1/seat/budgets":{"post":{"operationId":"getSeatBudgetsBatch","summary":"Get budget consumption for many seats (internal)","tags":["Seat"],"description":"Batch read of seat budget consumption across rolling windows, as fractions (percent-only — no monetary amounts). Internal endpoint: the caller (API gateway) resolves which seats and tiers it may ask about.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"seats":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"seat_id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Odoo seat ID"},"tier":{"type":"string","description":"Seat tier (plan code) — resolved upstream by the gateway. Unknown tiers get the default budget."}},"required":["seat_id","tier"]},"description":"Seats to read budget consumption for"}},"required":["seats"]}}}},"security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","enum":["seat_budget_list"],"description":"Object type discriminator"},"budgets":{"type":"array","items":{"type":"object","properties":{"object":{"type":"string","enum":["seat_budget"],"description":"Object type discriminator"},"seat_id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Odoo seat ID the budget is scoped to"},"tier":{"type":"string","description":"Seat tier from the auth claims"},"shadow_mode":{"type":"boolean","description":"True when the limiter only observes (no 429s) — clients should render tentatively"},"periods":{"type":"object","properties":{"monthly":{"type":"object","properties":{"used_fraction":{"type":"number","minimum":0,"description":"Fraction of this period budget consumed (0-1)"},"reset_in_seconds":{"nullable":true,"description":"Seconds until the rolling window resets; null when the window is inactive","type":"number"},"models":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1},"description":"Per-model share of this period consumption (of used, not of budget)"}},"required":["used_fraction","reset_in_seconds","models"],"additionalProperties":false,"description":"Consumption within one rolling window"},"weekly":{"type":"object","properties":{"used_fraction":{"type":"number","minimum":0,"description":"Fraction of this period budget consumed (0-1)"},"reset_in_seconds":{"nullable":true,"description":"Seconds until the rolling window resets; null when the window is inactive","type":"number"},"models":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1},"description":"Per-model share of this period consumption (of used, not of budget)"}},"required":["used_fraction","reset_in_seconds","models"],"additionalProperties":false,"description":"Consumption within one rolling window"},"daily":{"type":"object","properties":{"used_fraction":{"type":"number","minimum":0,"description":"Fraction of this period budget consumed (0-1)"},"reset_in_seconds":{"nullable":true,"description":"Seconds until the rolling window resets; null when the window is inactive","type":"number"},"models":{"type":"object","additionalProperties":{"type":"number","minimum":0,"maximum":1},"description":"Per-model share of this period consumption (of used, not of budget)"}},"required":["used_fraction","reset_in_seconds","models"],"additionalProperties":false,"description":"Consumption within one rolling window"}},"additionalProperties":false,"description":"Only enabled periods (budget > 0) are present"}},"required":["object","seat_id","tier","shadow_mode","periods"],"additionalProperties":false},"description":"One entry per requested seat, in request order"},"model_limits":{"type":"object","additionalProperties":{"type":"object","properties":{"monthly":{"type":"number","minimum":0,"maximum":1},"weekly":{"type":"number","minimum":0,"maximum":1},"daily":{"type":"number","minimum":0,"maximum":1}},"required":["monthly","weekly","daily"],"additionalProperties":false},"description":"Hard per-model usage caps (fraction of each period budget). A seat is rate-limited for a listed model once that model alone crosses the fraction, even with total budget left."}},"required":["object","budgets","model_limits"],"additionalProperties":false}}}},"400":{"description":"Validation error — e.g. empty or oversized seat list","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Validation error — e.g. empty or oversized seat list"}}}},"401":{"description":"Authentication error — missing, malformed, or expired token","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Authentication error — missing, malformed, or expired token"}}}},"503":{"description":"Budget storage unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable error message"},"type":{"type":"string","description":"Error type (e.g. \"invalid_request_error\")"},"param":{"description":"The parameter that caused the error","nullable":true,"type":"string"},"code":{"nullable":true,"description":"Error code","type":"string"}},"required":["message","type","code"],"additionalProperties":false}},"required":["error"],"additionalProperties":false,"description":"Budget storage unavailable"}}}}}}}},"servers":[{"url":"https://api.berget.ai","description":"Production API"},{"url":"https://api.stage.berget.ai","description":"Stage API"}],"tags":[{"name":"Models","description":"AI model endpoints for listing and using available models"},{"name":"Chat","description":"Chat completion endpoints for AI interactions"},{"name":"Embeddings","description":"Create vector embeddings from text for semantic search and similarity comparisons"},{"name":"Rerank","description":"Rerank documents based on their relevance to a specific query"},{"name":"Audio","description":"Audio processing endpoints including transcription services"},{"name":"Health","description":"API health status and monitoring endpoints"}]}