How to call JSON RPC API from C?

Ava: 25 May 2022

How do I make RPC calls from C?

My question is related to the question: "How do I call JSON RPC API using C#? ("

Alexander: 25 May 2022

The C API for processing JSON is Jansson ( C applications like libblkmaker ( use cURL ( for making the calls and Jansson for interpreting the JSON that cURL fetches.

For example basic usage (which can be easily modified for Bitcoin RPC), see the Jansson example github_commits.c ( and the associated tutorial (

Here's an example of how to make JSON RPC calls with cURL (, the output of which Jansson could process:

#include <stdlib.h>

#include <curl/curl.h>

int main()
    CURL *curl = curl_easy_init();
    struct curl_slist *headers = NULL;

    if (curl) {
    const char *data =
        "{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getinfo\", \"params\": [] }";

    headers = curl_slist_append(headers, "content-type: text/plain;");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

    curl_easy_setopt(curl, CURLOPT_URL, "");

    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(data));
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);

    curl_easy_setopt(curl, CURLOPT_USERPWD,

    curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_TRY);

    return 0;

It will print, like the cURL ( example, something like this:

{"result":{"balance":0.000000000000000,"blocks":59952,"connections":48,"proxy":"","generate":false, "genproclimit":-1,"difficulty":16.61907875185736},"error":null,"id":"curltest"}