curl --request GET \
--url https://api.worldmonitor.app/api/intelligence/v1/get-country-coverage \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/intelligence/v1/get-country-coverage"
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/intelligence/v1/get-country-coverage', 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/intelligence/v1/get-country-coverage",
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/intelligence/v1/get-country-coverage"
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/intelligence/v1/get-country-coverage")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/intelligence/v1/get-country-coverage")
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{
"containment": "example",
"countryCode": "US",
"countryName": "US",
"degraded": true,
"events": [
{
"label": "example",
"lane": "example",
"occurredAt": "2026-01-15T12:00:00Z",
"origin": "example",
"severity": "watch"
}
]
}{
"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>"
}GetCountryCoverage
GetCountryCoverage returns the country panel’s visible coverage timeline: clustered news incidents reconciled against first-party structured records, with per-producer freshness so an empty list is never silent. PRO-gated. Requires an active Pro subscription.
curl --request GET \
--url https://api.worldmonitor.app/api/intelligence/v1/get-country-coverage \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/intelligence/v1/get-country-coverage"
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/intelligence/v1/get-country-coverage', 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/intelligence/v1/get-country-coverage",
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/intelligence/v1/get-country-coverage"
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/intelligence/v1/get-country-coverage")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/intelligence/v1/get-country-coverage")
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{
"containment": "example",
"countryCode": "US",
"countryName": "US",
"degraded": true,
"events": [
{
"label": "example",
"lane": "example",
"occurredAt": "2026-01-15T12:00:00Z",
"origin": "example",
"severity": "watch"
}
]
}{
"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
ISO 3166-1 alpha-2 country code.
^[A-Z]{2}$Look-back window in hours. 0 or absent means the 168-hour (7-day) window
the country panel uses. Values above 168 are rejected: the upstream
coverage query itself is pinned to when:7d, so a longer window would
silently return the same events under a wider label.
Maximum timeline events to return, newest last. 0 or absent means 200.
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
GetCountryCoverageResponse is the country panel's visible coverage set.
ISO 3166-1 alpha-2 code, echoed back uppercased.
Resolved country name, or the ISO code when no name is known.
Window actually applied, in hours.
When this response was assembled, ISO-8601 UTC.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
True when any producer is "stale" or "failed" — something is wrong now that
was not wrong before. An agent must not read an empty events list as
"nothing happened" while this is true.
Deliberately EXCLUDES "unavailable" and "unknown". Both are STRUCTURAL properties of this surface, true on every response regardless of upstream health: two producers have no server-side equivalent at all, and a producer that returns nothing globally cannot prove it was reached. Folding either in would pin this flag to true forever and destroy its signal.
This hides nothing: sources always carries every producer's own state, and
that is where the "an empty list is never silently healthy" guarantee lives.
Read sources before interpreting an empty events list, always.
How a structured event was tested for being inside this country: "bbox" on this surface. The browser panel tests the loaded country polygon first and falls back to the same box, so a structured event inside the box but outside the polygon appears here and not in the panel. Coverage events are matched by headline text and are unaffected.
Was this page helpful?
