Developer resources

Build with AunuCore

Everything an agent or integrator needs to discover and call AunuCore — at predictable URLs, in machine-readable form.

Machine-readable surfaces

Point an agent or codegen tool at these. They are always current.

AI API

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)

REST toolkit

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

Authentication

Two planes, two key families — they never mix. An auc_rest_ key cannot call chat completions, and an AI key cannot call toolkit features.

PlaneBase URLKeySend it as
AI APIhttps://ai.aunuhost.bond/apiauc_live_… · auc_free_…Authorization: Bearer <key>
Anthropic surfacehttps://ai.aunuhost.bond/apiauc_live_… · auc_free_…x-api-key: <key> or Bearer
REST toolkithttps://api.fallsad.biz.idauc_rest_…?key= query, x-api-key header, or Bearer

Chat completions — OpenAI-compatible

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
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
  }'
JavaScript — OpenAI SDK
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);
Python — OpenAI SDK
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.

Messages — Anthropic-compatible

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
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" }]
  }'
Python — Anthropic SDK
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)

MCP tools — server-side tool calling

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.

Just ask — the model uses tools when it needs them
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.

Rate limits & errors

Limits are per account key. The live matrix is always available at GET /api/pricing — never hardcode it.

PlanRequests / minuteDaily token allowanceMax context
Basic (Free)1005M tokens (resets 24h)32K
Personal15015M tokens (resets 24h)200K
Business30050M tokens (resets 24h)1M
Every response carries limit headers
X-AunuCore-Plan: business
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 294
X-RateLimit-Reset: 1786000060
X-RateLimit-Daily-Remaining: 24985
Errors are OpenAI-shaped
{
  "error": {
    "type": "rate_limit_exceeded",
    "message": "Daily request budget reached for plan basic.",
    "code": 429,
    "retry_after": 41
  }
}

When to use AunuCore

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.