source: branches/1.7x/doc/rpc-spec.txt

Last change on this file was 9001, checked in by charles, 8 years ago

fix another typo in rpc-spec: "tnumber" should read "number". reported by mwarning

File size: 28.0 KB
Line 
11.  Introduction
2
3   This document describes a protocol for interacting with Transmission
4   sessions remotely.
5
61.1  Terminology
7
8   The JSON terminology in RFC 4627 is used.
9
10   In benc terms, a JSON "array" is equivalent to a benc list,
11   a JSON "object" is equivalent to a benc dictionary,
12   and a JSON object's "keys" are the dictionary's string keys.
13
142.  Message Format
15
16   Messages are formatted as objects.  There are two types:
17   requests (described in 2.1) and responses (described in 2.2).
18
19   All text MUST be UTF-8 encoded.
20
212.1.  Requests
22
23   Requests support three keys:
24
25   (1) A required "method" string telling the name of the method to invoke
26   (2) An optional "arguments" object of key/value pairs
27   (3) An optional "tag" number used by clients to track responses.
28       If provided by a request, the response MUST include the same tag.
29
302.2.  Responses
31
32   Reponses support three keys:
33
34   (1) A required "result" string whose value MUST be "success" on success,
35       or an error string on failure.
36   (2) An optional "arguments" object of key/value pairs
37   (3) An optional "tag" number as described in 2.1.
38
392.3.  Transport Mechanism
40
41   HTTP POSTing a JSON-encoded request is the preferred way of communicating
42   with a Transmission RPC server.  The current Transmission implementation
43   has the default URL as http://host:9091/transmission/rpc.  Clients
44   may use this as a default, but should allow the URL to be reconfigured,
45   since the port and path may be changed to allow mapping and/or multiple
46   daemons to run on a single server.
47
48   In addition to POSTing, there's also a simple notation for sending
49   requests in the query portion of a URL.  This is not as robust, but can
50   be useful for debugging and simple tasks.  The notation works as follows:
51
52   (1) Any key not "tag" or "method" is treated as an argument.
53   (2) The "arguments" key isn't needed, since data isn't nested.
54   (3) If the value in a key/value pair can be parsed as a number, then it is.
55       Otherwise if it can be parsed as an array of numbers, then it is.
56       Otherwise, it's parsed as a string.
57
58   Examples:
59   ?method=torrent-start&ids=1,2
60   ?method=session-set&speed-limit-down=50&speed-limit-down-enabled=1
61   
62
633.  Torrent Requests
64
653.1.  Torrent Action Requests
66
67   Method name          | libtransmission function
68   ---------------------+-------------------------------------------------
69   "torrent-start"      | tr_torrentStart
70   "torrent-stop"       | tr_torrentStop
71   "torrent-verify"     | tr_torrentVerify
72   "torrent-reannounce" | tr_torrentManualUpdate ("ask tracker for more peers")
73
74   Request arguments: "ids", which specifies which torrents to use.
75                      All torrents are used if the "ids" argument is omitted.
76                      "ids" should be one of the following:
77                      (1) an integer referring to a torrent id
78                      (2) a list of torrent id numbers, sha1 hash strings, or both
79                      (3) a string, "recently-active", for recently-active torrents
80
81   Response arguments: none
82
833.2.  Torrent Mutators
84
85   Method name: "torrent-set"
86
87   Request arguments:
88
89   string                            | value type & description
90   ----------------------------------+-------------------------------------------------
91   "bandwidthPriority"               | number     this torrent's bandwidth tr_priority_t
92   "downloadLimit"                   | number     maximum download speed (in K/s)
93   "downloadLimited"                 | boolean    true if "downloadLimit" is honored
94   "files-wanted"                    | array      indices of file(s) to download
95   "files-unwanted"                  | array      indices of file(s) to not download
96   "honorsSessionLimits"             | boolean    true if session upload limits are honored
97   "ids"                             | array      torrent list, as described in 3.1
98   "location"                        | string     new location of the torrent's content
99   "peer-limit"                      | number     maximum number of peers
100   "priority-high"                   | array      indices of high-priority file(s)
101   "priority-low"                    | array      indices of low-priority file(s)
102   "priority-normal"                 | array      indices of normal-priority file(s)
103   "seedRatioLimit"                  | double     session seeding ratio
104   "seedRatioMode"                   | number     which ratio to use.  See tr_ratiolimit
105   "uploadLimit"                     | number     maximum upload speed (in K/s)
106   "uploadLimited"                   | boolean    true if "uploadLimit" is honored
107
108   Just as an empty "ids" value is shorthand for "all ids", using an empty array
109   for "files-wanted", "files-unwanted", "priority-high", "priority-low", or
110   "priority-normal" is shorthand for saying "all files".
111
112   Response arguments: none
113
1143.3.  Torrent Accessors
115
116   Method name: "torrent-get".
117
118   Request arguments:
119
120   (1) An opional "ids" array as described in 3.1.
121   (2) A required "fields" array of keys. (see list below)
122
123   Response arguments:
124
125   (1) A "torrents" array of objects, each of which contains
126       the key/value pairs matching the request's "fields" argument.
127   (2) If the request's "ids" field was "recently-active",
128       a "removed" array of torrent-id numbers of recently-removed
129       torrents.
130
131   key                             | type                        | source
132   --------------------------------+-----------------------------+---------
133   activityDate                    | number                      | tr_stat
134   addedDate                       | number                      | tr_stat
135   announceResponse                | string                      | tr_stat
136   announceURL                     | string                      | tr_stat
137   bandwidthPriority               | number                      | tr_priority_t
138   comment                         | string                      | tr_info
139   corruptEver                     | number                      | tr_stat
140   creator                         | string                      | tr_info
141   dateCreated                     | number                      | tr_info
142   desiredAvailable                | number                      | tr_stat
143   doneDate                        | number                      | tr_stat
144   downloadDir                     | string                      | tr_torrent
145   downloadedEver                  | number                      | tr_stat
146   downloaders                     | number                      | tr_stat
147   downloadLimit                   | number                      | tr_torrent
148   downloadLimited                 | boolean                     | tr_torrent
149   error                           | number                      | tr_stat
150   errorString                     | string                      | tr_stat
151   eta                             | number                      | tr_stat
152   files                           | array (see below)           | n/a
153   fileStats                       | array (see below)           | n/a
154   hashString                      | string                      | tr_info
155   haveUnchecked                   | number                      | tr_stat
156   haveValid                       | number                      | tr_stat
157   honorsSessionLimits             | boolean                     | tr_torrent
158   id                              | number                      | tr_torrent
159   isPrivate                       | boolean                     | tr_torrent
160   lastAnnounceTime                | number                      | tr_stat
161   lastScrapeTime                  | number                      | tr_stat
162   leechers                        | number                      | tr_stat
163   leftUntilDone                   | number                      | tr_stat
164   manualAnnounceTime              | number                      | tr_stat
165   maxConnectedPeers               | number                      | tr_torrent
166   name                            | string                      | tr_info
167   nextAnnounceTime                | number                      | tr_stat
168   nextScrapeTime                  | number                      | tr_stat
169   peer-limit                      | number                      | tr_torrent
170   peers                           | array (see below)           | n/a
171   peersConnected                  | number                      | tr_stat
172   peersFrom                       | object (see below)          | n/a
173   peersGettingFromUs              | number                      | tr_stat
174   peersKnown                      | number                      | tr_stat
175   peersSendingToUs                | number                      | tr_stat
176   percentDone                     | double                      | tr_stat
177   pieces                          | string (see below)          | tr_torrent
178   pieceCount                      | number                      | tr_info
179   pieceSize                       | number                      | tr_info
180   priorities                      | array (see below)           | n/a
181   rateDownload (B/s)              | number                      | tr_stat
182   rateUpload (B/s)                | number                      | tr_stat
183   recheckProgress                 | double                      | tr_stat
184   scrapeResponse                  | string                      | tr_stat
185   scrapeURL                       | string                      | tr_stat
186   seeders                         | number                      | tr_stat
187   seedRatioLimit                  | double                      | tr_torrent
188   seedRatioMode                   | number                      | tr_ratiolimit
189   sizeWhenDone                    | number                      | tr_stat
190   startDate                       | number                      | tr_stat
191   status                          | number                      | tr_stat
192   swarmSpeed (K/s)                | number                      | tr_stat
193   timesCompleted                  | number                      | tr_stat
194   trackers                        | array (see below)           | n/a
195   totalSize                       | number                      | tr_info
196   torrentFile                     | string                      | tr_info
197   uploadedEver                    | number                      | tr_stat
198   uploadLimit                     | number                      | tr_torrent
199   uploadLimited                   | boolean                     | tr_torrent
200   uploadRatio                     | double                      | tr_stat
201   wanted                          | array (see below)           | n/a
202   webseeds                        | array (see below)           | n/a
203   webseedsSendingToUs             | number                      | tr_stat
204                                   |                             |
205                                   |                             |
206   -----------------------+--------+-----------------------------+
207   files                  | array of objects, each containing:   |
208                          +-------------------------+------------+
209                          | key                     | type       |
210                          | bytesCompleted          | number     | tr_torrent
211                          | length                  | number     | tr_info
212                          | name                    | string     | tr_info
213   -----------------------+--------------------------------------+
214   fileStats              | a file's non-constant properties.    |
215                          | array of tr_info.filecount objects,  |
216                          | each containing:                     |
217                          +-------------------------+------------+
218                          | bytesCompleted          | number     | tr_torrent
219                          | wanted                  | boolean    | tr_info
220                          | priority                | number     | tr_info
221   -----------------------+--------------------------------------+
222   peers                  | array of objects, each containing:   |
223                          +-------------------------+------------+
224                          | address                 | string     | tr_peer_stat
225                          | clientName              | string     | tr_peer_stat
226                          | clientIsChoked          | boolean    | tr_peer_stat
227                          | clientIsInterested      | boolean    | tr_peer_stat
228                          | isDownloadingFrom       | boolean    | tr_peer_stat
229                          | isEncrypted             | boolean    | tr_peer_stat
230                          | isIncoming              | boolean    | tr_peer_stat
231                          | isUploadingTo           | boolean    | tr_peer_stat
232                          | peerIsChoked            | boolean    | tr_peer_stat
233                          | peerIsInterested        | boolean    | tr_peer_stat
234                          | port                    | number     | tr_peer_stat
235                          | progress                | double     | tr_peer_stat
236                          | rateToClient (B/s)      | number     | tr_peer_stat
237                          | rateToPeer (B/s)        | number     | tr_peer_stat
238   -----------------------+--------------------------------------+
239   peersFrom              | an object containing:                |
240                          +-------------------------+------------+
241                          | fromCache               | number     | tr_stat
242                          | fromIncoming            | number     | tr_stat
243                          | fromPex                 | number     | tr_stat
244                          | fromTracker             | number     | tr_stat
245   -----------------------+--------------------------------------+
246   pieces                 | A bitfield holding pieceCount flags  | tr_torrent
247                          | which are set to 'true' if we have   |
248                          | the piece matching that position.    |
249                          | JSON doesn't allow raw binary data,  |
250                          | so this is a base64-encoded string.  |
251   -----------------------+--------------------------------------+
252   priorities             | an array of tr_info.filecount        | tr_info
253                          | numbers. each is the tr_priority_t   |
254                          | mode for the corresponding file.     |
255   -----------------------+--------------------------------------+
256   trackers               | array of objects, each containing:   |
257                          +-------------------------+------------+
258                          | announce                | string     | tr_info
259                          | scrape                  | string     | tr_info
260                          | tier                    | number     | tr_info
261   -----------------------+--------------------------------------+
262   wanted                 | an array of tr_info.fileCount        | tr_info
263                          | 'booleans' true if the corresponding |
264                          | file is to be downloaded.            |
265   -----------------------+--------------------------------------+
266   webseeds               | an array of strings:                 |
267                          +-------------------------+------------+
268                          | webseed                 | string     | tr_info
269                          +-------------------------+------------+
270
271   Example:
272
273   Say we want to get the name and total size of torrents #7 and #10.
274
275   Request:
276
277      {
278         "arguments": {
279             "fields": [ "id", "name", "totalSize" ],
280             "ids": [ 7, 10 ]
281         },
282         "method": "torrent-get",
283         "tag": 39693
284      }
285
286
287   Response:
288
289      {
290         "arguments": {
291            "torrents": [
292               {
293                   "id": 10,
294                   "name": "Fedora x86_64 DVD",
295                   "totalSize", 34983493932,
296               },
297               {
298                   "id": 7,
299                   "name": "Ubuntu x86_64 DVD",
300                   "totalSize", 9923890123,
301               }
302            ]
303         },
304         "result": "success",
305         "tag": 39693
306      }
307
3083.4.  Adding a Torrent
309
310   Method name: "torrent-add"
311
312   Request arguments:
313
314   key                | value type & description
315   -------------------+-------------------------------------------------
316   "download-dir"     | string      path to download the torrent to
317   "filename"         | string      filename or URL of the .torrent file
318   "metainfo"         | string      base64-encoded .torrent content
319   "paused"           | boolean     if true, don't start the torrent
320   "peer-limit"       | number      maximum number of peers
321   "files-wanted"     | array       indices of file(s) to download
322   "files-unwanted"   | array       indices of file(s) to not download
323   "priority-high"    | array       indices of high-priority file(s)
324   "priority-low"     | array       indices of low-priority file(s)
325   "priority-normal"  | array       indices of normal-priority file(s)
326
327   Either "filename" OR "metainfo" MUST be included.
328   All other arguments are optional.
329
330   Response arguments: on success, a "torrent-added" object in the
331                       form of one of 3.3's tr_info objects with the
332                       fields for id, name, and hashString.
333
3343.5.  Removing a Torrent
335
336   Method name: "torrent-remove"
337
338   Request arguments:
339
340   string                     | value type & description
341   ---------------------------+-------------------------------------------------
342   "ids"                      | array      torrent list, as described in 3.1
343   "delete-local-data"        | boolean    delete local data. (default: false)
344
345   Response arguments: none
346
347
3483.6.  Moving a Torrent
349
350   Method name: "torrent-set-location"
351
352   Request arguments:
353
354   string                     | value type & description
355   ---------------------------+-------------------------------------------------
356   "ids"                      | array      torrent list, as described in 3.1
357   "location"                 | string     the new torrent location
358   "move"                     | boolean    if true, move from previous location.
359                              |            otherwise, search "location" for files
360
361   Response arguments: none
362
363
3644.   Session Requests
365
3664.1.  Session Arguments
367
368   string                     | value type & description
369   ---------------------------+-------------------------------------------------
370   "alt-speed-down"           | number     max global download speed (in K/s)
371   "alt-speed-enabled"        | boolean    true means use the alt speeds
372   "alt-speed-time-begin"     | number     when to turn on alt speeds (units: minutes after midnight)
373   "alt-speed-time-enabled"   | boolean    true means the scheduled on/off times are used
374   "alt-speed-time-end"       | number     when to turn off alt speeds (units: same)
375   "alt-speed-time-day"       | number     what day(s) to turn on alt speeds (look at tr_sched_day)
376   "alt-speed-up"             | number     max global upload speed (in K/s)
377   "blocklist-enabled"        | boolean    true means enabled
378   "blocklist-size"           | number     number of rules in the blocklist
379   "dht-enabled"              | boolean    true means allow dht in public torrents
380   "encryption"               | string     "required", "preferred", "tolerated"
381   "download-dir"             | string     default path to download torrents
382   "peer-limit-global"        | number     maximum global number of peers
383   "peer-limit-per-torrent"   | number     maximum global number of peers
384   "pex-enabled"              | boolean    true means allow pex in public torrents
385   "peer-port"                | number     port number
386   "peer-port-random-on-start"| boolean    true means pick a random peer port on launch
387   "port-forwarding-enabled"  | boolean    true means enabled
388   "rpc-version"              | number     the current RPC API version
389   "rpc-version-minimum"      | number     the minimum RPC API version supported
390   "seedRatioLimit"           | double     the default seed ratio for torrents to use
391   "seedRatioLimited"         | boolean    true if seedRatioLimit is honored by default
392   "speed-limit-down"         | number     max global download speed (in K/s)
393   "speed-limit-down-enabled" | boolean    true means enabled
394   "speed-limit-up"           | number     max global upload speed (in K/s)
395   "speed-limit-up-enabled"   | boolean    true means enabled
396   "version"                  | string     long version string "$version ($revision)"
397
398   "rpc-version" indicates the RPC interface version supported by the RPC server.
399   It is incremented when a new version of Transmission changes the RPC interface.
400
401   "rpc-version-minimum" indicates the oldest API supported by the RPC server.
402   It is changes when a new version of Transmission changes the RPC interface
403   in a way that is not backwards compatible.  There are no plans for this
404   to be common behavior.
405
4064.1.1.  Mutators
407
408   Method name: "session-set"
409   Request arguments: one or more of 4.1's arguments, except: "blocklist-size",
410                      "rpc-version", "rpc-version-minimum", and "version"
411   Response arguments: none
412
4134.1.2.  Accessors
414
415   Method name: "session-get"
416   Request arguments: none
417   Response arguments: all of 4.1's arguments
418
4194.2.  Session Statistics
420
421   Method name: "session-stats"
422
423   Request arguments: none
424
425   Response arguments:
426
427   string                     | value type
428   ---------------------------+-------------------------------------------------
429   "activeTorrentCount"       | number
430   "downloadSpeed"            | number
431   "pausedTorrentCount"       | number
432   "torrentCount"             | number
433   "uploadSpeed"              | number
434   ---------------------------+-------------------------------+
435   "cumulative-stats"         | object, containing:           |
436                              +------------------+------------+
437                              | uploadedBytes    | number     | tr_session_stats
438                              | downloadedBytes  | number     | tr_session_stats
439                              | filesAdded       | number     | tr_session_stats
440                              | sessionCount     | number     | tr_session_stats
441                              | secondsActive    | number     | tr_session_stats
442   ---------------------------+-------------------------------+
443   "current-stats"            | object, containing:           |
444                              +------------------+------------+
445                              | uploadedBytes    | number     | tr_session_stats
446                              | downloadedBytes  | number     | tr_session_stats
447                              | filesAdded       | number     | tr_session_stats
448                              | sessionCount     | number     | tr_session_stats
449                              | secondsActive    | number     | tr_session_stats
450
4514.3.  Blocklist
452
453   Method name: "blocklist-update"
454   Request arguments: none
455   Response arguments: a number "blocklist-size"
456
4574.4.  Port Checking
458
459   This method tests to see if your incoming peer port is accessible
460   from the outside world.
461
462   Method name: "port-test"
463   Request arguments: none
464   Response arguments: a bool, "port-is-open"
465
4665.0.  Protocol Versions
467
468  The following changes have been made to the RPC interface:
469
470   RPC   | Release | Backwards |                |
471   Vers. | Version | Compat?   | Method         | Description
472   ------+---------+-----------+----------------+-------------------------------
473   1     | 1.30    | n/a       | n/a            | Initial version
474   ------+---------+-----------+----------------+-------------------------------
475   2     | 1.34    | yes       | torrent-get    | new arg "peers"
476   ------+---------+-----------+----------------+-------------------------------
477   3     | 1.41    | yes       | torrent-get    | added "port" to "peers"
478         |         | yes       | torrent-get    | new arg "downloaders"
479         |         | yes       | session-get    | new arg "version"
480         |         | yes       | torrent-remove | new method
481   ------+---------+-----------+----------------+-------------------------------
482   4     | 1.50    | yes       | session-get    | new arg "rpc-version"
483         |         | yes       | session-get    | new arg "rpc-version-minimum"
484         |         | yes       | session-stats  | added "cumulative-stats"
485         |         | yes       | session-stats  | added "current-stats"
486         |         | yes       | torrent-get    | new arg "downloadDir"
487   ------+---------+-----------+----------------+-------------------------------
488   5     | 1.60    | yes       |                | new method "torrent-reannounce"
489         |         | yes       |                | new method "blocklist-update"
490         |         | yes       |                | new method "port-test"
491         |         |           |                |
492         |         | yes       | session-get    | new arg "alt-speed-begin"
493         |         | yes       | session-get    | new arg "alt-speed-down"
494         |         | yes       | session-get    | new arg "alt-speed-enabled"
495         |         | yes       | session-get    | new arg "alt-speed-end"
496         |         | yes       | session-get    | new arg "alt-speed-time-enabled"
497         |         | yes       | session-get    | new arg "alt-speed-up"
498         |         | yes       | session-get    | new arg "blocklist-enabled"
499         |         | yes       | session-get    | new arg "blocklist-size"
500         |         | yes       | session-get    | new arg "peer-limit-per-torrent"
501         |         | yes       | session-get    | new arg "seedRatioLimit"
502         |         | yes       | session-get    | new arg "seedRatioLimited"
503         |         |        NO | session-get    | renamed "pex-allowed" to "pex-enabled"
504         |         |        NO | session-get    | renamed "port" to "peer-port"
505         |         |        NO | session-get    | renamed "peer-limit" to "peer-limit-global"
506         |         |           |                |
507         |         | yes       | torrent-add    | new arg "files-unwanted"
508         |         | yes       | torrent-add    | new arg "files-wanted"
509         |         | yes       | torrent-add    | new arg "priority-high"
510         |         | yes       | torrent-add    | new arg "priority-low"
511         |         | yes       | torrent-add    | new arg "priority-normal"
512         |         |           |                |
513         |         | yes       | torrent-set    | new arg "bandwidthPriority"
514         |         | yes       | torrent-set    | new arg "honorsSessionLimits"
515         |         | yes       | torrent-set    | new arg "seedRatioLimit"
516         |         | yes       | torrent-set    | new arg "seedRatioLimited"
517         |         |        NO | torrent-set    | renamed "speed-limit-down" to "downloadLimit"
518         |         |        NO | torrent-set    | renamed "speed-limit-down-enabled" to "downloadLimited"
519         |         |        NO | torrent-set    | renamed "speed-limit-up" to "uploadLimit"
520         |         |        NO | torrent-set    | renamed "speed-limit-up-enabled" to "uploadLimited"
521         |         |           |                |
522         |         | yes       | torrent-get    | new arg "bandwidthPriority"
523         |         | yes       | torrent-get    | new arg "fileStats"
524         |         | yes       | torrent-get    | new arg "honorsSessionLimits"
525         |         | yes       | torrent-get    | new arg "percentDone"
526         |         | yes       | torrent-get    | new arg "pieces"
527         |         | yes       | torrent-get    | new arg "seedRatioLimit"
528         |         | yes       | torrent-get    | new arg "seedRatioMode"
529         |         | yes       | torrent-get    | new arg "torrentFile"
530         |         | yes       | torrent-get    | new ids option "recently-active"
531         |         |        NO | torrent-get    | removed arg "downloadLimitMode"
532         |         |        NO | torrent-get    | removed arg "uploadLimitMode"
533   ------+---------+-----------+----------------+-------------------------------
534   6     | 1.70    | yes       |                | new "method torrent-set-location"
535   ------+---------+-----------+----------------+-------------------------------
536
537
Note: See TracBrowser for help on using the repository browser.