voidly

Voidly / SVG badges

Small badge.
Source attached.

A place for context in your README,
blog or dashboard.

Build your badge
sourceSVGyour page
your labelsource value
Badge anatomy · illustrative, not a status result

01 / Configure

Make it yours.

Pick the subject. Choose a style.
Read what the endpoint returns.

Badge kind

Endpoint preview

SVG / 20px

Loading badge…

Image from the public badge endpoint. “Unknown”, “no data” and “not found” are source states, not proof of accessibility.

Color overrides change appearance only. Country badges normally show relative rank and score band, not a live connection test.

https://api.voidly.ai/badge/v1/country/IR.svg
[![Censorship level in IR](https://api.voidly.ai/badge/v1/country/IR.svg)](https://voidly.ai/ir)
URL patterns & appearance parameters

All six badge endpoints live at https://api.voidly.ai/badge/v1/ and return an SVG. These are real source URLs; the sample incident may return “not found.”

/badge/v1/country/<CC>.svgCountry rank and score bandOpen example ↗
/badge/v1/service/<name>/<CC>.svgNamed-service status in a countryOpen example ↗
/badge/v1/domain/<host>/<CC>.svgDomain status in a countryOpen example ↗
/badge/v1/voidly.svgTracked-by-Voidly incident counterOpen example ↗
/badge/v1/incident/<id>.svgSeverity of one incidentOpen example ↗
/badge/v1/topic/<topic>.svgCountries with a nonzero topic signalOpen example ↗
  • ?style= flat-square (default), flat, plastic or for-the-badge.
  • ?label= overrides the left text (URL-encoded, renderer capped at 60 characters).
  • ?color= accepts supported names such as red, severe or accessible, or a three/six-digit hex color. Unknown color values fall back to the endpoint’s color.
  • ?logo=none hides the inline V mark.
Example gallery & ready-made Markdown

Published examples show possible uses, not proof that your project is censored. Images load from the actual endpoints when this gallery is opened; source states and timestamps may be unavailable.

Show your project is censored somewhere

Drop-in badge for tools, news sites, or apps that face blocking. Reads the country-index badge endpoint.

[![Censorship in IR](https://api.voidly.ai/badge/v1/country/IR.svg)](https://voidly.ai/ir)
[![Censorship in CN](https://api.voidly.ai/badge/v1/country/CN.svg)](https://voidly.ai/cn)
[![Censorship in RU](https://api.voidly.ai/badge/v1/country/RU.svg)](https://voidly.ai/ru)

Show that an AI service is blocked

Aliases for OpenAI, Claude, Gemini, Perplexity and more — resolves to the right domain automatically.

[![ChatGPT in CN](https://api.voidly.ai/badge/v1/service/openai/CN.svg)](https://voidly.ai/ai-blocked)
[![Claude in IR](https://api.voidly.ai/badge/v1/service/claude/IR.svg)](https://voidly.ai/ai-blocked)
[![Gemini in RU](https://api.voidly.ai/badge/v1/service/gemini/RU.svg)](https://voidly.ai/ai-blocked)

Pin a domain status to your README

For news sites, indie SaaS, or any domain — pass a fully qualified host plus a country code.

[![twitter.com in IR](https://api.voidly.ai/badge/v1/domain/twitter.com/IR.svg)](https://voidly.ai/domain/twitter.com)
[![wikipedia.org in CN](https://api.voidly.ai/badge/v1/domain/wikipedia.org/CN.svg)](https://voidly.ai/domain/wikipedia.org)
[![signal.org in RU](https://api.voidly.ai/badge/v1/domain/signal.org/RU.svg)](https://voidly.ai/domain/signal.org)

Tracked-by-Voidly badge

For projects that consume Voidly data — say so loudly. The endpoint returns an incident counter; its fallback and source-time limits are documented below.

[![Tracked by Voidly](https://api.voidly.ai/badge/v1/voidly.svg)](https://voidly.ai)
[![Tracked by Voidly](https://api.voidly.ai/badge/v1/voidly.svg?style=for-the-badge)](https://voidly.ai)
[![Powered by Voidly](https://api.voidly.ai/badge/v1/voidly.svg?label=Powered%20by%20Voidly&color=blue)](https://voidly.ai)

Topic-level signal

Counts countries with non-zero censorship score in a Citizen Lab category. Drives advocacy dashboards.

[![News censorship](https://api.voidly.ai/badge/v1/topic/news.svg)](https://voidly.ai/topics/news)
[![LGBT censorship](https://api.voidly.ai/badge/v1/topic/lgbt.svg)](https://voidly.ai/topics/lgbt)
[![Women-health censorship](https://api.voidly.ai/badge/v1/topic/women-health.svg)](https://voidly.ai/topics/women-health)
Sources, cache and unknown states

Country rank/band comes from the censorship-index handler. Service aliases resolve to a domain, then use the accessibility handler. Incident severity comes from the incident record. Topics count rows with a positive score or blocked count.

The SVG response uses Cache-Control: public, max-age=300, s-maxage=300, an ETag and Access-Control-Allow-Origin: *. A matching ETag can return HTTP 304. Five-minute caching is not five-minute measurement freshness, and an already displayed image does not poll itself.

Badge source responses do not include an observation time in the SVG. The country handler can reuse an older index cache when its source fails; the generic incident counter can use a cached or built-in fallback without indicating it. The preview reports when it fetched the image, not when the underlying event happened.

“Unknown”, “no data”, “not found” and “error” remain visible. An outage or failed test alone does not establish intentional censorship. A successful image load does not prove current accessibility.

SVGs require no JavaScript or downloaded fonts when embedded as images. They can be used where remote SVG images are supported, including many repository/docs renderers; platform sanitizers and image proxies differ. No blanket compatibility or unlimited-use guarantee is made.

Country-index source ↗Incident-count source ↗API documentation →
Attribution & the published builder

Voidly-original badge material is offered under CC BY 4.0. Link back to voidly.ai; the snippets include a source destination. Upstream data retains its own license.

A downloaded SVG is the fetched image, frozen at that moment. Use the endpoint URL for an image that can revalidate through normal browser or proxy caching.

Dataset and source terms →Published badge builder →

Need more context?

Give it a frame.

Build a country widget