-
-
Notifications
You must be signed in to change notification settings - Fork 424
JSON RPC service
signal-cli provides a JSON-RPC based API with the jsonRpc and daemon commands.
-
jsonRpccommand accepts input on STDIN and responds on STDOUT. This is intended to make it easier to embed signal-cli in other applications.signal-cli -u _USERNAME_ jsonRpc -
daemoncommand provides a UNIX or TCP socket and can handle requests from multiple clients.signal-cli -u _USERNAME_ daemon --socketor for multi-account modesignal-cli daemon --socket
In JSON-RPC mode, signal-cli will read requests from stdin. Every requests must be a JSON object in a single line. Requests must have a unique "id" value to be able to match the response to the corresponding request.
Example:
REQUEST: {"jsonrpc":"2.0","method":"listGroups","id":"my special mark"}
RESPONSE: {"jsonrpc":"2.0","result":[{"id":"Pmpi+EfPWmsxiomLe9Nx2XF9HOE483p6iKiFj65iMwI=","name":"My Group","description":"It's special because it is mine.","isMember":true,"isBlocked":false,"members":["+33123456789","+440123456789"],"pendingMembers":[],"requestingMembers":[],"admins":["+33123456789","+440123456789"],"groupInviteLink":"https://signal.group/#CjQKIAtcbUw482i7bqvmJCwdgvg0FMif52N5v9lGg_bE4U3zEhCjHKSaPzWImMpnCbU8A1r0"}],"id":"my special mark"}
From the command line:
echo '{"jsonrpc":"2.0","method":"listGroups","id":"my special mark"}' | signal-cli -u +33123456789 jsonRpc
Like in dbus daemon mode, messages are automatically received in jsonRpc mode. Incoming messages are sent as JSON-RPC notifications.
Example:
{"jsonrpc":"2.0","method":"receive","params":{"envelope":{"source":"+33123456789","sourceNumber":"+33123456789","sourceUuid":"uuid","sourceName":"name","sourceDevice":1,"timestamp":1631458508784,"dataMessage":{"timestamp":1631458508784,"message":"foobar","expiresInSeconds":0,"viewOnce":false,"mentions":[],"attachments":[],"contacts":[]}}}}
The commands available for the JSON-RPC mode are the same as the cli commands (except register, verify and link).
The method field is the command name and the parameters can be sent as the params object.
-
Parameter names are provided in camelCase format instead of the hyphen format on the cli.
e.g.:
--group-id=IDon the cli becomes"groupId":"ID" -
Parameters that can take multiple values on the command line can be provided as single json value or as json array
e.g.
--attachment ATTACH1 ATTACH2becomes"attachments":["ATTACH1", "ATTACH2"]--attachment ATTACHbecomes"attachment":"ATTACH"
REQUEST: {"jsonrpc":"2.0","method":"listGroups","id":"5"}
RESPONSE: {"jsonrpc":"2.0","result":[...],"id":"5"}
REQUEST: {"jsonrpc":"2.0","method":"send","params":{"recipient":["+YYY"],"message":"MESSAGE"},"id":4}
RESPONSE: {"jsonrpc":"2.0","result":{"timestamp":999},"id":4}
REQUEST: {"jsonrpc":"2.0","method":"updateGroup","params":{"groupId":"GROUP_ID=","name":"new group name","members":["+ZZZ"],"link":"enabledWithApproval","setPermissionEditDetails":"only-admins"},"id":"someId"}
RESPONSE: {"jsonrpc":"2.0","result":{"timestamp":9999},"id":"someId"}
REQUEST: {"jsonrpc":"2.0","method":"sendSyncRequest","id":9}
RESPONSE: {"jsonrpc":"2.0","result":{},"id":9}
REQUEST: {"jsonrpc":"2.0"}
RESPONSE: {"jsonrpc":"2.0","error":{"code":-32600,"message":"method field must be set","data":null},"id":null}