Raw endpoints require a key of type
raw; reading a table (GET /v1/raw/{table_name}) additionally needs both personal data grants, personal and personal_financial, otherwise it returns 403. A transformed key gets 403 on GET /v1/raw/{table_name} and an empty list from GET /v1/raw/tables — see Key types. Raw tables that are not released for your environment appear neither in /v1/raw/tables nor in /v1/changes, and a direct call returns 404.1
List available tables
Call Example response:
GET /v1/raw/tables to discover which tables are available, their primary keys, row counts, and sync status.2
Start the export
Request the first page of the table you want. Set Example response:
limit up to the maximum of 10000.3
Paginate with the cursor
Pass the
next_cursor value into the cursor query parameter for each subsequent request. Repeat until next_cursor is null.4
Verify snapshot consistency
Check the
X-Snapshot-At response header on every page. All rows within a single cursor sequence are consistent as of that timestamp. If the header changes between pages, start the export over to ensure a single snapshot view.5
Full Python example
A complete script that exports a table page by page, following the cursor until
exhausted, and verifies snapshot consistency across pages. Requires the
requests package.bulk_export.py
Cursor sequences remain stable under concurrent writes. Because raw tables can receive updates during a long export,
X-Snapshot-At tells you which sync version each page belongs to. For a guaranteed single-snapshot export, retry from the beginning if the snapshot timestamp differs across pages.