Documentation

Keely for developers

Events

The same events the webhooks deliver, kept 30 days, for an app that polls or replays what a webhook missed.

Updated

On this page
  1. GET /v1/events

GET /v1/events

Scope
any; only the events in your scopes, plus the connection.* and test.ping addressed to your app
Query
since, the number of the last event you saw (123 for evt_123; 0, the default, for everything kept); limit, 1 to 500

The events Keely wrote for this person in the last 30 days, the same ones the webhooks deliver: what changed, typed, with links to fetch it, and never a number from a summary. For an app that polls, or to replay what a webhook missed.

Events come in order of id; when has_more is true, call again with since=next. The event types say what each data holds. /v1/changes and /v1/events answer different questions: changes are rows by their updated_at, at any age, for catching up; events are typed, buffered and kept 30 days, for reacting.

Request
curl "https://meetkeely.com/api/v1/events?since=122" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Response
{
  "since": 122,
  "next": 124,
  "has_more": false,
  "events": [
    { "id": "evt_123", "type": "night.created", "person_id": "0b8f1a52-7e3c-4d0a-9c1b-2e6f3a4b5c6d",
      "occurred_at": "2026-09-27T06:30:00Z", "data": { "date": "2026-09-27", "recovery_status": "scored" },
      "links": { "day": "https://meetkeely.com/api/v1/days/2026-09-27" } },
    { "id": "evt_124", "type": "day.created", "person_id": "0b8f1a52-7e3c-4d0a-9c1b-2e6f3a4b5c6d",
      "occurred_at": "2026-09-27T06:30:00Z", "data": { "date": "2026-09-27" },
      "links": { "day": "https://meetkeely.com/api/v1/days/2026-09-27" } }
  ]
}