---
title: "List cursor-based Item changes for delta sync"
method: GET
path: "/api/items/changes"
tags: ["Items"]
---

# List cursor-based Item changes for delta sync

`GET /api/items/changes`

## Request

- Base URL: `https://keep.md`
- URL: `https://keep.md/api/items/changes`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `keep.session_token`

List cursor-based Item changes for delta sync.

## Query parameters

- `cursor` string
- `updated_since` union
  - integer
  - string, date-time
- `tags` string
- `collection` string
- `include` 'content'
- `limit` integer

## Headers

- `Keep-API-Version` string

## Response `200`

Item changes

- object
  - `events` ItemChangeEvent[], required
    - `id` string, required
    - `type` 'item.created' | 'item.updated' | 'item.deleted' | 'item.tagged' | 'item.untagged' | 'item.collection_added' | 'item.collection_removed' | 'item.removed_from_scope' | 'webhook.test', required
    - `originalType` 'item.created' | 'item.updated' | 'item.deleted' | 'item.tagged' | 'item.untagged' | 'item.collection_added' | 'item.collection_removed' | 'item.removed_from_scope' | 'webhook.test'
    - `changedAt` integer, required
    - `itemId` string, required
    - `beforeScope` ItemScopeSnapshot
      - `status` string
      - `tagSlugs` string[]
      - `collectionIds` string[]
    - `afterScope` ItemScopeSnapshot
      - `status` string
      - `tagSlugs` string[]
      - `collectionIds` string[]
    - `payload` object, nullable
    - `item` Item
      - `id` string, required
      - `url` string, uri, required
      - `title` string
      - `favicon` string
      - `status` string, required
      - `createdAt` integer, required
      - `lastSeenAt` integer
      - `updatedAt` integer
      - `timesAdded` integer
      - `notes` string
      - `tags` string[]
      - `tagSlugs` string[]
      - `collectionId` string, nullable
      - `collectionIds` string[]
      - `collectionName` string
      - `collectionSlug` string
      - `summaryMarkdown` string
      - `contentAvailable` boolean
      - `contentMarkdown` string
      - `content` ItemContent
        - `schemaVersion` 2, required
        - `meta` object
        - `items` object, required
        - `media` MediaRef[]
          - `id` string, required
          - `kind` 'image', required
          - `role` 'lead' | 'inline' | 'gallery' | 'thumbnail' | 'attachment', required
          - `url` string, uri, required
          - `order` integer, required
          - `sourceUrl` string, uri
          - `alt` string
          - `width` integer
          - `height` integer
          - `mimeType` string
          - `byteSize` integer
          - `contentHash` string
      - `highlights` Highlight[]
        - `id` string, required
        - `itemId` string, required
        - `text` string, required
        - `prefix` string
        - `suffix` string
        - `note` string, nullable
        - `startOffset` integer
        - `endOffset` integer
        - `createdAt` integer, required
        - `updatedAt` integer, required
      - `connectedNotes` object[]
      - `processedAt` integer
  - `nextCursor` string, required
  - `hasMore` boolean, required
  - `limit` integer, required

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: The credential lacks access or the plan does not include the feature

---

[API](https://skmtc.dev/keep/apis/keep-api.md) · [All operations](https://skmtc.dev/keep/apis/keep-api/llms.txt) · [OpenAPI document](https://skmtc.dev/keep/apis/keep-api/revisions/a338a455bd0f?raw)
