/changes which tables were reloaded since your last run, then fetch exactly those tables again, completely.
1
Find the reloaded tables
Call Tables missing from the response have not been reloaded. Skip them.
/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}.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