https://api.veri.studio/v1/deployments/{deployment_id}. Anything that already speaks OpenAI works — point base_url at the deployment and pass your Veri API key.
Use the full URL
https://api.veri.studio/v1/deployments/{dep.id} as base_url. The OpenAI client appends /chat/completions for you. The dep.endpoint_url field on the SDK response is a relative path that already includes /chat/completions — it’s for direct curl-style calls, not for the OpenAI SDK’s base_url.What works
Basic chat with one or more messages, returning a completion. Works in:- OpenAI Python SDK
- OpenAI Node SDK
- LangChain (
ChatOpenAI(base_url=...)) - LlamaIndex (
OpenAI(api_base=...)) - Vercel AI SDK
- curl with the standard OpenAI request shape
- Anything else that targets
/chat/completions
Streaming
Streaming works: setstream=true and vLLM’s SSE events are forwarded through unchanged, so for chunk in oai.chat.completions.create(..., stream=True) behaves exactly as it does against OpenAI. Usage accounting is preserved (stream_options.include_usage is injected upstream so the final chunk carries token counts).
Everything else is a passthrough
The proxy keeps a few typed fields (model, messages, temperature, max_tokens, stream) and forwards everything else the client sends — top_p, stop, seed, frequency_penalty, presence_penalty, logit_bias, response_format, tools, tool_choice, … — to vLLM untouched. vLLM is the schema authority: it applies its own defaults for omitted fields and rejects what it doesn’t support.
Caveats:
- Tool calling (
tools,tool_choice) rides through, but the deployment’s vLLM must have tool parsing enabled — passvllm_extra_argsat create time (for example--enable-auto-tool-choice --tool-call-parser hermes). Without those flags vLLM rejects tool requests. - Structured outputs (
response_format) are handled by vLLM’s guided decoding; support depends on the engine version and model. - Vision / audio inputs depend on the served model being multimodal; text-only models reject them.
Request shape
model field in the request is echoed back in the response — it’s not validated against the deployment’s actual model. Pass whatever string you want.
Response shape
finish_reason values: stop (normal end), length (hit max_tokens), tool_calls (when tool calling is enabled). Extra top-level fields vLLM returns (system_fingerprint, …) are preserved in the response.
Scaled-to-zero deployments
If the deployment scaled to zero, the first request triggers a wake and returns503 with a Retry-After header and error code deployment_waking while the GPU boots (a few minutes). The OpenAI client’s built-in retries give up well before that, so either retry on 503 yourself until the cold start completes, or pre-warm with veri deployments wake <id> before sending traffic. The Veri SDK’s chat() handles this retry loop for you.
LangChain example
LlamaIndex example
curl
What about embeddings?
Not supported — Veri serves chat completions only, not embeddings. Use a dedicated embeddings provider or run a local model for that surface.Where to go next
Deployments API
create / chat / stop endpoint reference.Deployment analytics demo
Planned walkthrough for request, token, latency, and replica metrics.
Hosting & GPU sizing
Pick the right GPU for the model.
Quickstart
First-time deployment in ~10 minutes.

