Skip to main content
GET
If your app stores Country State City data in its own database, a full download is wasteful when only a few places changed. The change feed returns the countries, states, and cities that were added, removed, or updated so you can apply only those changes.
Available on Professional and Business plans. Returns 403 on Community, Starter, Supporter, and Legacy plans. Compare plans to add the change feed to your API key.

When to use it

Use the feed to keep a local search index, checkout form, analytics database, or cached copy up to date. Every change has a stable change_id, the affected place_id, and the data_version that produced it. Changes are available for 90 days. Run your sync regularly and save the change_id values you have applied so retrying a page cannot create duplicates.

Change types

When several fields change in one release, the record has one main change_type, but old_values and new_values include every changed field.

Response

The API returns changes from oldest to newest.
200 - Renamed city
old_values and new_values contain only fields allowed for your API key. The endpoint is not cached, so it does not return ETag or X-Cache.

Read every page safely

The first request fixes the result set. Later pages do not suddenly include a release published while you are syncing. After the last page, start a new request to collect newer changes. For page two and later, send the token by itself. Do not change the original filters.
JavaScript

Recover from errors

If start_date is older than the retained data, use details.earliestAvailableDate to restart from the oldest available change:
400 - Start date is too old
If a token expires, is changed, or is invalid, start again with start_date and no token. Reusing saved change_id values prevents duplicate work. If your sync has been offline for more than 90 days, download a fresh full dataset before continuing. Lower plans receive a plan-gate response:
403 - Professional plan required

Start syncing changes

Compare API plans

Choose Professional or Business to keep your database current with small incremental requests.

Get Data Version

Check which dataset release your API responses use.

Authorizations

X-CSCAPI-KEY
string
header
required

API key for authentication. Get your free key at app.countrystatecity.in.

Query Parameters

start_date
string<date-time>

Return changes at or after this ISO 8601 timestamp. A date older than the earliest retained change returns 400 with details.earliestAvailableDate.

Example:

"2026-08-01T00:00:00Z"

place_type
enum<string>

Return changes for one place type

Available options:
country,
state,
city
Example:

"city"

country_code
string

Return changes for a country and its states and cities. Uses an ISO 3166-1 alpha-2 code.

Required string length: 2
Pattern: ^[A-Za-z]{2}$
Example:

"IN"

change_type
enum<string>

Return one kind of change

Available options:
added,
removed,
renamed,
place_group_changed,
parent_changed,
coordinates_changed,
other_fields_changed
Example:

"renamed"

limit
integer
default:50

Maximum records per page (1–100)

Required range: 1 <= x <= 100
Example:

50

next_page_token
string

Opaque cursor returned by the previous page. It expires after 24 hours. Omit the original filters, or resend all of them unchanged.

Required string length: 1 - 4096
Pattern: ^[A-Za-z0-9_-]+$

Response

A page from the fixed change-feed snapshot. This endpoint is not cached and does not return Cache-Control, ETag, or X-Cache.

results
object[]
required
next_page_token
string | null
required

Opaque cursor for the next page, or null after the last page.

Maximum string length: 4096
Pattern: ^[A-Za-z0-9_-]+$