anoman
Gateway

Satu API. Semua provider.

Endpoint yang kompatibel dengan OpenAI dan Anthropic. Pengganti drop-in — ubah base_url dan api_key, tidak ada yang lain.

Permukaan API

Referensi endpoint lengkap

Kompatibel OpenAI (/v1/)

  • POST
    /v1/chat/completionsCompletion utama. Mengembalikan 202 untuk request yang memenuhi syarat batch.
  • POST
    /v1/completionsText completion lama.
  • GET
    /v1/modelsKatalog model dengan flag tier dan dukungan batch.
  • POST
    /v1/embeddingsPassthrough embeddings.

Kompatibel Anthropic (/anthropic/)

  • POST
    /anthropic/v1/messagesProxy penuh Anthropic Messages API dengan streaming. Set ANTHROPIC_BASE_URL=https://api.anoman.io/anthropic.

Publik — tanpa auth (/public/v1/)

  • GET
    /public/v1/pricingHarga model — markup 0%, pass-through pada biaya provider. Tanpa auth.
  • GET
    /public/v1/statusStatus sistem + kesehatan provider. Tanpa auth.
  • GET
    /public/v1/modelsKatalog model publik. Tanpa auth.

Native Anoman (/anoman/v1/)

  • POST
    /anoman/v1/keysBuat API key virtual.
  • GET
    /anoman/v1/batch/{job_id}Poll status batch job atau ambil hasilnya.
  • GET
    /anoman/v1/usage/savingsRincian penghematan biaya cache dan batch.
  • GET
    /anoman/v1/events/streamStream SSE — event gateway real-time.
  • POST
    /anoman/v1/burst/activateBeli pengali rate limit sementara (2x/5x/10x).

Referensi API lengkap dengan skema request/response: Docs / API Reference →

Routing batch

Hemat 50% untuk beban kerja non-interaktif

Analisis dokumen, tugas agent latar belakang, pembuatan laporan semalam — request yang memenuhi syarat otomatis dirutekan ke batch API native provider (Anthropic, OpenAI, Google) dengan penghematan biaya 50%.

from openai import OpenAI
client = OpenAI(base_url="https://api.anoman.io/v1", api_key="anm-sk-...")

# Returns 202 for batch-eligible requests
response = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "Summarise this doc..."}],
    extra_headers={"prefer_batch": "true"}
)

if response.status_code == 202:
    job_id = response.json()["id"]
    # Poll until complete
    result = client.get(f"/anoman/v1/batch/{job_id}")

Transparansi respons

Setiap respons membawa konteks penuh

{
  "choices": [{ "message": { "content": "..." } }],
  "usage": { "prompt_tokens": 512, "completion_tokens": 128 },
  "_anoman": {
    "guardrails": {
      "injection": { "status": "pass", "score": 0.12 },
      "pii": { "status": "pass" },
      "content": { "status": "pass" },
      "policy": { "status": "pass" }
    },
    "routing": {
      "mode": "realtime",
      "region": "id",
      "provider_type": "cloud_direct"
    },
    "cache": { "hit": false, "type": "none" },
    "weighted_tokens": 1240,
    "cost_usd": "0.0023",
    "burst": { "active": false }
  }
}

Rutekan panggilan AI pertama Anda melalui Anoman.