JSON-RPC is a standardized way to encode remote procedure calls in JSON. Projects such as Bitcoin and Ethereum have adopted it for use in their APIs.

Lotus uses JSON-RPC calls transported via HTTP or Websockets to communicate between different daemons and command line tools.

For example, when you run the Lotus node with lotus daemon, it will listen for connections on TCP port 1234 (by default).

Applications may connect to this port and issue JSON-RPC calls. For example, using CURL, if we want to call the Filecoin.Version method, we might do this:

curl -X POST \
  -H "Content-Type: application/json" \
  --data '{ 
      "jsonrpc": "2.0", 
      "method": "Filecoin.Version", 
      "params": [], 
      "id": 1 
    }' \ 

The Lotus daemon will return a response that looks something like:


Most of the time, when you run commands using the lotus command line client, for example, lotus version, it is actually connecting to the daemon using a WebSocket, and it is executing methods using JSON-RPC.

Different daemons that are part of Lotus support different sets of methods. When you execute lotus daemon, it will listen on port 1234 (by default), exposes JSON-RPC methods for wallets, making deals, checking chain sync status, etc. When you run lotus-storage-miner run, it will listen on port 2345 (by default), and it has a number of methods for doing things such as querying the status of sectors.

More details about the JSON-RPC API, including links to the lists of methods available, are at: docs.filecoin.io/reference/lotus-api