Getting started
AuCore exposes one OpenAI-compatible API for every model in the catalog. If your code already talks to OpenAI, you only need to change two values.
1. Get a key
- Choose a plan on the pricing page.
- Request access on the support page, naming your plan.
- AuCore issues your key and sends it to you.
- Redeem it at /login. Your dashboard then shows the key, base URL and analytics.
Keys look like auc_live_a1b2c3d4e5f6g7h8. They are account-scoped, rotatable and revocable at any time.
2. Authenticate
Send your key as a bearer token on every request.
Authorization: Bearer auc_live_a1b2c3d4e5f6g7h8 Content-Type: application/json
| Status | Meaning |
|---|---|
401 | Key missing or unknown |
403 | Key revoked or expired, or model above your plan |
429 | Rate or daily budget exceeded |
3. List models
curl /models \ -H "Authorization: Bearer $AUCORE_KEY"
{
"object": "list",
"data": [
{
"id": "claude-sonnet-4.5",
"owned_by": "Anthropic",
"context_window": 1000000,
"modalities": ["text", "vision", "tools"],
"min_plan": "premier",
"available": true
}
]
}
available reflects your own plan, so you can filter the catalog client-side.
4. Chat completions
curl /chat/completions \
-H "Authorization: Bearer $AUCORE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.5",
"messages": [
{"role": "system", "content": "You are concise."},
{"role": "user", "content": "What is retrieval augmented generation?"}
],
"temperature": 0.7,
"max_tokens": 1024
}'
Response
{
"id": "chatcmpl_aucore_8f2a…",
"object": "chat.completion",
"model": "claude-sonnet-4.5",
"choices": [{
"index": 0,
"message": {"role": "assistant", "content": "RAG is…"},
"finish_reason": "stop"
}],
"usage": {"prompt_tokens": 24, "completion_tokens": 148, "total_tokens": 172}
}
Parameters
| Field | Type | Notes |
|---|---|---|
model | string | Required. Any ID from the catalog. |
messages | array | Required. Roles: system, user, assistant. |
temperature | number | 0–2. Default 1. |
max_tokens | integer | Capped at 32,000. |
top_p | number | Nucleus sampling. |
stream | boolean | Server-sent events when true. |
tools | array | Premier and Platinum only. |
5. Streaming
Set "stream": true and read server-sent events. Each chunk is a data: line, ending with data: [DONE].
data: {"choices":[{"delta":{"content":"RAG"}}]}
data: {"choices":[{"delta":{"content":" combines"}}]}
data: [DONE]
// Node.js — stream with the OpenAI SDK const stream = await client.chat.completions.create({ model: "gpt-5.4-mini", messages: [{ role: "user", content: "Write a haiku" }], stream: true, }); for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? ""); }
6. Automatic model selection
Send aucore-router-auto as the model and AuCore chooses the cheapest model capable of handling the prompt: short prompts go to a fast small model, code-heavy or long prompts escalate automatically.
{
"model": "aucore-router-auto",
"messages": [{"role": "user", "content": "Summarise this in one line: …"}]
}
7. Use an existing SDK
# Python from openai import OpenAI client = OpenAI(base_url=, api_key=os.environ["AUCORE_KEY"]) r = client.chat.completions.create( model="gemini-3.1-flash", messages=[{"role": "user", "content": "Hello"}], ) print(r.choices[0].message.content)
LangChain, LlamaIndex, the AI SDK and anything else that accepts a custom base URL work the same way. /v1 is accepted as an alias, so …/api/v1 and …/api both resolve.
8. Private endpoints
Private endpoints (EX) let you register your own compatible providers behind a dedicated AuCore route — useful for agent frameworks that expect a single base URL.
GET /api/ex/models— every model across your registered providers.POST /api/ex/chat/completions— routed by model prefix, e.g.openai/gpt-4o-mini.- Prefix
aucore/to reach the standard catalog through the same route.
export OPENAI_BASE_URL= export OPENAI_API_KEY=auc_ex_xxxxxxxxxx
Credentials you register are encrypted at rest and never returned to the browser. Manage them in the EX dashboard. Premier includes 2 providers; Platinum is unlimited.
9. Rate limits
| Plan | Per minute | Per day | Context | Weight |
|---|---|---|---|---|
| Basic | 20 | 1,500 | 64K | 1× |
| Premier | 60 | 6,000 | 200K | 3× |
| Platinum | 180 | 25,000 | 1M | 9× |
Every response includes limit headers:
X-AuCore-Plan: platinum X-RateLimit-Limit: 180 X-RateLimit-Remaining: 174 X-RateLimit-Reset: 1786000060 X-RateLimit-Daily-Remaining: 24985
10. Errors
{
"error": {
"type": "rate_limit_exceeded",
"message": "Daily request budget reached for plan basic.",
"code": 429,
"retry_after": 41,
"reset_at": "2026-08-17T00:00:00.000Z"
}
}
Retry 429 and 502 with exponential backoff plus jitter. Never retry 400 or 403 without changing the request.
11. Good practice
- Keep keys on your server; have your own backend call AuCore.
- Rotate immediately if a key may have leaked — old keys stop working at once.
- Set
max_tokensdeliberately; it is the simplest cost control you have. - Use
aucore-router-autowhen quality requirements vary per request. - Log the
idfrom responses so support can trace a specific call.
Need something not covered here? See the full API reference, the FAQ, or contact support.