Developer landing · CC BY 4.0

Use the Voidly censorship dataset.

Six years of measurement, 200 countries, 2.2B+ data points, cross-verified against OONI, CensoredPlanet, and IODA. Pick the access surface that fits your workflow.

Access surfaces

REST API

Documented JSON endpoints. Auth optional for read; rate-limited.

voidly.ai/api-docs

HuggingFace snapshots

CSV bulk downloads. global-censorship-index + ooni-censorship-historical (1.66M+ downloads).

huggingface.co/emperor-mew

MCP server (AI agents)

83 tools for Claude, GPT, and agent frameworks to query the dataset in natural language.

voidly-ai/mcp-server

Live dashboard

Map view, active blocking events, country drilldown, ML-powered alerts, 7-day forecast.

voidly.ai

Quick start

Same query — recent verified incidents in Iran since 2026-01-01 — in four ecosystems.

curl
# Recent verified incidents in Iran
curl -s 'https://voidly.ai/api/v1/incidents?country=IR&since=2026-01-01' \
  -H 'Accept: application/json' | jq '.[] | {date,domain,classification}'
Python
import httpx

r = httpx.get(
    "https://voidly.ai/api/v1/incidents",
    params={"country": "IR", "since": "2026-01-01"},
    timeout=30,
)
for incident in r.json():
    print(incident["date"], incident["domain"], incident["classification"])
JavaScript
const url = new URL('https://voidly.ai/api/v1/incidents');
url.searchParams.set('country', 'IR');
url.searchParams.set('since', '2026-01-01');

const res = await fetch(url, { headers: { Accept: 'application/json' } });
const incidents = await res.json();
for (const i of incidents) console.log(i.date, i.domain, i.classification);
R
library(httr2)
library(jsonlite)

resp <- request("https://voidly.ai/api/v1/incidents") |>
  req_url_query(country = "IR", since = "2026-01-01") |>
  req_perform()

incidents <- fromJSON(resp_body_string(resp))
print(head(incidents))

Response shape

[
  {
    "date":           "2026-04-12T03:21:14Z",
    "country":        "IR",
    "domain":         "signal.org",
    "classification": "TLS_INTERFERENCE",
    "confidence":     "verified",
    "sources":        ["voidly", "ooni"],
    "asn":            58224,
    "block_type":     "sni_inspection",
    "evidence_url":   "https://voidly.ai/incidents/2026-04-12-IR-signal"
  }
  // ...
]

Variables measured

DNS_TAMPERING
Resolver returns the wrong IP, or refuses recursion.
TLS_INTERFERENCE
Handshake interrupted, certificate altered, SNI inspected.
HTTP_BLOCK
Block page, content rewrite, response throttled to zero.
BGP_WITHDRAWAL
Network disappears from the global routing table.
THROTTLING
Bandwidth deliberately collapsed for a specific service.
SHUTDOWN
National or regional connectivity dropped entirely.

License & attribution

Voidly measurement data is published under CC BY 4.0. Use, redistribute, and remix with attribution. Suggested format:

Source: Voidly / AI Analytics — voidly.ai (CC BY 4.0)

Citing in a paper? Use the formatted citations on /voidly (APA + BibTeX, click to copy).