Backup/restore account data

Account data (cubes, reports / published reports, workspaces) may be downloaded as an XML file in this way:

  1. Open Manage Account view (top-right menu)
  2. Click the Backup Account Data button
  3. XML file is a human-readable and it can be stored under the version control like git; in this way you can easily track changes with a diffs between commits and review changes.

This XML file can be restored on self-hosted SeekTable instance with an active "System/users admin" subscription:

  1. Login as a user with an installation "admin" rights
  2. Go to Admin (top-menu) → User accounts
  3. Choose an user account (where you want to restore the backup) and open account's form with a click the Edit button
  4. Click Restore Account Data:
    Account: restore from XML backup
  5. Choose a file to upload and a restore mode:
    • Keep record IDs, do not restore if IDs already exist: use this option to restore only removed cubes/reports.
    • Keep record IDs, overwrite existing records with same IDs: use this option to transfer/update account data between SeekTable instances.
    • Generate new record IDs: use this option to 'clone' cubes with reports.

With a backup/restore functionality it's easy to organize a typical "dev → staging → prod" development flow:

Reports deployment process can be fully automated with API calls described below.

Account data backup API

For automated backups use this API endpoint:

GET {SeekTable_BaseUrl}/api/account/{account_id}/backup
Header: Authorization (required) API key of the user with "admin" role + a login email of this user should be specified in SeekTable_ST__Api__AccountBackupAllowedForEmail app setting. It is strongly recommended to create a dedicated "admin" user (without cubes/reports) and use its API key ONLY for backup/restore API calls.
account_id (required) ID of the account to backup.
format (optional) Determines backup format: xml (a single XML data file, default) or zip (an archive with multiple configuration xml/json files).
Use XML format for snapshots. A multi-file backup (zip archive) is better for Git storage and AI-assisted setup.
workspaces (optional) Determines whether to include workspaces in the backup; if not, should be 0 or false (true by default).
dashboards (optional) Determines whether to include dashboards in the backup; if not, should be 0 or false (true by default). This option makes sense only if installation has an active subscription for dashboards.
team (optional) Determines whether to include "Team sharing" settings (team members/groups/access rules); if not, should be 0 or false (true by default). This option makes sense only if the user has a "Team sharing" capability.
Response HTTP/200 (OK) + backup data in the response body.
curl -k -H "Authorization: SEEKTABLE_ADMIN_ACCOUNT_API_KEY" SEEKTABLE_BASE_URL/api/account/ACCOUNT_ID/backup -o "seektable_backup.xml"

Account data restore API

For automated restore use this API endpoint:

POST {SeekTable_BaseUrl}/api/account/{account_id}/restore?mode={mode}&workspaces=1&dashboards=1&team=1
Header: Authorization (required) API key of the user with "admin" role + a login email of this user should be specified in SeekTable_ST__Api__AccountRestoreAllowedForEmail app setting. It is strongly recommended to create a dedicated "admin" user (without cubes/reports) and use its API key ONLY for backup/restore API calls.
account_id (required) ID of the account where cubes/reports are restored.
Request Body (required) Backup data to restore: either a single XML or zipped multi-file configs (in this case Content-Type: application/zip HTTP header should be specified). A ZIP archive may contain a partial backup, such as specific cubes or reports.
mode (optional) restore mode:
(empty)
corresponds to "Keep record IDs, do not restore if IDs already exist" mode in UI: restore new items only
allowUpdate
corresponds to "Keep record IDs, overwrite existing records with same IDs"
newIds
corresponds to "Generate new record IDs" mode in UI: used to clone items
workspaces (optional) Determines whether to restore workspaces (if they are present in the backup); if yes, should be 1 or true (false by default).
dashboards (optional) Determines whether to restore dashboards (if they are present in the backup). If yes, should be 1 or true (false by default). This option makes sense only if installation has an active subscription for dashboards.
team (optional) Determines whether to restore "Team sharing" settings: team members/groups/access rules (if they are present in the backup). If yes, should be 1 or true (false by default). This option makes sense only if the user has a "Team sharing" capability.
validate (optional) Determines whether to validate backup data to ensure consistency and correct configuration of cubes, reports and dashboards. If yes, should be 1 or true (false by default).
dry_run (optional) Used to perform a restore operation without applying changes to the database. If yes, should be 1 or true (false by default). This option automatically enables validate.
Response HTTP/200 (OK) if restore operation executed successfully.
curl -k -H "Content-Type: text/xml" -H "Authorization: SEEKTABLE_ADMIN_ACCOUNT_API_KEY" --data-binary "@seektable_backup_YYYYMMDD.xml" SEEKTABLE_BASE_URL/api/account/ACCOUNT_ID/restore?mode=allowUpdate&workspaces=1&dashboards=1&team=1

Full backup of SeekTable instance

To backup self-hosted SeekTable installation it is enough to make a copy of files in the docker volumes db-volume and csv-files-volume + docker-compose configuration files.