UTC --:--:--
Docs·API reference·Intelligence

LLM intelligence over your scores

Three endpoints, available on any plan, that turn deterministic scoring output into natural-language explanations, multi-slot briefings, and analyses of borderline conditions. Backed by Claude, with a programmatic hallucination guard on every response. The LLM narrates the deterministic score; it never changes it.

/explain, /briefing and /edge-case are open to every plan, including Free. They run on your own Anthropic key, not a Goable-managed one. No key set means 503 INTELLIGENCE_UNAVAILABLE. See Bring your own Anthropic key for how to get + load one. A flat per-tenant monthly token spend guard still applies; details in the plans reference.

What's covered

/explain and /edge-case share the same input contract: a score, passed inline as scoreResult OR referenced by session_id (resolved from the tenant's audit log, requires DATABASE_URL to be configured on the deployment). /briefing takes an array of scored slots instead. In each case the LLM sees only the deterministic score + breakdown, so it narrates the physics rather than computing it; the guard below is what constrains it from inventing numbers.

POST /v1/intelligence/explain

POSThttps://api.goable.io/v1/intelligence/explain

One-paragraph natural-language explanation of a score. Use for the "why is today's verdict marginal?" UI in a booking flow.

{
 "session_id": "a3f2...",
 "location": { lat: 36.013, lng: -5.604 },
 "locale": "en",
 "model": "claude-haiku-4-5-20251001"
}

POST /v1/intelligence/briefing

POSThttps://api.goable.io/v1/intelligence/briefing

Multi-slot briefing across an activity day. Takes an array of scored slots (morning / midday / afternoon / evening, or any custom window cuts) and returns a narrative paragraph summarising which slot is best and why the rest don't beat it. Slot cap scales with plan (12 on Free/Starter, 24 on Pro, 96 on Scale), and every tier can call the endpoint once its key is set.

POST /v1/intelligence/edge-case

POSThttps://api.goable.io/v1/intelligence/edge-case

Targeted analysis of borderline scores: verdict near a band boundary, contradictory drivers, surprising downgrade. Returns a narrative + a structured limiting_class taxonomy entry identifying which dimension is the constraint. Open to every plan; previously Scale-only when Goable operated the shared key, the cost argument for gating disappeared once each tenant pays Anthropic directly.

Hallucination guard

Every LLM response is run through a programmatic guard before it returns. The guard checks that every numeric claim in the narrative appears in the deterministic score breakdown (±3% tolerance) and that no dimension is mentioned that isn't actually scored. On guard failure the orchestrator does a one-shot retry with a tightened prompt; on second failure it falls back to a deterministic template.

Anthropic key + spend guard

All three endpoints resolve your Anthropic key. Set it once via PUT /v1/tenant/llm-key (any plan) and every call here runs against it. With no key set, these endpoints have nothing to fall back to and return 503 INTELLIGENCE_UNAVAILABLE.

Each call also counts against a flat per-tenant monthly token spend guard, 500,000 tokens / month by default across every plan. Its job changed under BYOK: it no longer protects Goable's bill, it's a runaway-loop guard on your own Anthropic spend. The budget resets on the first of each month UTC; exhausting it returns 429 LLM_BUDGET_EXCEEDED until the reset. Track spend from the tenant portal at the usage dashboard; it surfaces tokens consumed this month alongside the API call count.