Skip to main content
A Veri deployment exposes the OpenAI Chat Completions API at 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: set stream=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 sendstop_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 — pass vllm_extra_args at 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

The 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 returns 503 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.