İçeriğe geç
…
API 1.3 · /v1/docs
Geliştiriciler · API 1.3

Beş dakikada ilk kararınız.

Tek bir HTTP çağrısı: durumu gönderin, hükmü, kuralı, izi ve mührü alın. Etkileşimli referans: api.answerr.me/v1/docs.

Hızlı başlangıç

  1. Konsolda ücretsiz hesap açın. E-postanıza gelen bağlantıya tıklayınca ilk API anahtarınız (ans_live_…) bir kez gösterilir.
  2. Anahtarı bir ortam değişkenine koyun: export ANSWERR_API_KEY=ans_live_…
  3. Yerleşik agent_mcp_guard kapısına sorun:
  1. Create a free account in the console. When you open the link sent to your e-mail, your first API key (ans_live_…) is shown once.
  2. Put the key in an environment variable: export ANSWERR_API_KEY=ans_live_…
  3. Ask the built-in agent_mcp_guard gate:
curl -s https://api.answerr.me/v1/gates/agent_mcp_guard/decide \
  -H "Authorization: Bearer $ANSWERR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"state": {"tool_name": "send_payment", "user_role": "member", "amount_usd": 7200},
       "external_id": "call-123"}'

Yanıtın özü:

The essentials of the response:

{
  "verdict": "REVIEW",                 // ALLOW | REVIEW | DENY
  "label": "ABSTAIN_REVIEW",
  "decision_id": "dec_7f3c…",
  "trace": { "rule_id": "tool_class:financial", "reason": "…", "policy_id": "agent_mcp_guard",
             "policy_version": "2.0.0", "policy_seal": "sha256:…", "candidates": [ … ] },
  "usage": { "period": "2026-10", "decisions": 1, "quota": 10000 },
  "review": { "id": "rev_…", "status": "pending", "poll": "/v1/reviews/rev_…" }   // Pro+
}

Kimlik doğrulama

Her istek Authorization: Bearer <anahtar> başlığıyla gelir (X-API-Key de kabul edilir). Anahtarlar konsolda oluşturulur, yalnızca bir kez gösterilir ve sunucuda özet olarak saklanır. İptal edilen anahtar en geç 30 saniye içinde her yerde geçersiz olur.

Every request carries Authorization: Bearer <key> (X-API-Key is accepted too). Keys are created in the console, shown once and stored only as a hash. A revoked key stops working everywhere within 30 seconds.

TürÖn ekKullanım
API keyans_live_Sunucular ve ajanlar: kararlar, incelemeler, sonuçlar, kullanım
Sessionans_sess_Konsol: anahtarlar, üyeler, plan, fatura, ayarlar (7 gün)
Anahtarsız—Yalnızca yerleşik kapılarla demo; kayıt ve kota yok, IP başına hız sınırı

Karar isteği

POST /v1/decide ya da POST /v1/gates/{gate_id}/decide. Kapı yolunda katı mod her zaman açıktır: tanınmayan tek bir alan bile kararı İNSANA DEVRET'e çevirir.

POST /v1/decide or POST /v1/gates/{gate_id}/decide. The gate path is always strict: a single unrecognised field turns the verdict into REVIEW.

AlanAçıklama
stateKarar verilecek durum (JSON nesnesi, en fazla 64 KB istek).
gate_id / policyKayıtlı bir kapı ya da kaydedilmeyen satır içi taslak politika.
modelive (varsayılan) ya da shadow: kaydedilir ve sayılır, incelemeye düşmez (Pro+).
observed_outcomeBu vaka için sizin kararınız (ALLOW/REVIEW/DENY ya da true/false); gölge raporu için.
external_idSizin referansınız (sipariş, araç çağrısı); kayıtta, incelemede ve webhook'larda döner.
enqueue_reviewREVIEW hükmü inceleme kuyruğuna gitsin mi (varsayılan true, Pro+).
questionsİsteğe bağlı tipli sorular: noul (evet/hayır), choice, score. Soru metni hükmü değiştirmez; yalnızca evet/hayır yönünü belirler.

Yanıt başlıkları: X-Answerr-Verdict, X-Answerr-Policy-Seal, X-Answerr-Decision-Id, X-Answerr-Quota-Remaining, X-RateLimit-Remaining.

Response headers: X-Answerr-Verdict, X-Answerr-Policy-Seal, X-Answerr-Decision-Id, X-Answerr-Quota-Remaining, X-RateLimit-Remaining.

Kapılar ve derleyici

Üç yerleşik kapı vardır: agent_mcp_guard, fintech_payment_tr, api_zero_trust_waf. Kendi kapınızı yazmak için politikayı Türkçe ya da İngilizce yazın, derleyin, testleri ve soruları inceleyin, sonra kaydedin. Derleyici hiçbir şeyi kendiliğinden kaydetmez.

Three built-in gates exist: agent_mcp_guard, fintech_payment_tr, api_zero_trust_waf. To write your own, describe the policy in Turkish or English, compile it, review the tests and questions, then register it. The compiler never registers anything on its own.

# 1) derle / compile (kaydetmez / registers nothing)
curl -s https://api.answerr.me/v1/policies/compile -H "Content-Type: application/json" \
  -d '{"gate_id": "acme_payments", "prompt": "5.000 doları aşan ödemeyi insana gönder. Başarısız deneme sayısı 3’ten fazlaysa reddet."}' \
  | jq .policy_spec > acme_payments.json

# 2) kaydet / register (API key)
curl -s https://api.answerr.me/v1/gates -H "Authorization: Bearer $ANSWERR_API_KEY" \
  -H "Content-Type: application/json" -d @acme_payments.json

# 3) kullan / use
curl -s https://api.answerr.me/v1/gates/acme_payments/decide -H "Authorization: Bearer $ANSWERR_API_KEY" \
  -H "Content-Type: application/json" -d '{"state": {"amount": 9200, "failed_attempts": 0}}'

Her kayıtlı kapının bir mührü (kanonik JSON'un SHA-256 özeti) vardır; her karar hangi mühürle verildiğini söyler. Plan başına özel kapı sayısı: Keşif 1, Geliştirici 10, Pro ve üstü 200.

Every registered gate has a seal (SHA-256 of its canonical JSON); every decision says which seal produced it. Custom gates per plan: Explore 1, Developer 10, Pro and above 200.

AI ajan entegrasyonu

Ajanınız bir aracı çalıştırmadan önce kapıya sorar. DUR ise araç çalışmaz; İNSANA DEVRET ise inceleme sonucunu bekler (ya da işi kuyruğa bırakır); GEÇ ise devam eder.

Your agent asks the gate before running a tool. STOP: the tool does not run. REVIEW: it waits for the review (or parks the job). ALLOW: it proceeds.

import os, time, requests

API = "https://api.answerr.me"
H = {"Authorization": "Bearer " + os.environ["ANSWERR_API_KEY"]}

def guarded(tool_name, args, run, user_role="member", wait_s=300):
    d = requests.post(f"{API}/v1/gates/agent_mcp_guard/decide", headers=H, timeout=5,
                      json={"state": {"tool_name": tool_name, "user_role": user_role, **args},
                            "external_id": args.get("call_id")}).json()
    if d["verdict"] == "ALLOW":
        return run(**args)
    if d["verdict"] == "DENY":
        raise PermissionError(d["trace"]["reason"])
    review = d.get("review")                      # Pro+: human-review queue
    if not review:
        raise PermissionError("needs a human: " + d["trace"]["reason"])
    deadline = time.time() + wait_s
    while time.time() < deadline:
        r = requests.get(f"{API}{review['poll']}", headers=H, timeout=5).json()["review"]
        if r["status"] == "approved":
            return run(**args)
        if r["status"] in ("rejected", "expired"):
            raise PermissionError("rejected by reviewer: " + (r.get("note") or ""))
        time.sleep(3)
    raise TimeoutError("review still pending")

Bekleme yerine webhook kullanabilirsiniz: review.resolved olayı geldiğinde işi sürdürün.

Instead of polling, use webhooks: resume the job when the review.resolved event arrives.

İnsan incelemesi

Pro ve üstünde, canlı moddaki her İNSANA DEVRET hükmü inceleme kuyruğuna girer (enqueue_review: false ile kapatılabilir). İnceleyiciler konsoldan ya da API ile onaylar veya reddeder. Çözülmeyen kayıt 7 günde expired olur. Onay/ret, karar kaydına gerçek sonuç olarak yazılır ve gölge raporunu besler.

On Pro and above every live REVIEW verdict enters the review queue (turn off with enqueue_review: false). Reviewers approve or reject in the console or through the API. Unresolved items expire after 7 days. The resolution is written to the decision log as the real outcome and feeds the shadow report.

GET  /v1/reviews?status=pending
GET  /v1/reviews/{id}
POST /v1/reviews/{id}/resolve   {"action": "approve" | "reject", "note": "…"}

Gölge mod ve geri test

Gölge mod: answerr'i mevcut kurallarınızın yanında aksiyonsuz çalıştırın. "mode": "shadow" gönderin ve kendi kararınızı observed_outcome olarak ekleyin (ya da sonradan POST /v1/decisions/{id}/outcome). Rapor; uyum oranını, answerr'in sizden sıkı olduğu (potansiyel yakalama) ve gevşek olduğu (potansiyel kaçırma) vakaları verir.

Shadow mode: run answerr next to your current rules without acting on it. Send "mode": "shadow" with your own decision as observed_outcome (or later via POST /v1/decisions/{id}/outcome). The report gives the agreement rate and the cases where answerr was stricter (potential catches) or looser (potential misses) than you.

GET  /v1/account/shadow-report?days=30&gate_id=acme_payments
POST /v1/backtest  {"gate_id": "acme_payments",
                    "records": [{"state": {...}, "observed_outcome": "DENY", "id": "order-1"}, ...]}   // ≤ 1,000 / call

Geri test, geçmiş kayıtları canlıya çıkmadan önce bir kapıya ya da satır içi taslak politikaya karşı çalıştırır; her kayıt bir karar sayılır. Gölge mod, geri test ve dışa aktarım Pro ve üstündedir.

Backtest replays historical records against a gate or an inline draft before going live; each record counts as one decision. Shadow mode, backtest and export are on Pro and above.

Webhook’lar

Konsol › Ayarlar'dan bir https adresi girin (Pro+). Olaylar: review.created, review.resolved, quota.warning, ping. Her istek X-Answerr-Signature: t=<zaman>,v1=<hmac> başlığıyla imzalanır; HMAC-SHA256(gizli anahtar, "t.gövde"). 5 dakikadan eski zaman damgalarını reddedin. Teslim 3 kez denenir (0, 2, 8 sn).

Set an https URL in Console › Settings (Pro+). Events: review.created, review.resolved, quota.warning, ping. Each request is signed with X-Answerr-Signature: t=<time>,v1=<hmac>, HMAC-SHA256(secret, "t.body"). Reject timestamps older than 5 minutes. Delivery is attempted 3 times (0, 2, 8 s).

import hmac, hashlib, time

def verify(secret: str, body: bytes, header: str, tolerance=300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = int(parts["t"])
    if abs(time.time() - t) > tolerance:
        return False
    mac = hmac.new(secret.encode(), f"{t}.".encode() + body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(mac, parts["v1"])
{ "event": "review.created", "created": 1792010000,
  "data": { "id": "rev_…", "decision_id": "dec_…", "gate_id": "agent_mcp_guard",
            "rule_id": "tool_class:financial", "reason": "…", "external_id": "call-123",
            "console": "https://answerr.me/pro/console/#reviews" } }

Karar kaydı

Her ölçülen karar; hüküm, kural, gerekçe, gecikme, mod, mühür, alan adları ve external_id ile kaydedilir. Alan değerleri kaydedilmez (yalnızca inceleme kuyruğu durum vektörünü tutar ve bu da kapatılabilir). Saklama: Keşif 7, Geliştirici 30, Pro 90, Kurumsal 365 gün.

Every metered decision is logged with verdict, rule, reason, latency, mode, seal, field names and external_id. Field values are not stored (only the review queue keeps the state, and that can be turned off). Retention: Explore 7, Developer 30, Pro 90, Enterprise 365 days.

GET /v1/account/decisions?limit=100&verdict=DENY&gate_id=…&mode=shadow&before=<ts>
GET /v1/account/decisions.csv?days=30          // Pro+
GET /v1/account/usage?days=30

Kota, hız ve hatalar

Aylık kota planınıza göre sayılır (dönem: Türkiye saatiyle takvim ayı). %80 ve %100'de e-posta ve quota.warning webhook'u gönderilir. Kota dolunca, aşım kapalıysa karar çağrıları 429 quota_exceeded döner. Hız sınırı API anahtarı başına 600 istek/dk ve 50 istek/sn'dir.

The monthly quota follows your plan (period: calendar month, Türkiye time). At 80% and 100% an e-mail and a quota.warning webhook are sent. When the quota is reached and overage is off, decision calls return 429 quota_exceeded. Rate limit per API key: 600 requests/min and 50 requests/s.

HTTPerrorAnlamı
400bad_outcome, policy_required, …İstek geçersiz
401unauthorizedAnahtar ya da oturum yok veya geçersiz
403feature_unavailable, gate_limit, key_limit, seat_limit, account_suspendedPlanınız ya da rolünüz buna izin vermiyor
404no_review, no_decisionKayıt yok ya da saklama süresi geçti
409already_resolved, expiredİnceleme zaten sonuçlanmış
429quota_exceeded / Too Many RequestsAylık kota ya da hız sınırı; Retry-After başlığına uyun

Güvenli varsayılan: answerr'e ulaşamadığınızda (ağ hatası, 5xx, 429) aracı çalıştırmayın; işlemi İNSANA DEVRET gibi ele alın.

Safe default: when answerr cannot be reached (network error, 5xx, 429) do not run the tool; treat the case as REVIEW.

Uç noktalar

POST/v1/decide · /v1/gates/{id}/decideKarar
GET/v1/gatesYerleşik ve sizin kapılarınız
POST/v1/policies/compile · /v1/gatesDerle · kaydet
GET/v1/reviews · /v1/reviews/{id}İnceleme kuyruğu
POST/v1/reviews/{id}/resolveOnayla / reddet
POST/v1/backtest · /v1/decisions/{id}/outcomeGeri test · gerçek sonuç
GET/v1/account · /usage · /decisions · /shadow-report · /statementsHesap, kullanım, kayıt, raporlar, ekstreler
GET/v1/plans · /v1/healthPlan kataloğu · sağlık

Etkileşimli referansı aç (Swagger)