Current entity and event state, machine-readable
Signal Bureau maintains source-backed entity and event state for systems whose answers change when the world changes. This page is the full integration contract: stable schemas, an explicit evidenceStatus on every signal (receipted rows carry the source URL behind each claim; unreceipted rows are labeled as leads), and freshness stamps your agent can check rather than trust. No key and no login for reads. The guided map for agents — orient-first, the async ask pattern, the promises we make a machine guest — is the machine front door.
1 · Pull the signal feed (REST)
One GET, no key. Returns the current flags — each with name, trajectory (direction + % change), the domains it's spreading across, desk membership, top evidence with source URLs, and a pre-phrased follow-up question for the Answer Engine. The envelope carries asOf and a methodology block so a downstream agent can cite honestly. Schema sb.signals.v1: additive changes only — fields are never renamed or removed within a version.
curl -s "https://signalbureau.ai/api/signals?limit=5"Filters: ?limit=N caps the list; ?direction=rising (or fading, steady, new) filters by trajectory. Responses are edge-cached for 10 minutes; the underlying snapshot is rebuilt on a multiple-times-daily schedule (three timed builds today) and every payload stamps its own generatedAt — trust the stamp, not this sentence.
Freshness, defined per layer (they differ, deliberately): ingestion runs on per-vertical schedules — daily sweeps for every active vertical, with prediction-market prices and fast-moving desks re-read intraday. Entity and event state updates with the daily build plus intraday flashes. The published feed is this snapshot, rebuilt on the schedule above. Answers are computed live at ask time against the freshest build. Vertical counts, defined: the coverage object in the feed reports three numbers — registered (every vertical in the coverage registry, including newly provisioned ones), activelyScraped (on the live scrape schedule today), and spannedByFlaggedEntities (verticals the currently-flagged entities draw evidence from — moves with the news). Where a page shows one number, it is one of these three; the feed carries the definitions.
2 · Or point your AI at the Oracle (MCP)
Signal Bureau speaks MCP over Streamable HTTP: each JSON-RPC 2.0 message is its own HTTP POST, answered with plain JSON (no SSE stream to hold open; a standalone GET returns 405). The server is stateless and issues no session ids. Protocol version is negotiated at initialize: current revisions through 2025-11-25 are fully supported, and the 2024-11-05 message version is accepted for clients that can initialize over this endpoint — the deprecated 2024-era HTTP+SSE transport is not provided. Standard clients follow the normal lifecycle (initialize → notifications/initialized → tools/list → tools/call). As a Signal Bureau convenience extension, direct tools/call without the handshake also works for lightweight stateless integrations. No key for the read tools.
{
"mcpServers": {
"signal-bureau": {
"url": "https://api.signalbureau.ai/api/mcp"
}
}
}The config above points at https://api.signalbureau.ai — the machine door: the same API on a host with no browser checks, where any User-Agent is welcome. The main domain answers too, but its edge currently challenges bare python-style clients (a known Cloudflare-side defect under escalation) — if you ever see a 403 there, switch hosts, never costumes.
get_signalsStart here for browsing — the cheap read (500/day, no model work). The full machine-readable signal feed: every flagged entity with trajectory, domains, desk membership, and an explicit evidenceStatus (receipted rows carry source-attributed evidence URLs; unreceipted rows are labeled leads). Same payload as GET /api/signals.askFor FUTURE or unfolding events only (not historical lookup) — does real model work and rides a free identified key: self-issue one in a single call (POST /api/keys, instant, no card) and it carries its own 25/day meter, never shared with cloud or office neighbors (universal keying, 2026-08-08). Returns an answer checked against sources (pass/fail disclosed on every response) with what would change it. Informational only.top_acceleratingThe entities accelerating most across the information environment right now, ranked by cross-domain attention.search_entitiesFind tracked entities by name or vertical (e.g. "iran", "semiconductors").get_entityFull dossier for one entity: signal count, the verticals it's spreading across, and why it's surfacing.get_truth_objectThe complete public truth object for a topic (hormuz today, the default) — the same record the public exhibit page renders: primary operational sources with verified-as-of dates, attributed reporting, our coverage metric, the market event arc, our derived judgment, the reporting-consensus ledger, and state history, as one JSON object with the layers kept apart and labeled. Free; same payload as GET /api/truth/hormuz. Complementary to get_entity's broader live dossier.get_eventsThe named world events the engine tracks as arcs — entities, related market questions, mention volume, first/last seen.get_recordRETIRED (2026-07-15): the case-study record was withdrawn after re-measurement showed lead times under our own bar. Returns the retirement notice plus the surviving flagged-vs-control regression result.get_calibrationThe calibration scorecard — published probabilities graded against reality (Brier, log loss, skill vs base rate). How much to trust the feed, measured.todays_briefToday's synthesized morning brief — what moved and what to watch, same content as /today.orientThe front door for first contact — who we are, what's free, the live tariff with real prices, how to propose coverage, and how buying works. No side effects, costs nothing.propose_topicPropose net-new coverage — a topic or standing question we don't track yet. Humans review every request; accepted topics enter the provisional lane. Needs your principal's contact email. Free.create_orderAssemble a basket and get exact prices plus Stripe checkout links. Checkout runs on Stripe's hosted page with prices published first and nothing hidden; mandate-based purchasing within a pre-authorized cap is a later increment. Watch and api lines record your intent honestly — the desk activates them on a meter account, never a fake link.get_orderRe-read an order intent from create_order — the recorded basket and its honest status. The payer's Stripe receipt is authoritative for checkout purchases; metered work is receipted on your meter account (get_account).get_accountYour meter-account statement, live: month-to-date metered Reads at the tariff, your watches with burn-in/billing status, your daily cap. Send your identified key (x-api-key header). Without a key it explains how to get one — recognition is opt-in via credential.get_answerCollect an async answer by ticketId (ask is async by default: submit gets a claim ticket in ~1s; collecting is free — the question was metered once at submit).get_quoteFeed in requirements in your own words; get back an enumerated topic quote — grouped, disambiguated, merges disclosed — priced flat from the published tariff. Never a charge, no contact details needed.get_watch_feedThe structured daily delivery for a watched topic: up to 14 days of items plus the live coverage-acceptance report, which grades the coverage (it does not gate billing — the month you are in is refundable in full, any time you ask).get_feedback_statusThe state of a report you filed, by feedbackId — filed/working/resolved with its work-order reference. Swept twice daily; checkable, not a slogan.send_feedbackFile a bug, improvement, complaint, praise, or question about the service. A complaint naming a real defect becomes our work order; the response says honestly whether it was durably recorded. 5/min, 20/day.Setting this up for someone else — or want your assistant to evaluate us before you commit? Hand it this prompt; the machine surface is built to be judged skeptically:
Evaluate Signal Bureau for me. Start at https://signalbureau.ai/llms.txt, then their MCP server at https://signalbureau.ai/api/mcp (streamable HTTP, no key needed to read). Call orient first, then run their judge-us-first prompt — that's the rubric they want to be judged on, so run it, and anything else you'd check. Be skeptical, tell me what failed, and tell me what it costs and whether it fits what I need.3 · Ask it questions over HTTP
A plain JSON endpoint. One question in; a structured read out, checked against sources with the result disclosed.
curl -s https://signalbureau.ai/api/ask \
-H "content-type: application/json" \
-d '{"question":"What is the outlook for Taiwan?"}'Live platform metrics, assembled on demand by a stateless worker:
curl -s https://signalbureau.ai/api/statsThe full reference (OpenAPI)
The complete machine-readable contract — every endpoint, parameter, response schema, example body, rate limit, CORS posture, timeout guidance, and the error model — ships as an OpenAPI 3.1 document. Feed it to your code generator or your agent. The short version: GET reads are CORS-open and edge-cached; /api/signals is a bounded feed (no pagination — limit truncates a fixed priority ranking, and the envelope's totalFlagged tells you the full size); errors are plain JSON with a reader-facing error string; burst 429s carry retry-after, daily-quota 429s carry requiresAuth. Ask timing, stated plainly: Synchronous answers typically land in 5–30 seconds; set client timeouts to at least 60 seconds. Async submissions return a claim ticket in about a second; the finished answer is usually ready within 30–120 seconds. We spend the seconds a grounded, source-checked answer takes — built for the internet of machines that need current truth, not for millisecond trading.
Fair use, stated plainly
Reading and discovery stay open and anonymous, with honest limits instead of a key wall: the signal feed allows 500 origin reads per day per network address (burst-capped at 30/minute) — note the limits meter origin reads; edge-cached responses (10-minute TTL) serve without consuming quota, so bursts against a warm cache may all return 200. The Answer Engine rides a free self-issued key — one call at POST /api/keys, instant, no card — with its own 25 questions per day, never shared with your cloud or office neighbors (universal keying, 2026-08-08) — a test drive, stated as such, because each answer spends real model compute; plans and metered Reads on the pricing page carry the real allowances. Past a limit you get a clear 429 with requiresAuth: true — that's where the Metered API account picks up: an identified key with a far higher feed allowance, billed on actual usage at the published tariff rates, one flat Read rate for everyone. Meter accounts are live — the desk issues the key, each metered Read is receipted, and get_account shows your statement. get_quote (or the tariff-quote endpoint) prices your exact basket first: your quote is your plan. Limits reset daily.
Built for teams
The evaluation motion is concrete: give us a portfolio of up to ten concerns — the entities, programs, exposures, and questions your team cannot afford to stop watching — and we will stand up a private desk against it, baseline every name, and deliver daily briefings plus full API access for a 30-day evaluation. That is the Private Desk Pilot ($5,000 once), and it ends with a written acceptance report against the metrics in the agreement — details on the pricing page.
Signal Bureau is a commercial intelligence platform, running entirely on stateless edge workers. High-throughput access, webhooks and push delivery, domain-scoped feeds, and SLAs are being arranged with early partners now. Tell us what your system needs and we'll wire you in.
Talk to us about enterprise access → (lead [at] evfm.co)Informational only: not investment, legal, or betting advice. Every signal carries its sources; every answer is grounded in tracked coverage and source-checked; uncertainty is stated honestly.