Quick start
Your first call in two minutes
REDH speaks the OpenAI and Claude API formats. Keep your SDK, change two values.
01Get a key
Keys are issued per project. Tell us what you are building and which models you need; the key arrives with its model allow-list and rate limit.
Keep it in an environment variable:
export REDH_API_KEY="rh_live_••••••••"02Point your SDK at REDH
https://token.redh.ai/v1/chat/completions · /responses · /images · /videos · /audio · /embeddingshttps://token.redh.ai/v1/messagesEvery model answers in OpenAI format. Claude models answer in Claude format as well.
03Your first request
curl https://token.redh.ai/v1/chat/completions \
-H "Authorization: Bearer $REDH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-5-5",
"messages": [{"role": "user", "content": "Hello from Hong Kong"}]
}'import os
from openai import OpenAI
client = OpenAI(
base_url="https://token.redh.ai/v1",
api_key=os.environ["REDH_API_KEY"],
)
reply = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "Hello from Hong Kong"}],
)
print(reply.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://token.redh.ai/v1",
apiKey: process.env.REDH_API_KEY,
});
const reply = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages: [{ role: "user", content: "Hello from Hong Kong" }],
});
console.log(reply.choices[0].message.content);To switch models, change the model string. Nothing else moves.
04Claude format
import os
import anthropic
client = anthropic.Anthropic(
base_url="https://token.redh.ai",
api_key=os.environ["REDH_API_KEY"],
)
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello from Hong Kong"}],
)
print(message.content[0].text)curl https://token.redh.ai/v1/messages \
-H "x-api-key: $REDH_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello from Hong Kong"}]
}'Long system prompts and tool definitions that repeat are cached upstream; cache reads bill at a fraction of the input price.
05Images and video
Images come back in the same call.
curl https://token.redh.ai/v1/images/generations \
-H "Authorization: Bearer $REDH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-image-2.5", "prompt": "A matte black robot hand holding a red chip", "size": "1024x1024"}'Video is an async job: submit it, keep the id, collect the file when it is ready.
# 1. Submit: the answer is a job id
curl https://token.redh.ai/v1/videos \
-H "Authorization: Bearer $REDH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "veo-3.1", "prompt": "Victoria Harbour at dusk, slow drone push", "seconds": "8"}'
# 2. Collect it when it is ready
curl https://token.redh.ai/v1/videos/$JOB_ID \
-H "Authorization: Bearer $REDH_API_KEY"06Coding tools
export ANTHROPIC_BASE_URL="https://token.redh.ai"
export ANTHROPIC_AUTH_TOKEN="$REDH_API_KEY"
claude# ~/.codex/config.toml
model = "gpt-6.1-sol"
model_provider = "redh"
[model_providers.redh]
name = "REDH Token"
base_url = "https://token.redh.ai/v1"
env_key = "REDH_API_KEY"
wire_api = "responses"- Open Cursor Settings → Models.
- Paste your REDH key into OpenAI API Key.
- Turn on Override OpenAI Base URL and enter https://token.redh.ai/v1.
- Add the model ids you want, for example gpt-6.1-sol.
07Need a model that is not listed?
Write to us with the model and the volume you expect. We will tell you whether it can be enabled on your key.
Write to us