One OpenAI-compatible API for every model and provider.
Route chat, images, embeddings, audio, and video through app.nz. Point any OpenAI or Anthropic SDK at the base URL below, keep your code, and switch models with one field. auto routing, adaptive thinking, prompt caching, automatic failover, usage metering, and one API key.
https://app.nz/v1from openai import OpenAI
client = OpenAI(base_url="https://app.nz/v1", api_key="pk_live_...")
resp = client.chat.completions.create(
model="auto", # smart routing, or pin a model like "gpt-latest"
messages=[{"role": "user", "content": "Write a tiny SSE server in Go."}],
reasoning_effort="auto", # none | low | medium | high | xhigh | auto
)
print(resp.choices[0].message.content)Authentication
Send your key as Authorization: Bearer pk_live_.... Create one on the account page. Signed in here, same-origin calls use your session automatically.
Claude Code + Anthropic SDK
Use the site root, no /v1. The gateway translates Messages, tools, and streaming for every compatible provider model.
$env:ANTHROPIC_BASE_URL = "https://app.nz"
$env:ANTHROPIC_AUTH_TOKEN = $env:APP_API_KEY
$env:ANTHROPIC_API_KEY = ""
$env:ANTHROPIC_MODEL = "nvidia/deepseek-v4-pro"
claudeAuto routing
Send "model": "auto" and the gateway classifies the prompt, then routes to a tier and thinking depth. Or pin a model id. Stable, long Anthropic system/tool prefixes are cached automatically; explicit cache controls are preserved.
autoDefault chat. Classifies the prompt and routes to a tier.app/auto-codeAgents, refactors, and bug fixes.app/auto-reasoningPlanning, math, and hard reasoning (auto thinking depth).app/auto-cheapTrivial and classification prompts on the cheapest model.app/auto-visionPrompts that include images.app/auto-imageImage generation with a hosted fallback.Endpoints
/v1/chat/completionsOpenAI-compatible chat completions (streaming + tools).
/v1/messagesAnthropic-compatible Messages API for Claude + agent SDKs.
/v1/images/generationsGenerate images (GPT Image, Flux, and more).
/v1/embeddingsVector embeddings for search and RAG.
/v1/audio/speechText-to-speech (also /v1/tts).
/v1/audio/transcriptionsSpeech-to-text transcription.
/v1/videos/generationsGenerate video clips (job-based).
/v1/music/generationsGenerate music (job-based).
/v1/audio/generationsGenerate SFX and short audio (job-based).
/v1/3d/generationsGenerate textured 3D models (job-based).
/v1/panoramas/generationsExpand one image into a 360 panorama or spatial world (job-based).
/api/gateway/modelsList every routable model + provider metadata.
/api/gateway/resolve?model=Preview how a model name routes (provider, fallbacks).
/api/gateway/routePreview which model a bare "auto" request resolves to.
Fusion
Fusion sends one prompt to a panel of models in parallel; a judge model then regenerates the strongest answer from every candidate. Any model id works, including custom OpenRouter slugs like openrouter/vendor/model. Try it on the Fusion page.
curl -X POST https://app.nz/api/tools/fusion \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Explain vector databases in two sentences",
"models": ["app/auto-fast", "anthropic/claude-haiku-4-5", "openrouter/qwen/qwen3.7-plus"],
"judgeModel": "app/auto"
}'Returns { results: [{model, output, ms, costMicros}], fused, judgeModel }.
# Save a reusable panel once:
curl -X POST https://app.nz/api/tools/fusion/spaces \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "my-panel", "models": ["app/auto-fast", "gemini/gemini-2.5-flash"], "judgeModel": "app/auto"}'
# Then run it forever after at your own endpoint:
curl -X POST https://app.nz/api/fusion/SPACE_ID/run \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "your prompt here"}'Spaces: GET/POST /api/tools/fusion/spaces, DELETE /api/tools/fusion/spaces/{id}. Per-call models overrides the saved panel.
Playground
Run real requests against any model here: chat, image, embeddings, video, music, speech, transcription, and image→3D, each with a live preview and the raw JSON response. Signed in, it uses your session; otherwise paste an API key.