{"openapi":"3.1.0","info":{"title":"Sprag Gateway","version":"0.1.37"},"paths":{"/v1/chat/completions":{"post":{"tags":["chat"],"summary":"Create Chat Completion","description":"Run a chat completion and return the canonical OpenAI-shaped result with the gateway's usage.","operationId":"chat_completions_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientChatCompletion"}},"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"Missing, invalid, or expired credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"402":{"description":"No payment method on the account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Authenticated, but not a member of the requested organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests permitted in the window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"Authentication or rate limiting is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/v1/audio/speech":{"post":{"tags":["audio"],"summary":"Create Speech","description":"Synthesize speech for the request and return the audio bytes.","operationId":"audio_speech_v1_audio_speech_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeechRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}},"audio/mpeg":{"schema":{"type":"string","format":"binary"}},"audio/aac":{"schema":{"type":"string","format":"binary"}},"audio/flac":{"schema":{"type":"string","format":"binary"}},"audio/opus":{"schema":{"type":"string","format":"binary"}},"audio/pcm":{"schema":{"type":"string","format":"binary"}},"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"Missing, invalid, or expired credentials.","content":{"audio/wav":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"402":{"description":"No payment method on the account.","content":{"audio/wav":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Authenticated, but not a member of the requested organization.","content":{"audio/wav":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests permitted in the window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the window.","schema":{"type":"integer"}}},"content":{"audio/wav":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"Authentication or rate limiting is temporarily unavailable.","content":{"audio/wav":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/v1/audio/voices":{"get":{"tags":["audio"],"summary":"List Voices","description":"List the model's preset and uploaded voices as the OpenAI voice-list envelope.","operationId":"list_voices_v1_audio_voices_get","parameters":[{"name":"model","in":"query","required":true,"schema":{"type":"string","description":"the model whose voices to list; a shared alias unions its members' voices","title":"Model"},"description":"the model whose voices to list; a shared alias unions its members' voices"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoiceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audio/transcriptions":{"post":{"tags":["audio"],"summary":"Create Transcription","description":"Transcribe an uploaded audio file and return the transcript.","operationId":"transcribe_v1_audio_transcriptions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_transcribe_v1_audio_transcriptions_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionResponse"}}}},"401":{"description":"Missing, invalid, or expired credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"402":{"description":"No payment method on the account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Authenticated, but not a member of the requested organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests permitted in the window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"Authentication or rate limiting is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]}]}},"/v1/images/{path}":{"post":{"tags":["images"],"summary":"Relay Image Request","description":"Relay an `/v1/images/*` request upstream and return the image response verbatim.","operationId":"images_v1_images__path__post","security":[{"BearerAuth":[]}],"parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"The request carries no `model`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"401":{"description":"Missing, invalid, or expired credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"402":{"description":"No payment method on the account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Authenticated, but not a member of the requested organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests permitted in the window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"Authentication or rate limiting is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["model","prompt","image"],"properties":{"model":{"type":"string","description":"Image model ID."},"prompt":{"type":"string","description":"Instruction describing the desired edit."},"image":{"type":"string","format":"binary","description":"Source image. Repeat the field to send several."},"response_format":{"type":"string","enum":["url","b64_json"],"default":"url","description":"Hosted URLs or base64 image data."}}}}}}}},"/v1/models":{"get":{"tags":["models"],"summary":"List Models","description":"List the models this gateway can serve, in OpenAI shape.","operationId":"list_models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListModelsResponse"}}}}}}},"/v1/organization/costs":{"get":{"tags":["organization"],"summary":"Organization Costs","description":"Return your organization's usage costs as OpenAI-shaped daily buckets. Requires a payment method on the account; callers without one get a 402.","operationId":"organization_costs_v1_organization_costs_get","security":[{"BearerAuth":[]}],"parameters":[{"name":"start_time","in":"query","required":true,"schema":{"type":"integer","minimum":0,"description":"inclusive Unix start of the query window, in seconds","title":"Start Time"},"description":"inclusive Unix start of the query window, in seconds"},{"name":"end_time","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"exclusive Unix end of the window; now when omitted","title":"End Time"},"description":"exclusive Unix end of the window; now when omitted"},{"name":"bucket_width","in":"query","required":false,"schema":{"const":"1d","type":"string","description":"width of each cost bucket","default":"1d","title":"Bucket Width"},"description":"width of each cost bucket"},{"name":"group_by","in":"query","required":false,"schema":{"type":"array","items":{"const":"line_item","type":"string"},"description":"dimensions to break each bucket down by","title":"Group By"},"description":"dimensions to break each bucket down by"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":31,"minimum":1,"description":"max buckets returned per page","default":7,"title":"Limit"},"description":"max buckets returned per page"},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"opaque bucket cursor from a prior page's next_page","title":"Page"},"description":"opaque bucket cursor from a prior page's next_page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationCostsResponse"}}}},"401":{"description":"Missing, invalid, or expired credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"402":{"description":"No payment method on the account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"403":{"description":"Authenticated, but not a member of the requested organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests permitted in the window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"503":{"description":"Authentication or rate limiting is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Annotation":{"properties":{"type":{"type":"string","const":"url_citation","title":"Type"},"url_citation":{"$ref":"#/components/schemas/AnnotationURLCitation"}},"additionalProperties":true,"type":"object","required":["type","url_citation"],"title":"Annotation","description":"A URL citation when using web search."},"AnnotationURLCitation":{"properties":{"end_index":{"type":"integer","title":"End Index"},"start_index":{"type":"integer","title":"Start Index"},"title":{"type":"string","title":"Title"},"url":{"type":"string","title":"Url"}},"additionalProperties":true,"type":"object","required":["end_index","start_index","title","url"],"title":"AnnotationURLCitation","description":"A URL citation when using web search."},"ApiError":{"properties":{"message":{"type":"string","title":"Message"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"param":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Param"},"code":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Code"}},"type":"object","required":["message"],"title":"ApiError","description":"An OpenAI-shape error object."},"ApiErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/ApiError"}},"type":"object","required":["error"],"title":"ApiErrorResponse","description":"An OpenAI-shape error response envelope."},"ArchitectureMetadata":{"properties":{"modality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modality","description":"Compact input-to-output modality expression."},"input_modalities":{"items":{"$ref":"#/components/schemas/InputModality"},"type":"array","title":"Input Modalities","description":"Media types the model accepts as input."},"output_modalities":{"items":{"$ref":"#/components/schemas/OutputModality"},"type":"array","title":"Output Modalities","description":"Media types the model can generate."},"tokenizer":{"anyOf":[{"$ref":"#/components/schemas/ModelGroup"},{"type":"null"}],"description":"Tokenizer or model family used for text tokens."},"instruct_type":{"anyOf":[{"$ref":"#/components/schemas/InstructType"},{"type":"null"}],"description":"Instruction prompt format the model expects, when applicable."},"chat_template":{"anyOf":[{"$ref":"#/components/schemas/ChatTemplateMetadata"},{"type":"null"}],"description":"Chat-template framing constants."},"audio_placeholder":{"anyOf":[{"$ref":"#/components/schemas/AudioPlaceholderMetadata"},{"type":"null"}],"description":"Audio-placeholder token constants."},"visual_placeholder":{"anyOf":[{"$ref":"#/components/schemas/VisualPlaceholderMetadata"},{"type":"null"}],"description":"Image/video placeholder token constants."}},"type":"object","required":["modality","input_modalities","output_modalities"],"title":"ArchitectureMetadata","description":"A model's modality and token-counting metadata: accepted/emitted media and the framing constants."},"AudioAccept":{"properties":{"containers":{"items":{"$ref":"#/components/schemas/AudioContainer"},"type":"array","uniqueItems":true,"title":"Containers","description":"accepted containers; empty = any","default":[]},"sample_rate":{"anyOf":[{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Sample Rate","description":"accepted [low, high] Hz inclusive; None = any"},"channels":{"items":{"type":"integer"},"type":"array","uniqueItems":true,"title":"Channels","description":"accepted channel counts; empty = any","default":[]}},"type":"object","title":"AudioAccept","description":"The audio a model ingests natively, as a capability region.\n\nA forwarded input must satisfy every constraint; an empty set / ``None`` range leaves that axis\nunconstrained, and a constrained axis the input leaves unknown is not satisfied."},"AudioContainer":{"type":"string","enum":["wav","mp3","flac","ogg","m4a","aac","aiff","webm"],"title":"AudioContainer","description":"An audio container/format the gateway recognizes (the container half of an ``audio/*`` content type)."},"AudioOutputFormat":{"type":"string","enum":["pcm16","pcm24","pcm_f32"],"title":"AudioOutputFormat","description":"The linear-PCM sample encoding a model's vocoder emits; its byte width sizes the audio for billing."},"AudioPlaceholderMetadata":{"properties":{"per_clip":{"type":"integer","minimum":0.0,"title":"Per Clip","description":"Delimiter tokens framing each audio clip in the templated sequence."},"tokens_per_second":{"type":"integer","exclusiveMinimum":0.0,"title":"Tokens Per Second","description":"Audio placeholder tokens inserted per second of clip audio."},"rounding":{"type":"string","const":"ceil","title":"Rounding","description":"Rounding applied to the per-clip placeholder count.","default":"ceil"}},"additionalProperties":false,"type":"object","required":["per_clip","tokens_per_second"],"title":"AudioPlaceholderMetadata","description":"Per-model audio-placeholder token constants."},"AudioProfile":{"properties":{"codec":{"type":"string","title":"Codec","description":"target codec (ffmpeg -acodec), e.g. 'pcm_s16le'"},"container":{"type":"string","title":"Container","description":"target container/format (ffmpeg -f), e.g. 'wav'"},"sample_rate":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Sample Rate","description":"target sample rate (Hz); None keeps source"},"channels":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Channels","description":"target channel count; None keeps source"}},"type":"object","required":["codec","container"],"title":"AudioProfile","description":"The concrete audio target the gateway normalizes input to."},"AudioSupport":{"properties":{"accepts":{"anyOf":[{"$ref":"#/components/schemas/AudioAccept"},{"type":"null"}],"description":"natively accepted audio; None accepts nothing"},"converts_to":{"anyOf":[{"$ref":"#/components/schemas/AudioProfile"},{"type":"null"}],"description":"transcode target for non-accepted input; None rejects it"},"metering":{"$ref":"#/components/schemas/Metering","description":"who meters a forwarded input — the backend, or a boundary probe","default":"boundary"}},"type":"object","title":"AudioSupport","description":"How a model handles audio input."},"AudioUsage":{"properties":{"duration":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Duration","description":"audio duration in seconds; tokens derive from it","default":"0"}},"type":"object","title":"AudioUsage","description":"Audio measured by duration; its billable tokens derive from that duration."},"Body_transcribe_v1_audio_transcriptions_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"model":{"type":"string","title":"Model"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"response_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Format"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"timestamp_granularities[]":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Timestamp Granularities[]"},"speaker_labels":{"type":"boolean","title":"Speaker Labels","default":false},"num_speakers":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Num Speakers"}},"type":"object","required":["file","model"],"title":"Body_transcribe_v1_audio_transcriptions_post"},"ChatAudioOutput":{"properties":{"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice","description":"speaker voice for audio output; model-specific"},"format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Format","description":"audio container/format for the output, e.g. 'wav'"}},"additionalProperties":true,"type":"object","title":"ChatAudioOutput","description":"OpenAI chat audio-output selection (the request ``audio`` object)."},"ChatCompletionAudio":{"properties":{"id":{"type":"string","title":"Id"},"data":{"type":"string","title":"Data"},"expires_at":{"type":"integer","title":"Expires At"},"transcript":{"type":"string","title":"Transcript"}},"additionalProperties":true,"type":"object","required":["id","data","expires_at","transcript"],"title":"ChatCompletionAudio","description":"If the audio output modality is requested, this object contains data\nabout the audio response from the model. [Learn more](https://platform.openai.com/docs/guides/audio)."},"ChatCompletionMessageCustomToolCall":{"properties":{"id":{"type":"string","title":"Id"},"custom":{"$ref":"#/components/schemas/Custom"},"type":{"type":"string","const":"custom","title":"Type"}},"additionalProperties":true,"type":"object","required":["id","custom","type"],"title":"ChatCompletionMessageCustomToolCall","description":"A call to a custom tool created by the model."},"ChatCompletionMessageFunctionToolCall":{"properties":{"id":{"type":"string","title":"Id"},"function":{"$ref":"#/components/schemas/Function"},"type":{"type":"string","const":"function","title":"Type"}},"additionalProperties":true,"type":"object","required":["id","function","type"],"title":"ChatCompletionMessageFunctionToolCall","description":"A call to a function tool created by the model."},"ChatCompletionRequest":{"properties":{"model":{"type":"string","title":"Model","description":"model name to route to (may be an alias; rejected if blank)"},"cache_salt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cache Salt","description":"prefix-cache isolation/affinity key (vLLM ``cache_salt``); None when unset"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"Messages","description":"the conversation messages"},"stream":{"type":"boolean","title":"Stream","description":"whether to return a streaming (SSE) response","default":false},"stream_options":{"anyOf":[{"$ref":"#/components/schemas/StreamOptions"},{"type":"null"}],"description":"streaming options"},"modalities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Modalities","description":"output modalities to return"},"audio":{"anyOf":[{"$ref":"#/components/schemas/ChatAudioOutput"},{"type":"null"}],"description":"audio-output options when 'audio' is in modalities"}},"additionalProperties":true,"type":"object","required":["model"],"title":"ChatCompletionRequest","description":"OpenAI ``/v1/chat/completions`` request body."},"ChatCompletionTokenLogprob":{"properties":{"token":{"type":"string","title":"Token"},"bytes":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bytes"},"logprob":{"type":"number","title":"Logprob"},"top_logprobs":{"items":{"$ref":"#/components/schemas/TopLogprob"},"type":"array","title":"Top Logprobs"}},"additionalProperties":true,"type":"object","required":["token","logprob","top_logprobs"],"title":"ChatCompletionTokenLogprob"},"ChatInputAudio":{"properties":{"data":{"type":"string","title":"Data","description":"base64-encoded input audio bytes"},"format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Format","description":"audio container/format hint, e.g. 'wav'"}},"additionalProperties":true,"type":"object","required":["data"],"title":"ChatInputAudio","description":"The ``input_audio`` payload of a chat audio content part."},"ChatMediaUrl":{"properties":{"url":{"type":"string","title":"Url","description":"inline data: URL of the media bytes"}},"additionalProperties":true,"type":"object","required":["url"],"title":"ChatMediaUrl","description":"The ``{\"url\": ...}`` payload of an ``image_url``/``video_url`` content part.\n\nOnly an inline ``data:`` URL is accepted."},"ChatMessage":{"properties":{"role":{"type":"string","title":"Role","description":"message author role"},"content":{"anyOf":[{"type":"string"},{"items":{"$ref":"#/components/schemas/ContentPart"},"type":"array"},{"type":"null"}],"title":"Content","description":"message content"}},"additionalProperties":true,"type":"object","required":["role"],"title":"ChatMessage","description":"A chat message."},"ChatTemplateMetadata":{"properties":{"per_message":{"type":"integer","minimum":0.0,"title":"Per Message","description":"Template tokens framing each message."},"per_request":{"type":"integer","minimum":0.0,"title":"Per Request","description":"Template tokens added once per request for the generation prompt."}},"additionalProperties":false,"type":"object","required":["per_message","per_request"],"title":"ChatTemplateMetadata","description":"Per-model chat-template framing constants."},"ChoiceLogprobs":{"properties":{"content":{"anyOf":[{"items":{"$ref":"#/components/schemas/ChatCompletionTokenLogprob"},"type":"array"},{"type":"null"}],"title":"Content"},"refusal":{"anyOf":[{"items":{"$ref":"#/components/schemas/ChatCompletionTokenLogprob"},"type":"array"},{"type":"null"}],"title":"Refusal"}},"additionalProperties":true,"type":"object","title":"ChoiceLogprobs","description":"Log probability information for the choice."},"ClientChatCompletion":{"properties":{"id":{"type":"string","title":"Id"},"choices":{"items":{"$ref":"#/components/schemas/_CanonicalChoice"},"type":"array","title":"Choices"},"created":{"type":"integer","title":"Created"},"model":{"type":"string","title":"Model"},"object":{"type":"string","const":"chat.completion","title":"Object"},"moderation":{"anyOf":[{"$ref":"#/components/schemas/Moderation"},{"type":"null"}]},"service_tier":{"anyOf":[{"type":"string","enum":["auto","default","flex","scale","priority"]},{"type":"null"}],"title":"Service Tier"},"system_fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Fingerprint"},"usage":{"anyOf":[{"$ref":"#/components/schemas/Usage"},{"type":"null"}]}},"type":"object","required":["id","choices","created","model","object"],"title":"ClientChatCompletion","description":"The chat completion returned to the client: ``usage`` carries the measured per-modality vector and cost."},"ContentPart":{"properties":{"type":{"type":"string","title":"Type","description":"content-part kind"},"input_audio":{"anyOf":[{"$ref":"#/components/schemas/ChatInputAudio"},{"type":"null"}],"description":"audio payload, present on input_audio parts"},"audio_url":{"anyOf":[{"$ref":"#/components/schemas/ChatMediaUrl"},{"type":"null"}],"description":"audio payload, present on audio_url parts"},"image_url":{"anyOf":[{"$ref":"#/components/schemas/ChatMediaUrl"},{"type":"null"}],"description":"image payload, present on image_url parts"},"video_url":{"anyOf":[{"$ref":"#/components/schemas/ChatMediaUrl"},{"type":"null"}],"description":"video payload, present on video_url parts"}},"additionalProperties":true,"type":"object","required":["type"],"title":"ContentPart","description":"One element of a structured message ``content`` array."},"CostAmount":{"properties":{"value":{"type":"number","title":"Value","description":"the amount, in whole units of the currency (USD dollars)"},"currency":{"type":"string","const":"usd","title":"Currency","description":"ISO currency code; always usd","default":"usd"}},"additionalProperties":false,"type":"object","required":["value"],"title":"CostAmount","description":"A monetary amount in a single currency."},"Custom":{"properties":{"input":{"type":"string","title":"Input"},"name":{"type":"string","title":"Name"}},"additionalProperties":true,"type":"object","required":["input","name"],"title":"Custom","description":"The custom tool that the model called."},"DefaultParameters":{"properties":{"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature","description":"Default sampling temperature, where higher values increase randomness."},"top_p":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Top P","description":"Default nucleus sampling probability mass."},"top_k":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Top K","description":"Default top-k sampling candidate count."},"frequency_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Frequency Penalty","description":"Default penalty applied to tokens based on frequency in the generated text."},"presence_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Presence Penalty","description":"Default penalty applied to tokens that have already appeared in the generated text."},"repetition_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Repetition Penalty","description":"Default penalty used to reduce repeated tokens."}},"additionalProperties":false,"type":"object","title":"DefaultParameters","description":"Default generation parameters applied when a request omits them."},"Function":{"properties":{"arguments":{"type":"string","title":"Arguments"},"name":{"type":"string","title":"Name"}},"additionalProperties":true,"type":"object","required":["arguments","name"],"title":"Function","description":"The function that the model called."},"FunctionCall":{"properties":{"arguments":{"type":"string","title":"Arguments"},"name":{"type":"string","title":"Name"}},"additionalProperties":true,"type":"object","required":["arguments","name"],"title":"FunctionCall","description":"Deprecated and replaced by `tool_calls`.\n\nThe name and arguments of a function that should be called, as generated by the model."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImageAccept":{"properties":{"formats":{"items":{"$ref":"#/components/schemas/ImageFormat"},"type":"array","uniqueItems":true,"title":"Formats","description":"accepted formats; empty = any","default":[]},"max_width":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Width","description":"largest accepted width in px; None = any"},"max_height":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Height","description":"largest accepted height in px; None = any"}},"type":"object","title":"ImageAccept","description":"The images a model ingests natively — accepted formats and an optional maximum size.\n\nA forwarded image must fit within the bound; an unknown dimension against a max bound is not satisfied."},"ImageFormat":{"type":"string","enum":["png","jpeg","gif","webp"],"title":"ImageFormat","description":"An image format the gateway recognizes (the container half of an ``image/*`` content type)."},"ImageProfile":{"properties":{"format":{"type":"string","title":"Format","description":"target image format, e.g. 'png'"},"max_width":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Width","description":"resize bound; None keeps source width"},"max_height":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Height","description":"resize bound; None keeps source height"}},"type":"object","required":["format"],"title":"ImageProfile","description":"The concrete image target the gateway normalizes input to."},"ImageSupport":{"properties":{"accepts":{"anyOf":[{"$ref":"#/components/schemas/ImageAccept"},{"type":"null"}],"description":"natively accepted images; None accepts nothing"},"converts_to":{"anyOf":[{"$ref":"#/components/schemas/ImageProfile"},{"type":"null"}],"description":"transcode target for non-accepted input; None rejects it"},"metering":{"$ref":"#/components/schemas/Metering","description":"who meters a forwarded input — the backend, or a boundary probe","default":"boundary"}},"type":"object","title":"ImageSupport","description":"How a model handles image input."},"ImageUsage":{"properties":{"count":{"type":"integer","title":"Count","description":"number of images","default":0},"megapixels":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Megapixels","description":"total image area in megapixels","default":"0"},"tiles":{"type":"integer","title":"Tiles","description":"number of vision tiles the image was split into","default":0},"tokens":{"type":"integer","title":"Tokens","description":"visual tokens charged for the image(s)","default":0}},"type":"object","title":"ImageUsage","description":"Image measures: count, area, vision tiles, and the visual tokens charged."},"InputModality":{"type":"string","enum":["text","image","file","audio","video"],"title":"InputModality","description":"A media type a model can accept as input."},"InputUsage":{"properties":{"text":{"$ref":"#/components/schemas/TextUsage","description":"text usage on this side"},"audio":{"$ref":"#/components/schemas/AudioUsage","description":"audio usage on this side"},"image":{"$ref":"#/components/schemas/ImageUsage","description":"image usage on this side"},"video":{"$ref":"#/components/schemas/VideoUsage","description":"video usage on this side"},"voice":{"$ref":"#/components/schemas/VoiceUsage","description":"voice usage on this side"}},"type":"object","title":"InputUsage","description":"Input-side usage; the request side carries no tool term."},"InstructType":{"type":"string","enum":["none","airoboros","alpaca","alpaca-modif","chatml","claude","code-llama","gemma","llama2","llama3","mistral","nemotron","neural","openchat","phi3","rwkv","vicuna","zephyr","deepseek-r1","deepseek-v3.1","qwq","qwen3"],"title":"InstructType","description":"The instruction prompt format a model expects."},"ListModelEntry":{"properties":{"canonical_slug":{"type":"string","title":"Canonical Slug","description":"Stable lowercase slug for the model."},"supported_parameters":{"items":{"$ref":"#/components/schemas/SupportedParameter"},"type":"array","title":"Supported Parameters","description":"Request parameters supported by this model."},"default_parameters":{"$ref":"#/components/schemas/DefaultParameters","description":"Default generation parameters for the model."},"output_defaults":{"$ref":"#/components/schemas/OutputDefaults","description":"Default values emitted or advertised for model outputs."},"media_profiles":{"$ref":"#/components/schemas/MediaProfiles","description":"How the model handles each input-media kind; defaults to all-rejected."},"expiration_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Expiration Date","description":"Date when the model is expected to be removed, if scheduled."},"name":{"type":"string","title":"Name","description":"Human-readable model name."},"description":{"type":"string","title":"Description","description":"Short summary of the model's capabilities."},"context_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Length","description":"Maximum context window for the model."},"architecture":{"$ref":"#/components/schemas/ArchitectureMetadata","description":"Model modality and architecture metadata."},"pricing":{"$ref":"#/components/schemas/PricingMetadata","description":"Billing metadata used to price requests to the model."},"top_provider":{"$ref":"#/components/schemas/TopProviderMetadata","description":"Provider-level limits and moderation metadata."},"per_request_limits":{"anyOf":[{"$ref":"#/components/schemas/PerRequestLimits"},{"type":"null"}],"description":"Explicit per-request token limits, when they differ from provider defaults."},"id":{"type":"string","title":"Id","description":"Model identifier used in API requests."},"object":{"type":"string","const":"model","title":"Object","description":"OpenAI-compatible model object type.","default":"model"},"created":{"type":"integer","title":"Created","description":"Unix timestamp for when the upstream model card was created."},"owned_by":{"type":"string","title":"Owned By","description":"Owner reported by the upstream model card."},"status":{"anyOf":[{"type":"string","enum":["warm","cold"]},{"type":"null"}],"title":"Status","description":"Sprag extension: 'warm' (>=1 ready replica) or 'cold' (scaled to zero). Omitted when live discovery is unavailable."}},"type":"object","required":["canonical_slug","default_parameters","name","description","context_length","architecture","pricing","top_provider","id","created","owned_by"],"title":"ListModelEntry","description":"One ``GET /v1/models`` entry: the public ``ModelMetadata`` plus the OpenAI envelope and live status."},"ListModelsResponse":{"properties":{"object":{"type":"string","const":"list","title":"Object","description":"Response object type.","default":"list"},"data":{"items":{"$ref":"#/components/schemas/ListModelEntry"},"type":"array","title":"Data","description":"Available models and their metadata."}},"type":"object","required":["data"],"title":"ListModelsResponse","description":"The ``GET /v1/models`` response envelope."},"MediaProfiles":{"properties":{"audio":{"anyOf":[{"$ref":"#/components/schemas/AudioSupport"},{"type":"null"}],"description":"audio handling; None rejects audio input"},"image":{"anyOf":[{"$ref":"#/components/schemas/ImageSupport"},{"type":"null"}],"description":"image handling; None rejects image input"},"video":{"anyOf":[{"$ref":"#/components/schemas/VideoSupport"},{"type":"null"}],"description":"video handling; None rejects video input"}},"type":"object","title":"MediaProfiles","description":"How a model handles each input-media kind."},"Metering":{"type":"string","enum":["backend","boundary"],"title":"Metering","description":"Who produces a forwarded input's billable measure.\n\n``backend`` self-reports it; ``boundary`` is a gateway probe."},"ModelGroup":{"type":"string","enum":["Router","Media","Other","GPT","Claude","Gemini","Grok","Cohere","Nova","Qwen","Yi","DeepSeek","Mistral","Llama2","Llama3","Llama4","PaLM","RWKV","Qwen3","HiggsAudioV2"],"title":"ModelGroup","description":"Model family bucket."},"Moderation":{"properties":{"input":{"anyOf":[{"$ref":"#/components/schemas/ModerationInputModerationResults"},{"$ref":"#/components/schemas/ModerationInputError"}],"title":"Input"},"output":{"anyOf":[{"$ref":"#/components/schemas/ModerationOutputModerationResults"},{"$ref":"#/components/schemas/ModerationOutputError"}],"title":"Output"}},"additionalProperties":true,"type":"object","required":["input","output"],"title":"Moderation","description":"Moderation results for the request input and generated output, if moderated\ncompletions were requested."},"ModerationInputError":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"type":{"type":"string","const":"error","title":"Type"}},"additionalProperties":true,"type":"object","required":["code","message","type"],"title":"ModerationInputError","description":"An error produced while attempting moderation."},"ModerationInputModerationResults":{"properties":{"model":{"type":"string","title":"Model"},"results":{"items":{"$ref":"#/components/schemas/ModerationInputModerationResultsResult"},"type":"array","title":"Results"},"type":{"type":"string","const":"moderation_results","title":"Type"}},"additionalProperties":true,"type":"object","required":["model","results","type"],"title":"ModerationInputModerationResults","description":"Successful moderation results for the request input or generated output."},"ModerationInputModerationResultsResult":{"properties":{"categories":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Categories"},"category_applied_input_types":{"additionalProperties":{"items":{"type":"string","enum":["text","image"]},"type":"array"},"type":"object","title":"Category Applied Input Types"},"category_scores":{"additionalProperties":{"type":"number"},"type":"object","title":"Category Scores"},"flagged":{"type":"boolean","title":"Flagged"},"model":{"type":"string","title":"Model"},"type":{"type":"string","const":"moderation_result","title":"Type"}},"additionalProperties":true,"type":"object","required":["categories","category_applied_input_types","category_scores","flagged","model","type"],"title":"ModerationInputModerationResultsResult","description":"A moderation result produced for the response input or output."},"ModerationOutputError":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"type":{"type":"string","const":"error","title":"Type"}},"additionalProperties":true,"type":"object","required":["code","message","type"],"title":"ModerationOutputError","description":"An error produced while attempting moderation."},"ModerationOutputModerationResults":{"properties":{"model":{"type":"string","title":"Model"},"results":{"items":{"$ref":"#/components/schemas/ModerationOutputModerationResultsResult"},"type":"array","title":"Results"},"type":{"type":"string","const":"moderation_results","title":"Type"}},"additionalProperties":true,"type":"object","required":["model","results","type"],"title":"ModerationOutputModerationResults","description":"Successful moderation results for the request input or generated output."},"ModerationOutputModerationResultsResult":{"properties":{"categories":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Categories"},"category_applied_input_types":{"additionalProperties":{"items":{"type":"string","enum":["text","image"]},"type":"array"},"type":"object","title":"Category Applied Input Types"},"category_scores":{"additionalProperties":{"type":"number"},"type":"object","title":"Category Scores"},"flagged":{"type":"boolean","title":"Flagged"},"model":{"type":"string","title":"Model"},"type":{"type":"string","const":"moderation_result","title":"Type"}},"additionalProperties":true,"type":"object","required":["categories","category_applied_input_types","category_scores","flagged","model","type"],"title":"ModerationOutputModerationResultsResult","description":"A moderation result produced for the response input or output."},"OrganizationCostsBucket":{"properties":{"object":{"type":"string","const":"bucket","title":"Object","description":"discriminator; always bucket","default":"bucket"},"start_time":{"type":"integer","title":"Start Time","description":"inclusive Unix start of the bucket, in seconds"},"end_time":{"type":"integer","title":"End Time","description":"exclusive Unix end of the bucket, in seconds"},"results":{"items":{"$ref":"#/components/schemas/OrganizationCostsResult"},"type":"array","title":"Results","description":"cost lines within the bucket"}},"additionalProperties":false,"type":"object","required":["start_time","end_time","results"],"title":"OrganizationCostsBucket","description":"Costs for one time bucket."},"OrganizationCostsResponse":{"properties":{"object":{"type":"string","const":"page","title":"Object","description":"discriminator; always page","default":"page"},"data":{"items":{"$ref":"#/components/schemas/OrganizationCostsBucket"},"type":"array","title":"Data","description":"the buckets on this page, in ascending time order"},"has_more":{"type":"boolean","title":"Has More","description":"whether more buckets follow after this page"},"next_page":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Page","description":"cursor to pass as page for the next page; null when has_more is false"}},"additionalProperties":false,"type":"object","required":["data","has_more","next_page"],"title":"OrganizationCostsResponse","description":"A page of cost buckets."},"OrganizationCostsResult":{"properties":{"object":{"type":"string","const":"organization.costs.result","title":"Object","description":"discriminator; always organization.costs.result","default":"organization.costs.result"},"amount":{"$ref":"#/components/schemas/CostAmount","description":"the cost for this line"},"line_item":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line Item","description":"the line item, when grouped by line_item; else null"}},"additionalProperties":false,"type":"object","required":["amount"],"title":"OrganizationCostsResult","description":"One cost line within a bucket."},"OutputDefaults":{"properties":{"sampling_rate":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Sampling Rate","description":"Default output audio sampling rate in hertz, when the model emits audio."},"audio_format":{"anyOf":[{"$ref":"#/components/schemas/AudioOutputFormat"},{"type":"null"}],"description":"Sample encoding the model emits, when the model emits audio."},"channels":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Channels","description":"Output audio channel count (1 = mono); billed as mono when the model emits audio and it is unset."}},"additionalProperties":false,"type":"object","title":"OutputDefaults","description":"Default values a model advertises or emits for its outputs."},"OutputModality":{"type":"string","enum":["text","image","embeddings","audio","video","voice"],"title":"OutputModality","description":"A media type a model can generate as output."},"OutputUsage":{"properties":{"text":{"$ref":"#/components/schemas/TextUsage","description":"text usage on this side"},"audio":{"$ref":"#/components/schemas/AudioUsage","description":"audio usage on this side"},"image":{"$ref":"#/components/schemas/ImageUsage","description":"image usage on this side"},"video":{"$ref":"#/components/schemas/VideoUsage","description":"video usage on this side"},"voice":{"$ref":"#/components/schemas/VoiceUsage","description":"voice usage on this side"},"tools":{"$ref":"#/components/schemas/ToolUsage","description":"tool usage (output side only)"}},"type":"object","title":"OutputUsage","description":"Output-side usage, plus the tool-call term that only the response carries."},"PerRequestLimits":{"properties":{"prompt_tokens":{"type":"integer","title":"Prompt Tokens","description":"Maximum input tokens accepted in one request."},"completion_tokens":{"type":"integer","title":"Completion Tokens","description":"Maximum output tokens allowed in one request."}},"type":"object","required":["prompt_tokens","completion_tokens"],"title":"PerRequestLimits","description":"Explicit per-request token limits, when they differ from provider defaults."},"PricingMetadata":{"properties":{"request":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Request","description":"Flat USD price charged once per request, when applicable."},"input":{"$ref":"#/components/schemas/PricingSideMetadata","description":"Unit prices for input usage by modality."},"output":{"$ref":"#/components/schemas/PricingSideMetadata","description":"Unit prices for output usage by modality."},"web_search":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Web Search","description":"Additional USD price for web search usage, when applicable."},"internal_reasoning":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Internal Reasoning","description":"Additional USD price for internal reasoning usage, when applicable."},"discount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount","description":"Multiplier applied to the calculated request price, when present."}},"additionalProperties":false,"type":"object","required":["input","output"],"title":"PricingMetadata","description":"A model's rate card: per-modality input/output unit prices plus per-request and add-on charges."},"PricingSideMetadata":{"properties":{"text":{"$ref":"#/components/schemas/PricingUnitMetadata","description":"Text pricing units."},"image":{"$ref":"#/components/schemas/PricingUnitMetadata","description":"Image pricing units."},"audio":{"$ref":"#/components/schemas/PricingUnitMetadata","description":"Audio pricing units."},"video":{"$ref":"#/components/schemas/PricingUnitMetadata","description":"Video pricing units."},"voice":{"$ref":"#/components/schemas/PricingUnitMetadata","description":"Reusable voice resource pricing units."}},"additionalProperties":false,"type":"object","title":"PricingSideMetadata","description":"Per-modality unit prices for one side of a request (input or output)."},"PricingUnitMetadata":{"properties":{"tokens":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Tokens","description":"USD price per token for this modality."},"characters":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Characters","description":"USD price per text character."},"cached_tokens":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Cached Tokens","description":"USD price per cached text token."},"count":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Count","description":"USD price per counted unit, such as an image or request item."}},"additionalProperties":false,"type":"object","title":"PricingUnitMetadata","description":"Unit prices for one modality on one side of a request (input or output)."},"SpeechRequest":{"properties":{"model":{"type":"string","title":"Model","description":"model name to route to (may be an alias; rejected if blank)"},"cache_salt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cache Salt","description":"prefix-cache isolation/affinity key (vLLM ``cache_salt``); None when unset"},"input":{"type":"string","title":"Input","description":"the text to synthesize to speech"},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice","description":"voice id or built-in speaker to speak in"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions","description":"optional voice/style guidance"},"response_format":{"anyOf":[{"$ref":"#/components/schemas/SpeechResponseFormat"},{"type":"null"}],"description":"audio container/codec"},"speed":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Speed","description":"playback speed multiplier"},"stream_format":{"anyOf":[{"type":"string","enum":["sse","audio"]},{"type":"null"}],"title":"Stream Format","description":"stream the audio as it is generated: 'sse' emits speech.audio.delta/.done events, 'audio' streams raw chunked audio; None returns a single buffered response"},"ref_audio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref Audio","description":"inline data: URL of reference audio for voice cloning"},"ref_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref Text","description":"transcript of the reference audio, for voice cloning"}},"additionalProperties":true,"type":"object","required":["model","input"],"title":"SpeechRequest","description":"OpenAI ``/v1/audio/speech`` request body."},"SpeechResponseFormat":{"type":"string","enum":["mp3","opus","aac","flac","wav","pcm"],"title":"SpeechResponseFormat","description":"The audio container/codec the client asks the model to emit."},"StreamOptions":{"properties":{"include_usage":{"type":"boolean","title":"Include Usage","description":"emit a final usage-only chunk on the stream","default":false}},"type":"object","title":"StreamOptions","description":"OpenAI ``stream_options`` object on a chat request."},"SupportedParameter":{"type":"string","enum":["temperature","top_p","top_k","min_p","top_a","frequency_penalty","presence_penalty","repetition_penalty","max_tokens","logit_bias","logprobs","top_logprobs","seed","response_format","language","task_type","voice","instructions","speed","stream_format","ref_audio","ref_text","speaker_embedding","x_vector_only_mode","structured_outputs","stop","tools","tool_choice","parallel_tool_calls","include_reasoning","reasoning","reasoning_effort","web_search_options","verbosity"],"title":"SupportedParameter","description":"A request parameter a model can honor."},"TextUsage":{"properties":{"tokens":{"type":"integer","title":"Tokens","description":"total text tokens","default":0},"characters":{"type":"integer","title":"Characters","description":"text characters — the unit TTS bills its input by; token modalities leave this at 0","default":0},"cached_tokens":{"type":"integer","title":"Cached Tokens","description":"prompt tokens served from cache (billed at the cached rate)","default":0},"reasoning_tokens":{"type":"integer","title":"Reasoning Tokens","description":"tokens spent on internal reasoning","default":0}},"type":"object","title":"TextUsage","description":"Text measures: tokens, characters (the TTS-input unit), plus cached and reasoning tokens."},"ToolUsage":{"properties":{"call_count":{"type":"integer","title":"Call Count","description":"number of tool calls","default":0},"tokens":{"type":"integer","title":"Tokens","description":"tokens attributable to tool calls","default":0}},"type":"object","title":"ToolUsage","description":"Tool-call measures: the call count and the tokens attributable to those calls."},"TopLogprob":{"properties":{"token":{"type":"string","title":"Token"},"bytes":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bytes"},"logprob":{"type":"number","title":"Logprob"}},"additionalProperties":true,"type":"object","required":["token","logprob"],"title":"TopLogprob"},"TopProviderMetadata":{"properties":{"context_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Length","description":"Maximum context window supported by the provider."},"max_completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Completion Tokens","description":"Maximum number of output tokens the provider allows for one request."},"is_moderated":{"type":"boolean","title":"Is Moderated","description":"Whether provider-side moderation is enabled for the model."}},"type":"object","required":["is_moderated"],"title":"TopProviderMetadata","description":"Provider-level limits and moderation flags for a model."},"TranscriptionResponse":{"properties":{"text":{"type":"string","title":"Text","description":"the transcript"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"detected/echoed language"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration","description":"audio duration, seconds"},"words":{"anyOf":[{"items":{"$ref":"#/components/schemas/TranscriptionWord"},"type":"array"},{"type":"null"}],"title":"Words","description":"word timings; set only on the verbose_json path"},"usage":{"anyOf":[{"$ref":"#/components/schemas/Usage"},{"type":"null"}],"description":"the request's measured per-modality usage and cost; absent when nothing was measured"}},"additionalProperties":true,"type":"object","required":["text"],"title":"TranscriptionResponse","description":"Client-facing transcription response (OpenAI-compatible)."},"TranscriptionWord":{"properties":{"word":{"type":"string","title":"Word","description":"the word token"},"start":{"type":"number","title":"Start","description":"word start time, seconds"},"end":{"type":"number","title":"End","description":"word end time, seconds"},"speaker":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Speaker","description":"0-indexed speaker label, set only when diarization ran"}},"additionalProperties":false,"type":"object","required":["word","start","end"],"title":"TranscriptionWord","description":"One word-level timestamp (OpenAI verbose_json word shape).\n\n``speaker`` is set only when diarization ran; an explicit ``None`` means requested-but-uncovered,\ndistinct from omitted."},"Usage":{"properties":{"input":{"$ref":"#/components/schemas/InputUsage","description":"per-modality input usage the request was measured and billed from"},"output":{"$ref":"#/components/schemas/OutputUsage","description":"per-modality output usage the request was measured and billed from"},"cost_usd_micros":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cost Usd Micros","description":"priced cost in USD micros (1e-6 USD); null when the request is not charged"}},"additionalProperties":false,"type":"object","required":["input","output"],"title":"Usage","description":"The measured per-modality usage vector and the priced cost, emitted in place of the backend usage."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VideoAccept":{"properties":{"containers":{"items":{"$ref":"#/components/schemas/VideoContainer"},"type":"array","uniqueItems":true,"title":"Containers","description":"accepted containers; empty = any","default":[]},"max_width":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Width","description":"largest accepted width in px; None = any"},"max_height":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Height","description":"largest accepted height in px; None = any"},"frame_rate":{"anyOf":[{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Frame Rate","description":"accepted [low, high] fps inclusive; None = any"}},"type":"object","title":"VideoAccept","description":"The video a model ingests natively — accepted containers, maximum frame size, and frame-rate range.\n\nAn unknown dimension/rate against a constraint is not satisfied."},"VideoContainer":{"type":"string","enum":["mp4","webm","mov","avi","mkv"],"title":"VideoContainer","description":"A video container the gateway recognizes (the container half of a ``video/*`` content type)."},"VideoProfile":{"properties":{"video_codec":{"type":"string","title":"Video Codec","description":"target video codec (ffmpeg -vcodec), e.g. 'h264'"},"container":{"type":"string","title":"Container","description":"target container/format (ffmpeg -f), e.g. 'mp4'"},"max_width":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Width","description":"resize bound; None keeps source"},"max_height":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Height","description":"resize bound; None keeps source"},"keep_audio":{"type":"boolean","title":"Keep Audio","description":"keep the source audio track; False strips it on transcode","default":true}},"type":"object","required":["video_codec","container"],"title":"VideoProfile","description":"The concrete video target the gateway normalizes input to."},"VideoSupport":{"properties":{"accepts":{"anyOf":[{"$ref":"#/components/schemas/VideoAccept"},{"type":"null"}],"description":"natively accepted video; None accepts nothing"},"converts_to":{"anyOf":[{"$ref":"#/components/schemas/VideoProfile"},{"type":"null"}],"description":"transcode target for non-accepted input; None rejects it"},"metering":{"$ref":"#/components/schemas/Metering","description":"who meters a forwarded input — the backend, or a boundary probe","default":"boundary"}},"type":"object","title":"VideoSupport","description":"How a model handles video input."},"VideoUsage":{"properties":{"duration":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Duration","description":"video duration in seconds","default":"0"},"frames":{"type":"integer","title":"Frames","description":"number of sampled frames","default":0},"tokens":{"type":"integer","title":"Tokens","description":"visual tokens charged for the video","default":0}},"type":"object","title":"VideoUsage","description":"Video measures: duration, sampled frames, and the visual tokens charged."},"VisualPlaceholderMetadata":{"properties":{"factor":{"type":"integer","exclusiveMinimum":0.0,"title":"Factor","description":"Side-length quantum: patch_size × merge_size. Each resized side is a multiple of this."},"image_min_pixels":{"type":"integer","exclusiveMinimum":0.0,"title":"Image Min Pixels","description":"Minimum image area (px); a smaller image is upscaled to this, preserving aspect."},"image_max_pixels":{"type":"integer","exclusiveMinimum":0.0,"title":"Image Max Pixels","description":"Maximum image area (px); a larger image is downscaled to this, preserving aspect."},"video_min_pixels":{"type":"integer","exclusiveMinimum":0.0,"title":"Video Min Pixels","description":"Minimum per-frame area (px) for video; a smaller frame is upscaled to this."},"video_max_pixels":{"type":"integer","exclusiveMinimum":0.0,"title":"Video Max Pixels","description":"Maximum per-frame area (px) for video; a larger frame is downscaled to this."},"markers":{"type":"integer","minimum":0.0,"title":"Markers","description":"Framing tokens added once around each image/video placeholder block."},"temporal":{"type":"integer","exclusiveMinimum":0.0,"title":"Temporal","description":"Video frames per temporal patch group (the grid is multiplied by ceil(sampled/temporal))."},"frame_cap":{"type":"integer","exclusiveMinimum":0.0,"title":"Frame Cap","description":"Maximum sampled video frames; source frames beyond this are not sampled."}},"additionalProperties":false,"type":"object","required":["factor","image_min_pixels","image_max_pixels","video_min_pixels","video_max_pixels","markers","temporal","frame_cap"],"title":"VisualPlaceholderMetadata","description":"Per-model image/video placeholder token constants."},"VoiceListResponse":{"properties":{"object":{"type":"string","const":"list","title":"Object","description":"envelope type discriminator; always 'list'","default":"list"},"data":{"items":{"$ref":"#/components/schemas/VoiceObject"},"type":"array","title":"Data","description":"the voices"},"has_more":{"type":"boolean","title":"Has More","description":"always False","default":false},"first_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Id","description":"first voice id, or None when empty"},"last_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Id","description":"last voice id, or None when empty"}},"additionalProperties":false,"type":"object","required":["data"],"title":"VoiceListResponse","description":"OpenAI list envelope for the voice catalog."},"VoiceObject":{"properties":{"object":{"type":"string","const":"audio.voice","title":"Object","description":"resource type discriminator; always 'audio.voice'","default":"audio.voice"},"id":{"type":"string","title":"Id","description":"voice id"},"name":{"type":"string","title":"Name","description":"voice name"},"created_at":{"type":"integer","title":"Created At","description":"creation unix time, seconds","default":0},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"optional human description"},"category":{"type":"string","enum":["preset","cloned","embedding"],"title":"Category","description":"voice provenance: preset, cloned, or embedding"}},"additionalProperties":false,"type":"object","required":["id","name","category"],"title":"VoiceObject","description":"OpenAI voice resource shape."},"VoiceUsage":{"properties":{"count":{"type":"integer","title":"Count","description":"number of custom-voice references used","default":0}},"type":"object","title":"VoiceUsage","description":"Custom-voice references used — a counted resource that carries no tokens."},"_CanonicalChoice":{"properties":{"finish_reason":{"type":"string","enum":["stop","length","tool_calls","content_filter","function_call"],"title":"Finish Reason"},"index":{"type":"integer","title":"Index"},"logprobs":{"anyOf":[{"$ref":"#/components/schemas/ChoiceLogprobs"},{"type":"null"}]},"message":{"$ref":"#/components/schemas/_CanonicalMessage"}},"type":"object","required":["finish_reason","index","message"],"title":"_CanonicalChoice"},"_CanonicalMessage":{"properties":{"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"refusal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refusal"},"role":{"type":"string","const":"assistant","title":"Role"},"annotations":{"anyOf":[{"items":{"$ref":"#/components/schemas/Annotation"},"type":"array"},{"type":"null"}],"title":"Annotations"},"audio":{"anyOf":[{"$ref":"#/components/schemas/ChatCompletionAudio"},{"type":"null"}]},"function_call":{"anyOf":[{"$ref":"#/components/schemas/FunctionCall"},{"type":"null"}]},"tool_calls":{"anyOf":[{"items":{"anyOf":[{"$ref":"#/components/schemas/ChatCompletionMessageFunctionToolCall"},{"$ref":"#/components/schemas/ChatCompletionMessageCustomToolCall"}]},"type":"array"},{"type":"null"}],"title":"Tool Calls"}},"type":"object","required":["role"],"title":"_CanonicalMessage"}},"securitySchemes":{"BearerAuth":{"type":"http","description":"Sprag API key, sent as `Authorization: Bearer <key>`.","scheme":"bearer"}}}}