curl --request GET \
--url https://api.worldmonitor.app/api/intelligence/v1/compute-energy-shock \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/intelligence/v1/compute-energy-shock"
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/compute-energy-shock', 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/compute-energy-shock",
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/compute-energy-shock"
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/compute-energy-shock")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/intelligence/v1/compute-energy-shock")
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{
"assessment": "example",
"chokepointConfidence": "example",
"chokepointId": "hormuz_strait",
"comtradeCoverage": true,
"countryCode": "US"
}{
"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>"
}ComputeEnergyShockScenario
ComputeEnergyShockScenario computes on-demand product supply shock for a given country + chokepoint.
curl --request GET \
--url https://api.worldmonitor.app/api/intelligence/v1/compute-energy-shock \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/intelligence/v1/compute-energy-shock"
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/compute-energy-shock', 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/compute-energy-shock",
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/compute-energy-shock"
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/compute-energy-shock")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/intelligence/v1/compute-energy-shock")
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{
"assessment": "example",
"chokepointConfidence": "example",
"chokepointId": "hormuz_strait",
"comtradeCoverage": true,
"countryCode": "US"
}{
"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 for the affected energy market.
Chokepoint identifier to model as disrupted.
hormuz_strait, malacca_strait, suez, bab_el_mandeb Percent of chokepoint flow disrupted, 10 to 100. Other values are clamped; an absent value models 10.
Fuel mode to model: "oil", "gas", or "both". Defaults to "oil".
oil, gas, both 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
Headline: preCrisisBaseline.gulfCrudeShare, a fraction of import value (tonnes if national_monthly) times the route factor; 0 when that baseline is absent or fuel_mode is gas.
Headline: preCrisisBaseline.crudeLossAfterBypassKbd when present, else preCrisisBaseline.crudeLossKbd; 0 when the loss is not modeled or fuel_mode is gas.
Show child attributes
Show child attributes
-1 marks a net oil exporter: the IEA flag, or, without an IEA record, a JODI crude row with positive production, crude exports above imports (unreported imports count as zero; an invalid reported figure disqualifies the row), and production at least refinery intake when intake is reported. No import-cover duration applies. It does not mean domestic supply is unexposed.
v2 fields
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Gulf crude share over one window and the crude loss it implies. preCrisisBaseline: the 12 months before the Hormuz crisis from at least 9 monthly filings (Comtrade, or national statistics for an importer with no Comtrade partner filings), else the annual share (basis comtrade_annual); drives the headline, products and cover. currentFlows: the latest 3 monthly filings since the crisis; absent when unavailable, never used for the products array or cover; the "product balance, current flows" line in limitations nets its crude loss.
Show child attributes
Show child attributes
Gulf crude share over one window and the crude loss it implies. preCrisisBaseline: the 12 months before the Hormuz crisis from at least 9 monthly filings (Comtrade, or national statistics for an importer with no Comtrade partner filings), else the annual share (basis comtrade_annual); drives the headline, products and cover. currentFlows: the latest 3 monthly filings since the crisis; absent when unavailable, never used for the products array or cover; the "product balance, current flows" line in limitations nets its crude loss.
Show child attributes
Show child attributes
Deprecated: hand-entered reserve estimates were replaced by ReportedStocks.
Show child attributes
Show child attributes
Month-end oil stocks a country without an IEA record reports to JODI (not IEA data). They set effective_cover_days only when stock_days is present; a net exporter keeps -1. Whether government reserves count depends on the reporter.
Show child attributes
Show child attributes
Was this page helpful?
