Skip to main content
Maintain a local copy of your data without fetching every table on each run. The tables are reloaded in full once a day, so there is no row-level delta: the unit of change is the table. Ask /changes which tables were reloaded since your last run, then fetch exactly those tables again, completely.
Do not store next_cursor between runs. After a reload, rows can change, disappear or shift position, so resuming at an old cursor silently keeps stale data.
1

Find the reloaded tables

Call /changes with the since value from your last run. Use the highest last_sync_at from that run’s response; on the very first run, use a timestamp up to 120 days back. Each category table entry carries category and api_table_name; fetch it from /v1/{category}/{api_table_name}.
Tables missing from the response have not been reloaded. Skip them.
2

Fetch each changed table in full

Request the first page without cursor. The rows are in data; next_cursor in the response body points to the next page. Pass it unchanged as the cursor parameter and repeat until next_cursor is null. The cursor only pages through a single run.
3

Replace the local table

Once all pages are in, replace your local copy of that table rather than appending, so deleted rows disappear as well. Then store the highest last_sync_at as the since value for the next run.
4

Full Python example

A complete script that re-fetches every table reloaded since the last run. Requires the requests package.
sync_changed_tables.py