{ "components": { "schemas": { "Ack": { "description": "A void result. JSON-RPC allows a null result, but an object leaves room to\nadd a field later without changing the shape a client already parses.", "properties": { "ok": { "type": "boolean" } }, "required": [ "ok" ], "type": "object" }, "AuthParams": { "properties": { "protocol": { "default": 0, "format": "uint32", "minimum": 0, "type": "integer" }, "token": { "description": "Required on TCP. Omitted on a Unix socket, where the socket's own\npermissions already prove the caller is this user.", "type": [ "string", "null" ] } }, "type": "object" }, "AuthResult": { "properties": { "daemon_version": { "type": "string" }, "protocol": { "format": "uint32", "minimum": 0, "type": "integer" }, "username": { "description": "The Soulseek account the daemon is logged in as.", "type": "string" } }, "required": [ "protocol", "daemon_version", "username" ], "type": "object" }, "BrowseEvent": { "description": "A peer answered a browse request. Carried whole rather than as a \"go ask\nfor it\" nudge, because the daemon's own copy is consumed when it drains.", "properties": { "directories": { "items": { "$ref": "#/components/schemas/SharedDirectoryDto" }, "type": "array" }, "username": { "type": "string" } }, "required": [ "username", "directories" ], "type": "object" }, "ChatMessageDto": { "description": "One line of chat history. Unlike a live [`UserMessageDto`] this carries a\ndirection, because a conversation the daemon collected includes what this\naccount sent as well as what it received.", "properties": { "at": { "description": "Unix seconds.", "format": "int64", "type": "integer" }, "outgoing": { "type": "boolean" }, "peer": { "description": "The other party, whichever way the message went.", "type": "string" }, "text": { "type": "string" } }, "required": [ "peer", "outgoing", "text", "at" ], "type": "object" }, "DaemonStatus": { "description": "What the daemon is and what its session is doing, from `daemon.status`.", "properties": { "clients": { "description": "Control connections currently attached.", "format": "uint", "minimum": 0, "type": "integer" }, "daemon_version": { "type": "string" }, "download_dir": { "type": "string" }, "listen_port": { "default": null, "format": "uint16", "maximum": 65535, "minimum": 0, "type": [ "integer", "null" ] }, "protocol": { "format": "uint32", "minimum": 0, "type": "integer" }, "server": { "type": "string" }, "session_loss": { "anyOf": [ { "$ref": "#/components/schemas/SessionLossDto" }, { "type": "null" } ], "default": null }, "shared_files": { "format": "uint32", "minimum": 0, "type": "integer" }, "shared_folders": { "format": "uint32", "minimum": 0, "type": "integer" }, "uptime_secs": { "format": "uint64", "minimum": 0, "type": "integer" }, "username": { "type": "string" } }, "required": [ "username", "server", "daemon_version", "protocol", "shared_folders", "shared_files", "download_dir", "clients", "uptime_secs" ], "type": "object" }, "DirectoriesParams": { "properties": { "directories": { "items": { "type": "string" }, "type": "array" } }, "required": [ "directories" ], "type": "object" }, "DirectoryParams": { "description": "Where the daemon should land transfers from now on, on *its* filesystem.\nThe same trust as `shares.set`: an authenticated caller is the owner.", "properties": { "directory": { "type": "string" } }, "required": [ "directory" ], "type": "object" }, "DownloadDto": { "properties": { "download_directory": { "type": "string" }, "filename": { "type": "string" }, "metadata": { "$ref": "#/components/schemas/DownloadMetadataDto", "default": { "bitrate": null, "length_seconds": null, "peer_free_slots": null, "peer_upload_speed": null } }, "queue_position": { "default": null, "format": "uint32", "minimum": 0, "type": [ "integer", "null" ] }, "size": { "format": "uint64", "minimum": 0, "type": "integer" }, "status": { "$ref": "#/components/schemas/DownloadStatusDto" }, "token": { "format": "uint32", "minimum": 0, "type": "integer" }, "username": { "type": "string" } }, "required": [ "username", "filename", "token", "size", "download_directory", "status" ], "type": "object" }, "DownloadMetadataDto": { "properties": { "bitrate": { "default": null, "format": "uint32", "minimum": 0, "type": [ "integer", "null" ] }, "length_seconds": { "default": null, "format": "uint32", "minimum": 0, "type": [ "integer", "null" ] }, "peer_free_slots": { "default": null, "format": "uint8", "maximum": 255, "minimum": 0, "type": [ "integer", "null" ] }, "peer_upload_speed": { "default": null, "format": "uint32", "minimum": 0, "type": [ "integer", "null" ] } }, "type": "object" }, "DownloadStartParams": { "properties": { "filename": { "type": "string" }, "metadata": { "$ref": "#/components/schemas/DownloadMetadataDto", "default": { "bitrate": null, "length_seconds": null, "peer_free_slots": null, "peer_upload_speed": null } }, "size": { "default": 0, "format": "uint64", "minimum": 0, "type": "integer" }, "username": { "type": "string" } }, "required": [ "username", "filename" ], "type": "object" }, "DownloadStarted": { "properties": { "download": { "$ref": "#/components/schemas/DownloadDto" } }, "required": [ "download" ], "type": "object" }, "DownloadStatusDto": { "oneOf": [ { "properties": { "state": { "const": "queued", "type": "string" } }, "required": [ "state" ], "type": "object" }, { "properties": { "bytes_downloaded": { "format": "uint64", "minimum": 0, "type": "integer" }, "speed_bytes_per_sec": { "format": "double", "type": "number" }, "state": { "const": "in_progress", "type": "string" }, "total_bytes": { "format": "uint64", "minimum": 0, "type": "integer" } }, "required": [ "state", "bytes_downloaded", "total_bytes", "speed_bytes_per_sec" ], "type": "object" }, { "properties": { "bytes_downloaded": { "format": "uint64", "minimum": 0, "type": "integer" }, "state": { "const": "paused", "type": "string" }, "total_bytes": { "format": "uint64", "minimum": 0, "type": "integer" } }, "required": [ "state", "bytes_downloaded", "total_bytes" ], "type": "object" }, { "properties": { "state": { "const": "completed", "type": "string" } }, "required": [ "state" ], "type": "object" }, { "properties": { "state": { "const": "cancelled", "type": "string" } }, "required": [ "state" ], "type": "object" }, { "properties": { "reason": { "type": [ "string", "null" ] }, "state": { "const": "failed", "type": "string" } }, "required": [ "state" ], "type": "object" }, { "properties": { "state": { "const": "timed_out", "type": "string" } }, "required": [ "state" ], "type": "object" } ] }, "DownloadStatusEvent": { "description": "One step in a transfer this client started.", "properties": { "filename": { "type": "string" }, "status": { "$ref": "#/components/schemas/DownloadStatusDto" }, "username": { "type": "string" } }, "required": [ "username", "filename", "status" ], "type": "object" }, "Downloads": { "properties": { "downloads": { "items": { "$ref": "#/components/schemas/DownloadDto" }, "type": "array" } }, "required": [ "downloads" ], "type": "object" }, "FileDto": { "properties": { "attribs": { "additionalProperties": false, "description": "Soulseek attribute codes (0 = bitrate, 1 = duration in seconds).", "patternProperties": { "^\\d+$": { "format": "uint32", "minimum": 0, "type": "integer" } }, "type": "object" }, "name": { "type": "string" }, "size": { "format": "uint64", "minimum": 0, "type": "integer" } }, "required": [ "name", "size", "attribs" ], "type": "object" }, "IntervalSeconds": { "properties": { "seconds": { "format": "uint64", "minimum": 0, "type": "integer" } }, "required": [ "seconds" ], "type": "object" }, "MemberStats": { "description": "What the server said about each member of a room when it was joined.", "properties": { "members": { "items": { "$ref": "#/components/schemas/RoomUserStatsDto" }, "type": "array" } }, "required": [ "members" ], "type": "object" }, "Members": { "properties": { "users": { "items": { "type": "string" }, "type": "array" } }, "required": [ "users" ], "type": "object" }, "MessageParams": { "properties": { "message": { "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "message" ], "type": "object" }, "Messages": { "properties": { "messages": { "items": { "$ref": "#/components/schemas/ChatMessageDto" }, "type": "array" } }, "required": [ "messages" ], "type": "object" }, "QueryParams": { "properties": { "query": { "type": "string" } }, "required": [ "query" ], "type": "object" }, "RoomEventDto": { "oneOf": [ { "properties": { "event": { "const": "list", "type": "string" }, "rooms": { "items": { "$ref": "#/components/schemas/RoomInfoDto" }, "type": "array" } }, "required": [ "event", "rooms" ], "type": "object" }, { "properties": { "event": { "const": "joined", "type": "string" }, "room": { "type": "string" }, "users": { "items": { "type": "string" }, "type": "array" } }, "required": [ "event", "room", "users" ], "type": "object" }, { "properties": { "event": { "const": "left", "type": "string" }, "room": { "type": "string" } }, "required": [ "event", "room" ], "type": "object" }, { "properties": { "event": { "const": "message", "type": "string" }, "message": { "type": "string" }, "room": { "type": "string" }, "username": { "type": "string" } }, "required": [ "event", "room", "username", "message" ], "type": "object" }, { "properties": { "event": { "const": "user_joined", "type": "string" }, "room": { "type": "string" }, "username": { "type": "string" } }, "required": [ "event", "room", "username" ], "type": "object" }, { "properties": { "event": { "const": "user_left", "type": "string" }, "room": { "type": "string" }, "username": { "type": "string" } }, "required": [ "event", "room", "username" ], "type": "object" } ] }, "RoomInfoDto": { "properties": { "name": { "type": "string" }, "user_count": { "format": "uint32", "minimum": 0, "type": "integer" } }, "required": [ "name", "user_count" ], "type": "object" }, "RoomRef": { "properties": { "room": { "type": "string" } }, "required": [ "room" ], "type": "object" }, "RoomUserStatsDto": { "description": "One member of a room, as the JoinRoom reply described them.", "properties": { "average_speed": { "format": "uint32", "minimum": 0, "type": "integer" }, "country": { "type": [ "string", "null" ] }, "shared_files": { "format": "uint32", "minimum": 0, "type": "integer" }, "shared_folders": { "format": "uint32", "minimum": 0, "type": "integer" }, "slots_full": { "description": "True when the member's upload slots are all occupied.", "type": "boolean" }, "status": { "description": "`online`, `away`, or `offline`.", "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "status", "average_speed", "shared_files", "shared_folders", "slots_full" ], "type": "object" }, "SayParams": { "properties": { "message": { "type": "string" }, "room": { "type": "string" } }, "required": [ "room", "message" ], "type": "object" }, "SearchResultDto": { "properties": { "files": { "items": { "$ref": "#/components/schemas/FileDto" }, "type": "array" }, "slots": { "format": "uint8", "maximum": 255, "minimum": 0, "type": "integer" }, "speed": { "format": "uint32", "minimum": 0, "type": "integer" }, "token": { "format": "uint32", "minimum": 0, "type": "integer" }, "username": { "type": "string" } }, "required": [ "token", "username", "slots", "speed", "files" ], "type": "object" }, "SearchResults": { "properties": { "results": { "items": { "$ref": "#/components/schemas/SearchResultDto" }, "type": "array" } }, "required": [ "results" ], "type": "object" }, "SearchSummary": { "description": "One search as the daemon sees it, for a client that did not run it.", "properties": { "files": { "description": "Files found so far, across every peer that has answered.", "format": "uint", "minimum": 0, "type": "integer" }, "query": { "type": "string" }, "started_secs_ago": { "description": "How long ago the query went out. A client compares this with its own\nsearch window to decide whether the search is still collecting.", "format": "uint64", "minimum": 0, "type": "integer" } }, "required": [ "query", "files", "started_secs_ago" ], "type": "object" }, "Searches": { "description": "Every search this session has run, newest last. Shared by all clients, so\na second one attaching sees what the first has been looking for.", "properties": { "searches": { "items": { "$ref": "#/components/schemas/SearchSummary" }, "type": "array" } }, "required": [ "searches" ], "type": "object" }, "Seconds": { "properties": { "seconds": { "default": null, "format": "uint32", "minimum": 0, "type": [ "integer", "null" ] } }, "type": "object" }, "SessionLossDto": { "enum": [ "displaced", "disconnected" ], "type": "string" }, "SessionLossEvent": { "properties": { "loss": { "$ref": "#/components/schemas/SessionLossDto" } }, "required": [ "loss" ], "type": "object" }, "SharedDirectoryDto": { "properties": { "files": { "description": "Basename and size; join with the directory to get a downloadable path.", "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "type": "string" }, { "format": "uint64", "minimum": 0, "type": "integer" } ], "type": "array" }, "type": "array" }, "name": { "type": "string" } }, "required": [ "name", "files" ], "type": "object" }, "SharesStatus": { "description": "What the share index holds, from `shares.status` / `shares.reindex`.", "properties": { "directories": { "items": { "type": "string" }, "type": "array" }, "files": { "format": "uint32", "minimum": 0, "type": "integer" }, "folders": { "format": "uint32", "minimum": 0, "type": "integer" } }, "required": [ "folders", "files", "directories" ], "type": "object" }, "SlotsParams": { "properties": { "slots": { "format": "uint", "minimum": 0, "type": "integer" } }, "required": [ "slots" ], "type": "object" }, "TransferRef": { "description": "Names one transfer, which is how both directions are addressed.", "properties": { "filename": { "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "filename" ], "type": "object" }, "UploadInfoDto": { "properties": { "bytes_sent": { "format": "uint64", "minimum": 0, "type": "integer" }, "filename": { "type": "string" }, "size": { "format": "uint64", "minimum": 0, "type": "integer" }, "speed_bytes_per_sec": { "format": "double", "type": "number" }, "status": { "$ref": "#/components/schemas/UploadStatusDto" }, "username": { "type": "string" } }, "required": [ "username", "filename", "size", "bytes_sent", "status", "speed_bytes_per_sec" ], "type": "object" }, "UploadStatusDto": { "oneOf": [ { "description": "Waiting for a slot, at this 1-based place in the queue.", "properties": { "place": { "format": "uint32", "minimum": 0, "type": "integer" }, "state": { "const": "queued", "type": "string" } }, "required": [ "state", "place" ], "type": "object" }, { "properties": { "state": { "const": "in_progress", "type": "string" } }, "required": [ "state" ], "type": "object" }, { "properties": { "state": { "const": "completed", "type": "string" } }, "required": [ "state" ], "type": "object" }, { "properties": { "state": { "const": "cancelled", "type": "string" } }, "required": [ "state" ], "type": "object" }, { "properties": { "reason": { "type": "string" }, "state": { "const": "failed", "type": "string" } }, "required": [ "state", "reason" ], "type": "object" } ] }, "Uploads": { "properties": { "uploads": { "items": { "$ref": "#/components/schemas/UploadInfoDto" }, "type": "array" } }, "required": [ "uploads" ], "type": "object" }, "UserInfoDto": { "description": "Each half is `None` until its reply lands, so a consumer can tell \"the\nserver said offline\" from \"the server has not answered yet\".", "properties": { "presence": { "anyOf": [ { "$ref": "#/components/schemas/UserPresenceDto" }, { "type": "null" } ], "default": null }, "stats": { "anyOf": [ { "$ref": "#/components/schemas/UserStatsDto" }, { "type": "null" } ], "default": null }, "username": { "type": "string" } }, "required": [ "username" ], "type": "object" }, "UserMessageDto": { "properties": { "id": { "format": "uint32", "minimum": 0, "type": "integer" }, "message": { "type": "string" }, "new_message": { "type": "boolean" }, "timestamp": { "format": "uint32", "minimum": 0, "type": "integer" }, "username": { "type": "string" } }, "required": [ "id", "timestamp", "username", "message", "new_message" ], "type": "object" }, "UserPresenceDto": { "properties": { "privileged": { "type": "boolean" }, "status": { "description": "`online`, `away`, or `offline`.", "type": "string" } }, "required": [ "status", "privileged" ], "type": "object" }, "UserRef": { "properties": { "username": { "type": "string" } }, "required": [ "username" ], "type": "object" }, "UserResult": { "properties": { "user": { "anyOf": [ { "$ref": "#/components/schemas/UserInfoDto" }, { "type": "null" } ], "default": null } }, "type": "object" }, "UserStatsDto": { "properties": { "average_speed": { "format": "uint32", "minimum": 0, "type": "integer" }, "shared_files": { "format": "uint32", "minimum": 0, "type": "integer" }, "shared_folders": { "format": "uint32", "minimum": 0, "type": "integer" } }, "required": [ "average_speed", "shared_files", "shared_folders" ], "type": "object" }, "Watched": { "description": "Everyone this session is watching, sorted by name.", "properties": { "users": { "items": { "type": "string" }, "type": "array" } }, "required": [ "users" ], "type": "object" } } }, "info": { "description": "Control a running soulseek-rs daemon. Newline-delimited JSON-RPC 2.0 over a Unix socket (local, authenticated by socket permissions) or TCP (remote, authenticated by the token in /daemon.token). `auth` must be the first request on a connection. Errors carry the CLI exit status in `error.data.exit`. Entries marked `x-notification` are pushed by the daemon and are never requested.", "license": { "name": "MIT" }, "title": "soulseek-rs daemon", "version": "1" }, "methods": [ { "name": "auth", "paramStructure": "by-name", "params": [ { "name": "protocol", "required": false, "schema": { "default": 0, "format": "uint32", "minimum": 0, "type": "integer" } }, { "name": "token", "required": false, "schema": { "description": "Required on TCP. Omitted on a Unix socket, where the socket's own\npermissions already prove the caller is this user.", "type": [ "string", "null" ] } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/AuthResult" } }, "summary": "Authenticate. Must be the first request on a connection." }, { "name": "daemon.status", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/DaemonStatus" } }, "summary": "Who the daemon is logged in as and what its session is doing." }, { "name": "daemon.stop", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Ask the daemon to shut down." }, { "name": "rpc.discover", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "type": "object" } }, "summary": "This document." }, { "name": "search.start", "paramStructure": "by-name", "params": [ { "name": "query", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Put a search on the wire and return at once; results accumulate." }, { "name": "search.results", "paramStructure": "by-name", "params": [ { "name": "query", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/SearchResults" } }, "summary": "Everything that has answered a search so far." }, { "name": "search.list", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Searches" } }, "summary": "Every search this session has run, shared by all clients." }, { "name": "search.forget", "paramStructure": "by-name", "params": [ { "name": "query", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Drop a search and its results, for every client at once." }, { "name": "search.wishlist", "paramStructure": "by-name", "params": [ { "name": "query", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Send a query as a wishlist search (server code 103)." }, { "name": "search.wishlist_interval", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/IntervalSeconds" } }, "summary": "How long the server wants between wishlist searches." }, { "name": "download.start", "paramStructure": "by-name", "params": [ { "name": "filename", "required": true, "schema": { "type": "string" } }, { "name": "metadata", "required": false, "schema": { "$ref": "#/components/schemas/DownloadMetadataDto", "default": { "bitrate": null, "length_seconds": null, "peer_free_slots": null, "peer_upload_speed": null } } }, { "name": "size", "required": false, "schema": { "default": 0, "format": "uint64", "minimum": 0, "type": "integer" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/DownloadStarted" } }, "summary": "Queue a transfer. Progress arrives as event.download_status." }, { "name": "download.list", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Downloads" } }, "summary": "Every transfer the daemon knows about." }, { "name": "download.pause", "paramStructure": "by-name", "params": [ { "name": "filename", "required": true, "schema": { "type": "string" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Pause a transfer in progress." }, { "name": "download.resume", "paramStructure": "by-name", "params": [ { "name": "filename", "required": true, "schema": { "type": "string" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Resume a paused transfer." }, { "name": "download.remove", "paramStructure": "by-name", "params": [ { "name": "filename", "required": true, "schema": { "type": "string" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Forget a transfer entirely." }, { "name": "download.remove_queued", "paramStructure": "by-name", "params": [ { "name": "filename", "required": true, "schema": { "type": "string" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Drop a transfer that has not started." }, { "name": "download.cancel", "paramStructure": "by-name", "params": [ { "name": "filename", "required": true, "schema": { "type": "string" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Stop a download, queued or in progress; its partial file is deleted." }, { "name": "download.set_dir", "paramStructure": "by-name", "params": [ { "name": "directory", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Land future transfers in a different folder on the daemon's host." }, { "name": "upload.list", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Uploads" } }, "summary": "Uploads being served, active first." }, { "name": "upload.cancel", "paramStructure": "by-name", "params": [ { "name": "filename", "required": true, "schema": { "type": "string" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Stop serving an upload in progress." }, { "name": "upload.slots", "paramStructure": "by-name", "params": [ { "name": "slots", "required": true, "schema": { "format": "uint", "minimum": 0, "type": "integer" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "How many uploads may run at once." }, { "name": "privileges.check", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Ask the server for this account's privilege time." }, { "name": "privileges.own", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Seconds" } }, "summary": "Privilege seconds left, or null if the server has not answered." }, { "name": "room.list_request", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Ask the server for the public room list; it arrives as event.room." }, { "name": "room.join", "paramStructure": "by-name", "params": [ { "name": "room", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Join a chat room." }, { "name": "room.leave", "paramStructure": "by-name", "params": [ { "name": "room", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Leave a chat room." }, { "name": "room.say", "paramStructure": "by-name", "params": [ { "name": "message", "required": true, "schema": { "type": "string" } }, { "name": "room", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Post a message to a room." }, { "name": "room.members", "paramStructure": "by-name", "params": [ { "name": "room", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Members" } }, "summary": "Who is currently in a room." }, { "name": "room.member_stats", "paramStructure": "by-name", "params": [ { "name": "room", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/MemberStats" } }, "summary": "What the server said about each member of a joined room." }, { "name": "message.send", "paramStructure": "by-name", "params": [ { "name": "message", "required": true, "schema": { "type": "string" } }, { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Send a private message." }, { "name": "message.history", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Messages" } }, "summary": "Private messages the daemon collected, including while nobody was attached." }, { "name": "browse.user", "paramStructure": "by-name", "params": [ { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Ask a peer for its share listing; it arrives as event.browse." }, { "name": "user.request", "paramStructure": "by-name", "params": [ { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Ask the server about a user; poll user.info for the answer." }, { "name": "user.info", "paramStructure": "by-name", "params": [ { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/UserResult" } }, "summary": "What the server has said about a user so far." }, { "name": "user.watch", "paramStructure": "by-name", "params": [ { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Watch a user, so the server keeps pushing their status." }, { "name": "user.unwatch", "paramStructure": "by-name", "params": [ { "name": "username", "required": true, "schema": { "type": "string" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Ack" } }, "summary": "Stop watching a user." }, { "name": "user.watched", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/Watched" } }, "summary": "Everyone this session is watching." }, { "name": "shares.status", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/SharesStatus" } }, "summary": "What the share index currently holds." }, { "name": "shares.set", "paramStructure": "by-name", "params": [ { "name": "directories", "required": true, "schema": { "items": { "type": "string" }, "type": "array" } } ], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/SharesStatus" } }, "summary": "Replace the shared folders and re-index." }, { "name": "shares.reindex", "paramStructure": "by-name", "params": [], "result": { "name": "result", "schema": { "$ref": "#/components/schemas/SharesStatus" } }, "summary": "Re-scan the configured folders." }, { "name": "event.room", "paramStructure": "by-name", "params": [ { "name": "payload", "required": true, "schema": { "$ref": "#/components/schemas/RoomEventDto" } } ], "result": { "name": "result", "schema": { "type": "null" } }, "summary": "Something happened in a room this session has joined.", "x-notification": true }, { "name": "event.message", "paramStructure": "by-name", "params": [ { "name": "payload", "required": true, "schema": { "$ref": "#/components/schemas/UserMessageDto" } } ], "result": { "name": "result", "schema": { "type": "null" } }, "summary": "A private message arrived.", "x-notification": true }, { "name": "event.upload", "paramStructure": "by-name", "params": [ { "name": "payload", "required": true, "schema": { "$ref": "#/components/schemas/UploadInfoDto" } } ], "result": { "name": "result", "schema": { "type": "null" } }, "summary": "An upload changed state.", "x-notification": true }, { "name": "event.download_status", "paramStructure": "by-name", "params": [ { "name": "payload", "required": true, "schema": { "$ref": "#/components/schemas/DownloadStatusEvent" } } ], "result": { "name": "result", "schema": { "type": "null" } }, "summary": "A transfer moved.", "x-notification": true }, { "name": "event.browse", "paramStructure": "by-name", "params": [ { "name": "payload", "required": true, "schema": { "$ref": "#/components/schemas/BrowseEvent" } } ], "result": { "name": "result", "schema": { "type": "null" } }, "summary": "A peer answered a browse request.", "x-notification": true }, { "name": "event.session_loss", "paramStructure": "by-name", "params": [ { "name": "payload", "required": true, "schema": { "$ref": "#/components/schemas/SessionLossEvent" } } ], "result": { "name": "result", "schema": { "type": "null" } }, "summary": "The server session was lost. A disconnected session is reconnected on its own and events resume; a displaced one is terminal. Read daemon.status for the live state.", "x-notification": true } ], "openrpc": "1.3.2" }