WHO Global Health Observatory API
ghoapi.azureedge.net · Health
World Health Organization global health data — mortality, disease burden, health system capacity, and risk factors across 194 countries. OData API. Free, no key.
Authentication
No authentication requiredFree to use with no key needed.
Sample Requests
GET
List indicators
Find WHO health indicators related to obesity.
https://ghoapi.azureedge.net/api/Indicator?$filter=contains(IndicatorName,'obesity')&$select=IndicatorCode,IndicatorName
Hover any highlighted part to learn what it does
curl -X GET "https://ghoapi.azureedge.net/api/Indicator?$filter=contains(IndicatorName%2C'obesity')&$select=IndicatorCode%2CIndicatorName"
import requests
params = {
"$filter": "contains(IndicatorName,'obesity')",
"$select": "IndicatorCode,IndicatorName"
}
response = requests.get(
"https://ghoapi.azureedge.net/api/Indicator",
params=params,
)
print(response.json())const url = new URL('https://ghoapi.azureedge.net/api/Indicator');
url.searchParams.set('$filter', 'contains(IndicatorName,'obesity')');
url.searchParams.set('$select', 'IndicatorCode,IndicatorName');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://ghoapi.azureedge.net/api/Indicator")
q := baseURL.Query()
q.Set("$filter", "contains(IndicatorName,'obesity')")
q.Set("$select", "IndicatorCode,IndicatorName")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://ghoapi.azureedge.net/api/Indicator")
uri.query = URI.encode_www_form({
"$filter" => "contains(IndicatorName,'obesity')",
"$select" => "IndicatorCode,IndicatorName"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://ghoapi.azureedge.net/api/Indicator?" . http_build_query([
"$filter" => "contains(IndicatorName,'obesity')",
"$select" => "IndicatorCode,IndicatorName"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET
Get indicator data
Get life expectancy data for the USA.
https://ghoapi.azureedge.net/api/WHOSIS_000001?$top=5&$filter=SpatialDim eq 'USA'
Hover any highlighted part to learn what it does
curl -X GET "https://ghoapi.azureedge.net/api/WHOSIS_000001?$top=5&$filter=SpatialDim%20eq%20'USA'"
import requests
params = {
"$top": "5",
"$filter": "SpatialDim eq 'USA'"
}
response = requests.get(
"https://ghoapi.azureedge.net/api/WHOSIS_000001",
params=params,
)
print(response.json())const url = new URL('https://ghoapi.azureedge.net/api/WHOSIS_000001');
url.searchParams.set('$top', '5');
url.searchParams.set('$filter', 'SpatialDim eq 'USA'');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://ghoapi.azureedge.net/api/WHOSIS_000001")
q := baseURL.Query()
q.Set("$top", "5")
q.Set("$filter", "SpatialDim eq 'USA'")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://ghoapi.azureedge.net/api/WHOSIS_000001")
uri.query = URI.encode_www_form({
"$top" => "5",
"$filter" => "SpatialDim eq 'USA'"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://ghoapi.azureedge.net/api/WHOSIS_000001?" . http_build_query([
"$top" => "5",
"$filter" => "SpatialDim eq 'USA'"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- No API key needed
- OData-based API — uses $filter, $select, $top, $skip params
- List all indicators: GET /api/Indicator
- Get data for indicator code: GET /api/{CODE}
- Filter by country: ?$filter=SpatialDim eq 'GBR'
- Indicator codes found in the Indicator endpoint