# Deluge API

> Deluge Web JSON-RPC and core RPC reference covering session login, web methods, and commonly used core torrent operations.

- Skill: `tympanix/deluge-api` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tympanix/deluge-api`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tympanix/deluge-api/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: tympanix (https://skillmd.com/u/tympanix)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tympanix/deluge-api

---


# Skill: Deluge API

## Purpose

Use this skill when you need to integrate with Deluge Web or reason about Deluge RPC calls exposed through the Web UI.

## Protocols

### Web API

- Endpoint: `/json`
- Spec: JSON-RPC v1-style request body
- Typical request body:

```json
{
  "method": "web.update_ui",
  "params": [["name", "progress"], {}],
  "id": 1
}
```

- File uploads are sent to `/upload`

### Core daemon RPC

DelugeRPC is the daemon/client wire protocol. Messages are zlib-compressed, rencode-encoded payloads.

- Request: `[[request_id, method, [args], {kwargs}], ...]`
- Response: `[message_type, request_id, [return_value]]`
- Error: `[message_type, request_id, exception_type, exception_msg, traceback]`
- Event: `[message_type, event_name, data]`

The Web UI exposes many core methods directly through the JSON endpoint, so callers often use JSON requests with `core.*`, `auth.*`, and `web.*` method names.

## Session flow

Typical Web UI flow:

1. `auth.login(password)`
2. `web.get_hosts()`
3. `web.connect(host_id)`
4. Use `web.*` and `core.*` methods against the connected daemon

## Main Web methods

| Method | Parameters | Purpose |
|---|---|---|
| `web.add_host` | `host, port, username='', password=''` | Add daemon to host list |
| `web.edit_host` | `host_id, host, port, username='', password=''` | Edit host entry |
| `web.remove_host` | `host_id` | Remove host entry |
| `web.get_hosts` | none | Return configured hosts |
| `web.get_host_status` | `host_id` | Get daemon status |
| `web.connect` | `host_id` | Connect Web UI to a daemon |
| `web.connected` | none | Check connected state |
| `web.disconnect` | none | Disconnect current daemon |
| `web.get_events` | none | Drain queued events |
| `web.register_event_listener` | `event` | Subscribe to event queue |
| `web.deregister_event_listener` | `event` | Remove subscription |
| `web.get_config` | none | Read Web UI config |
| `web.set_config` | `config` | Update Web UI config |
| `web.set_theme` | `theme` | Change theme |
| `web.get_plugins` | none | Available/enabled Web UI plugins |
| `web.get_plugin_info` | `name` | Plugin details |
| `web.get_plugin_resources` | `name` | Plugin resource files |
| `web.upload_plugin` | `filename, path` | Upload plugin |
| `web.download_torrent_from_url` | `url, cookie=None` | Download torrent to temp path |
| `web.get_magnet_info` | `uri` | Parse magnet metadata |
| `web.get_torrent_info` | `filename` | Inspect torrent file on disk |
| `web.get_torrent_files` | `torrent_id` | Torrent files tree |
| `web.get_torrent_status` | `torrent_id, keys` | Selected torrent fields |
| `web.update_ui` | `keys, filter_dict` | Incremental UI snapshot |
| `web.add_torrents` | `[{path, options}]` | Add uploaded/downloaded torrent files |

## Core methods commonly used through Web API

| Method | Parameters | Purpose |
|---|---|---|
| `core.get_config_values` | `[keys]` | Read daemon config such as `download_location` |
| `core.resume_torrent` | `[hashes]` | Resume torrents |
| `core.pause_torrent` | `[hashes]` | Pause torrents |
| `core.force_recheck` | `[hashes]` | Recheck torrents |
| `core.remove_torrent` | `[hash, remove_data]` | Remove torrent, optionally deleting data |
| `core.queue_up` | `[hashes]` | Move up in queue |
| `core.queue_down` | `[hashes]` | Move down in queue |
| `core.queue_top` | `[hashes]` | Move to top |
| `core.queue_bottom` | `[hashes]` | Move to bottom |

## Important request and response details

- `web.connect(host_id)` returns the list of methods the daemon supports
- `web.update_ui(keys, filter_dict)` returns torrent/UI data keyed by torrent hash
- `web.add_torrents()` expects uploaded files to be referenced by temporary `path`
- `web.download_torrent_from_url()` returns the temporary filename to pass into `web.add_torrents()`
- `web.get_torrent_info()` returns `name`, `files_tree`, and `info_hash`

## Common options for `web.add_torrents`

Common per-torrent options include:

- `download_location`
- `file_priorities`
- `add_paused`
- `compact_allocation`
- `max_connections`
- `max_download_speed`
- `max_upload_slots`
- `max_upload_speed`
- `prioritize_first_last_pieces`

## Electorrent usage

Electorrent uses:

- `auth.login`
- `web.get_hosts`
- `web.connect`
- `web.update_ui`
- `web.download_torrent_from_url`
- `web.add_torrents`
- `core.get_config_values`
- `core.resume_torrent`
- `core.pause_torrent`
- `core.force_recheck`
- `core.remove_torrent`
- `core.queue_up`, `core.queue_down`, `core.queue_top`, `core.queue_bottom`

## References

- https://deluge.readthedocs.io/en/latest/reference/webapi.html
- https://deluge.readthedocs.io/en/latest/reference/rpc.html

