---
title: "Fetch Zone Changes (deprecated)"
method: POST
path: "/database/{version}/{container}/{environment}/{database}/zones/changes"
tags: ["Zones"]
deprecated: true
---

# Fetch Zone Changes (deprecated)

`POST /database/{version}/{container}/{environment}/{database}/zones/changes`

> **Deprecated.**

Get all changed zones relative to a meta-sync token.
**Deprecated by Apple** in favor of `changes/database` (`fetchDatabaseChanges`), which returns the same "which zones changed" information. New code should use `changes/database`.

## Path parameters

- `version` string, required — Protocol version
- `container` string, required — Container ID (begins with "iCloud.")
- `environment` 'development' | 'production', required — Container environment
- `database` 'public' | 'private' | 'shared', required — Database scope

## Request body

- object
  - `metaSyncToken` string — The `metaSyncToken` returned by a previous `zones/changes` response. Omit it to fetch every zone. Verified against a live container (issue #430): this operation reads and returns `metaSyncToken`, not `syncToken`. A request sending `syncToken` is silently ignored and replays the first page. Apple's archived reference names the key `metaSyncToken` as well; only one line of its `moreComing` prose calls it `syncToken`. This is specific to `zones/changes` — `changes/database`, `changes/zone` and `records/changes` all use `syncToken`.

## Response `200`

Zone changes retrieved successfully

- ZoneChangesResponse — Response body of the deprecated `zones/changes` operation. Its token key is `metaSyncToken`: a live container returned exactly `[moreComing, metaSyncToken, zones]` at the top level, with no `syncToken` (issue #430). The other change-tracking operations (`changes/database`, `changes/zone`, `records/changes`) use `syncToken`.
  - `zones` Zone[]
    - `zoneID` ZoneID
      - `zoneName` string
      - `ownerName` string
    - `syncToken` string — The current point in the zone's change history.
    - `atomic` boolean — A Boolean value indicating whether this zone supports atomic operations.
  - `metaSyncToken` string — Identifies a point in the database's change history. Send it back as `metaSyncToken` on the next request to fetch only newer changes.
  - `moreComing` boolean

## Other responses

- `400` — Error response shared by all endpoints. The body schema is the same for every 4xx/5xx status code; the HTTP status code itself disambiguates which CloudKit failure occurred. See Apple's CloudKit Web Services Error Codes documentation for the full code → status mapping: - 400 BadRequest (BAD_REQUEST, ATOMIC_ERROR) - 401 Unauthorized (AUTHENTICATION_FAILED) - 403 Forbidden (ACCESS_DENIED) - 404 NotFound (NOT_FOUND, ZONE_NOT_FOUND) - 409 Conflict (CONFLICT, EXISTS) - 412 PreconditionFailed (VALIDATING_REFERENCE_ERROR) - 413 RequestEntityTooLarge (QUOTA_EXCEEDED) - 421 UnprocessableEntity (AUTHENTICATION_REQUIRED) - 429 TooManyRequests (THROTTLED) - 500 InternalServerError (INTERNAL_ERROR) - 503 ServiceUnavailable (TRY_AGAIN_LATER)
- `401` — Error response shared by all endpoints. The body schema is the same for every 4xx/5xx status code; the HTTP status code itself disambiguates which CloudKit failure occurred. See Apple's CloudKit Web Services Error Codes documentation for the full code → status mapping: - 400 BadRequest (BAD_REQUEST, ATOMIC_ERROR) - 401 Unauthorized (AUTHENTICATION_FAILED) - 403 Forbidden (ACCESS_DENIED) - 404 NotFound (NOT_FOUND, ZONE_NOT_FOUND) - 409 Conflict (CONFLICT, EXISTS) - 412 PreconditionFailed (VALIDATING_REFERENCE_ERROR) - 413 RequestEntityTooLarge (QUOTA_EXCEEDED) - 421 UnprocessableEntity (AUTHENTICATION_REQUIRED) - 429 TooManyRequests (THROTTLED) - 500 InternalServerError (INTERNAL_ERROR) - 503 ServiceUnavailable (TRY_AGAIN_LATER)

## Changes

> 14 revisions in range; 1 could not be searched.

- **2026-08-29** `db45a101c485` — 2 warning, 2 info
  - removed the request property `syncToken`
  - removed the optional property `syncToken` from the response with the `200` status
  - added the new optional request property `metaSyncToken`
  - added the optional property `metaSyncToken` to the response with the `200` status
- **2026-08-28** `0beaa734d18c` — 1 info
  - endpoint deprecated
- **2026-08-27** `3ea965df5f01` — 2 info
  - added the optional property `zones/items/atomic` to the response with the `200` status
  - added the optional property `zones/items/syncToken` to the response with the `200` status
- **2026-04-29** `c2b3dfb861bb` — 1 info
  - added the optional property `moreComing` to the response with the `200` status
- **2025-07-06** `a17a324ec78e` — 28 warning, 1 info
  - added the new `ACCESS_DENIED` enum value to the `serverErrorCode` response property for the response status `400`
  - added the new `ACCESS_DENIED` enum value to the `serverErrorCode` response property for the response status `401`
  - added the new `ATOMIC_ERROR` enum value to the `serverErrorCode` response property for the response status `400`
  - added the new `ATOMIC_ERROR` enum value to the `serverErrorCode` response property for the response status `401`
  - …25 more

[Full history](https://skmtc.dev/brightdigit/apis/apple-cloudkit-web-services-api/changes/database/:version/:container/:environment/:database/zones/changes/post.md)

---

[API](https://skmtc.dev/brightdigit/apis/apple-cloudkit-web-services-api.md) · [All operations](https://skmtc.dev/brightdigit/apis/apple-cloudkit-web-services-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/brightdigit/apple-cloudkit-web-services-api/revisions/db45a101c485/schema)
