Discover
Open app

Ando Provider

Configure Ando as an OpenAI-compatible inference provider.

Add Ando anywhere your app already supports OpenAI-compatible providers. The main difference is ownership: the key belongs to the user, team, or workspace that brings Ando into your app.

Your product should make the provider feel deliberate. Show the provider name, the fixed base URL, a key field, a test action, and a clear connected state.

Configuration

Authentication

Authorization: Bearer <user-virtual-key>

Models

GET /v1/models returns the model IDs available to that key.

Chat

POST /v1/chat/completions uses OpenAI-compatible messages.

Validate the key

Use model discovery as the connection test. A successful response means the key is valid and the user's connection can reach Ando's inference gateway.

const ANDO_BASE_URL = "https://inference.andoai.xyz/v1";

export async function listAndoModels(virtualKey: string) {
  const response = await fetch(`${ANDO_BASE_URL}/models`, {
    headers: {
      Authorization: `Bearer ${virtualKey}`,
    },
  });

  if (response.status === 401) {
    return { ok: false, reason: "invalid_key" as const };
  }

  if (!response.ok) {
    return { ok: false, reason: "provider_unavailable" as const };
  }

  return { ok: true, models: await response.json() };
}

Show the user a connected state only after this check passes. Do not reveal the full key again after save. Show a short preview and a rotate action.

Call chat completions

OpenAI-compatible SDKs can point at Ando by changing the baseURL and using the user's Virtual Key as the API key.

import OpenAI from "openai";

export function createAndoClient(virtualKey: string) {
  return new OpenAI({
    apiKey: virtualKey,
    baseURL: "https://inference.andoai.xyz/v1",
  });
}

const ando = createAndoClient(process.env.ANDO_VIRTUAL_KEY!);

const completion = await ando.chat.completions.create({
  model: "Qwen/Qwen3-8B-AWQ",
  messages: [
    { role: "system", content: "Answer inside the product's tone." },
    { role: "user", content: "Summarize this project update." },
  ],
  max_tokens: 256,
  temperature: 0.2,
});

console.log(completion.choices[0]?.message?.content);

Use the model returned by GET /v1/models instead of hard-coding a model when your app can. A pinned model is useful for deterministic tests, but product traffic should respect the user's Ando connection and the models currently available to that key.

Streaming

For chat interfaces that support streaming, send stream: true to POST /v1/chat/completions and handle OpenAI-compatible server-sent events. Start with non-streaming validation first so connection errors are simple to surface in the settings screen.

{
  "model": "Qwen/Qwen3-8B-AWQ",
  "messages": [
    { "role": "user", "content": "Draft a short release note." }
  ],
  "max_tokens": 256,
  "stream": true
}

UI copy

Keep the provider setup short and concrete.

  • Provider: Ando
  • Type: OpenAI-compatible
  • Base URL: https://inference.andoai.xyz/v1
  • API key label: Ando Virtual Key
  • Test action: Test Ando connection
  • Connected state: Ando is connected for this user

Avoid asking users to choose provider internals they do not need. They should bring the key, confirm the connection, and return to the work they came to do.

On this page