The Answer Engine: one question in, a grounded, source-checked read out
Synthesizes an answer from tracked coverage, verifies it against sources with a second model pass, and joins live prediction markets. PERSISTENCE: each answer is stored and published at an unlisted public permalink (/s/<id>, returned as id); recent answers may surface on /api/recent. Do not send personal or confidential information in questions. Stale permalinks (>~36h) redirect to a fresh re-ask. Spends real model compute per call, so the limits are tighter: 12 requests/minute burst per key, 25 free asks per key for the life of a free self-issued key (not per day — they do not reset; a used-up allowance answers 402 naming the metered next step, never a dead end), a per-key daily ceiling that is runaway-loop protection. With no key, ask answers 25 questions a day per network address (metered on the address only — no cookie, no fingerprint — so everyone behind one shared address shares it; resets at midnight UTC), behind an 8 requests/minute per-address burst guard. Every keyless answer carries allowance {state, remaining, limit, resetsAt, ownMeter}; state is cannot-measure (remaining null, never 0) when the meter could not be read. Once the day's keyless answers are spent the call returns 401 key_required whose FIRST field, selfIssue, is the ready-to-run POST /api/keys call (body, curl), followed by thenRetry and keylessAllowance {limit, used, remaining: 0, resetsAt}. The key is issued in one call at POST /api/keys (no human in the loop, no card) and carries its own independent meter, never shared with cloud or office neighbors. Synchronous answers measured 24–31 seconds (p50–p90) over 78 live asks in the last 14 days, as of 2026-10-19; set client timeouts to at least 70 seconds. ASYNC OPTION: Async submissions return a claim ticket in about a second; the finished answer is usually ready within 30–120 seconds. Pass {"async": true} to receive the claim ticket (202: {status:"working", ticketId, get:"/api/answer/<id>"}) and collect the finished answer at GET /api/answer/{ticketId} — the question is metered once at submit, collecting is free. Falls back to a synchronous answer when the ticket store is unavailable; handle both shapes. SHARED STATE: the same question asked again while the record's answer is recent (~60 min) returns the SAME stored answer immediately — servedFrom:"maintained-record", same permalink id, original answeredAt disclosed — rather than a second improvisation; pass {"fresh": true} to force new synthesis. METERING: An identical question repeated within 10 minutes against an unchanged record is one Read. A repeat of your own question inside that window comes back servedFrom:"recent-identical-ask" with metering.read.charged=false and the rule in metering.read.reason; anyone else's identical question is their own Read. Not CORS-enabled for cross-origin browsers.
Request
- Base URL: https://api.signalbureau.ai
- URL: https://api.signalbureau.ai/api/ask
- Auth: none declared
Request body
Response
The structured answer. verified is the source-check verdict: true (every load-bearing claim located in article-level tracked coverage), false (some claims could not be located, or a hard claim's only support was a headline — both are listed in unverified and confidence is downgraded), or null (verification unavailable). A claim supported only by a headline is flagged "supported only by a headline" and caps the verdict: headline-attributed is not source-verified. Served-from-record answers additionally carry servedFrom/answeredAt/servedNote. RESPONSE-SHAPE CHANGE (2026-08-19): answers carry no probability of Signal Bureau's own — the former probability, probabilityRationale, and lineage fields were removed. Prediction-market prices remain on markets[] rows, quoted and attributed to their market.
Changes
No recorded changes to this operation across all 1 revision of this API.