# Events feed

> Poll Xholic events with GET /v1/events, xholic events updates or get_updates on MCP, with a cursor so nothing is missed or repeated.

Source: https://docs.xholic.ai/webhooks/events-feed/

The events feed has the same [events](/webhooks/events/) as webhooks, for code that would rather poll, and for your AI at the start of a chat.

| Surface | Call |
| --- | --- |
| REST | `GET https://api.xholic.ai/v1/events` (also `GET /v1/events/updates`) |
| MCP | `get_updates` |
| CLI | `xholic events updates` |

```bash
curl -G https://api.xholic.ai/v1/events \
  -H "Authorization: Bearer $XHOLIC_API_KEY" \
  --data-urlencode "limit=50"
```

```json
{
  "ok": true,
  "summary": "Since the last check: 2 post.published, 1 lead.found.",
  "data": {
    "events": [
      {
        "id": "post.published:…",
        "type": "post.published",
        "occurredAt": "2026-10-28T14:00:03.000Z",
        "account": { "userId": "…", "handle": "yourhandle" },
        "data": { "post_id": "…", "tweet_url": "https://x.com/yourhandle/status/…" }
      }
    ],
    "cursor": "18342",
    "hasMore": false
  }
}
```

## Cursors

- Each connection has its own position in the feed. Call without `since` and you get what happened since **this connection** last looked; the first call returns the last 7 days.
- Each response returns a `cursor`. Pass it as `since` to read from an exact point, for example when several workers share one key.
- `limit` is 1 to 100 (default 50). When `hasMore` is `true`, call again right away for the rest.
- Events covers every X account the connection can use; `account` says which one each event is about.

The feed is read-only and free, within the `read` [rate limit](/api/rate-limits/). Polling every minute or so is plenty: events are only written when Xholic's own syncs see something new.
