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
GetMacroSignals computes 7 macro signals from 6 upstream sources with BUY/CASH verdict.
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?
