> This page is for version v1.0.1 (default).
> For other versions, use one of these documentation indexes:
> - v1.0.1 (default): https://docs.kinetk.ai/v-1-0-1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.kinetk.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.kinetk.ai/_mcp/server.

# Sync & Freshness

> How fresh each part of the data is, how to check it, and which time windows each call accepts.

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

| Data                 | Refreshed                        | Used by                                         |
| -------------------- | -------------------------------- | ----------------------------------------------- |
| Content              | Hourly                           | `POST /search` and every job                    |
| Narrative map, `7d`  | Every 6 hours                    | `GET /narratives/*`                             |
| Narrative map, `30d` | Daily                            | `GET /narratives/*`                             |
| Pattern map          | Weekly, topped up every 48 hours | `GET /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`

```http
GET /health
```

#### cURL

```bash
curl -H "x-api-key: $API_KEY" "$API_BASE/health"
```

```json
{
  "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.

| Call                                           | Windows                          | Default  |
| ---------------------------------------------- | -------------------------------- | -------- |
| `POST /search`                                 | `7d`, `30d`, `90d`, `all`        | `30d`    |
| `insights`, `records` jobs                     | `7d`, `30d`, `90d`, `all`        | required |
| `stats` job                                    | `24h`, `7d`, `30d`, `90d`, `all` | `all`    |
| `GET /narratives/*`                            | `7d`, `30d`                      | `7d`     |
| `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`.