Skip to content
Nick Hamnett edited this page Jun 11, 2026 · 1 revision

All routes are prefixed with /backup and namespaced under backup. by default. See Configuration to customize.

Route Groups

Group Middleware Purpose
Management web + auth CRUD operations, running backups, viewing schedules
Download signed Secure file downloads with signed URLs

Backups

Method URI Name Controller Description
GET /backups backup.backups.index BackupController@index List all backups
GET /backups/{backup}/download backup.backups.download BackupController@generateDownloadLink Generate a signed download link for a backup zip

Performing Backups

Method URI Name Middleware Controller Description
POST /perform backup.perform.initialize PerformBackupController@initialize Initialize a backup run, returns a UUID
POST /perform/start backup.perform.start signed PerformBackupController@start Start the backup job (signed to prevent CSRF replay)
GET /perform/{type}/{uuid} backup.perform.show signed PerformBackupController@show Poll for backup run status

The {type} parameter accepts: full, files, databases.

Backup Flow

  1. POST /perform — initializes a BackupRun record and returns a UUID + signed URLs
  2. POST /perform/start — dispatches the backup job and opens a broadcasting channel
  3. GET /perform/{type}/{uuid} — called by the front-end to check completion status

Destinations

Method URI Name Controller Description
GET /destinations backup.destinations.index BackupDestinationsController@index List all storage destinations
GET /destinations/create backup.destinations.create BackupDestinationsController@create Show create form
POST /destinations backup.destinations.store BackupDestinationsController@store Store a new destination
GET /destinations/{destination} backup.destinations.show BackupDestinationsController@show Show a single destination
PUT /destinations/{destination} backup.destinations.update BackupDestinationsController@update Update a destination
DELETE /destinations/{destination} backup.destinations.destroy BackupDestinationsController@destroy Delete a destination
POST /destinations/{destination}/test backup.destinations.test BackupDestinationsController@test Test connectivity
GET /destinations/{destination}/test/{uuid} backup.destinations.test.result BackupDestinationsController@showTestResult Poll for test result (signed)

Schedules

Method URI Name Controller Description
GET /schedules backup.schedules.index ScheduleController@index View all backup and cleanup schedules

Backup Schedules

Method URI Name Controller Description
GET /schedules/backup/create backup.schedules.backup.create BackupScheduleController@create Show create form
POST /schedules/backup backup.schedules.backup.store BackupScheduleController@store Store a new backup schedule
GET /schedules/backup/{schedule}/edit backup.schedules.backup.edit BackupScheduleController@edit Show edit form
PUT /schedules/backup/{schedule} backup.schedules.backup.update BackupScheduleController@update Update a backup schedule
DELETE /schedules/backup/{schedule} backup.schedules.backup.destroy BackupScheduleController@destroy Delete a backup schedule

Cleanup Schedules

Method URI Name Controller Description
GET /schedules/cleanup/create backup.schedules.cleanup.create CleanupScheduleController@create Show create form
POST /schedules/cleanup backup.schedules.cleanup.store CleanupScheduleController@store Store a new cleanup schedule
GET /schedules/cleanup/{schedule}/edit backup.schedules.cleanup.edit CleanupScheduleController@edit Show edit form
PUT /schedules/cleanup/{schedule} backup.schedules.cleanup.update CleanupScheduleController@update Update a cleanup schedule
DELETE /schedules/cleanup/{schedule} backup.schedules.cleanup.destroy CleanupScheduleController@destroy Delete a cleanup schedule

File Downloads

Method URI Name Middleware Controller Description
GET /files/{file} backup.file signed BackupFileController@retrieve Download an individual backup file

Broadcasting

Channel Purpose
backups.{uuid} Real-time backup progress updates (private channel)

Channel access is managed through the application cache via ChannelAccessManager.

Clone this wiki locally