The PoP catalogue.
GET
/v1/pops
const url = 'https://api.opdns.io/v1/pops';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.opdns.io/v1/popsEvery PoP of this deployment’s fleet inventory that has a location, sorted by
id, for the dashboard map. id is the value the top_pops analytics shape
reports; name is the label to show (the city); country is ISO 3166-1
alpha-2; lat and lon are WGS 84 degrees. status: active (serving),
canary (serving, receives changes first) or planned (not serving yet).
Cacheable for five minutes (Cache-Control: public, max-age=300); changes
only on deploy. An empty array when the deployment lists no PoP.
Responses
Section titled “Responses”PoPs.
Media typeapplication/json
Array<object>
object
id
required
Short PoP id, as in top_pops rows and log records (pop).
string
name
required
Label to show.
string
city
required
string
country
required
ISO 3166-1 alpha-2.
string
lat
required
number
lon
required
number
status
required
string
Example
[ { "id": "ams", "name": "Amsterdam", "city": "Amsterdam", "country": "NL", "status": "active" }]Rate limited (rate_limited).
Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
code
required
Stable machine code.
string
detail
string
errors
Array<object>
object
field
required
string
message
required
string
request_id
string
retry_after
Seconds, repeating the Retry-After header (rate limits, offline nodes).
integer
Example
{ "type": "https://opdns.io/problems/rate_limited", "title": "Too Many Requests", "status": 429, "code": "rate_limited", "detail": "too many requests", "request_id": "5f2c9a0e7b1d4c38", "retry_after": 6}Headers
Section titled “Headers”Retry-After
integer