Terminaili
Menu

Quickstart

Make one OpenAI-compatible chat completions call with the Terminaili base URL, an API key, and ipop/coder-balanced.

OpenAI-compatible
You need three thingsBase URLhttps://api.terminaili.com/v1
API keyAuthorization headerAuthorization: Bearer $TERMINAILI_API_KEY
Model idCanonical quickstart modelipop/coder-balanced
cURL
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 headerAuthorization: Bearer $TERMINAILI_API_KEY
OpenAPI alternatex-api-key: $TERMINAILI_API_KEY
StorageKeep 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.

Pythonpip install openai
Node.jsnpm install openai
EnvironmentSet 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.

ModelNameContextPriceRecommended forLifecycle
ipop/coder-balancedTerminaili coder balanced1,000,000catalog rateAgentic codingRecommended

Compatibility

ModelStatusChatToolsJSONVisionReasoningCodeStreamingEmbeddings
ipop/coder-balancedReadyYesYesYesNoNoYesYesNo

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.