Everything an agent or integrator needs to discover and call AunuCore — at predictable URLs, in machine-readable form.
Point an agent or codegen tool at these. They are always current.
Chat, embeddings, moderations, image / video / audio.
POST https://ai.aunuhost.bond/api/chat/completions Authorization: Bearer auc_live_… # Base URL: https://ai.aunuhost.bond/api # Key prefixes: auc_live_ (paid), auc_free_ (free)
648 utility endpoints (prayer times, weather, FX, QR…).
GET https://api.fallsad.biz.id/api/<feature>?key=auc_rest_ # Key prefix: auc_rest_ # Auth: ?key=, x-api-key, or Bearer
Two planes, two key families — they never mix. An auc_rest_ key cannot call chat completions, and an AI key cannot call toolkit features.
| Plane | Base URL | Key | Send it as |
|---|---|---|---|
| AI API | https://ai.aunuhost.bond/api | auc_live_… · auc_free_… | Authorization: Bearer <key> |
| Anthropic surface | https://ai.aunuhost.bond/api | auc_live_… · auc_free_… | x-api-key: <key> or Bearer |
| REST toolkit | https://api.fallsad.biz.id | auc_rest_… | ?key= query, x-api-key header, or Bearer |
GET /api/models, GET /api/pricing, GET /api/health, GET /api/engine, GET /api/leaderboard.POST /api/chat/completions. Any OpenAI client works — swap the base URL and key. Send model aucore-router-auto and the gateway picks the cheapest model that can handle the prompt, with automatic failover across providers. Streaming ("stream": true) is SSE, ending with data: [DONE].
curl https://ai.aunuhost.bond/api/chat/completions \ -H "Authorization: Bearer auc_live_…" \ -H "Content-Type: application/json" \ -d '{ "model": "aucore-router-auto", "messages": [{ "role": "user", "content": "Explain vector databases" }], "stream": false }'
import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://ai.aunuhost.bond/api", apiKey: process.env.AUCORE_KEY, }); const resp = await client.chat.completions.create({ model: "aucore-router-auto", messages: [{ role: "user", content: "Explain vector databases" }], }); console.log(resp.choices[0].message.content);
from openai import OpenAI client = OpenAI( base_url="https://ai.aunuhost.bond/api", api_key="auc_live_...", ) resp = client.chat.completions.create( model="aucore-router-auto", messages=[{"role": "user", "content": "Explain vector databases"}], ) print(resp.choices[0].message.content)
Also on the same surface: POST /api/embeddings, POST /api/moderations, image / video / audio generation models from the catalog, and structured JSON output via response_format: {"type": "json_object"}. Every request passes through the token minimizer — check savings in the X-AunuCore-Tokens-In / X-AunuCore-Tokens-Saved response headers.
POST /api/v1/messages (also /api/anthropic/messages) speaks the Anthropic Messages API, so the official Anthropic SDK works unmodified with its base URL pointed at /api. Anthropic request shapes — system, content blocks, max_tokens, temperature, top_p — are translated internally, responses map back to { id, type: "message", content: [{ type: "text" }], stop_reason, usage }, and streaming emits native Anthropic SSE events. The same plan quota and daily token allowance apply.
curl https://ai.aunuhost.bond/api/v1/messages \ -H "x-api-key: auc_live_…" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "aucore-router-auto", "max_tokens": 1024, "messages": [{ "role": "user", "content": "Explain vector databases" }] }'
import anthropic client = anthropic.Anthropic( base_url="https://ai.aunuhost.bond/api", api_key="auc_live_...", ) msg = client.messages.create( model="aucore-router-auto", max_tokens=1024, messages=[{"role": "user", "content": "Explain vector databases"}], ) print(msg.content[0].text)
Every chat model on AunuCore can call external tools (Model Context Protocol) in the middle of a conversation. The tools run server-side: you send an ordinary chat request, and when the model needs live data it fetches, reads and answers in one flow — no client-side tool plumbing, no tools array to wire up for platform tools.
curl https://ai.aunuhost.bond/api/chat/completions \ -H "Authorization: Bearer auc_live_…" \ -H "Content-Type: application/json" \ -d '{ "model": "aucore-router-auto", "messages": [{ "role": "user", "content": "Read https://example.com/release-notes and summarise what changed" }] }' # The gateway runs the scrape/search tools server-side and the reply # comes back with the fetched content already folded into the answer.
Limits are per account key. The live matrix is always available at GET /api/pricing — never hardcode it.
| Plan | Requests / minute | Daily token allowance | Max context |
|---|---|---|---|
| Basic (Free) | 100 | 5M tokens (resets 24h) | 32K |
| Personal | 150 | 15M tokens (resets 24h) | 200K |
| Business | 300 | 50M tokens (resets 24h) | 1M |
X-AunuCore-Plan: business X-RateLimit-Limit: 300 X-RateLimit-Remaining: 294 X-RateLimit-Reset: 1786000060 X-RateLimit-Daily-Remaining: 24985
{
"error": {
"type": "rate_limit_exceeded",
"message": "Daily request budget reached for plan basic.",
"code": 429,
"retry_after": 41
}
}
401 missing/unknown key · 403 revoked key or model above your plan · 429 rate or daily budget exceeded · 502 all upstreams failed (retryable, not charged).429 and 502 with exponential backoff plus jitter. Never retry 400 or 403 without changing the request.404, so its surface cannot be enumerated.Unknown API paths return a generic 404, identical for missing and revoked keys, so the surface cannot be enumerated. See llms.txt for the full agent guide.