Models
Which models LuluTokens serves, how to list them, and how they are priced.
Every model is reachable through the same endpoint — you switch models by
changing one string, the model field of your request.
The live catalogue is the model list in the console
and the /v1/models endpoint. This page describes how to read them; it does not
duplicate them, because the list changes as channels are added.
List models from the API
curl https://api.lulutokens.ai/v1/models \
-H "Authorization: Bearer $LULUTOKENS_API_KEY"{
"data": [
{
"id": "glm-5.2",
"object": "model",
"created": 1626777600,
"owned_by": "advanced_custom",
"supported_endpoint_types": [
"openai",
"openai-response",
"anthropic"
]
},
{
"id": "gpt-5.4",
"object": "model",
"created": 1626777600,
"owned_by": "advanced_custom",
"supported_endpoint_types": [
"openai"
]
},
],
"object": "list",
"success": true
}The response only contains models your key is allowed to call, so it is the right thing to poll from an app that renders a model picker.
supported_endpoint_types lists the format a model speaks natively. It is not
the list of endpoints you may call: the gateway translates between formats, so a
model marked openai is still reachable over /v1/responses and /v1/messages.
from openai import OpenAI
client = OpenAI(
api_key=os.environ["LULUTOKENS_API_KEY"],
base_url="https://api.lulutokens.ai/v1",
)
for model in client.models.list():
print(model.id)Families
| Family | Example IDs | Good for |
|---|---|---|
| DeepSeek | deepseek-v4-pro, deepseek-v4-flash | General chat, reasoning, code — strong price/performance |
| GLM | glm-5.2, glm-5.1 | General chat, long context |
| Qwen | qwen3.7-max, qwen3.7-plus | Chinese-first workloads, long context |
| Kimi | kimi-k2.6, kimi-k2.7-code | Long-document reading, coding |
| MiniMax | minimax-m3, minimax-m2.7 | General chat |
| GPT | gpt-5.4, gpt-5.5 | Tool use, structured output, Codex CLI |
| Claude | claude-sonnet-4-6, claude-haiku-4-5 | Long agentic coding sessions, Claude Code |
| Gemini | gemini-3-pro-image-preview | Image generation |
IDs are exact — there are no * wildcards and no unversioned aliases such as
gpt-5 or qwen-max. Always copy the ID from /v1/models.
Choosing a model
- Start cheap. For most chat and summarisation work a mid-tier model is indistinguishable from a frontier one at a fraction of the cost.
- Reasoning models cost more per answer than their token price suggests — they emit a large number of hidden reasoning tokens, and you are billed for them.
- Agentic coding tools burn context. Codex, Claude Code and opencode replay the whole conversation on every turn, so context length and cache behaviour matter more than raw benchmark scores.
- Pin a version in production. Aliases can be repointed at a newer snapshot; a pinned ID will not change under you.
Pricing
Pricing is per million tokens and is billed separately for input and output. The authoritative numbers, including any per-model multiplier, are in Models & pricing in the console.
Every response includes a usage object, and the console's usage logs show
the cost of each individual request:
{
"usage": {
"prompt_tokens": 24,
"completion_tokens": 118,
"total_tokens": 142
}
}When a model is unavailable
| Symptom | Cause | Fix |
|---|---|---|
400 with model_not_found | ID typo, or the model is not enabled for your key | Check the ID against /v1/models |
402 | Balance exhausted | Top up in the console |
429 | Provider or account rate limit | Back off, or route the request to another model |
5xx | Upstream provider is failing | Retry; consider a fallback model in your client |