Quickstart

One API for supported AI models

Use an OpenAI-compatible base URL, your ZevRouter API key, and familiar provider/model IDs.

Base URL

https://zusd-testnet---zevrouter-staging-skwx3z2gxa-uc.a.run.app/api/v1

Configuration

base_url = "https://zusd-testnet---zevrouter-staging-skwx3z2gxa-uc.a.run.app/api/v1"
api_key = "zvr_REPLACE_ME"
model = "google/gemini-3.8-flash"

Enabled Models

  • google/gemini-3.8-flash
  • google/gemini-3.7-flash
  • google/gemini-3.6-flash
  • google/gemini-3.5-flash
  • google/gemini-3-flash-preview
  • google/gemini-2.5-flash-lite
  • google/gemini-2.5-flash
  • google/gemini-2.5-pro

Curl

curl "https://zusd-testnet---zevrouter-staging-skwx3z2gxa-uc.a.run.app/api/v1/chat/completions" \
  -H "Authorization: Bearer zvr_REPLACE_ME" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3.8-flash",
    "max_tokens": 256,
    "messages": [
      { "role": "user", "content": "Say hello from ZEV AI Gateway." }
    ]
  }'

Optional Routing

Most requests only need a model and messages. Routing preferences are optional.

{
  "model": "google/gemini-3.8-flash",
  "routing": "greenest",
  "messages": [{ "role": "user", "content": "Use the lowest-carbon route." }]
}
{
  "model": "google/gemini-3.8-flash",
  "provider_server": "google-vertex/global",
  "messages": [{ "role": "user", "content": "Use this provider route." }]
}

Node

const res = await fetch("https://zusd-testnet---zevrouter-staging-skwx3z2gxa-uc.a.run.app/api/v1/chat/completions", {
  method: "POST",
  headers: {
    authorization: "Bearer " + process.env.ZEV_API_KEY,
    "content-type": "application/json"
  },
  body: JSON.stringify({
    model: "google/gemini-3.8-flash",
    max_tokens: 256,
    messages: [{ role: "user", content: "Plan a low-carbon trip." }]
  })
});
const data = await res.json();
console.log(data.choices[0].message.content);
console.log(data.zevrouter);

Errors