Documentation

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.

Base URL

1. Get a key

  1. Choose a plan on the pricing page.
  2. Request access on the support page, naming your plan.
  3. AuCore issues your key and sends it to you.
  4. 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
StatusMeaning
401Key missing or unknown
403Key revoked or expired, or model above your plan
429Rate 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

FieldTypeNotes
modelstringRequired. Any ID from the catalog.
messagesarrayRequired. Roles: system, user, assistant.
temperaturenumber0–2. Default 1.
max_tokensintegerCapped at 32,000.
top_pnumberNucleus sampling.
streambooleanServer-sent events when true.
toolsarrayPremier 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

PlanPer minutePer dayContextWeight
Basic201,50064K
Premier606,000200K
Platinum18025,0001M

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_tokens deliberately; it is the simplest cost control you have.
  • Use aucore-router-auto when quality requirements vary per request.
  • Log the id from responses so support can trace a specific call.

Need something not covered here? See the full API reference, the FAQ, or contact support.