Skip to navigation

Sync & Freshness

New content is ingested every hour. The narrative and pattern maps are rebuilt on a schedule on top of it.

DataRefreshedUsed by
ContentHourlyPOST /search and every job
Narrative map, 7dEvery 6 hoursGET /narratives/*
Narrative map, 30dDailyGET /narratives/*
Pattern mapWeekly, topped up every 48 hoursGET /intelligence/patterns/*, patterns jobs

Search and jobs see new posts as soon as they’re ingested. Narrative and pattern reads return the latest rebuild.

Check freshness with GET /health

GET /health
curl -H "x-api-key: $API_KEY" "$API_BASE/health"
{
"status": "ok",
"sync": { "lastRunAt": "2026-10-05T17:32:11.000Z", "minutesSinceLastRun": 24, "isStale": false },
"narratives": { "lastRunAt": "2026-10-05T12:00:03.000Z", "minutesSinceLastRun": 356, "isStale": false },
"content": { "lastMigratedAt": "2026-10-05T17:32:11.000Z", "minutesSinceMigration": 24, "isStale": false }
}
  • sync: the last content ingestion.
  • narratives: the last narrative map rebuild.
  • content: the newest content in the store.

isStale: true means that part is behind schedule. /health returns 200 when everything is fresh and 503 when something is stale or unreachable, so you can use it as an uptime check.

Time windows

window filters by publish date: 24h, 7d, 30d, 90d or all (no filter). It never changes the price.

CallWindowsDefault
POST /search7d, 30d, 90d, all30d
insights, records jobs7d, 30d, 90d, allrequired
stats job24h, 7d, 30d, 90d, allall
GET /narratives/*7d, 30d7d
patterns job, GET /intelligence/patterns/*no window—

Shorter windows return fresher, more focused results. Use all for long-running topics or when recent volume is thin. Posts with no publish date only appear under all.