curl --request GET \
--url https://api.worldmonitor.app/api/trade/v1/get-tariff-trends \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/trade/v1/get-tariff-trends"
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/trade/v1/get-tariff-trends', 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/trade/v1/get-tariff-trends",
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/trade/v1/get-tariff-trends"
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/trade/v1/get-tariff-trends")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/trade/v1/get-tariff-trends")
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{
"coverageEndYear": 1,
"coverageStartYear": 1,
"datapoints": [
{
"boundRate": 0,
"indicatorCode": "example",
"partnerCountry": "World",
"productSector": "All products",
"reportingCountry": "840"
}
],
"effectiveTariffRate": {
"observationPeriod": "daily",
"sourceName": "WorldMonitor Analyst",
"sourceUrl": "https://example.com/worldmonitor",
"tariffRate": 75.25,
"updatedAt": "2026-01-15"
},
"fetchedAt": "2026-01-15T12:00:00Z"
}{
"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>"
}GetTariffTrends
Average applied tariff timeseries for one reporting economy: the MFN rate over all products, or with a partner and/or product group the effectively applied rate on those imports. Not an HS-line rate. PRO-gated. Requires entitlement tier >= 1.
curl --request GET \
--url https://api.worldmonitor.app/api/trade/v1/get-tariff-trends \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/trade/v1/get-tariff-trends"
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/trade/v1/get-tariff-trends', 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/trade/v1/get-tariff-trends",
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/trade/v1/get-tariff-trends"
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/trade/v1/get-tariff-trends")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/trade/v1/get-tariff-trends")
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{
"coverageEndYear": 1,
"coverageStartYear": 1,
"datapoints": [
{
"boundRate": 0,
"indicatorCode": "example",
"partnerCountry": "World",
"productSector": "All products",
"reportingCountry": "840"
}
],
"effectiveTariffRate": {
"observationPeriod": "daily",
"sourceName": "WorldMonitor Analyst",
"sourceUrl": "https://example.com/worldmonitor",
"tariffRate": 75.25,
"updatedAt": "2026-01-15"
},
"fetchedAt": "2026-01-15T12:00:00Z"
}{
"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
WTO member code of reporting country, as a 3-digit UN M49 code (for example "840" = United States). Empty selects the "840" default.
^([0-9]{3})?$Exporting partner, 3-digit UN M49 code ("000" = World). Empty or "000" with no product_sector selects the MFN series.
^([0-9]{3})?$WITS product group: an HS section such as "84-85_MachElec" or "50-63_TextCloth", or "AgrRaw", "Chemical", "Food", "Fuels", "manuf", "OresMtls", "Textiles", "Transp" (case-insensitive). Empty or "all" means all products. Other values are answered NOT_COVERED.
^([a-zA-Z0-9_-]{0,16})?$Number of years to look back from the newest seeded year, inclusive of both endpoints (years = 10 returns 11 calendar years). 0 selects the default of 10; the maximum is 30, which is the full seeded window.
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
Response containing tariff trend datapoints.
Show child attributes
Show child attributes
ISO 8601 time the data was fetched from WTO or WITS.
True when datapoints could not be served because of a fault — a seeded reporter whose cache entry is gone, or a cache read that failed. False when datapoints are served AND when the request names a combination that is simply not part of seeded coverage, which is a contract answer rather than an outage.
Current effective tariff estimate for countries with coverage beyond WTO MFN baselines.
Show child attributes
Show child attributes
TariffTrendUnavailableReason says why no datapoints were returned. The distinction that matters is NOT_COVERED — a contract answer, nothing is broken and a retry cannot help — against every other member, which names a fault.
TARIFF_TREND_UNAVAILABLE_REASON_UNSPECIFIED, TARIFF_TREND_UNAVAILABLE_REASON_INVALID_REQUEST, TARIFF_TREND_UNAVAILABLE_REASON_NOT_COVERED, TARIFF_TREND_UNAVAILABLE_REASON_SEED_MISSING, TARIFF_TREND_UNAVAILABLE_REASON_COVERAGE_UNKNOWN, TARIFF_TREND_UNAVAILABLE_REASON_CACHE_UNAVAILABLE, TARIFF_TREND_UNAVAILABLE_REASON_UPSTREAM_UNAVAILABLE First and last calendar year covered by datapoints. Both are 0 when no
datapoints are returned. This is the effective window after slicing to
years, which may be narrower than the requested lookback when the seed
starts later.
Was this page helpful?
