Quickstart
Sign up, generate a key in Dashboard → API keys, then point the OpenAI Python client at us.
from openai import OpenAI
client = OpenAI(
base_url="https://api.acbm.ai/v1",
api_key="acbm_…",
)
resp = client.chat.completions.create(
model="auto",
messages=[{"role": "user", "content": "Summarize the EU AI Act in 3 bullets."}],
)
print(resp.choices[0].message.content)Authentication
All requests use a Bearer token:Authorization: Bearer acbm_…Keys are sha256-hashed at rest and the full key is shown to you exactly once at create time.
Chat completions
The request body is OpenAI-compatible. Two Iudex Route-specific fields:
model: "auto"— let the router pick the tier. Recommended.domain_tag: "code" | "math" | …— optional hint that helps the difficulty estimator calibrate.
The response adds an acbm envelope with the picked tier, the difficulty score, and the actual cost:
{
"id": "chatcmpl_…",
"model": "claude-sonnet-4-6",
"choices": [...],
"usage": { "prompt_tokens": 412, "completion_tokens": 188 },
"acbm": {
"tier": "T3",
"difficulty_score": 0.72,
"difficulty_category": "hard",
"provider": "anthropic",
"verification_depth": "shallow",
"cost_usd": 0.0041
}
}Model tiers
Five tiers, picked by difficulty. You can pin a tier by passing acbm/t3 etc.
| Tier | Models | Cost / query |
|---|---|---|
| T0 | cache · templated | ~$0 |
| T1 | gpt-4o-mini · claude-haiku | $0.01–0.05 |
| T2 | gpt-4o · gemini-flash | $0.05–0.30 |
| T3 | claude-sonnet · gemini-pro · gpt-4o | $0.30–2.00 |
| T4 | claude-opus · o3 | $2.00–15.00 |
Python SDK
Optional thin wrapper:
pip install acbm
from acbm import ACBM
client = ACBM(api_key="acbm_…") # or set ACBM_API_KEY
resp = client.chat("Summarize the EU AI Act in 3 bullets.")
print(resp.text)
print(resp.tier, resp.cost_usd, resp.difficulty_score)Errors & limits
401— invalid or revoked key.402— monthly quota exhausted. Upgrade plan or wait for reset.429— short-burst rate limit. Backoff and retry.502— upstream provider error. Iudex Route logs but does not charge for these.