Docs / API Reference / Restore Operations

Restore Operations

Full organization restores, granular feature-level restores, pre-flight safety validation, and atomic restores with automatic rollback. All endpoints require Authorization: Bearer <token>.

How Restore Works

Every restore follows the same safety sequence: pre-flight validation checks the live org state before anything is applied, changes are applied atomically, and if any step fails midway the engine automatically rolls the network back to the snapshot taken at the start of the operation.

Step What happens
1. Pre-flight Validate that the target org/network exists and is reachable. Check feature compatibility.
2. Snapshot Capture the current live state as a rollback checkpoint before applying any changes.
3. Apply Push each selected feature back to the Meraki Dashboard API in sequence.
4. Verify Confirm each change landed. If any step fails, the rollback checkpoint is applied automatically.

List Available Backups

GET /api/restore/get_backup_list_for_org

Returns a deduplicated list of backup IDs available for restore. Includes both local-disk backups and Azure-only backups. Azure-only entries are re-hydrated on demand when a restore or viewer request is made.

org_id string Filter by organization. Omit to list backups for all orgs.

Response (200)

[
  "2026-05-18_org_L_123456",
  "2026-05-17_org_L_123456",
  "2026-05-16_org_L_123456"
]

Full Organization Restore

POST /api/restore/restore_org_from_file

When preview=false this operation modifies your live Meraki configuration. Always run with preview=true first.

Restores a full organization configuration from a backup. Runs pre-flight safety checks before applying any changes. Returns a RestorePreviewResponse when preview=true, or true / false on execute.

Query parameters

org_id required string Target Meraki organization ID
backup_path required string Backup ID (folder name) to restore from
preview boolean If true, validate and return a preview without applying changes. Default: false

Preview response shape

{
  "networks": [
    {
      "network_id": "N_abc123",
      "network_name": "Office-Main",
      "changes": ["vlans", "firewall_rules"],
      "warnings": []
    }
  ],
  "total_changes": 12,
  "estimated_duration_seconds": 45
}
# Preview first
curl -X POST "https://your-host/api/restore/restore_org_from_file?org_id=L_123456&backup_path=2026-05-17_org_L_123456&preview=true" \
  -H "Authorization: Bearer <token>"

# Then execute
curl -X POST "https://your-host/api/restore/restore_org_from_file?org_id=L_123456&backup_path=2026-05-17_org_L_123456" \
  -H "Authorization: Bearer <token>"

Granular Restore

Select individual features (VLANs, firewall rules, SSIDs, switch ports, device assignments) and restore only those, without touching unrelated configuration.

GET /granular/features

Returns all feature keys supported for granular restore, with display names and categories.

GET /granular/features/by-category

Same as above, grouped by category (Switching, Wireless, Security, etc.).

GET /granular/backups/{backup_id}/features

Lists which feature keys are present in a specific backup.

GET /granular/backups/{backup_id}/features/{feature_id}/items

Returns the actual items stored for a feature in a backup (e.g. the list of VLANs). Filter by network with the optional network_id query param.

POST /granular/preview

Returns a diff of what would change if the selected features were restored. Body: GranularRestoreRequest.

{
  "backup_id": "2026-05-17_org_L_123456",
  "org_id": "L_123456",
  "features": ["vlans", "firewall_rules"],
  "network_ids": ["N_abc123"]
}
POST /granular/execute

Executes the granular restore. Same body shape as /granular/preview. Returns a GranularRestoreResult with per-feature outcomes.

Response shape

{
  "success": true,
  "results": [
    { "feature": "vlans", "network_id": "N_abc123", "status": "applied", "changes": 3 },
    { "feature": "firewall_rules", "network_id": "N_abc123", "status": "applied", "changes": 7 }
  ],
  "rolled_back": false
}

Pre-flight Validation

POST /granular/preflight

Validates the restore request against the live Meraki org without applying any changes. Checks that the target networks exist, are reachable, and that the backup features are compatible with current network types.

Request body: PreflightValidationRequest

{
  "backup_id": "2026-05-17_org_L_123456",
  "org_id": "L_123456",
  "features": ["vlans", "ssids"],
  "network_ids": ["N_abc123", "N_def456"]
}

Response: PreflightValidationResponse

{
  "valid": true,
  "warnings": [
    {
      "network_id": "N_def456",
      "feature": "ssids",
      "message": "Network has fewer SSID slots than backup; slots 9-14 will be skipped"
    }
  ],
  "errors": []
}
GET /granular/networks/{network_id}/validate

Validates that a specific target network is reachable and compatible. Returns a NetworkValidationResponse.

Atomic Restore

Atomic restores are long-running operations that can be monitored in real time. The engine takes a pre-restore snapshot, applies changes, and automatically rolls back to the snapshot if any step fails.

POST /granular/atomic

Start an atomic restore. Returns a restore_id immediately. Poll the status endpoint to track progress. Body: AtomicRestoreRequest.

{
  "backup_id": "2026-05-17_org_L_123456",
  "org_id": "L_123456",
  "features": ["vlans", "firewall_rules", "ssids"],
  "network_ids": ["N_abc123"]
}

Response: AtomicRestoreResponse

{
  "restore_id": "rst_a1b2c3d4",
  "status": "pending",
  "created_at": "2026-05-18T11:00:00Z"
}
GET /granular/atomic/{restore_id}

Poll for the current status of an atomic restore. Returns an AtomicRestoreStatus.

{
  "restore_id": "rst_a1b2c3d4",
  "status": "in_progress",
  "progress_pct": 60,
  "current_step": "Applying firewall_rules to N_abc123",
  "rolled_back": false,
  "completed_at": null
}
GET /granular/atomic

Lists all atomic restore sessions for the current user.

Manual Rollback

POST /granular/atomic/{restore_id}/rollback

Manually triggers a rollback for a completed or failed atomic restore, applying the pre-restore snapshot back to the live org. Automatic rollback is triggered by the engine on failure; this endpoint covers the case where you want to undo a successful restore after the fact.

The rollback snapshot is only retained for a limited window after the restore completes. Check AtomicRestoreStatus.rollback_available before calling this endpoint.

Compatibility Check

POST /granular/compatibility

Checks whether a backup's feature set is compatible with the target network before attempting a restore. Useful when restoring between different network types (e.g. MX to MX, MS to MS) or firmware versions.

Request body: CompatibilityCheckRequest

{
  "backup_id": "2026-05-17_org_L_123456",
  "target_network_id": "N_abc123",
  "features": ["vlans", "ssids"]
}

Response: CompatibilityCheckResponse

{
  "compatible": true,
  "issues": [],
  "warnings": ["SSID count in backup (14) exceeds target limit (8); first 8 will be restored"]
}

Restore to an Existing Network

GET /granular/networks

Lists available target networks in an org for restore targeting.

org_id required string Organization to list networks from
product_types string Comma-separated filter (e.g. appliance,switch)
POST /granular/existing-network

Restores selected features from a backup into an existing target network, which may differ from the original source network. Useful for cloning configurations across sites. Body: ExistingNetworkRestoreRequest.

{
  "backup_id": "2026-05-17_org_L_123456",
  "source_network_id": "N_abc123",
  "target_network_id": "N_xyz789",
  "features": ["vlans", "switch_ports"]
}