curl --request GET \
--url https://api.worldmonitor.app/api/economic/v1/get-macro-signals \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/economic/v1/get-macro-signals"
headers = {"X-WorldMonitor-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-WorldMonitor-Key': '<api-key>'}};
fetch('https://api.worldmonitor.app/api/economic/v1/get-macro-signals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.worldmonitor.app/api/economic/v1/get-macro-signals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-WorldMonitor-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.worldmonitor.app/api/economic/v1/get-macro-signals"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-WorldMonitor-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.worldmonitor.app/api/economic/v1/get-macro-signals")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/economic/v1/get-macro-signals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-WorldMonitor-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"bullishCount": 1,
"meta": {
"qqqSparkline": [
1.5
]
},
"signals": {
"fearGreed": {
"history": [
{
"date": "2026-01-15",
"value": 1
}
],
"status": "example",
"value": 1
},
"flowStructure": {
"btcReturn5": 1.5,
"qqqReturn5": 1.5,
"status": "example"
},
"hashRate": {
"change30d": 1.5,
"status": "example"
},
"liquidity": {
"sparkline": [
1.5
],
"status": "example",
"value": 1.5
},
"macroRegime": {
"qqqRoc20": 1.5,
"status": "example",
"xlpRoc20": 1.5
}
},
"timestamp": "2026-01-15T12:00:00Z",
"totalCount": 1
}{
"violations": [
{
"field": "<string>",
"description": "<string>"
}
]
}{
"error": "<string>"
}{
"error": "<string>",
"code": "subscription_lapsed",
"requiredTier": 123,
"currentTier": 123,
"planKey": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"code": "renewal_verification_pending",
"requiredTier": 123
}{
"message": "<string>"
}GetMacroSignals
Review seven macro signals with bullish counts and BUY, CASH or UNKNOWN verdicts; unavailable cached data returns UNKNOWN to keep missing evidence explicit.
curl --request GET \
--url https://api.worldmonitor.app/api/economic/v1/get-macro-signals \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/economic/v1/get-macro-signals"
headers = {"X-WorldMonitor-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-WorldMonitor-Key': '<api-key>'}};
fetch('https://api.worldmonitor.app/api/economic/v1/get-macro-signals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.worldmonitor.app/api/economic/v1/get-macro-signals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-WorldMonitor-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.worldmonitor.app/api/economic/v1/get-macro-signals"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-WorldMonitor-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.worldmonitor.app/api/economic/v1/get-macro-signals")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/economic/v1/get-macro-signals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-WorldMonitor-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"bullishCount": 1,
"meta": {
"qqqSparkline": [
1.5
]
},
"signals": {
"fearGreed": {
"history": [
{
"date": "2026-01-15",
"value": 1
}
],
"status": "example",
"value": 1
},
"flowStructure": {
"btcReturn5": 1.5,
"qqqReturn5": 1.5,
"status": "example"
},
"hashRate": {
"change30d": 1.5,
"status": "example"
},
"liquidity": {
"sparkline": [
1.5
],
"status": "example",
"value": 1.5
},
"macroRegime": {
"qqqRoc20": 1.5,
"status": "example",
"xlpRoc20": 1.5
}
},
"timestamp": "2026-01-15T12:00:00Z",
"totalCount": 1
}{
"violations": [
{
"field": "<string>",
"description": "<string>"
}
]
}{
"error": "<string>"
}{
"error": "<string>",
"code": "subscription_lapsed",
"requiredTier": 123,
"currentTier": 123,
"planKey": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"code": "renewal_verification_pending",
"requiredTier": 123
}{
"message": "<string>"
}Authorizations
User-issued WorldMonitor API key.
Query Parameters
Optional JMESPath expression applied server-side to project or reduce the JSON response before it is returned (mirrors the MCP jmespath argument). Invalid expressions, expressions larger than 1024 UTF-8 bytes, or projections that exceed the 256 KB output cap return HTTP 400 with a {_jmespath_error, original_keys} envelope. Grammar and worked examples: https://www.worldmonitor.app/docs/mcp-jmespath.
Response
Successful response
GetMacroSignalsResponse contains the full macro signal dashboard with 7 signals and verdict.
ISO 8601 timestamp of computation.
Overall verdict: "BUY", "CASH", or "UNKNOWN".
Number of bullish signals.
Total number of evaluated signals (excluding UNKNOWN).
MacroSignals contains all 7 individual signal computations.
Show child attributes
Show child attributes
MacroMeta contains supplementary chart data.
Show child attributes
Show child attributes
True when upstream data is unavailable (fallback result). True when the upstream or seed-backed variant is unavailable; empty payload fields are graceful degradation, not confirmed zero data.
Was this page helpful?
