AlistGo/alist · error
failed to delete qbittorrent task
Error message
failed to delete qbittorrent task
What it means
POSTing to /api/v2/torrents/delete with the torrent hash and deleteFiles flag returned a non-200 status. The torrent removal itself failed before tag cleanup is attempted.
Source
Thrown at pkg/qbittorrent/client.go:353
}
info, err := c.GetInfo(id)
if err != nil {
return err
}
v := url.Values{}
v.Set("hashes", info.Hash)
if deleteFiles {
v.Set("deleteFiles", "true")
} else {
v.Set("deleteFiles", "false")
}
response, err := c.post("/api/v2/torrents/delete", v)
if err != nil {
return err
}
if response.StatusCode != 200 {
return errors.New("failed to delete qbittorrent task")
}
v = url.Values{}
v.Set("tags", "alist-"+id)
response, err = c.post("/api/v2/torrents/deleteTags", v)
if err != nil {
return err
}
if response.StatusCode != 200 {
return errors.New("failed to delete qbittorrent tag")
}
return nil
}
View on GitHub (pinned to 843d9dc814)
Solutions
- Treat an already-deleted torrent as success (idempotent delete) by listing hashes first and skipping missing ones
- Check authorization by re-logging in if status is 403
- Inspect qBittorrent logs for file-deletion permission failures when deleteFiles=true
Example fix
// before
if err := c.DeleteTorrent(info, true, id); err != nil { return err }
// after
if err := c.DeleteTorrent(info, true, id); err != nil {
if strings.Contains(err.Error(), "failed to delete qBittorrent task") {
// verify whether it still exists; treat missing as success
if !c.TorrentExists(info.Hash) { return nil }
}
return err
} Defensive patterns
Strategy: try-catch
Validate before calling
hashes, _ := c.ListTorrentHashes()
if !sliceContains(hashes, info.Hash) {
return nil // already gone; nothing to do
} Try / catch
err := c.DeleteTorrent(info, deleteFiles, id)
if err != nil && strings.Contains(err.Error(), "failed to delete qbittorrent task") {
if !c.TorrentExists(info.Hash) { return nil } // idempotent
return err
} Prevention
- Make delete flows idempotent by checking existence first
- Re-login on 403 before treating delete as permanently failed
When it happens
Trigger: Calling DeleteTorrent with a stale/already-removed hash, an unauthorized session (403), or when qBittorrent cannot delete files from disk (permission error surfaces as non-200).
Common situations: Torrent was manually deleted from qBittorrent between listing and deleting; qBittorrent restarted (session reset); the alist tag "alist-<id>" already removed.
Related errors
- failed to add qBittorrent task: {link}
- unauthorized qbittorrent url
- failed to delete qbittorrent tag
- delete offline tasks failed: %s
- url is required
AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15).
Data as JSON: /api/errors/905e39c96aa2cccd.
Report an issue: GitHub.