Skip to content
GET/v1/changesall plans

List changes

Returns every public-field change to a listing since since, oldest first. To sync incrementally, keep the last version_id you saw and pass it as cursor. Removals (status leaving published, is_active becoming false, or a hard delete) appear here even though the resource itself returns 404.

Show more

Each item exposes only the change time, a closed change kind, and allowlisted public field names. Values, actors, pipeline attributes, and rows that touch only internal fields are never returned. Read freshness from source.crawled_at (include=source) on the resource.

Sync is in a pilot; the change feed needs a Sync plan.

Try this requestRun it with sample data, no key needed. Paste a key to run it live.
Example request
curl -sS \
  -H "X-API-Key: $TAILEND_API_KEY" \
  "https://api.tailend.dev/v1/changes?since=2026-10-01T00%3A00%3A00Z"
Example response · 200
{
  "data": [
    {
      "version_id": 18231,
      "listing_id": "2f3c9d4e-3d2b-4b7d-9a3e-1b2c3d4e5f60",
      "slug": "storytime-in-the-park-2026-09-12",
      "type": "event",
      "metro": "philadelphia",
      "changed_at": "2026-09-10T06:12:05Z",
      "kind": "date_changed",
      "fields": [
        "starts_at"
      ]
    }
  ],
  "meta": {
    "limit": 1,
    "count": 1,
    "has_more": false
  }
}

Try any request with sample data, no key needed. Available on every plan.

Return changes with changed_at strictly after this instant.

Optional parameters (4)

Restrict to one metro slug (must be in the key's scope).

Restrict to one listing type.

This is not an opaque cursor: pass back the decimal string returned by meta.next_cursor, and the feed resumes strictly after it.

Ctrl Enter to send