OXAlpha
Open chat
API guide

Get the Ox Alpha API

Ox Alpha is available through OpenRouter. From zero to your first streamed answer in about five minutes.

1

Create an OpenRouter account

Ox Alpha is served through OpenRouter under the model id stealth/ox-alpha. Sign up at openrouter.ai — email or Google works. No approval or waitlist is needed for stealth models.

2

Generate an API key

Open Keys in your OpenRouter dashboard (openrouter.ai/keys) and click Create Key. Copy it once — you won't see it again. Keys look like sk-or-v1-.... Keep it secret; treat it like a password.

3

Add credit (optional in stealth)

Ox Alpha is $0 during the stealth preview, so you can call it with a zero balance. Adding a small amount of credit — or your own provider key under Integrations — lifts the shared free-pool rate limits (the 429s you'll occasionally hit).

4

Make your first call

Point any OpenAI-compatible client at OpenRouter's /chat/completions endpoint with model: "stealth/ox-alpha" and reasoning: { enabled: true }.

Quickstart — cURL

Set OPENROUTER_API_KEY in your shell, then:

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "stealth/ox-alpha",
    "messages": [
      { "role": "user", "content": "How many r'\''s are in \"strawberry\"?" }
    ],
    "reasoning": { "enabled": true, "effort": "high" }
  }'

Python

The reasoning block returns the chain of thought alongside the answer.

import os, requests

resp = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
    json={
        "model": "stealth/ox-alpha",
        "messages": [{"role": "user", "content": "Explain your reasoning process."}],
        "reasoning": {"enabled": True, "effort": "high"},
    },
)
msg = resp.json()["choices"][0]["message"]
print("REASONING:\n", msg.get("reasoning"))
print("ANSWER:\n", msg["content"])

Streaming (Node)

Set stream: true and read the SSE deltas — reasoning and content arrive separately.

// Node — stream tokens as they arrive
const res = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OPENROUTER_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "stealth/ox-alpha",
    messages: [{ role: "user", content: "Write a haiku about context windows." }],
    reasoning: { enabled: true },
    stream: true,
  }),
});

const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  for (const line of decoder.decode(value).split("\n")) {
    if (!line.startsWith("data: ")) continue;
    const data = line.slice(6);
    if (data === "[DONE]") break;
    const delta = JSON.parse(data).choices[0].delta;
    if (delta.reasoning) process.stdout.write(delta.reasoning); // thinking
    if (delta.content) process.stdout.write(delta.content);     // answer
  }
}

Good to know

  • Reasoning is mandatory — effort levels are low, high, max.
  • Strict JSON schema (response_format) isn't reliably enforced — use tool calling for structured output.
  • The free stealth pool rate-limits (HTTP 429) intermittently — retry with backoff, or add your own provider key.
  • It's a preview model that may be logged — don't send secrets or personal data.
Try it now in the browserOpen OpenRouter keys ↗