The blocklist catalogue with sources and licences.
const url = 'https://api.opdns.io/v1/lists?limit=50';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/lists?limit=50'Lists the blocklists profiles can enable, with category, source and licence, ordered by list id. Public, paginated and rate limited per client IP.
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Page size.
The next_cursor of the previous page (opaque).
Responses
Section titled “Responses”Catalogue, retired lists included.
object
Cursor of the next page (pass it as cursor); null on the last page.
object
The profile toggle the list backs (for example threat_intel); empty for a list enabled by id only.
The distinct attribution texts of the list’s sources, one per line; empty when none is required.
The enabled sources feeding the list (list_sources).
object
Upstream URL, or curated://… for in-repo curated data.
SPDX identifier, or LicenseRef-… for custom terms.
Entries the source gave the last fleet build.
When the source’s snapshot last changed; null before its first fetch.
Examplegenerated
{ "next_cursor": "example", "lists": [ { "id": 1, "name": "example", "category": "example", "source": "example", "licence": "example", "entry_count": 1, "version": 1, "retired": true, "updated_at": "2026-04-15T12:00:00Z", "toggle": "example", "attribution": "example", "sources": [ { "id": "example", "name": "example", "url": "example", "licence": "example", "licence_url": "example", "attribution": "example", "entries": 1, "updated_at": "2026-04-15T12:00:00Z" } ] } ]}Malformed request.
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/bad_request", "title": "Bad Request", "status": 400, "code": "bad_request", "detail": "invalid JSON body", "request_id": "5f2c9a0e7b1d4c38"}Field validation failed (validation_failed, unknown_list).
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
Example
{ "type": "https://opdns.io/problems/validation_failed", "title": "Unprocessable Content", "status": 422, "code": "validation_failed", "detail": "the request has invalid fields", "errors": [ { "field": "settings.block_mode", "message": "one of nxdomain, refused, null, block-page" } ], "request_id": "5f2c9a0e7b1d4c38"}Rate limited (rate_limited).
object
Stable machine code.
object
Seconds, repeating the Retry-After header (rate limits, offline nodes).
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}