Use JJAPI in 30 seconds
If your code already calls OpenAI, you only need to change two things: the base URL and the API key.
1. Buy a plan and grab your API key
After purchase you'll receive an email with a key like sk-jjapi-... and a link to your console.
2. Point your client at JJAPI
Replace the base URL in your existing OpenAI client. Everything else stays the same.
cURL
curl https://api.jjapi.net/v1/chat/completions \
-H "Authorization: Bearer sk-jjapi-..." \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4-7",
"messages": [{"role": "user", "content": "Hello"}]
}' Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://api.jjapi.net/v1",
api_key="sk-jjapi-...",
)
r = client.chat.completions.create(
model="claude-opus-4-7",
messages=[{"role": "user", "content": "Hello"}],
)
print(r.choices[0].message.content) Node.js (OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.jjapi.net/v1",
apiKey: "sk-jjapi-...",
});
const r = await client.chat.completions.create({
model: "claude-opus-4-7",
messages: [{ role: "user", content: "Hello" }],
});
console.log(r.choices[0].message.content); 3. Call any model
Use the model name from any supported vendor. Switch by changing one string.
Common model identifiers
Snapshot as of 2026-05-23. New models ship roughly monthly β see the live model catalog for the always-current list.
Streaming
Add stream: true just like with OpenAI. JJAPI streams server-sent events in OpenAI format regardless of the upstream vendor.
stream = client.chat.completions.create(
model="gpt-5.5-pro",
messages=[{"role": "user", "content": "Stream this"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="") Other endpoints
/v1/embeddingsβ text embeddings (OpenAI / Cohere / Voyage)/v1/images/generationsβ DALLΒ·E 3 / Midjourney / Flux/v1/audio/speechβ TTS (OpenAI / ElevenLabs)/v1/audio/transcriptionsβ Whisper/v1/rerankβ Cohere / Voyage rerankers