Documentation

Synorb writes so machines can reason. Structured signals, shared taxonomies, stable IDs. 1,000+ streams of temporal intelligence.

  1. 01Quick Start
  2. 02Connecttry live
  3. 03MCP Terminaltry 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 Digests$5/mo · free on Startup+
01

Quick Start

Get your free credentials at synorb.ai/credentials. Trial credentials are emailed instantly and include 1,000 manifests.

Connect your agent

Add the MCP server to your editor config. Replace YOUR_TOKEN with the token from your email.

Claude Code / Cursor
{ "mcpServers": { "synorb": { "url": "https://mcp.synorb.ai/sse?token=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.ai/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 MCP terminal, and webhook testing across the entire docs page.

All three from your credentials email.

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

Get free credentials →

Connect your coding assistant

Copy-paste setup for your editor or agent framework.

Claude Code
claude mcp add synorb \
--transport sse URL
Cursor / Windsurf
{ "mcpServers": {
  "synorb": { "url": "..." }
} }
Codex / Copilot
curl -s synorb.ai/connect?format=md
Lovable / Bolt / v0
curl -s synorb.ai/connect?format=md
03

MCP Terminal

Connected above with an LLM key? Ask anything about your streams. 17 tools, live responses.

> What streams cover AI infrastructure?
calling synorb-stream-catalog { home_domain: "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-stream-signals { stream_id: 17723038993547201, page_size: 3 }
3 signals from nvidia-ecosystem:
  1. Nvidia reported Q4 revenue of $39.3B, data center revenue up 93% YoY
    evidence: direct_quote · confidence: measured · type: disclosure
  2. TSMC confirmed 3nm capacity expansion for Blackwell architecture
    evidence: paraphrase · confidence: stated · type: announcement

17 tools — collapsed reference

All tools visible to all users. Content gated by plan at execution time.

synorb-stream-catalog
List all streams with metadata, volume metrics, and available filters.
synorb-stream-details
Filters, schema, and allowed values for a specific stream.
synorb-stream-signals
Structured claims for reasoning systems completing workflows.
Example: "Get signals from the federal-reserve stream this week"
synorb-stream-briefs
Structured narratives for reasoning systems delivering information to human operators.
synorb-stream-records
Full canonical JSON payloads with tags, topics, provenance, and lineage. Enterprise only.
synorb-stream-manifests
Signal + Brief on all plans. Record included at Enterprise.
synorb-account
Account info, plan, quota, access level, and available endpoints.
synorb-digests
List your digests — both Synorb Digests (subscribed) and User Digests (org-built).
synorb-stream-digest
Fetch manifests from any digest across all its streams.
synorb-sync-list
List syncs with optional filters by object type, tag type, or label.
synorb-label-create
Create a custom label for organizing syncs.
synorb-labels-list
List all custom labels for your organization.
synorb-tag-search
Fuzzy search across entity tags (people, orgs, places, data sources).
synorb-topics-browse
Browse topic hierarchy with optional search filter.
synorb-related-tags
Find tags co-occurring with a given tag in recent manifests.
synorb-tag-sync
Create or update a sync between a Synorb tag and your internal identifier.
synorb-tag-unsync
Remove a sync.
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 ($5/mo). 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 and display name (e.g. "Federal Reserve Bank of St. Louis"). Filter manifests by source_channel_ids.
DomainOne of 12 canonical knowledge domains. Every stream has a home domain and up to three cross-domains.
05

Authentication

Token

Append ?token=YOUR_TOKEN to the MCP server URL. For REST API calls, send an access_token header.

Key + Secret

Send api-key and secret headers with every request.

$ curl -H "api-key: a1b2c3d4-..." -H "secret: xK9#mP2..." \ https://api.synorb.ai/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.ai

Build with your coding assistant
Get free credentials
curl -s https://synorb.ai/connect

// Returns:
{
  "credentials": {
    "api_key":    "sk_live_a1b2c3d4...",
    "api_secret": "xK9#mP2$vL...",
    "mcp_token":  "eyJhbGci..."
  },
  "mcp_server": "https://mcp.synorb.ai/sse?token=..."
}
No signup form. 1,000 free manifests/month. The secret is shown only once.
Tool-specific setup instructions
Claude Code
claude mcp add synorb --transport sse https://mcp.synorb.ai/sse?token=YOUR_MCP_TOKEN
Cursor / Windsurf / ChatGPT Desktop
Add to MCP config:
{ "mcpServers": { "synorb": { "url": "https://mcp.synorb.ai/sse?token=YOUR_MCP_TOKEN" } } }
REST API (any language)
curl -H "api-key: YOUR_API_KEY" -H "secret: YOUR_API_SECRET" \
  https://api.synorb.ai/streams?page_size=5
Codex / Copilot / Any Agent
curl -s https://synorb.ai/connect?format=md
Any LLM chat (Claude, ChatGPT, Gemini)
curl -s https://synorb.ai/connect?format=md

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

Credentials Get Credentials → 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": "Pro Developer", "endpoint_mcp": true, "endpoint_api": true, "endpoint_s3": false, "endpoint_websocket": false, "endpoint_webhook": false, "endpoint_digests": true }, "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.ai/sse?token=YOUR_TOKEN", "docs": "https://synorb.ai/docs#mcp" } }

Streams

Most common call
curl -H "api-key: KEY" -H "secret: SEC" \ https://api.synorb.ai/streams?home_domain=engineering-technology&page_size=5
GET /streams
List all streams with volume metrics. Filter by home_domain and is_public.
ParamTypeDescription
home_domainenumFilter by canonical domain (12 values)
is_publicboolPublic streams only
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 } ], "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" } }
GET /streams/{id}/manifests
Full manifests — source + signal + brief triplets 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
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": "publication", "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": "publication", "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": "publication | announcement | disclosure | ...", "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": "publication | announcement | disclosure | remarks | data | analysis | event", "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": "publication | announcement | disclosure | remarks | data | analysis | event", "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 publication — research/report announcement — press release disclosure — filing/regulatory remarks — speech/interview data — statistic analysis — editorial insight event — occurrence
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": "publication", "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": "publication", "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 Pro Developer | 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 Pro Developer, 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.ai/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
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
pageintPage number, 0-indexed
page_sizeintResults per page, max 200

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.ai/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 Credentials →
08

MCP Server test live now ↓

One server, 17 tools. All tools are visible to all users. Content tools are gated by plan at execution time.

$ connect mcp.synorb.ai/sse 17 tools — streams, content, ontology Gated by plan: signals + briefs (all plans), records (Enterprise only), digests (Pro Developer | Startup | Enterprise)

Setup

Claude Code / Cursor / Windsurf
{ "mcpServers": { "synorb": { "url": "https://mcp.synorb.ai/sse?token=YOUR_TOKEN" } } }
ChatGPT / Other

Paste the Connector URL from your credentials page into your MCP connector settings.

Stream & Content Tools

Discover streams, fetch manifests, manage digests.

synorb-stream-catalog
List all streams with metadata, volume metrics, and available filters.
synorb-stream-details
Filters, schema, and allowed values for a specific stream.
synorb-stream-signals
Structured claims for reasoning systems completing workflows.
"Get signals from the federal-reserve stream this week"
ParamTypeRequired
stream_idintyes
published_date_fromdateno
published_date_todateno
pageintno
page_sizeintno
synorb-stream-briefs
Structured narratives for reasoning systems delivering information to human operators.
"Get briefs from the bloomberg-podcasts stream this month"
synorb-stream-records
Full canonical JSON payloads with tags, topics, provenance, and lineage. Enterprise only.
synorb-stream-manifests
Signal + Brief on all plans. Record included at Enterprise.
synorb-account
Account info, plan, quota, access level, and available endpoints.
synorb-digests
List your digests — both Synorb Digests (subscribed) and User Digests (org-built).
synorb-stream-digest
Fetch manifests from any digest (Synorb or User) across all its streams.

Ontology Tools

Search tags, manage syncs, create labels, and explore your knowledge graph.

synorb-tag-search
Fuzzy search across entity tags (people, orgs, places, data sources). Use synorb-topics-browse for topics.
synorb-topics-browse
Browse topic hierarchy with optional search filter.
synorb-related-tags
Find tags co-occurring with a given tag in recent manifests.
synorb-tag-sync
Create or update a sync between a Synorb tag and your internal identifier.
synorb-tag-unsync
Remove a sync.
synorb-sync-list
List syncs with optional filters by object type, tag type, or label.
synorb-label-create
Create a custom label for organizing syncs.
synorb-labels-list
List all custom labels for your organization.

Try MCP Live

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

Enter your Synorb token and LLM API key.
09

WebSocket

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

Connect & Authenticate

Connect to wss://ws.synorb.ai. 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

Bulk export. All three formats per stream, organized by calendar month.

GET /backfill/grants
List your available export grants.
POST /backfill/{grant_id}/download
Generate a presigned S3 URL. Valid for 7 days.
POST /export/trigger
Trigger bulk 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: publication announcement disclosure remarks data analysis event

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 as a query parameter to filter manifests by channel.

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.

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, free on Pro Developer | Startup | 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_typepublication announcement disclosure remarks data analysis event
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.Vibe Coder, Pro Developer, Startup
WeeklyPrevious week's content delivered Monday at 0 UTC. This week's content appears next Monday.Vibe Coder, Pro Developer, Startup
MonthlyPrevious month's content delivered on the 1st at 0 UTC. This month's content appears on the 1st of next month.Free, Vibe Coder, Pro Developer, 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. Free 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 Free $0 1,000 manifests/mo MCP Server + REST API. Signals + Briefs. Vibe Coder $10–$18/mo 10,000 manifests/mo MCP Server + REST API. Signals + Briefs. Pro Developer $50–$90/mo 100,000 manifests/mo MCP Server + REST API + Digest Builder + Synorb Digests. Signals + Briefs. Startup $250–$450/mo 1,000,000 manifests/mo MCP Server + REST API + Digest Builder + Synorb Digests + Webhooks + S3. Signals + Briefs. Enterprise Contact us Custom MCP Server + REST API + Digest Builder + Synorb Digests + Webhooks + Sync Ontology + Support. Signals + Briefs + Records. 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 Digest Builder Pro Developer | Startup | Enterprise Synorb Digests Pro Developer | Startup | Enterprise (free) Webhooks Startup | Enterprise S3 Export Startup | Enterprise Records Enterprise only Sync Ontology Enterprise only Support Enterprise only OVERAGE Free: hard cap. Vibe Coder | Pro Developer | Startup: $0.001/manifest. Enterprise: negotiated. REFRESH CADENCE Manifests are produced continuously but delivered in batches at 0 UTC. Monthly Batch on the 1st at 0 UTC. Last month's manifests available on the 1st. Weekly Batch on Monday at 0 UTC. Last week's manifests available Monday. Daily Batch at 0 UTC. Yesterday's manifests available today. Continuous Real-time. Manifests available as produced. Free: monthly only. Vibe Coder | Pro Developer | Startup: choose monthly, weekly, or daily. Enterprise: continuous. PAYMENT Free: none. Vibe Coder | Pro Developer: Credit Card. Startup: ACH. Enterprise: Wire. Platform (Firehose) Contact us Custom All channels + WebSocket. Sync Ontology. Signals + Briefs + Records.

Quotas reset monthly. Free plans have a hard cap. Paid plans allow overage at per-manifest rates. Backfills available as one-time purchases via S3 (up to 3 years).

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 $5/mo each — free on Startup & Enterprise

Pre-curated intelligence bundles built by Synorb. Each digest groups streams around a theme. Pay $5/mo per digest, or get them all free on Startup and Enterprise plans. 5,000 manifests/month hard cap per digest. Different from the Digest Builder, which lets you build your own on Pro Developer | 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, "price_monthly_cents": 500, "manifests_last30d": 72 } ]}

2a. Subscribe (paid)

Requires authentication. Starts a $5/mo Stripe subscription tied to your org.

POST /digests/subscribe?digest_slug=federal-reserve-watch { "subscription_id": 42, "status": "active" }

2b. Add (Startup & Enterprise — free)

Startup and Enterprise plans get all Synorb Digests free. 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 subscribed or 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 subscribed/added digests synorb-stream-digest Fetch manifests from a digest

4. Unsubscribe

POST /digests/unsubscribe?subscription_id=42 { "status": "canceled" }

Give your agents the context they deserve.

Get Credentials