Documentation

Synorb is the Temporal Context Graph for agents: a live, growing graph of structured claims, Source Channels, Streams, and Manifests, refreshed continuously for systems that reason over pre-extracted temporal context. See the structured content API, agent web search API pattern, and real-time web data guides.

  1. 01Quick Start
  2. 02Connecttry live
  3. 03Synorb Studiotry live
  4. 04Key Glossary
  5. 05Authentication
  6. 06REST APItry live
  7. 07Webhookstry live
  8. 08MCP Serverstry live
  9. 09WebSockettry live
  10. 10S3 Export
  11. 11Data Model
  12. 12Full Glossary
  13. 13Plans & Limits
  14. 14Synorb DigestsEnterprise included
01

Quick Start

Get your Starter credentials at synorb.com/keys. Starter credentials are emailed instantly and include 1,000 manifests per month, Daily Batch delivery, hard cap (no overage).

Connect your agent

Add the Core MCP server to your editor config. Replace YOUR_TOKEN with the token from your email. Use Streamable HTTP at /mcp with Authorization: Bearer YOUR_TOKEN for new integrations. If a host asks for one pasteable connector URL, use the tokenized connector URL from your email.

For interactive agent workflows, all MCP users and hosts should reuse a persistent Streamable HTTP MCP session/connection. Initialize once for the user or workspace, keep the session warm across tools/list and follow-on tool calls, and reuse it for the agent loop. Cold sessions and one-shot initialize/call/close flows are supported for compatibility and diagnostics, but they are not the recommended low-latency path.

Core MCP is the default server for any MCP-compatible client, managed installation, and normal agent workflow. Advanced MCP is a second explicit server for configured workflows that need digests, sync ontology, labels, prompt templates, or lower-level signal/brief/record tools. Existing MCP users validate with the MCP profile endpoint; REST API users validate api-key + secret through /account and use REST APIs for stateless per-call usage, scheduled jobs, deterministic polling, server-side product workflows, or REST-shaped contracts.

Core MCP config — Streamable HTTP + Authorization Bearer (recommended)
{ "mcpServers": { "synorb": { "url": "https://mcp.synorb.com/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } }
Advanced MCP (configured workflows)
{ "mcpServers": { "synorb-advanced": { "url": "https://mcp.synorb.com/advanced/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } }

First query

List available streams with a simple API call.

$ curl -H "api-key: YOUR_KEY" -H "secret: YOUR_SECRET" \ https://api.synorb.com/streams?page_size=2 { "streams": [ { "id": "17723038993558141", "name": "national-weather", "description": "NWS forecasts and alerts for major US metro areas.", "home_domain": "universe-earth", "manifests_last24h": 808, "manifests_last7d": 1821, "manifests_last30d": 2035 }, { "id": "17723038993540102", "name": "federal-reserve", "description": "Federal Reserve speeches, minutes, and policy statements.", "home_domain": "society-law-government", "manifests_last24h": 0, "manifests_last7d": 12, "manifests_last30d": 85 } ], "pagination": { "total_count": 452, "page_num": 0, "page_size": 2, "next": 1, "prev": null } }
02

Connect

One place to authenticate. Powers every Run button, the Synorb Studio, and webhook testing across the entire docs page.

API key + secret power Run buttons and Synorb Studio. MCP token is only for MCP-compatible assistants.

Best with reasoning models: Gemini 2.5 Pro, Claude Opus 4.6, OpenAI o3.

Get Starter keys →

Connect your coding assistant

Copy-paste setup for your editor or agent framework.

Core MCP URL
https://mcp.synorb.com/mcp + Authorization: Bearer TOKEN
MCP config JSON
{ "mcpServers": {
  "synorb": { "url": "..." }
} }
Agent-readable setup
curl -s synorb.com/connect?format=md
REST + MCP credentials
curl -s synorb.com/connect
03

Synorb Studio

Connected above with an LLM key? Run pre-built workflow templates and ask follow-up questions over your streams.

> What streams cover AI infrastructure?
calling synorb-catalog { query: "AI infrastructure", home_domains: ["engineering-technology"] }
Found 47 streams. The most active ones this week:
  ai-infrastructure-signals — 312 manifests/7d
  nvidia-ecosystem — 189 manifests/7d
  cloud-compute-trends — 156 manifests/7d
> Get the latest signals from nvidia-ecosystem
calling synorb-manifests { stream_ids: ["17723038993547201"], page_size: 3 }
3 manifests from nvidia-ecosystem:
  1. Nvidia reported Q4 revenue of $39.3B, data center revenue up 93% YoY
    evidence: direct_quote · confidence: measured · type: statement
  2. TSMC confirmed 3nm capacity expansion for Blackwell architecture
    evidence: paraphrase · confidence: stated · type: event

Advanced MCP tools — collapsed reference

Core MCP exposes a profile utility plus eight workflow tools, including Beacon configure/save/list/archive tools. Advanced MCP exposes the configurable tools below, with content gated by plan at execution time.

Core workflow: synorb-profile for plan/quota/date-window questions, synorb-stream-search for stream/source/podcast inventory and availability questions, synorb-catalog for stream discovery, synorb-details for filters/source channels/media formats, synorb-manifests for Signal + Brief plus source metadata, and synorb-configure-beacon / synorb-save-beacon / synorb-beacons / synorb-archive-beacon for reusable Beacon workflows and cleanup. Manifest filters include home_domains, cross_domains with AND/OR logic, tag_names or tag_ids, tag_type, tag_logic AND/OR, source_channel_ids, source_channel_names, media_format, and date ranges.

Quota receipts include monthly limit, used, remaining, period, refresh tier, available date window, and retry guidance. synorb-profile, synorb-stream-search, synorb-catalog, synorb-details, synorb-configure-beacon, synorb-save-beacon, synorb-beacons, and synorb-archive-beacon are zero-quota; synorb-manifests bills only returned on-topic Manifests. Authenticated MCP users can make high-throughput relevant Manifest pulls; normal controls are monthly Manifest quota, per-call page_size/target_count caps, date-window/access gates, and relevance/off-topic controls. Emergency Retry-After is burst backpressure for unusual bursts, not a normal tiny per-minute cap. Current limits: discovery tools sustain 10 requests/second with 300-request bursts, Manifest/content tools sustain 5 requests/second with 240-request bursts, and full Records sustain 2 requests/second with 120-request bursts. Error responses include reconnect guidance on auth errors, exact quota/date-window limits when available, one adjustment for empty or off-topic results, and feedback paths via X @synorb or team@synorb.com.

synorb-stream-search
Concierge stream/source inventory search. The route for “what podcasts do I have access to?”, “business podcasts”, “transportation streams”, and “do you have Bloomberg?”. Scope-labeled counts and ranked matches. Does not consume Manifest quota.
synorb-streams
Lower-level catalog browser kept for backwards compatibility. Prefer synorb-stream-search.
synorb-signals
Structured claims for reasoning systems completing workflows.
Example: "Get signals from the federal-reserve stream this week"
synorb-briefs
Structured narratives for reasoning systems delivering information to human operators.
synorb-records
Full canonical JSON payloads with tags, topics, provenance, and lineage. Enterprise only.
synorb-manifests
Signal + Brief on all plans. Record included at Enterprise.
synorb-stream-info
Filters, schema, and allowed values for a specific stream.
synorb-account
Account info, plan, quota, access level, and available endpoints.
synorb-digests
List your digests — both Synorb Digests (added) and User Digests (org-built).
synorb-digest-manifests
Fetch manifests from any digest across all its streams.
synorb-tags
Fuzzy search across entity tags (people, orgs, places, data sources).
synorb-sync
Create or update an internal-ID mapping. This is not a Stream subscription.
synorb-unsync
Remove a sync.
synorb-syncs
List internal-ID mappings with optional filters. This is not Stream inventory or access.
synorb-label
Create a custom label for organizing syncs.
synorb-labels
List all custom labels for your organization.
synorb-guide
Quick start guide — content types, key filters, all 12 domains, available workflow prompts.
synorb-prompts
9 pre-built workflow prompts (morning-briefing, competitor-watch, etc.) with step-by-step tool instructions.
04

Key Glossary

Ten terms that appear everywhere in Synorb. Learn these first.

TermWhat it is
ManifestA content package containing a Signal, Brief, and Record. The unit Synorb delivers to you.
SignalStructured claims extraction for reasoning systems completing workflows. Included on all plans.
BriefStructured narrative for reasoning systems delivering information to human operators. Headline, summary, sentiment, significance.
RecordSource content — one article, one podcast episode, one data release. Enterprise plans only.
ClaimAn atomic assertion extracted from a record. 15–50 per record. Each has a type, confidence level, and evidence classification.
StreamA filtered delivery view. Streams organize content by theme — "Federal Reserve Watch", "AI Infrastructure", etc.
TagA resolved entity — person, organization, place, or data source. Tags link claims across records.
TopicA curated thematic category from Synorb’s topic taxonomy, organized by domain. Used to filter streams by subject area.
DigestA grouping of manifests. Synorb Digests are pre-curated and included on Enterprise plans. User Digests are built by your org (included in plan). Query either type for aggregated content.
Source ChannelA specific content feed within a stream. Each channel has an ID, name, and display name (e.g. "Federal Reserve Bank of St. Louis"). Filter manifests by source_channel_ids or exact source_channel_names; examples include 8k, earnings-call-transcripts, and federal-court-opinions. Exact source requests return no results rather than broadening to adjacent sources.
DomainOne of 12 canonical knowledge domains. Every stream has a home domain and up to three cross-domains.
05

Authentication

Token

For MCP, send Authorization: Bearer YOUR_TOKEN to https://mcp.synorb.com/mcp. x-access-token and ?token=YOUR_TOKEN remain available for older MCP connector hosts. For REST API calls, use api-key and secret.

Key + Secret

Send api-key and secret headers with every request.

$ curl -H "api-key: a1b2c3d4-..." -H "secret: xK9#mP2..." \ https://api.synorb.com/account

Manifest Access

Your plan determines which manifest types you can access.

Signals Structured claims for reasoning systems All plans Briefs Structured narratives for reasoning systems All plans Records Structured content objects, enriched with entity tags and topics Enterprise only
06

REST API test live now ↓

All require authentication. Base URL: https://api.synorb.com

Build with your coding assistant
Get Starter keys
curl -s https://synorb.com/connect

// Returns:
{
  "credentials": {
    "api_key":    "sk_live_a1b2c3d4...",
    "api_secret": "xK9#mP2$vL...",
    "mcp_token":  "eyJhbGci..."
  },
  "mcp_server": "https://mcp.synorb.com/mcp",
  "mcp_servers": {
    "core": {
      "url": "https://mcp.synorb.com/mcp",
      "headers": { "Authorization": "Bearer ..." }
    },
    "core_sse": { "url": "https://mcp.synorb.com/sse?token=..." },
    "advanced": {
      "url": "https://mcp.synorb.com/advanced/mcp",
      "headers": { "Authorization": "Bearer ..." }
    }
  }
}
No signup form. 1,000 manifests/month on Starter, Daily Batch delivery. The secret is shown only once.
Tool-specific setup instructions
Core MCP URL
https://mcp.synorb.com/mcp
Authorization: Bearer YOUR_MCP_TOKEN
MCP config JSON (Core MCP)
Add to MCP config:
{ "mcpServers": { "synorb": { "url": "https://mcp.synorb.com/mcp", "headers": { "Authorization": "Bearer YOUR_MCP_TOKEN" } } } }
Advanced MCP (configured workflows)
{ "mcpServers": { "synorb-advanced": { "url": "https://mcp.synorb.com/advanced/mcp", "headers": { "Authorization": "Bearer YOUR_MCP_TOKEN" } } } }
REST API (any language)
curl -H "api-key: YOUR_API_KEY" -H "secret: YOUR_API_SECRET" \
  https://api.synorb.com/streams?page_size=5
Agent-readable setup
curl -s https://synorb.com/connect?format=md
Any LLM chat or agent
curl -s https://synorb.com/connect?format=md

Paste your API Key and Secret below, then hit Run on any endpoint to see live responses. Need keys?

Credentials Get Keys → Enter your key and secret first.

Account

GET /account
Your profile, plan, and usage.
{ "org": { "id": "17724793080269856", "name": "Acme AI", "org_type": "individual", "contact_email": "team@acme.ai", "is_active": true }, "subscription": { "status": "active", "plan_display_name": "Professional", "endpoint_mcp": true, "endpoint_api": true, "endpoint_s3": false, "endpoint_websocket": false, "endpoint_webhook": false, "endpoint_digests": false }, "users": [{ "name": "User", "role": "owner", "has_active_key": true }], "usage": { "period": "2026-03", "manifests_limit": 100000, "manifests_remaining": 87660 }, "mcp_connector": { "url": "https://mcp.synorb.com/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" }, "docs": "https://synorb.com/docs#mcp" } }

Streams

Most common call
curl -H "api-key: KEY" -H "secret: SEC" \ https://api.synorb.com/streams?home_domain=engineering-technology&page_size=5
GET /streams
List all streams with volume metrics. Filter by home_domain, is_public, or the public-company identifiers ticker / isin. Public-company streams carry a nested security block — is_public_company, primary ticker, exchange_mic, isin (equity share-class only — bonds excluded), figi, cik, and an identifiers[] union — plus the legacy flat tickers / isins / primary_url fields. Non-public streams return a non-public block (all null, empty identifiers).
ParamTypeDescription
home_domainenumFilter by canonical domain (12 values)
is_publicboolPublic streams only
tickerstringFilter to streams for the matching public company by stock ticker. Comma-separated, exact, case-insensitive (e.g. AAPL,MSFT). Both share classes resolve (GOOGL and GOOG both return Alphabet). Distinct from the SEC filing-context sec_ticker.
isinstringFilter to streams for the matching public company by ISIN. Comma-separated, exact, case-insensitive (e.g. US0378331005).
pageintPage number, 0-indexed
page_sizeintResults per page, max 200
{ "streams": [ { "id": "17723038993558141", "name": "national-weather", "description": "NWS forecasts and alerts for major US metro areas.", "home_domain": "universe-earth", "manifests_last24h": 808, "manifests_last7d": 1821, "manifests_last30d": 2035 }, { "id": "17723038993547086", "name": "bloomberg-podcasts", "description": "Bloomberg podcast network: Odd Lots, Surveillance, and The Big Take.", "home_domain": "economics-business-work", "manifests_last24h": 0, "manifests_last7d": 18, "manifests_last30d": 157, "tickers": [], "isins": [], "primary_url": null, "security": { "is_public_company": false, "ticker": null, "exchange_mic": null, "isin": null, "figi": null, "cik": null, "identifiers": [] } } ], "pagination": { "total_count": 452, "page_num": 0, "page_size": 50, "next": 1, "prev": null } }
GET /streams/{id}
Stream details — title, status, stream_class, filters, source_channels, and volume metrics.
{ "id": "17723038993540102", "name": "federal-reserve", "title": "Federal Reserve", "description": "All Federal Reserve content: speeches, minutes, press releases, balance sheet data, and Beige Book.", "home_domain": "society-law-government", "status": "live", "stream_class": "discovery", "source_type": "organization", "is_public": true, "manifests_last24h": 5, "manifests_last7d": 42, "manifests_last30d": 187, "claims_last24h": 85, "claims_last7d": 720, "claims_last30d": 3210, "source_channels": [{ "id": "17730001234567891", "name": "openai-blog", "source_channel_display": "OpenAI Blog", "source_type": "firecrawl", "media_format": "text", "is_active": true, "activated_on": "2026-01-15T00:00:00Z", "deactivated_on": "1970-01-01T00:00:00Z", "deactivation_reason": "none" }], "filter_definition": { "tag_ids": ["17723038993540102"], "source_type": "organization" }, // Public-company streams populate these; non-public streams return [] / null. "tickers": ["NVDA"], "isins": ["US67066G1040"], "primary_url": "https://www.nvidia.com", // Nested block: single public company -> primary_* populated; 0 or >1 -> primary_* null (identifiers still listed). cik/figi are strings. "security": { "is_public_company": true, "ticker": "NVDA", "exchange_mic": "XNAS", "isin": "US67066G1040", "figi": "BBG000BBJQV0", "cik": "1045810", "identifiers": [ { "id_type": "ticker", "id_value": "NVDA", "asset_class": null, "exchange_mic": "XNAS", "is_primary": true }, { "id_type": "isin", "id_value": "US67066G1040", "asset_class": "equity", "exchange_mic": null, "is_primary": true } ] } }
GET /streams/{id}/manifests
Full manifests — source metadata + Signal + Brief in one call. Paginated and date-filtered. Signal and Brief included on all plans. Record (structured enriched objects) at Enterprise only.
ParamTypeDescription
published_date_fromdateStart date (YYYY-MM-DD)
published_date_todateEnd date (YYYY-MM-DD)
tag_idsstringComma-separated tag IDs to filter by (e.g. "123,456"). Returns manifests mentioning ANY of these tags.
tag_typestringFilter by tag type: person, organization, place, topic, data
tag_logicstringor/any for any selected tag; and/all for co-mentions in the same Manifest
tickerstringResolve the ticker to its company tag and filter manifests to that company. Comma-separated, exact, case-insensitive (e.g. MSFT). Distinct from the SEC filing-context sec_ticker.
isinstringResolve the ISIN to its company tag and filter manifests to that company. Comma-separated, exact, case-insensitive.
sec_form_typestringFilter SEC-filing manifests by form type. Comma-separated, exact, case-insensitive (e.g. 8-K,10-Q,10-K).
pageintPage number, 0-indexed
page_sizeintResults per page, max 200
GET /streams/17723038993540102/manifests?page_size=1 { "manifests": [ { "manifest_id": "1772303896681792043", "record_id": "1772303895259186451", "stream_ids": ["17723038993540102"], "stream_names": ["Federal Reserve Bank of St. Louis"], "matched_at": "2026-03-04T14:22:01", "source": { "record_title": "The End of Rapid Population Growth", "source_url": "https://stlouisfed.org/on-the-economy/2023/mar/end-rapid-population-growth", "source_published_date": "2023-03-06", "source_name": "fed-stlouis-blog", "source_type": "organization", "media_format": "text", "claim_type": "analysis", "author": "Charles S. Gascon", "source_channel_ids": ["17732516384529123"], "source_channel_display": "Federal Reserve Bank of St. Louis" }, "signal": {
"story_id": "17737682899496764", "headline": "The End of Rapid Population Growth", "summary": "Analysis of demographic shifts as global population growth decelerates...", "body": { "signal": { "source_url": "...", "claim_count": 18, "featured_count": 4 }, "claims": [ { "claim_text": "Global population growth rate fell below 1% for the first time since 1950", "claim_type": "data", "confidence": "measured", "evidence": "derived", "signal": "Historic demographic inflection point with broad economic implications.", "featured": true, "entities": [{ "name": "United Nations", "type": "organization", "role": "source_org" }] }, ... 17 more claims ], "entity_details": [{ "tag_type": "Organization", "tag_value": "Federal Reserve Bank of St. Louis" }, { "tag_type": "Person", "tag_value": "Charles S. Gascon" }], "topics": ["demographics", "population", "economics"], "domain_classification": { "home_domain": "economics-business-work", "cross_domains": ["health-medicine", "society-law-government"] } }, "sentiment": "neutral", "significance": "high", "version": 1, "claim_count": 18, "reading_time_minutes": 4.5
}, "brief": {
"story_id": "17737682899496765", "headline": "The End of Rapid Population Growth", "summary": "The world's population recently reached 8 billion, but the growth rate has slowed dramatically...", "body": { "key_insights": [ "Global population growth rate fell below 1% for the first time since 1950", "Fertility rates declining in both developed and developing nations", "Economic implications include labor shortages and pension system strain" ], "notable_quotes": [ { "text": "We are witnessing a historic demographic transition...", "speaker": "Charles S. Gascon", "context": "Author's analysis in the St. Louis Fed report." } ], "entity_details": [{ "tag_type": "Organization", "tag_value": "Federal Reserve Bank of St. Louis" }], "topics": ["demographics", "population", "economics"], "domain_classification": { "home_domain": "economics-business-work", "cross_domains": ["health-medicine", "society-law-government"] } }, "sentiment": "neutral", "significance": "high", "version": 1, "reading_time_minutes": 3.0, "key_points_count": 3, "quote_count": 1
}, "record": {
"record_id": "17731495170319394", "title": "Global Population Growth Falls Below 1% for First Time Since 1950", "url": "https://fredsource.stlouisfed.org/population-growth-2026", "source_published_date": "2026-03-18", "source_name": "Federal Reserve Bank of St. Louis", "source_type": "organization", "media_format": "text", "claim_type": "analysis", "content": "Is the thought of transitioning into retirement stressing you out? You're not alone. According to the Federal Reserve Bank of St. Louis, global population growth rate fell below 1% for the first time since 1950, signaling a historic demographic shift...", "extra_data": { "extraction": { "entity_details": [{ "tag_type": "Organization", "tag_value": "Federal Reserve Bank of St. Louis" }], "topics": ["demographics", "population", "economics"], "domain_classification": { "home_domain": "economics-business-work", "cross_domains": ["health-medicine"] } } }
} } ], "pagination": { "total_count": 11864, "page_num": 0, "page_size": 1, "next": 1, "prev": null } }

Response Schemas

Every authenticated response wraps the payload in a standard envelope. Full OpenAPI 3.1 spec available for code generation.

Response Envelope (all endpoints) { "data": { ... endpoint-specific payload ... }, "usage": { "quota_limit": 1000000, // monthly manifest quota "quota_used": 6639, // consumed this period "quota_remaining": 993361, // remaining this period "period": "2026-03", // billing period (YYYY-MM) "available": "signal, brief, record", // content levels on your plan "items_in_response": 200 // items in this response } }
Manifest structure

Each manifest contains a source envelope plus three content types. Signal and Brief on all plans; Record at Enterprise.

Shared envelope (every manifest) { "manifest_id": "17723038966...", // unique ID (string) "record_id": "17723038952...", // links to the source record "stream_ids": ["17723038993..."], // streams this manifest routes to "stream_names": ["Bloomberg"], // human-readable stream names "matched_at": "datetime", // when routed to this stream "source": { "record_title": "string", "source_url": "string", "source_published_date": "date", "source_name": "string", "source_type": "person | organization | data", "media_format": "text | audio | social | data | regulatory", "claim_type": "statement | data | event | forecast | analysis", "author": "string or null", "record_version": integer, "source_channel_ids": ["string"], // source channel IDs (list) "source_channel_display": "string or null" // e.g. "Federal Reserve Bank of St. Louis" }, "signal": { ... see Signal below ... }, "brief": { ... see Brief below ... }, "record": { ... see Record below (Enterprise) ... } }
Signal all plans
{ "story_id": "string (unique ID)", "stream_id": "string", "source_published_date": "YYYY-MM-DD", "source_type": "person | organization | data", "media_format": "text | audio | social | data", "headline": "string", "summary": "string", "body": { "claims": [ { "claim_text": "string", "claim_type": "statement | data | event | forecast | analysis", "confidence": "stated | implied | inferred | measured", "evidence": "direct_quote | paraphrase | derived | observed", "quote": "string or null", "signal": "why it matters", "featured": boolean, "key_point_index": int|null, "entities": [{ "name": "", "type": "organization | person | place | topic", "role": "source_org | speaker | subject | mentioned" }] } ], "entity_details": [// array of objects (not a dict) { "tag_type": "Organization | Person | Place | Topic", "tag_value": "string" } ], "topics": ["string", ...], "domain_classification": { "home_domain": "string", "cross_domains": [""] } }, "sentiment": "positive | negative | neutral | mixed | indeterminate", "significance": "low | medium | high", "story_version": integer, "reading_time_minutes": integer, "record_id": "string", "record_url": "https://...", "record_version": integer }
Brief all plans
{ "story_id": "string (unique ID)", "stream_id": "string", "source_published_date": "YYYY-MM-DD", "source_type": "person | organization | data", "media_format": "text | audio | social | data", "headline": "string", "summary": "string", "body": { "key_insights": [ "string", ... ], "notable_quotes": [{ "text": "string", "speaker": "string", "context": "string" }], "entity_details": [// array of objects (not a dict) { "tag_type": "Organization | Person | Place | Topic", "tag_value": "string" } ], "topics": ["string", ...], "domain_classification": { "home_domain": "string", "cross_domains": [""] }, // Audio only (media_format = "audio"): "actionable_takeaways": ["string"], "guest_details": [{ "name": "string", "title": "string", "affiliation": "string" }], "cross_promotion": "string", "cultural_relevance": "string" }, "body_markdown": "## Key Insights\n- ...\n\n## Notable Quotes\n- ...", "sentiment": "positive | negative | neutral | mixed | indeterminate", "significance": "low | medium | high", "story_version": integer, "key_points_count": integer, "quote_count": integer, "reading_time_minutes": integer, "record_id": "string", "record_url": "https://...", "record_version": integer }
Record Enterprise
{ "record_id": "string (unique ID)", "title": "string", "url": "string", "source_published_date": "date", "synorb_ingested_at": "datetime", "source_name": "string", "source_type": "person | organization | data", "media_format": "text | audio | social | data | regulatory", "claim_type": "statement | data | event | forecast | analysis", "author": "string or null", "content": "full source text", "record_version": integer, "extra_data": { "extraction": { "entity_details": [{ "tag_type": "", "tag_value": "" }] } }, "status": "pending | complete", "record_version_note": "string or null", "stream_id": "string", "matched_at": "datetime" }
Enum Reference
claim_type statement — general assertion data — measured statistic event — occurrence or action forecast — forward-looking projection analysis — derived insight
confidence stated — explicitly stated implied — strongly implied inferred — derived by reasoning measured — quantitative data
evidence direct_quote — exact quote paraphrase — restated derived — synthesized observed — from facts/data

Lookups

GET /manifests/{record_id}
Single manifest lookup by record ID. Returns the same nested structure as the stream manifests endpoint — source, signal, brief, and record. Signal and Brief on all plans; Record included at Enterprise.
ParamTypeDescription
record_idintThe record's unique ID (string)
GET /manifests/1772303895259186451 { "manifest_id": "1772303896681792043", "record_id": "1772303895259186451", "stream_ids": ["17723038993540102"], "stream_names": ["Federal Reserve Bank of St. Louis"], "source": { "record_title": "The End of Rapid Population Growth", "source_url": "https://stlouisfed.org/on-the-economy/2023/mar/end-rapid-population-growth", "source_published_date": "2023-03-06", "source_name": "fed-stlouis-blog", "source_type": "organization", "media_format": "text", "claim_type": "analysis", "author": "Charles S. Gascon", "source_channel_ids": ["17732516384529123"], "source_channel_display": "Federal Reserve Bank of St. Louis" }, "signal": { "story_id": "17737682899496764", "headline": "The End of Rapid Population Growth", "summary": "Analysis of demographic shifts...", "body": { "claims": [{ "claim_text": "...", "claim_type": "data", "confidence": "measured", "evidence": "derived", ... }] }, "sentiment": "neutral", "significance": "high", "version": 1, "claim_count": 18 }, "brief": { "story_id": "17737682899496765", "headline": "The End of Rapid Population Growth", "summary": "The world's population recently reached 8 billion...", "body": { "key_insights": ["..."], "notable_quotes": [{ "text": "...", "speaker": "..." }] }, "body_markdown": "## Key Insights\n- ...", "sentiment": "neutral", "significance": "high", "version": 1, "key_points_count": 3, "quote_count": 1 }, "record": { // Enterprise only "record_id": "17731495170319394", "title": "Global Population Growth Falls Below 1% for First Time Since 1950", "url": "https://fredsource.stlouisfed.org/population-growth-2026", "source_published_date": "2026-03-18", "source_name": "Federal Reserve Bank of St. Louis", "source_type": "organization", "media_format": "text", "claim_type": "analysis", "content": "Is the thought of transitioning into retirement stressing you out? You're not alone...", "extra_data": null } }

Firehose Endpoints Platform plans only

Firehose customers receive manifest_id via WebSocket delivery. Use these endpoints to pull individual components by manifest ID.

GET /signal/{manifest_id}
Signal by manifest ID.
GET /brief/{manifest_id}
Brief by manifest ID.
GET /record/{manifest_id}
Record by manifest ID. Streams customers on Enterprise plans get records within the /manifests endpoint response.

Digest Builder Startup | Enterprise

Digests are custom groupings of manifests. Build your own using stream IDs, dynamic filter rules (topics, tags, domains, sources), or both. Included in Startup and Enterprise plans at no extra cost.

Create a digest
curl -X POST -H "api-key: KEY" -H "secret: SEC" \ -d '{"name":"AI Policy Watch","stream_ids":["17723038993540102"]}' \ https://api.synorb.com/digests
POST/digests
Create a new digest. Requires at least one of stream_ids or filter_spec. Optional content_filters filter content within matched streams.
POST /digests { "name": "AI Policy Watch", "stream_ids": ["17723038993540102", "17723038993544463"], "filter_spec": { "rules": [ {"dimension": "topic", "values": ["AI", "machine learning"]}, {"dimension": "domain", "values": ["society-law-government"]} ], "combine": "AND" }, "content_filters": { "media_format": ["audio"], "source_channel_ids": [42, 87] } } filter_spec dimensions: topic, tag, domain, source, source_type, claim_type, media_format. content_filters: delivery-time filters applied within matched streams. • media_format: text, audio, video, social, data, regulatory • source_channel_ids: specific source channel IDs to include • source_channel_names: exact source channel names/displays to include (e.g. 8k, earnings-call-transcripts, federal-court-opinions)
GET /digests
List your org's digests with stream counts and filter status.
{ "digests": [ { "id": 1, "name": "AI Policy Watch", "stream_count": 8, "digest_type": "user", "has_dynamic_filter": true } ] }
GET /digests/{id}
Digest details including resolved stream list and filter spec.
{ "digest": { "id": 1, "stream_ids": [...], "filter_spec": {...} }, "streams": [{ "id": ..., "title": "Federal Reserve", "manifests_last7d": 312 }] }
PUT /digests/{id}
Update name, description, filter_spec, or content_filters. Set content_filters to null to remove.
DELETE/digests/{id}
Soft-delete a digest (permanently deactivates).
POST/digests/{id}/activate
Re-enable a deactivated digest.
POST/digests/{id}/deactivate
Pause a digest (reversible via activate).
POST/digests/{id}/streams
Add streams to a digest.
{ "stream_ids": ["17723038993540102", "17723038993544463"] }
DELETE/digests/{id}/streams
Remove streams from a digest.
{ "stream_ids": ["17723038993540102"] }
POST/digests/preview-filter
Preview matching streams before creating a digest. Returns up to 50 results.
POST /digests/preview-filter { "filter_spec": { "rules": [ {"dimension": "topic", "values": ["AI"]} ] } } { "stream_count": 23, "streams": [{ "id": ..., "title": ... }] }
GET /digests/{id}/manifests
Full manifests across all streams in a digest. Same nested structure as /streams/{id}/manifests — source, signal, and brief on all plans. Record at Enterprise.
ParamTypeDescription
published_date_fromdateStart date (YYYY-MM-DD)
published_date_todateEnd date (YYYY-MM-DD)
tag_idsstringComma-separated tag IDs to filter by
tag_typestringFilter by tag type: person, organization, place, topic, data
tag_logicstringor/any for any selected tag; and/all for co-mentions in the same Manifest
tickerstringResolve the ticker to its company tag and filter manifests to that company across the digest. Comma-separated, exact, case-insensitive (e.g. AAPL). Distinct from the SEC filing-context sec_ticker.
isinstringResolve the ISIN to its company tag and filter manifests to that company across the digest. Comma-separated, exact, case-insensitive.
sec_form_typestringFilter SEC-filing manifests by form type. Comma-separated, exact, case-insensitive (e.g. 8-K,10-Q,10-K).
pageintPage number, 0-indexed
page_sizeintResults per page, max 200

Beacons Enterprise

A Beacon is a saved query configuration owned by your account. It bundles the streams, source channels, topics, entities, and date-window guidance an agent needs to retrieve relevant Manifests later. A Beacon does not store Manifests. The API path and public handle are /v3/beacons and beacon_id.

Synorb does not own production scheduling. Use this beacon_id from your own cron, workflow engine, or agent runtime. Each run requires an explicit date range or lookback — there is no "since last run" memory on the Synorb side.

Plan availability

Beacons are available on every plan with active Beacon caps: Starter 10, Individual 50, Professional 250, Startup 1,000, and Enterprise unlimited. The cap applies to active saved Beacons; archive an active Beacon or upgrade when the cap is reached.

Hidden caps (enforced server-side to block pathological payloads): config JSON ~64 KB, intent/description ~4 KB, custom prompt ~16 KB, source-channel IDs ~250, topic/entity filters 100–250 combined, revision history last 20.

CRUD endpoints

MethodPathPurpose
POST/v3/beaconsCreate a Beacon. Returns the full object including beacon_id.
GET/v3/beaconsList your org's Beacons. Filters: status, tag, q, collection_id, limit, offset.
GET/v3/beacons/{beacon_id}Get one Beacon.
PATCH/v3/beacons/{beacon_id}Partial update. Bumps revision and appends to history.
POST/v3/beacons/{beacon_id}/archiveArchive (cannot execute until restored).
POST/v3/beacons/{beacon_id}/restoreRestore to draft.
DELETE/v3/beacons/{beacon_id}Soft-delete.
GET/v3/beacons/{beacon_id}/revisionsLast 20 revisions, newest first.
Create a Beacon
curl -X POST "https://api.synorb.com/v3/beacons" \ -H "api-key: KEY" -H "secret: SEC" \ -H "content-type: application/json" \ -d '{"name":"AI developments","stream_ids":[1801,1820,1855],"topic_filters":[{"slug":"ai-models"}],"default_date_window":{"lookback_hours":24},"status":"active"}'

Execution by beacon_id

There is no separate /beacons/{id}/run endpoint. Instead, pass beacon_id on the existing Manifest endpoints alongside an explicit date window using either lookback_hours or the standard published_date_from / published_date_to params (same names the rest of the REST API uses). The Beacon's saved stream/topic/entity scope is used; a request that points at a stream outside the saved scope, or that passes filter values not in the saved config, is rejected with 422 unauthorized_source_broadening unless the caller also passes broaden_sources=true.

Execute a Beacon from cron
# Customer-owned cron line 0 6 * * * curl -sS \ -H "api-key: $SYNORB_API_KEY" -H "secret: $SYNORB_API_SECRET" \ "https://api.synorb.com/streams/1801/manifests?beacon_id=synorb_bcn_AbCd&lookback_hours=24"

Errors when executing by beacon_id

StatusCodeCause
404beacon_not_foundMissing, soft-deleted, or owned by a different org.
409beacon_archivedBeacon is archived. Restore before execution.
422date_window_requiredSupply published_date_from+published_date_to or lookback_hours.
422unauthorized_source_broadeningPass broaden_sources=true to allow caller-supplied streams/channels/topics on top of the Beacon's saved scope.

MCP companion tools

Execute a Beacon from an agent (MCP)
synorb-manifests { "beacon_id": "synorb_bcn_AbCd", "lookback_hours": 24 }

See also: Streams, Digest Builder, and MCP Servers.

Ontology Sync Enterprise

Map Synorb tags and topics to your internal identifiers. Once synced, every delivery payload automatically includes your IDs alongside Synorb’s.

Sync a tag
curl -X POST "https://api.synorb.com/ontology/sync?object_type=tag&object_id=1234&external_id=CRM-TSLA-001" \ -H "api-key: KEY" -H "secret: SEC"
POST/ontology/sync
Create or update a sync. Re-syncing the same object overwrites the previous one.
ParamTypeDescription
object_typestringWhat to sync — tag, topic, or stream
object_idintThe Synorb object ID (from tag search or topic browse)
external_idstringYour internal ID (e.g. CRM-TSLA-001, ticker:TSLA)
external_namestringYour display name (optional)
labelsstringComma-separated labels (optional)
POST /ontology/sync?object_type=tag&object_id=1234&external_id=CRM-TSLA-001&external_name=Tesla+Corp&labels=watchlist,buy-side { "id": 42, "status": "created" }
DELETE/ontology/sync/{id}
Remove a sync. Soft-deletes the record, which can be re-created later.
GET /ontology/syncs
List active syncs for your organization with Synorb names resolved.
ParamTypeDescription
object_typestringFilter by type: tag, topic, or stream
labelstringFilter by label
pageintPage number, 0-indexed
page_sizeintResults per page, max 200
GET /ontology/tags
Search the Synorb tag catalog with fuzzy matching. Returns tags with canonical name, type, and aliases.
ParamTypeDescription
searchstringFuzzy search term
typestringFilter: person, organization, place, topic
GET /ontology/topics
Browse the Synorb topic catalog by name and domain.
ParamTypeDescription
searchstringSearch term
domainstringFilter by domain
POST/ontology/labels
Create a custom label for organizing syncs (e.g. ‘buy-side’, ‘watchlist’).
GET /ontology/labels
List all custom label definitions for your organization.

Python SDK

Manage syncs programmatically. Install via pip install synorb.

# Initialize from synorb import Synorb client = Synorb(api_key="YOUR_KEY", api_secret="YOUR_SECRET") # Search tags results = client.ontology.search("Tesla", tag_type="organization") # Create a sync client.ontology.sync(tag_id=1234, external_id="CRM-TSLA-001", external_name="Tesla Corp", labels=["watchlist", "buy-side"]) # List syncs for s in client.ontology.syncs(): print(f"{b.tag_name} → {b.external_id}") # Remove a sync client.ontology.unsync(tag_id=1234)
07

Webhooks test live now ↓

Push notifications when events happen in your streams. Startup and above. Webhook payloads contain metadata only — fetch full content via the REST API.

Event Types

EventTriggerDescription
manifest.matchedReal-timeA new manifest was delivered to one of your subscribed streams
digest.new_contentReal-timeA new manifest was delivered to a stream in your user digest
digest.createdOn actionA Synorb Digest was added to your account
digest.updatedOn actionA digest was updated — payload includes message describing what changed (streams added/removed, metadata, filters)
digest.removedOn actionA Synorb Digest was removed from your account
stream.createdOn publishA new stream went live on the platform
stream.removedOn actionA stream was permanently deactivated — payload includes reason
stream.unpublishedOn actionA stream was temporarily unpublished (may return) — payload includes reason

Register a Webhook

POST /webhooks { "url": "https://your-app.com/webhook", "label": "Production alerts", "events": ["manifest.matched", "stream.created"] } { "id": 7, "secret": "whsec_..." } Save the secret — it is shown only once. Default events: ["manifest.matched"]. Add "stream.created" to get notified about new streams.

Payload: manifest.matched

{ "event": "manifest.matched", "webhook_id": 7, "timestamp": "2026-03-04T14:30:00.000Z", "data": { "manifest_id": "1772434238663730227", "stream_id": "17723038993540102", "stream_name": "federal-reserve", "headline": "The End of Rapid Population Growth", "published_date": "2026-03-04", "claim_count": 7, "tags": ["Federal Reserve", "United Nations"], "home_domain": "society-law-government" } } Metadata only. Call GET /streams/{stream_id}/manifests for full content.

Payload: stream.created

{ "event": "stream.created", "webhook_id": 7, "timestamp": "2026-03-04T14:30:00.000Z", "data": { "stream_id": "17723038993540102", "name": "federal-reserve", "title": "Federal Reserve", "description": "All Federal Reserve content: speeches, minutes, press releases, balance sheet data, and Beige Book.", "home_domain": "society-law-government", "cross_domains": ["economics-business-work", "physical-sciences-mathematics"] } }

Digest Webhooks

Get notified when new content lands in your user digest. Register a webhook scoped to a specific digest — it fires digest.new_content every time a manifest is delivered to any stream in that digest.

POST /digests/{digest_id}/webhook { "url": "https://your-app.com/digest-hook", "label": "Federal Reserve alerts" } { "id": 12, "digest_id": 42, "secret": "whsec_..." } Save the secret — it is shown only once. Max 5 webhooks per digest.

Payload: digest.new_content

{ "event": "digest.new_content", "webhook_id": 12, "timestamp": "2026-03-13T14:30:00.000Z", "data": { "digest_id": 42, "digest_name": "Federal Reserve", "manifest_id": "1772434238663730227", "stream_id": "17723038993540102", "stream_name": "federal-reserve", "headline": "The End of Rapid Population Growth", "published_date": "2026-03-13", "available": ["signal", "brief"] } } Metadata only. Call GET /digests/{digest_id}/manifests for full content.

HMAC Signature Verification

Header: X-Synorb-Signature: sha256=<hex_digest> # Python import hmac, hashlib expected = hmac.new(secret.encode(), payload_bytes, hashlib.sha256).hexdigest() assert hmac.compare_digest(f"sha256={expected}", signature_header)

Retry & Circuit Breaker

Attempt 1: Immediate Timeout: 10s Attempt 2: After 60s Timeout: 10s Attempt 3: After 300s Timeout: 10s 10 consecutive failures → webhook auto-disabled. Reactivate: POST /webhooks/{id}/reactivate

Webhook Management

GET/webhooksList your webhooks
POST/webhooksRegister new webhook
POST/webhooks/{id}/disableDisable (reversible)
POST/webhooks/{id}/reactivateRe-enable disabled webhook
DELETE/webhooks/{id}Permanently delete + logs
POST/webhooks/{id}/testSend test event
GET/webhooks/{id}/logsDelivery history
POST/digests/{id}/webhookRegister digest webhook
GET/digests/{id}/webhooksList digest webhooks

Try It Live

Plan must include webhooks. Register webhooks in your dashboard first.

Credentials Get Keys →
08

MCP Servers test live now ↓

Core MCP exposes a profile utility plus 8 tools for the normal agent loop, including Beacon configure/save/list/archive tools. Advanced MCP is a separate configured surface for digests, sync ontology, labels, prompt templates, and lower-level content tools.

Both transports are supported: Streamable HTTP (/mcp, recommended) and SSE (/sse, legacy, still supported). Use Streamable HTTP with Authorization: Bearer for new integrations.

For interactive agent workflows, reuse a persistent Streamable HTTP MCP session/connection. Initialize once for the user or workspace, keep the session warm across tools/list and follow-on tool calls, and reconnect only after idle timeout, auth failure, or network failure. Cold sessions are supported for compatibility and diagnostics, but they are not the recommended low-latency path. Use REST APIs for stateless per-call usage, scheduled jobs, deterministic polling, server-side product workflows, and REST-shaped contracts.

Clients that support newer MCP affordances receive formal tool output schemas, Manifest progress notifications during longer pulls, and argument completions for common filters such as domains, media formats, Stream IDs, source channels, and tag names.

$ connect mcp.synorb.com/mcp Core — Streamable HTTP (recommended) — synorb-profile, synorb-stream-search, synorb-catalog, synorb-details, synorb-manifests, synorb-configure-beacon, synorb-save-beacon, synorb-beacons, synorb-archive-beacon mcp.synorb.com/sse Core — SSE transport (legacy, still supported) mcp.synorb.com/profile Profile endpoint — plan, quota, refresh tier, content access, allowed date window mcp.synorb.com/advanced/mcp Advanced tools — Streamable HTTP for stream aliases, signals, briefs, records, digests, ontology, labels, help 9 prompts — morning-briefing, central-bank-watch, earnings-roundup, podcast-recap, vc-landscape, technology-watch, research-briefing, competitor-watch, policy-tracker Compact mode: headlines + summaries by default. Set compact=False for full bodies. Auth: Authorization Bearer recommended; x-access-token and ?token=YOUR_TOKEN remain backward-compatible.

Setup

Core MCP — Streamable HTTP + Authorization Bearer (recommended)
{ "mcpServers": { "synorb": { "url": "https://mcp.synorb.com/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } }
Core MCP — SSE transport (legacy, still supported)
{ "mcpServers": { "synorb": { "url": "https://mcp.synorb.com/sse?token=YOUR_TOKEN" } } }
Advanced MCP — configured workflows
{ "mcpServers": { "synorb-advanced": { "url": "https://mcp.synorb.com/advanced/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } }
Claude / ChatGPT / Other connector hosts

For Claude custom connectors, paste the tokenized connector URL from your credentials email into Settings → Connectors. For ChatGPT apps/connectors, configure Synorb from Apps & Connectors with the Core MCP URL and token. For Codex web, use the approved workspace app or plugin your admin exposes to Codex.

Programmatic bootstrap

Use the generic bootstrap flow to create a Starter Synorb account and return API and MCP credentials immediately. Use the MCP profile endpoint or the REST account endpoint to show plan and quota context inside connector UIs.

$ curl -s https://synorb.com/connect
$ curl "https://mcp.synorb.com/profile?token=YOUR_MCP_TOKEN"
$ curl https://api.synorb.com/account \ -H "api-key: YOUR_API_KEY" \ -H "secret: YOUR_API_SECRET"

Primary Agent Workflow

synorb-stream-search
Answer stream/source/podcast inventory and availability questions. Full media-surface requests like “show me all podcast streams” return a complete or paginated inventory response from coverage, pagination, and inventory_summary instead of forcing narrowing.
synorb-stream-search(query='all podcast streams', media_format='audio', page_size=200)
synorb-catalog
Find Streams from user intent. Search by topic, company, domain, media type, source domain, or broad exploratory query.
synorb-catalog(query='AI infrastructure earnings', home_domains=['economics-business-work'])
synorb-details
Inspect selected Streams before pulling. Returns source channels, media formats, available filters, volume, and a recommended Manifest call.
synorb-details(stream_ids=["17723038993540102", ...])
synorb-manifests
Pull Signal + Brief plus source metadata across one or more Streams, including high-throughput relevant pulls for authenticated users. Supports stream_ids, home_domains, tag_names, tag_ids, tag_logic, media_format, source_channel_ids, source_channel_names, significance, dates, compact/full output, and per-call page_size/target_count caps.
synorb-manifests(home_domains=['all'], tag_names=['Elon Musk','Sam Altman'], tag_type='person', tag_logic='and', published_date_from='YYYY-MM-DD', target_count=10)
synorb-configure-beacon
Draft a reusable Beacon from a user's tracking/query intent. Returns a ready proposal or clarifying questions.
synorb-configure-beacon(intent='track AI infrastructure funding news')
synorb-save-beacon
Save a proposed Beacon to the account and return beacon_id. Beacons are available on every plan with active Beacon caps; if the cap is reached, list saved Beacons and archive one with user approval or upgrade.
synorb-save-beacon(proposal={...}, status='active')
synorb-beacons
List saved Beacons and reusable handles for the account. Use this before running a saved Beacon or when an account reaches its active Beacon cap.
synorb-beacons(status='active')
synorb-archive-beacon
Archive a saved Beacon by beacon_id. Use for explicit cleanup/archive requests or approved eval cleanup.
synorb-archive-beacon(beacon_id='synorb_bcn_...')

How Agents Should Loop

Start with synorb-catalog, read synorb-details for the best filters, then pull with synorb-manifests. If the result count is low, follow diagnostics.retry_guidance: relax significance, add adjacent Streams, broaden home_domains, or remove narrow tag filters. If the result count is too broad, add tag_names, media_format, source_channel_ids, source_channel_names, or a tighter date range.

Direct questions should use the minimum useful calls: synorb-profile only for quota, plan, refresh, status, or date-window questions. For Stream/source/podcast availability, call synorb-stream-search; for full media-surface requests like "show me all podcast streams", pass media_format='audio', use page_size=200, and answer from coverage, pagination, and inventory_summary instead of asking the user to narrow. Ask for a home_domain only when the inventory request has no media, source, or topic signal. If the user asks to save/reuse a tracking query, call synorb-configure-beacon first, improve obvious name, description, and tags, then call synorb-save-beacon when they want it saved. Beacons are available on every plan with active Beacon caps; if synorb-save-beacon returns beacon_limit_exceeded, surface that to the user, list saved Beacons, and ask which stale Beacon to archive or whether to upgrade. Use synorb-beacons to list saved Beacons on the account. Use synorb-manifests directly when stream scope, source-channel scope, and filters are already known. Exact source/form requests should pass source_channel_names or source_channel_ids directly — for example source_channel_names=['8k'] with media_format='regulatory' for SEC Form 8-K, source_channel_names=['earnings-call-transcripts'] for transcript-only workflows, or policy/court source slugs when known. Do not treat catalog absence as proof exact-source content is unavailable, and do not substitute adjacent sources; unresolved source names return zero Manifests without consuming quota. For same-Manifest co-mentions or count/list questions, pass each entity in tag_names with tag_logic='and', add tag_type when clear, and report pagination.total_count. Use tag_logic='or' for any-of lists.

If a client supports parallel tool calls, parallelize independent synorb-catalog searches for separate facets, companies, media types, or domains. Merge and dedupe stream_ids, then prefer one synorb-details call and one multi-Stream synorb-manifests call when filters are shared. Parallelize Manifest calls only for genuinely different scopes or filters; this is a relevance/payload discipline, not a low per-minute cap.

synorb-manifests can also auto-plan broad bounded requests server-side, splitting a compact request into a few internal slices, merging and deduping candidates, then returning one normal response with query_plan metadata. This keeps hosted clients from needing to orchestrate their own fanout for ordinary broad research.

Key Features

Compact Mode
Manifest tools return headlines + summaries by default. Set compact=False when the agent needs full bodies, key insights, and quotes.
Significance Filter
Use significance='high' for precision. Relax it to medium or remove it when the diagnostics say the result set is thin.
Tag/Topic Filtering
Pass human-readable tag_names directly to Core synorb-manifests. Use tag_logic='and' for entities/topics that must appear in the same Manifest and tag_logic='or' for any match. Use Advanced synorb-tags only when you need to inspect exact canonical tags or IDs.

Advanced MCP Discovery Tools

Use the Advanced server when you need direct low-level control. For most work, prefer the Core loop above.

synorb-streams
Advanced catalog alias for explicit stream browsing. Prefer synorb-catalog for agent workflows.
"Find podcast streams" — synorb-streams(media_format='audio')

Advanced MCP Stream Content Tools

Fetch narrow content from a specific Stream. These remain available on the Advanced server for specialized workflows, while Core synorb-manifests is the primary retrieval surface.

synorb-signals
Structured claims — atomic assertions with confidence and evidence tags. Best for data extraction.
synorb-briefs
Editorial narratives with key insights, notable quotes, and actionable takeaways. Best for most LLM tasks.
synorb-multi-stream
Advanced legacy multi-Stream story search. Prefer synorb-manifests for primary Manifest pulls.
synorb-records
Raw source content (full article text, transcripts). Enterprise only.
synorb-manifests
Primary retrieval surface: Signal + Brief plus source metadata across one or more Streams with diagnostics, quota receipt fields, and retry guidance.
synorb-stream-info
Advanced single-Stream detail alias. Prefer synorb-details when selecting filters across a candidate set.
synorb-account
Advanced compatibility alias for plan, quota usage, and available endpoints. Prefer synorb-profile on Core.
synorb-digests
List your digests — curated bundles of streams with AND/OR filtering.
synorb-digest-manifests
Content from a digest across all its streams. Supports tag_ids filtering.

Sync Ontology Tools

Search entities and topics, manage syncs, create labels.

synorb-tags
Search all 5 tag types: person, organization, place, topic, data. Unified search with fuzzy matching.
synorb-sync
Map a Synorb entity to your internal ID. All delivery payloads include your identifier. This is not a Stream subscription.
synorb-unsync
Remove a sync.
synorb-syncs
List internal-ID mappings with resolved names. This is not Stream inventory or access.
synorb-label
Create a label for organizing syncs (buy-side, portfolio, watchlist).
synorb-labels
List your custom labels.

Help & Workflow Tools

Onboarding and guided workflows. These tools surface prompts and resources for MCP clients that don't support the prompts/resources protocol.

synorb-guide
Quick start guide — content types, key filters, all 12 domains, and available workflow prompts. Call this first if you're unsure which tool to use.
synorb-prompts
9 pre-built workflow prompts with step-by-step tool instructions. Call with no arguments to list all, or pass a name to get a specific prompt.
synorb-prompts(name='morning-briefing') — or synorb-prompts(name='competitor-watch:Google')
ParamTypeRequired
namestringno — omit to list all, or 'morning-briefing', 'competitor-watch:Google', 'policy-tracker:tariffs'

Prompt Templates

Pre-built workflows — also available via the synorb-prompts tool above.

morning-briefing
Executive overnight briefing of top stories.
central-bank-watch
Fed, ECB, and global monetary policy update for fixed income analysts.
earnings-roundup
Latest earnings results, guidance, and management commentary.
research-briefing
What are banks and asset managers publishing? Goldman, Bridgewater, Vanguard.
podcast-recap
Best business podcast episodes this week. Bloomberg, All-In, Lex Fridman.
vc-landscape
What are top VCs writing about? Sequoia, a16z, Bessemer.
technology-watch
What's happening in tech? Engineering blogs, AI news, tech leaders.
competitor-watch(company)
Track a specific company's blog, press, and mentions.
policy-tracker(topic)
Think tank research on a specific topic. Brookings, CSIS, RAND.

Try Synorb Live

Paste your Synorb API key, API secret, and LLM API key, pick a provider, hit Connect — then ask anything about your streams.

Enter your Synorb API key, secret, and LLM API key.
09

WebSocket

Real-time firehose. Platform plans only. Manifests pushed as they arrive.

Connect & Authenticate

Connect to wss://ws.synorb.com. Send an auth message within 30 seconds or the connection closes.

# Token auth { "type": "auth", "token": "YOUR_TOKEN" } # Or API key auth { "type": "auth", "api_key": "KEY_ID", "secret": "SECRET" } { "type": "auth_ok", "org_id": 42, "org_name": "Acme Corp", "plan": "platform", "available": 3, "connected_at": "2026-03-04T14:29:58.000Z" }

Subscribe

Filter by stream IDs, domains, or tag types. All filters are OR — a manifest matching any filter is delivered. Update subscriptions anytime by sending a new subscribe message.

{ "type": "subscribe", "streams": ["17723038993540102"], "domains": ["economics-business-work"], "tag_types": ["organization"] } { "type": "subscribed", "streams": ["17723038993540102"], "domains": ["economics-business-work"], "tag_types": ["organization"], "subscribed_at": "2026-03-04T14:30:00.000Z" } # Manifests pushed as they arrive { "type": "manifest", "stream_id": "17723038993540102", "manifest_id": "1772434238663730227", "home_domain": "society-law-government", "data": { ... }, "timestamp": "2026-03-04T14:30:01.000Z" }

Message Types

Client sendsServer respondsDescription
authauth_ok / auth_errorAuthenticate (required first)
subscribesubscribedSet stream/domain/tag_type filters
unsubscribeunsubscribedRemove specific streams
pingpongHeartbeat
statusstatusConnection info + subscription state
manifestPushed when a manifest matches your filters

Subscription Filters

FilterTypeDescription
streamsint[]Match by stream ID
domainsstring[]Match by home domain (e.g. "economics-business-work")
tag_typesstring[]Match by tag type (person, organization, place, data)

Contact us to enable WebSocket access.

10

S3 Export

Historical backfill from S3 archives. API and MCP serve the live window: the current calendar month plus the previous three full months. As each month ages out, it rolls into S3 archive storage.

GET /backfill/grants
List your available historical backfill export grants.
POST /backfill/{grant_id}/download
Generate a presigned S3 URL. Valid for 7 days.
POST /export/trigger
Trigger a historical backfill export for a stream and date range.
ParamTypeDescription
stream_idintTarget stream
date_fromdateStart date
date_todateEnd date

S3 Structure

exports/streams/{stream_id}/2026-01/ records.jsonl signals.jsonl briefs.jsonl exports/streams/{stream_id}/2026-02/ records.jsonl signals.jsonl briefs.jsonl
11

Data Model

Signals

Atomic claims extracted from content. 15-50 per record. Each has a type, confidence level, and evidence classification.

Types: statement data event forecast analysis

Confidence: stated implied inferred measured

Evidence: direct_quote paraphrase derived observed

Featured claims are linked to brief key points via key_point_index.

Briefs

Structured narratives for reasoning systems delivering information to human operators. Headline, summary, body, sentiment, significance score, and reading time.

Records

Source content with full provenance — source URL, publication date, author, content type, and metadata. Enterprise plans only.

Source Types

Every source is classified as one of three types:

person — an individual (founder, researcher, executive).

organization — a company, publication, government body, or institution.

data — a statistical or data feed (indices, filings, datasets).

Media Formats

Every record carries a media format describing the original medium:

text — articles, blog posts, essays, reports, press releases, white papers.

audio — podcasts, earnings calls, conference talks, radio interviews.

video — YouTube, keynotes, TV interviews, webinars, demos.

social — tweets/X posts, threads, short-form social content.

data — statistical releases, datasets, indices, API data feeds.

Source Channels

Each stream is fed by one or more source channels. A source channel represents a specific content feed — e.g. "OpenAI Blog", "Federal Reserve Bank of St. Louis", "Jim Fan on X".

Every manifest includes source_channel_ids (list) and source_channel_display in the source object. Use source_channel_ids or exact source_channel_names as query parameters to filter manifests by channel; examples include source_channel_names=['8k'], source_channel_names=['earnings-call-transcripts'], and policy/court slugs such as federal-court-opinions. If requested names do not resolve, MCP fails closed with zero Manifests and no quota usage instead of broadening.

Streams

Filtered views over content. Three types:

Discovery — structured summaries from web content (news, blogs, reports).

Narrative — machine-written narratives from numerical and statistical data.

Research — analysis reports written for machine consumption.

Securities Identifiers

Synorb covers ~1,300 public companies as streams. For each public company, the identifiers live on the company tag (organization), not the stream: ticker, ISIN, CIK (SEC central index key), and FIGI. A company can carry more than one ticker/ISIN (share classes and listings — e.g. Alphabet's GOOGL and GOOG).

The /streams and /streams/{id} responses surface these on each stream object as tickers (array), isins (array), and primary_url (the company's canonical URL, e.g. investor-relations home). The isins array is the company's equity share-class ISIN(s) — common / ordinary shares and additional share classes (e.g. Alphabet GOOGL/GOOG, Berkshire BRK.A/BRK.B); multiple values are normal. Bond / debt ISINs are excluded. Non-public-company streams return empty arrays and null — never an error.

Filter the catalog and manifests by these identifiers with the ticker and isin query params (REST) or the ticker / isin arguments on MCP synorb-stream-search and synorb-manifests. Matching is exact and case-insensitive. The isin filter matches any ISIN on file (including debt), even though the isins response field lists only equity share classes. Use the exact identifier rather than a free-text ticker search: short or stopword-like tickers (e.g. ON, IT) are unreliable as free text but resolve cleanly through the identifier filter. The catalog ticker filter is distinct from the SEC filing-context sec_ticker (which reflects who a given filing names).

SEC Filings

Each public-company stream carries a per-company SEC filings feed sourced directly from EDGAR — 8-K (material events), 10-Q (quarterly report), and 10-K (annual report) — processed into full Signal + Brief manifests like any other source.

Pull a company's filings by selecting its SEC source channel (source_channel_names) and/or by filtering on form type with the sec_form_type query param (REST) or argument (MCP). sec_form_type is comma-separated, exact, and case-insensitive — e.g. sec_form_type=8-K,10-K. It reads the sec_form_type recorded on each filing. Combine with ticker to scope to one company, e.g. ?ticker=MSFT&sec_form_type=8-K.

Domains

Every stream has one home domain and three cross-domains. 12 canonical domains:

12

Full Glossary

Every term in the Synorb system. Click a category to expand.

TermDefinition
ManifestA content package containing a Signal, Brief, and Record. The unit Synorb delivers to you.
SignalStructured claims extraction for reasoning systems completing workflows. body contains: claims (array), entity_details (array of {tag_type, tag_value} objects), topics (array of strings), domain_classification (object). Available on all plans.
BriefStructured narrative for reasoning systems delivering information to human operators. body contains: key_insights (array of strings), notable_quotes (array of objects), entity_details (array of {tag_type, tag_value} objects), topics (array of strings), domain_classification (object), sentiment, significance. Available on all plans. Audio manifests include 4 additional fields: actionable_takeaways, guest_details (name/title/affiliation), cross_promotion, cultural_relevance.
RecordSource content enriched with entity tags, topics, and domain classification in extra_data.extraction. Enterprise plans only.
ClaimAtomic assertion extracted from a record. 15–50 per record. The fundamental unit of Synorb intelligence.
SourceA tracked publication. Each source has a category and crawl frequency.
TermDefinition
StreamFiltered delivery view. Organizes content by theme. Three types: Discovery, Narrative, Research.
DigestGrouping of manifests. Synorb Digests (pre-curated, included on Enterprise) and User Digests (org-built, included in plan).
TermDefinition
TagA resolved entity — person, organization, place, or data source. Tags link claims across records.
Tag TypeOne of five: person, organization, place, topic, data.
Tag AliasAlternate name for a tag. "Elon Musk" and "Musk" resolve to the same tag.
TopicA curated thematic category from Synorb’s topic taxonomy. Topics are organized by domain and used to filter streams by subject area.
Topic DomainTop-level grouping for topics. Maps to the 12 canonical domains (e.g. economics-business-work, engineering-technology).
TermDefinition
claim_typestatement data event forecast analysis
confidencestated (explicitly said) · implied (strongly suggested) · inferred (derived by reasoning) · measured (numerical data)
evidencedirect_quote · paraphrase · derived · observed
featuredBoolean. Featured claims are linked to brief key points via key_point_index.
arts-culture-entertainment
economics-business-work
engineering-technology
everyday-life-practical-knowledge
health-medicine
people-biography-history
language-literature
life-environment
physical-sciences-mathematics
places-geography
society-law-government
universe-earth
TierScheduleAvailable On
ContinuousContent available as it's produced. No batching delay.Enterprise
DailyPrevious day's content delivered at 0 UTC. Today's content appears tomorrow.Individual, Professional, Startup
WeeklyPrevious week's content delivered Monday at 0 UTC. This week's content appears next Monday.Individual, Professional, Startup
MonthlyPrevious month's content delivered on the 1st at 0 UTC. This month's content appears on the 1st of next month.Starter, Individual, Professional, Startup

Delivery cadence is selectable — choose the tier that fits your workflow. All plans share the same 4-month data window; cadence controls freshness, not depth. Starter plan is monthly only.

TermDefinition
source_typeperson (individual) · organization (company, government) · data (statistical feed)
media_formattext · audio · video · social · data · transcript
availableFormats included in your plan. All plans include signal + brief. Enterprise adds record (structured enriched objects).
TermDefinition
DiscoveryStructured summaries from human web content — news, blogs, podcasts, reports.
NarrativeMachine-written narratives generated from numerical and statistical data sources.
ResearchAnalysis reports and research written specifically for machine consumption.
TermDefinition
significance0–100 score. How important the content is within its domain. Used for ranking and filtering.
sentiment-1.0 to 1.0. Directional sentiment of the overall content.
13

Plans & Limits

STREAMS PRODUCT Starter $0 1,000 manifests/mo Core MCP + REST API. Signals + Briefs. Daily Batch. Individual $20/mo or $192/yr 10,000 manifests/mo Core MCP + REST API. Signals + Briefs. Daily Batch. Professional $100/mo or $960/yr 100,000 manifests/mo Core MCP + REST API + Webhooks. Signals + Briefs. Daily Batch. Startup $500/mo or $4,800/yr 1,000,000 manifests/mo Core MCP + Advanced MCP + REST API + Digest Builder + Webhooks + S3 archive exports. Signals + Briefs. Daily Batch. Enterprise Contact us Custom Core MCP + Advanced MCP + REST API + Digest Builder + Synorb Digests + Webhooks + Sync Ontology + Beacons + Support. Signals + Briefs + Records. Continuous Delivery. MANIFEST ACCESS Signal Structured claims extraction All plans Brief Structured narrative summary All plans Record Structured content objects, enriched with entity tags and topics Enterprise only FEATURE GATING MCP Server All plans REST API All plans Webhooks Professional | Startup | Enterprise Digest Builder Startup | Enterprise Synorb Digests Enterprise (included) S3 Export Startup | Enterprise Records Enterprise only Beacons Starter:10 | Individual:50 | Professional:250 | Startup:1000 | Enterprise:unlimited Sync Ontology Enterprise only Support Enterprise only OVERAGE Starter: hard cap. Individual | Professional | Startup: $0.001/manifest. Enterprise: negotiated. DELIVERY MODEL Manifests are produced continuously and delivered as follows. Daily Batch Batch at 0 UTC. Last full calendar day's manifests available today. Continuous Real-time. Manifests available as produced. Starter | Individual | Professional | Startup: Daily Batch. Enterprise: Continuous Delivery. PAYMENT Starter: none. Individual | Professional: Credit Card. Startup: ACH. Enterprise: Wire / ACH / Brex invoice. Platform (Firehose) Contact us Custom All channels + WebSocket. Sync Ontology. Signals + Briefs + Records.

Quotas reset monthly. Starter plans have a hard cap. Paid plans allow overage at per-manifest rates. Webhooks require Professional plan or higher. Beacons are available on every plan with per-plan caps (Starter 10, Individual 50, Professional 250, Startup 1,000, Enterprise unlimited). MCP content usage is primarily governed by monthly Manifest quota, per-call page/target caps, date-window/access gates, and relevance controls. synorb-profile, synorb-stream-search, synorb-catalog, synorb-details, synorb-configure-beacon, synorb-save-beacon, synorb-beacons, and synorb-archive-beacon are zero-quota; synorb-manifests bills only returned on-topic Manifests. S3 archive exports are available for historical backfills beyond the live API and MCP window.

Every response includes usage headers: X-Synorb-Quota-Limit, X-Synorb-Quota-Used, X-Synorb-Quota-Remaining, X-Synorb-Period, X-Synorb-Content-Level.

14

Synorb Digests Included at no additional charge on Enterprise

Pre-curated intelligence bundles built by Synorb. Each digest groups streams around a theme and is included with Enterprise plans. Different from the Digest Builder, which lets you build your own on Startup | Enterprise plans.

1. Browse the catalog

The public catalog is open — no auth required.

GET /api/digests { "digests": [ { "name": "Federal Reserve Watch", "slug": "federal-reserve-watch", "stream_count": 12, "manifests_last30d": 72 } ]}

2. Add (Enterprise included)

Enterprise plans can add Synorb Digests directly. No billing, no clones — the canonical digest is shared read-only. Changes flow through automatically.

POST /digests/synorb/{id}/add { "status": "added", "digest_id": 5 } # Remove DELETE /digests/synorb/{id}/remove { "status": "removed", "digest_id": 5 } # List added Synorb Digests GET /digests/synorb { "digests": [{ "digest_type": "synorb", "access_type": "included" }] }

3. Fetch manifests

Once added, pull manifests via REST API or MCP — same signal + brief structure as stream manifests.

# REST API GET /digests/{id}/manifests?published_date_from=2026-03-01&published_date_to=2026-03-09 Same manifest structure: source + signal + brief (record at Enterprise). # MCP synorb-digests List your added digests synorb-digest-manifests Fetch manifests from a digest

Give your agents the context they deserve.

Get Keys