diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp
index e50c3a301..a6070fc0f 100644
--- a/src/web_service/web_backend.cpp
+++ b/src/web_service/web_backend.cpp
@@ -2,8 +2,9 @@
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 
+#include <cstdlib>
+#include <thread>
 #include <cpr/cpr.h>
-#include <stdlib.h>
 #include "common/logging/log.h"
 #include "web_service/web_backend.h"
 
@@ -11,6 +12,19 @@ namespace WebService {
 
 static constexpr char API_VERSION[]{"1"};
 
+static void PostJsonAuthenticated(const std::string& url, const std::string& data,
+                                  const std::string& username, const std::string& token) {
+    cpr::Post(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"},
+                                                          {"x-username", username},
+                                                          {"x-token", token},
+                                                          {"api-version", API_VERSION}});
+}
+
+static void PostJsonAnonymous(const std::string& url, const std::string& data) {
+    cpr::Post(cpr::Url{url}, cpr::Body{data},
+              cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}});
+}
+
 void PostJson(const std::string& url, const std::string& data, bool allow_anonymous,
               const std::string& username, const std::string& token) {
     if (url.empty()) {
@@ -24,18 +38,13 @@ void PostJson(const std::string& url, const std::string& data, bool allow_anonym
         return;
     }
 
+    // Post JSON asynchronously by spawning a new thread
     if (are_credentials_provided) {
         // Authenticated request if credentials are provided
-        cpr::PostAsync(cpr::Url{url}, cpr::Body{data},
-                       cpr::Header{{"Content-Type", "application/json"},
-                                   {"x-username", username},
-                                   {"x-token", token},
-                                   {"api-version", API_VERSION}});
+        std::thread{PostJsonAuthenticated, url, data, username, token}.detach();
     } else {
         // Otherwise, anonymous request
-        cpr::PostAsync(
-            cpr::Url{url}, cpr::Body{data},
-            cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}});
+        std::thread{PostJsonAnonymous, url, data}.detach();
     }
 }