Quickstart
Make one OpenAI-compatible chat completions call with the Terminaili base URL, an API key, and ipop/coder-balanced.
You need three thingsBase URL
https://api.terminaili.com/v1API keyAuthorization header
Authorization: Bearer $TERMINAILI_API_KEYModel idCanonical quickstart model
ipop/coder-balancedcURL
curl https://api.terminaili.com/v1/chat/completions \
-H "Authorization: Bearer $TERMINAILI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ipop/coder-balanced",
"messages": [{ "role": "user", "content": "Hello from Terminaili." }]
}'Python
from openai import OpenAI
import os
client = OpenAI(
base_url=os.environ["OPENAI_BASE_URL"],
api_key=os.environ["OPENAI_API_KEY"],
)
completion = client.chat.completions.create(
model=os.environ.get("OPENAI_MODEL", "ipop/coder-balanced"),
messages=[{"role": "user", "content": "Hello from Terminaili."}],
)TypeScript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.OPENAI_BASE_URL,
apiKey: process.env.OPENAI_API_KEY,
});
const completion = await client.chat.completions.create({
model: process.env.OPENAI_MODEL ?? "ipop/coder-balanced",
messages: [{ role: "user", content: "Hello from Terminaili." }],
});01
Setup
Set auth and SDK environment values before adding optional API features.
Authentication
Use a Terminaili API key in the bearer header or the OpenAPI key header.
Primary header
Authorization: Bearer $TERMINAILI_API_KEYOpenAPI alternate
x-api-key: $TERMINAILI_API_KEYStorageKeep keys in server-side environment variables, workers, CLIs, or CI secrets.
SDK Setup
Use the normal OpenAI SDKs and override only the base URL, API key, and model.
Python
pip install openaiNode.js
npm install openaiEnvironmentSet the same values locally, in CI, and in deployed server code.
.env
export TERMINAILI_API_BASE_URL="https://api.terminaili.com/v1" export TERMINAILI_API_KEY="replace-me" export OPENAI_BASE_URL="https://api.terminaili.com/v1" export OPENAI_API_KEY="$TERMINAILI_API_KEY" export TERMINAIL_API_KEY="$TERMINAILI_API_KEY" export OPENAI_MODEL="ipop/coder-balanced"
02
Core API
Choose the canonical model first, then add streaming or tool calls.
Choose a model
Start with ipop/coder-balanced for coding-agent and app quickstarts.
| Model | Name | Context | Price | Recommended for | Lifecycle |
|---|---|---|---|---|---|
ipop/coder-balanced | Terminaili coder balanced | 1,000,000 | catalog rate | Agentic coding | Recommended |
Compatibility
| Model | Status | Chat | Tools | JSON | Vision | Reasoning | Code | Streaming | Embeddings |
|---|---|---|---|---|---|---|---|---|---|
ipop/coder-balanced | Ready | Yes | Yes | Yes | No | No | Yes | Yes | No |
Recommendations and estimates
Model recommendations
curl https://api.terminaili.com/v1/model-recommendations \
-H "Content-Type: application/json" \
-d '{
"task": "json schema extraction",
"require_json_schema": true,
"prefer_low_latency": true
}'Cost estimate
curl https://api.terminaili.com/v1/estimate \
-H "Authorization: Bearer $TERMINAILI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ipop/coder-balanced",
"messages": [{ "role": "user", "content": "Estimate this request before running it." }],
"max_tokens": 256
}'Streaming
Set stream: true to receive Server-Sent Events from chat completions.
Streaming request
{
"model": "ipop/coder-balanced",
"stream": true,
"stream_options": { "include_usage": true },
"messages": [{ "role": "user", "content": "Stream a short answer." }]
}Tool Calls
Send OpenAI-compatible function definitions in tools.
Tool call request
{
"model": "ipop/coder-balanced",
"messages": [{ "role": "user", "content": "What is the weather in SF?" }],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather by city.",
"parameters": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}
}
]
}03
Next steps
Open the deeper page only when you need reference tables, guides, or client setup.
Next steps
Use the split docs pages for details beyond the first working call.