Docs / API Reference / Backups & Versions

Backups & Versions

Trigger backups, browse version history, compare configuration diffs, export archives, and manage schedules. All endpoints require Authorization: Bearer <token>.

Trigger a Backup

POST /api/backup/backup_org_to_file

Creates a full backup of a Meraki organization. Captures organizations, networks, devices, VLANs, firewall rules, SSIDs, and switch ports. Emits success/failure notifications if configured.

Query parameters

Parameter Type Description
org_id required string Meraki organization ID
include_templates boolean Include configuration templates. Default: true

Response (200): BackupOperationResponse

{
  "backup_id": "2026-05-18_org_L_123456",
  "organization_id": "L_123456",
  "status": "success",
  "networks_backed_up": 14,
  "started_at": "2026-05-18T10:00:00Z",
  "completed_at": "2026-05-18T10:00:42Z"
}
curl -X POST "https://your-host/api/backup/backup_org_to_file?org_id=L_123456" \
  -H "Authorization: Bearer <token>"

Streaming Backup (SSE)

GET /api/backup/backup_org_to_file_stream

Server-Sent Events variant. Streams real-time progress events while the backup runs, then sends the final result. Use Authorization: Bearer header; the frontend uses fetch instead of EventSource to support this.

Parameters

Same as backup_org_to_file: org_id (required), include_templates (optional).

Event stream format

data: {"event": "progress", "message": "Backing up network Office-Main", "network": "N_abc123"}

data: {"event": "progress", "message": "Backing up network Branch-East", "network": "N_def456"}

data: {"event": "complete", "backup_id": "2026-05-18_org_L_123456", "status": "success"}

Backup History

GET /api/backup/history

Returns enriched backup history keyed by both local folder name and Azure blob name. Includes org info, storage location, and triggered-by attribution. Omit org_id to get history across all organizations.

Query parameters

org_id string Filter by organization ID. Omit for all orgs.
curl "https://your-host/api/backup/history?org_id=L_123456" \
  -H "Authorization: Bearer <token>"
GET /api/backup/backup_metadata

Returns metadata dict keyed by backup folder name. Includes triggered-by attribution enriched from operation logs for legacy rows that predate per-user attribution.

Query parameters

org_id string Organization ID. Omit for all orgs.

Backup Viewer

Browse and inspect the contents of any backup. Azure-only backups are re-hydrated on demand before the tree is returned.

GET /api/backups/{backup_id}/tree

Returns the file tree structure for the backup. Triggers Azure re-hydration if the backup is cloud-only.

GET /api/backups/{backup_id}/file

Returns the JSON content of a specific file inside the backup.

path required string Relative path to the file within the backup (query param)
PUT /api/backups/{backup_id}/file

Update the content of a file in the backup. Writes an edit-history entry. Request body: BackupFileUpdateRequest.

GET /api/backups/{backup_id}/file/edit-history

Returns the edit history for a specific file. Query param: path (required).

GET /api/backups/{backup_id}/edit-log

Returns a log of all edits made to files in this backup. Query params: limit (1–200, default 50).

Versions & Diffs

GET /versions/backups/{backup_id}/versions

Lists all per-feature version snapshots for a backup.

config_type string Filter by config type (e.g. vlans, firewall_rules)
changes_only boolean Return only versions that contain changes. Default: false
GET /versions/compare

High-level diff between two backups. Returns a summary of added, removed, and changed config sections.

backup_id_1 required string The older backup ID
backup_id_2 required string The newer backup ID
GET /versions/compare/detailed

Field-level diff for a specific config type between two backups.

backup_id_1 required string The older backup
backup_id_2 required string The newer backup
config_type required string Config section to diff (e.g. vlans)
GET /versions/organizations/{organization_id}/config-history

Returns the change history for a specific config type across all backups for an org.

config_type required string The config section to trace
limit integer Max entries to return. Range: 1–50, default: 10
GET /versions/config-types

Lists all config type keys available for diff and history queries.

Export

All export endpoints return a ZIP archive. Pass filename to override the default download name.

GET
/api/backups/{backup_id}/export

Export a single backup as a ZIP.

GET
/api/backups/export/batch

Export multiple backups. Pass comma-separated backup IDs in backup_ids (required).

GET
/api/backups/export/organization/{org_id}

Export all backups for one organization.

GET
/api/backups/export/all

Export all backups across all organizations.

Schedules

Automate backups with cron expressions, fixed intervals, or change-triggered runs.

GET /schedules/schedules

List all schedules. Filter by org or active-only.

organization_id string Filter by organization
enabled_only boolean Return only active schedules. Default: false
POST /schedules/schedules

Create a schedule. Body: BackupScheduleCreate.

{
  "organization_id": "L_123456",
  "cron_expression": "0 2 * * *",
  "include_templates": true,
  "enabled": true
}
GET
/schedules/schedules/{schedule_id}

Get a single schedule by ID.

PUT
/schedules/schedules/{schedule_id}

Update schedule settings. Body: BackupScheduleUpdate.

DELETE
/schedules/schedules/{schedule_id}

Delete a schedule.

POST
/schedules/schedules/{schedule_id}/toggle

Enable or disable a schedule. Query: enabled (boolean, required).

POST
/schedules/schedules/{schedule_id}/run-now

Trigger the schedule immediately, outside its regular cadence.

POST
/schedules/schedules/validate-cron

Validate a cron expression before saving. Query: cron_expression (required).

GET
/schedules/scheduler/status

Returns the current status of the scheduler service.

Delete a Backup

DELETE /api/backups/{backup_id}

Deletes a backup. By default only removes the local copy; set delete_azure=true to also remove the corresponding Azure blob.

delete_azure boolean Also delete the Azure blob copy. Default: false

This action is irreversible. Ensure you have an offsite copy before deleting with delete_azure=true.