# Cursor Settings → AI → Custom Provider
Base URL: https://aperture-ai.run/api/v1
API Key: YOUR_API_KEY# Then use any model: openai/gpt-5.2, anthropic/claude-sonnet-4.6, google/gemini-3.5-flash
Same base URL + your key in any OpenAI-compatible client. Pick yours.
# Codex CLI reads OPENAI_BASE_URL + OPENAI_API_KEY from env
export OPENAI_BASE_URL="https://aperture-ai.run/api/v1"
export OPENAI_API_KEY="YOUR_APERTURE_KEY"
codex --model openai/gpt-5.2"add tests for handlers/auth.go"
# Cursor → Settings → Models → OpenAI API Key → Override base URL
Base URL: https://aperture-ai.run/api/v1
API Key: YOUR_APERTURE_KEY
Model: openai/gpt-5.2# add any catalog id as a custom model
# Claude Code speaks the Anthropic format, not OpenAI — use a router bridge.# Install claude-code-router (translates Anthropic ⇄ OpenAI-compatible):
npm install -g @musistudio/claude-code-router# ~/.claude-code-router/config.json:
{
"Providers": [{
"name": "aperture",
"api_base_url": "https://aperture-ai.run/api/v1/chat/completions",
"api_key": "YOUR_APERTURE_KEY",
"models": ["openai/gpt-5.2", "anthropic/claude-sonnet-4.6"]
}]
}
# OpenClaw / any OpenAI-compatible agent — point it at Aperture:
base_url: https://aperture-ai.run/api/v1
api_key: YOUR_APERTURE_KEY
model: openai/gpt-5.2# or any id from the catalog below
# Official OpenAI SDK — just swap base_url + key
from openai import OpenAI
client = OpenAI(
api_key="YOUR_APERTURE_KEY",
base_url="https://aperture-ai.run/api/v1",
)
client.chat.completions.create(model="openai/gpt-5.2", messages=[...])
Model pricing
Aperture price per 1M tokens · switch model by changing the model string · same code, any model.
Model
Input / 1M
Output / 1M
Loading model catalog…
Models marked Free run at $0. Credits never expire; failed requests are never charged.