{"endpoints":["/v1/atlas/ooni-test-diagnostic","/v1/atlas/ooni-test-diagnostic/info","/v1/atlas/ooni-test-diagnostic/<country>"],"generated_at":"2026-05-21T20:02:27.290333+00:00","global_aggregates":{"most_diagnostic_test_type":"web_connectivity","per_test_type":{"facebook_messenger":{"max_auc":0.9764,"mean_auc":0.6378,"median_auc":0.5897,"min_auc":0.4348,"n_countries":10,"p25_auc":0.5609,"p75_auc":0.6917},"http_header_field_manipulation":{"max_auc":0.7512,"mean_auc":0.6531,"median_auc":0.6197,"min_auc":0.5746,"n_countries":9,"p25_auc":0.5976,"p75_auc":0.7305},"http_invalid_request_line":{"max_auc":0.7554,"mean_auc":0.6402,"median_auc":0.6443,"min_auc":0.4746,"n_countries":12,"p25_auc":0.6085,"p75_auc":0.6962},"signal":{"max_auc":0.7495,"mean_auc":0.5812,"median_auc":0.5872,"min_auc":0.4286,"n_countries":11,"p25_auc":0.5289,"p75_auc":0.6089},"telegram":{"max_auc":0.6761,"mean_auc":0.5769,"median_auc":0.5712,"min_auc":0.4893,"n_countries":4,"p25_auc":0.56,"p75_auc":0.6761},"tor":{"max_auc":0.9218,"mean_auc":0.6303,"median_auc":0.5739,"min_auc":0.5094,"n_countries":12,"p25_auc":0.5631,"p75_auc":0.7109},"web_connectivity":{"max_auc":0.9773,"mean_auc":0.613,"median_auc":0.5857,"min_auc":0.4635,"n_countries":30,"p25_auc":0.5483,"p75_auc":0.6382},"whatsapp":{"max_auc":0.7004,"mean_auc":0.6195,"median_auc":0.5837,"min_auc":0.5604,"n_countries":7,"p25_auc":0.5623,"p75_auc":0.6952}},"top_test_type_distribution":{"facebook_messenger":2,"http_header_field_manipulation":2,"http_invalid_request_line":4,"signal":2,"telegram":1,"tor":5,"web_connectivity":12,"whatsapp":2}},"honest_caveats":["OONI test types have different probe densities across countries; AUC is not perfectly apples-to-apples.","\"Diagnostic\" does not mean \"causal\" — a test type may be high-AUC because operators chose to test it heavily on incident days.","AUC computed in-sample (no train/test split) so values are upper bounds on out-of-sample performance.","Logistic regression uses class_weight=balanced because positive days are rare.","Incidents within +/- 1 day are positive; this can leak signal between adjacent days.","Countries with insufficient labeled data are skipped silently — see n_countries_total vs n_countries_viable."],"label_window_days":1,"methodology":"Per (country, test_type): logistic regression of anomaly_rate -> P(censorship/mixed incident on day +/- 1). AUC computed on the same (in-sample) data — descriptive diagnostic, not predictive. AUC measures how separable incident-days are from non-incident-days using ONLY that test type.","min_labeled_days":50,"min_negative_days":5,"min_positive_days":5,"model_id":"ooni-test-type-diagnostic-v1","n_countries_total":77,"n_countries_viable":30,"n_country_day_test_buckets":13759,"n_evidence_rows_scanned":42996,"n_positive_country_days":11721,"promote":{"criteria":{"min_auc_range_threshold":0.1,"min_viable_countries":20},"mean_country_auc_range":0.164,"n_viable_countries":30,"n_with_high_variance_range_gt_0_10":13,"passed":true,"passed_min_countries":true,"passed_min_variance":true},"test_types":["web_connectivity","signal","whatsapp","telegram","facebook_messenger","tor","http_invalid_request_line","http_header_field_manipulation"],"window_days":730,"_voidly_pay":{"claim_did":"https://voidly.ai/pay/claim","for_builders":"https://voidly.ai/pay/for-builders","marketplace":"https://api.voidly.ai/v1/pay/marketplace","live_demo":"https://huggingface.co/spaces/emperor-mew/voidly-pay","universal_proxy":{"url":"https://api.voidly.ai/v1/pay/proxy","example":"https://api.voidly.ai/v1/pay/proxy?u=<https-url>&to=did:voidly:<your-did>&price=0.01","page":"https://voidly.ai/pay/proxy","note":"Paywall any public HTTPS URL with one query param. No SDK install required."},"install":{"typescript":"npm install @voidly/pay","python":"pip install voidly-pay","langchain":"pip install voidly-pay-langchain","vercel_ai":"npm install @voidly/pay-vercel-ai","mcp":"npx @voidly/pay-mcp","cli":"npm install -g @voidly/pay-cli"},"note":"Voidly Pay is the open agent-to-agent payment rail. Claim a DID + 10 starter credits in 60s, or paywall any URL via the universal proxy with one query param."}}