Restores
Every snapshot on a service's page can be restored.

btrfs
The service is stopped via its lifecycle hooks (which a btrfs restore therefore needs), its subvolume is swapped for the snapshot, and the service is started again. The old subvolume is only deleted once the new one is in place.
restic
A restic restore takes two steps. The snapshot is first downloaded into Bacre's staging directory, where you can inspect it. Then restoreApply puts it into place, with the download under $BACRE_STAGING.
A download that isn't needed after all can simply be discarded.
Jobs
Every backup, download and restore runs as a job, one at a time, with its output streamed live.

When a webhook is configured, Bacre posts each finished job to it as JSON, with an x-bacre-event header of job_succeeded or job_failed.