curl --request GET \
--url https://api.worldmonitor.app/api/trade/v1/get-bilateral-tariff \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/trade/v1/get-bilateral-tariff"
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-bilateral-tariff', 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-bilateral-tariff",
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-bilateral-tariff"
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-bilateral-tariff")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/trade/v1/get-bilateral-tariff")
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{
"appliedRate": {
"maxRate": 0,
"minRate": 0,
"nonAdValoremLines": 0,
"rate": 0,
"tariffLines": 1
},
"basis": "APPLIED_TARIFF_BASIS_PREFERENTIAL",
"filingReporter": "840",
"groupPreferences": [
{
"groupCode": "P22",
"groupName": "North American Free Trade Agreement (NAFTA)",
"rate": {
"maxRate": 0,
"minRate": 0,
"nonAdValoremLines": 0,
"rate": 0,
"tariffLines": 1
}
}
],
"hsCode": "870323",
"mfnRate": {
"maxRate": 2.5,
"minRate": 2.5,
"nonAdValoremLines": 0,
"rate": 2.5,
"tariffLines": 1
},
"nomenclature": "H5",
"partnerCountry": "484",
"preferentialRate": {
"maxRate": 0,
"minRate": 0,
"nonAdValoremLines": 0,
"rate": 0,
"tariffLines": 1
},
"reportingCountry": "840",
"source": "UNCTAD TRAINS via World Bank WITS",
"sourceUrl": "https://wits.worldbank.org/API/V1/SDMX/V21/datasource/TRN/reporter/840/partner/all/product/870323/year/2021/datatype/reported",
"upstreamUnavailable": false,
"year": 2021
}{
"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>"
}GetBilateralTariff
Applied tariff on one HS6 product between two countries (UNCTAD TRAINS). PRO-gated. Requires entitlement tier >= 1.
curl --request GET \
--url https://api.worldmonitor.app/api/trade/v1/get-bilateral-tariff \
--header 'X-WorldMonitor-Key: <api-key>'import requests
url = "https://api.worldmonitor.app/api/trade/v1/get-bilateral-tariff"
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-bilateral-tariff', 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-bilateral-tariff",
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-bilateral-tariff"
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-bilateral-tariff")
.header("X-WorldMonitor-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.worldmonitor.app/api/trade/v1/get-bilateral-tariff")
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{
"appliedRate": {
"maxRate": 0,
"minRate": 0,
"nonAdValoremLines": 0,
"rate": 0,
"tariffLines": 1
},
"basis": "APPLIED_TARIFF_BASIS_PREFERENTIAL",
"filingReporter": "840",
"groupPreferences": [
{
"groupCode": "P22",
"groupName": "North American Free Trade Agreement (NAFTA)",
"rate": {
"maxRate": 0,
"minRate": 0,
"nonAdValoremLines": 0,
"rate": 0,
"tariffLines": 1
}
}
],
"hsCode": "870323",
"mfnRate": {
"maxRate": 2.5,
"minRate": 2.5,
"nonAdValoremLines": 0,
"rate": 2.5,
"tariffLines": 1
},
"nomenclature": "H5",
"partnerCountry": "484",
"preferentialRate": {
"maxRate": 0,
"minRate": 0,
"nonAdValoremLines": 0,
"rate": 0,
"tariffLines": 1
},
"reportingCountry": "840",
"source": "UNCTAD TRAINS via World Bank WITS",
"sourceUrl": "https://wits.worldbank.org/API/V1/SDMX/V21/datasource/TRN/reporter/840/partner/all/product/870323/year/2021/datatype/reported",
"upstreamUnavailable": false,
"year": 2021
}{
"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
Importer, 3-digit UN M49 ("840"). EU members use the EU schedule.
^[0-9]{3}$Exporter, 3-digit UN M49 ("484"). "000" returns MFN only.
^[0-9]{3}$Six-digit HS subheading ("870323").
^[0-9]{6}$Tariff year; 0 = latest year TRAINS lists for the importer.
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
Applied tariff on one HS6 product between two countries.
Importer code, as requested.
Exporter code, as requested.
HS6 code, as requested.
Year served; 0 when none.
HS edition the importer filed in ("H5" = HS 2017).
Source of applied_rate.
APPLIED_TARIFF_BASIS_UNSPECIFIED, APPLIED_TARIFF_BASIS_PREFERENTIAL, APPLIED_TARIFF_BASIS_MFN, APPLIED_TARIFF_BASIS_MFN_PREFERENCES_NOT_REPORTED Simple average across the importer's national tariff lines, in percent.
Show child attributes
Show child attributes
Simple average across the importer's national tariff lines, in percent.
Show child attributes
Show child attributes
Simple average across the importer's national tariff lines, in percent.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Data source.
WITS query behind the rows.
True on a fault, false on a coverage answer.
Why no rate was served. NOT_COVERED is final; UPSTREAM_UNAVAILABLE is a fault.
BILATERAL_TARIFF_UNAVAILABLE_REASON_UNSPECIFIED, BILATERAL_TARIFF_UNAVAILABLE_REASON_INVALID_REQUEST, BILATERAL_TARIFF_UNAVAILABLE_REASON_NOT_COVERED, BILATERAL_TARIFF_UNAVAILABLE_REASON_UPSTREAM_UNAVAILABLE Reporter code queried: "918" for EU members.
Simple average across the importer's national tariff lines, in percent.
Show child attributes
Show child attributes
Was this page helpful?
