# JSON-RPC

## Quick start

The easiest way to test the API is to use Curl commands. A Curl command to the Filecoin network looks something like this:

```curl
curl --location --request POST '<NODE_ADDRESS>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "jsonrpc":"2.0",
    "method":"<API_METHOD_TO_CALL>",
    "params": [<ARRAY OF PARAMETERS>],
    "id":1
}'
```

## Step-by-step example

1. In a terminal window, use Curl to request the current chain head from a public [Glif](https://glif.io/en) node.\\

* ```shell
  curl -X POST 'https://api.node.glif.io' \
      -H 'Content-Type: application/json' \
      --data '{"jsonrpc":"2.0","id":1,"method":"Filecoin.ChainHead","params":[]}'
  ```

  ```shell
  {"jsonrpc":"2.0","result":{"Cids":[{"/":"bafy2bzaceayoigaf3v5muqmknpjfkguse43jp4t2zxhpmykhqynqhkdgpgybc"},{"/":"bafy2bzacecnrtzlhn6h75gm7tozhzuw77plvdhniwzfj7wgmyuju6wn573h22"},{"/":"bafy2bzacecygiaxfsqv7ecb2gvodzh74eret3pchwe5e4j5a3mzlwasvndi6i"},{"/":"bafy2bzacebe477tdmijfse4je2g63gnnkdgzj3ftq6zbygd7toszkrsjts6uu"},{"/":"bafy2bzacedoe6hcxy2cgqzbg4p7qolbd5imbjpjnz2tj4n7o3kw2md4uv2ttq"},{"/":"bafy2bzacec7wbqvskwvolireljmufszdu5nk37yyg4qtxgnrwbyipgoenmhc6"},{"/":"bafy2bzaceahxdiauteywlbjnwj3ntr72qcbamtq3nbvjzyn5wruithpyqyxbm"}],"Blocks":[{"Miner":"f0693008","Ticket":{"VRFProof":"uLR0LHfNBAfQzyYUVBiIEXzyblPv3yPIEsJQGTpaAvO1ZriPZ7wC2IFpw7mrz1RvDQEfsgRXGxb6APTRvrPiFEAe35RFNLKC9SYb64PNcDYwGY4de5LdlHfyUv+Ovwg5"}...
  ```

  The ChainHead endpoint doesn’t require any input parameters, so we’ve left `params` an empty array `[]`.
* The above command will output a large chunk of JSON data. You can use [JSON processor JQ](https://stedolan.github.io/jq/) to *prettify* the output:

  ```
  ```

1. ```shell
   curl -X POST 'https://api.node.glif.io' \
       -H 'Content-Type: application/json' \
       --data '{"jsonrpc":"2.0","id":1,"method":"Filecoin.ChainHead","params":[]}' \
       | jq
   ```

   ```json
   {
       "jsonrpc": "2.0",
           "result": {
               "Cids": [
               {
                   "/": "bafy2bzacecrbhy67by4upktab6rvbgd3w5jml7zog4ifoaupo35yo4rbbc4am"
               },
               {
                   "/": "bafy2bzacecm42csr2ysmgpj54lz762iom4n4gcafkerijirzsfzq3jni2gqyu"
               }
               ],
               "Blocks": [
               {
                   "Miner": "f0152747",
                   "Ticket": {
   ...
   ```

## Permissions

Each method has specific permissions that must be met before you can receive a response from a Filecoin node. Methods with the `read` permission can be called by anyone at anytime, without the need for a token. All other permissions require you to send an authentication along with you request.

* `read`: Read node state, no private data.
* `write`: Write to local store / chain, and read permissions.
* `sign`: Use private keys stored in wallet for signing, read and write permissions.
* `admin`: Manage permissions, read, write, and sign permissions.

## Authentication

Each node implementation has different ways to generate and manage authentication tokens. Take a look at your node’s specific documentation:

* [Lotus](https://lotus.filecoin.io)
* [Venus](https://venus.filecoin.io)

If you are using a node provider service like [Glif](https://glif.io/en), take a look at your providers documentation to find out how to manage authentication tokens.

[Was this page helpful?](https://airtable.com/apppq4inOe4gmSSlk/pagoZHC2i1iqgphgl/form?prefill_Page+URL=https://docs.filecoin.io/reference/json-rpc)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.filecoin.io/reference/json-rpc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
