curl --request GET \
--url https://api.worldmonitor.app/api/supply-chain/v1/get-route-explorer-lane \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/supply-chain/v1/get-route-explorer-lane"
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/supply-chain/v1/get-route-explorer-lane', 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/supply-chain/v1/get-route-explorer-lane",
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/supply-chain/v1/get-route-explorer-lane"
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/supply-chain/v1/get-route-explorer-lane")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/supply-chain/v1/get-route-explorer-lane")
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{
"bypassOptions": [
{
"addedCostMultiplier": 75.25,
"addedTransitDays": 7,
"fromPort": {
"lat": 40.7128,
"lon": -74.006
},
"id": "example-id",
"name": "WorldMonitor Analyst"
}
],
"cargoType": "container",
"chokepointExposures": [
{
"chokepointId": "suez",
"chokepointName": "WorldMonitor Analyst",
"exposurePct": 1
}
],
"disruptionScore": 42.5,
"estFreightUsdPerTeuRange": {
"max": 1,
"min": 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>"
}GetRouteExplorerLane
GetRouteExplorerLane returns the primary maritime route, chokepoint exposures, bypass options with geometry, war risk, and static transit/freight estimates for a country pair + HS2 + cargo type. PRO-gated. Wraps the route-intelligence vendor endpoint’s compute with browser-callable auth and adds fields needed by the Route Explorer UI. Requires entitlement tier >= 1.
curl --request GET \
--url https://api.worldmonitor.app/api/supply-chain/v1/get-route-explorer-lane \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/supply-chain/v1/get-route-explorer-lane"
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/supply-chain/v1/get-route-explorer-lane', 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/supply-chain/v1/get-route-explorer-lane",
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/supply-chain/v1/get-route-explorer-lane"
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/supply-chain/v1/get-route-explorer-lane")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/supply-chain/v1/get-route-explorer-lane")
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{
"bypassOptions": [
{
"addedCostMultiplier": 75.25,
"addedTransitDays": 7,
"fromPort": {
"lat": 40.7128,
"lon": -74.006
},
"id": "example-id",
"name": "WorldMonitor Analyst"
}
],
"cargoType": "container",
"chokepointExposures": [
{
"chokepointId": "suez",
"chokepointName": "WorldMonitor Analyst",
"exposurePct": 1
}
],
"disruptionScore": 42.5,
"estFreightUsdPerTeuRange": {
"max": 1,
"min": 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
ISO 3166-1 alpha-2 origin country code for the trade lane.
^[A-Z]{2}$ISO 3166-1 alpha-2 destination country code for the trade lane.
^[A-Z]{2}$HS2 chapter code, e.g. "27", "85"
One of: container, tanker, bulk, roro
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
Primary trade route ID from TRADE_ROUTES config. Empty when no modeled lane.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Inclusive integer range for transit days / freight USD estimates.
Show child attributes
Show child attributes
Inclusive integer range for transit days / freight USD estimates.
Show child attributes
Show child attributes
True when the wrapper fell back to the origin's first route (no shared route between origin and destination clusters). Signals "no modeled lane" to the UI.
Was this page helpful?
