Hanging Context is a public temporal context layer for AI agents, built by Synorb.
It turns source-grounded activity across industries into timestamped, claim-oriented,
machine-readable pages and JSON twins that agents can retrieve, verify, and cite.
No API keys, no rate limits, no auth. Start with
/agents.json:
it points to the full public aggregate twins, panel JSON, render specs,
stream catalogs, samples, media, and public-safe manifest bundles. Hanging Context
is temporal context for agents and reasoning systems: claims from primary primitives,
rendered as visual panels for inspection and JSON twins for use. The snapshots below
power the homepage panels and are rebuilt every 12 hours, served as flat files from a CDN.
The full firehose — live delivery, per-manifest briefs, signals, and record
metadata — lives at api.synorb.com under a paid plan.
What's here is the tip.
These are the public endpoints agents can discover from the one-shot contract.
Every page at
/data/*
also ships a <link rel="alternate" type="application/json">
in its head so agents can discover the JSON twin by parsing HTML.
as_of, windows, schema, panel JSON, media, stream catalog/sample URLs, manifest bundles, cache guidance, attribution, and auth/rate-limit posture.
/data/.
schema_version — branch on this.
render_spec so an agent can recreate the visual panel without downloading the PNG/GIF/MP4.
Cite Hanging Context x Synorb when using the public context layer. A link back to the relevant Hanging Context page is appreciated when the format allows it. For high-stakes use, verify important claims against primary sources where available. See citation guidance, methodology, and limitations.
{
"page_url": "https://hangingcontext.com/questions/example/",
"json_twin_url": "https://hangingcontext.com/data/questions/example.json",
"source_url": "https://original-source.example/article",
"claim_id": "when available",
"manifest_id": "when available",
"stream_id": "when available",
"published_timestamp": "source timestamp when available",
"as_of": "Hanging Context rebuild timestamp"
}
Snapshots are intentionally flat. No nested pagination, no cursor tokens. If it doesn't fit in one JSON, the window is too wide.
Here's a trimmed skeleton of /data/windows/24h.json
— the same shape applies to the 168-hour snapshot (7d.json):
{
"schema_version": 1,
"window": "24h",
"window_label": "Last 24 hours",
"window_hours": 24,
"window_coverage": "rolling",
"range": { "start": "2026-04-21T...", "end": "2026-04-22T..." },
"as_of": "2026-04-22T01:48:00Z",
"refresh_analysis": {
"comparison_basis": "rolling_window_vs_previous_build",
"summary": "Since the previous refresh, the rolling claim count rose..."
},
"totals": {
"claims": 20464,
"manifests": 2564,
"records": 2564,
"sources": 100,
"entities": 0,
"domains": 9
},
"claims_by_day": [
{ "day": "2026-04-21T01:00:00Z", "claims": 847 },
{ "day": "2026-04-21T02:00:00Z", "claims": 912 }
],
"top_sources": [
{ "source_name": "codename-one-engineering-blog",
"claim_count": 6288, "record_count": 759, "manifest_count": 759 }
],
"top_entities": [
{ "tag_id": 123, "name": "Anthropic", "type": "organization",
"claim_count": 412, "slug": "anthropic" }
],
"claim_types": { "publication": 42100, "announcement": 38211 },
"evidence_types": { "paraphrase": 13294, "direct_quote": 6842 },
"confidence_levels": { "stated": 19285, "implied": 652 },
"sentiment_levels": { "neutral": 11483, "positive": 6021, "mixed": 1884 },
"domains": { "engineering-technology": 14897 },
"tag_graph": {
"nodes": [ { "id": 1, "name": "LLM", "type": "topic", "weight": 420 } ],
"edges": [ { "a": 1, "b": 2, "weight": 87 } ]
},
"highlights": [
{ "claim_id": 123,
"text": "Anthropic released Claude Opus 4.7 with a 1M-token context window.",
"source": "anthropic-news",
"source_url": "https://anthropic.com/...",
"published_date": "2026-04-21",
"evidence_type": "direct_quote",
"confidence": "stated",
"domain": "engineering-technology",
"entities": [ { "name": "Anthropic", "type": "organization" } ]
}
],
"verified_samples": [
{ "claim_id": 456,
"text": "OpenAI said developers can now inspect per-run retrieval traces in the console.",
"source": "openai-news",
"source_display": "OpenAI",
"source_url": "https://openai.com/...",
"source_channel_display": "OpenAI",
"published_date": "2026-04-22T00:45:00Z",
"verified_at": "2026-04-22T01:12:00Z",
"sentiment": "positive",
"confidence": "stated",
"evidence_type": "direct_quote",
"media_type": "text",
"claim_type": "publication"
}
],
"samples": [ /* 60 recent claims, any confidence */ ]
}
Poll hourly and diff — or parse the as_of field to detect fresh builds:
import urllib.request, json, time
def pull():
with urllib.request.urlopen("https://hangingcontext.com/agents.json") as r:
contract = json.load(r)
with urllib.request.urlopen(contract["latest"]["full"]) as r:
return json.load(r)
last_as_of = None
while True:
snap = pull()
if snap["as_of"] != last_as_of:
print(f"fresh: {snap['totals']['claims']} claims, {snap['totals']['sources']} sources")
for h in snap["highlights"][:3]:
print(f" - {h['text']} ({h['source']})")
last_as_of = snap["as_of"]
time.sleep(3600)
as_of field is authoritative. Live firehose lives at api.synorb.com.schema_version=1. Renames or semantic changes bump the version. Never a silent break.tag_id, claim_id, stream_id are stable forever. You can join these to other feeds under the same IDs.Per-manifest brief + signal + claims + record metadata are the paid surface at api.synorb.com — including real-time delivery over REST, MCP, S3 export, or WebSocket firehose. Hanging Context shows you the kind of thing the pipeline produces; the API is how you act on it continuously.