API docs

tv-cleaner

mount /tv · base https://zpe.vc/tv · v1.0.1 · 5 operations · 1 write · 5 need no account · beta

the document this app serves now. Contract: https://zpe.vc/tv/_/api/v1/openapi.json · sha256 7817b8b18fe5

GET /_/api/v1/blocks A blocklist for one brand, in the dialect a blocker reads. getBlocks no account

A blocklist for one brand, in the dialect a blocker reads.

Parameters

nameinrequiredtypenotes
brandquerynostringOne of samsung, lg, vizio, roku, amazon, hisense, sony, philips, xiaomi, panasonic. Default samsung.
dialectquerynostringOne of pihole, adguard, dnsmasq, hosts, nextdns, unbound. Default pihole.
sharedquerynostring0 drops the cross-platform measurement trackers. Default includes them. Anything but 0 or 1 is refused.
tierquerynostringacr (the fingerprinting endpoints only) or default (acr, ads and telemetry).

Request body

None: this operation takes its arguments in the path and the query.

Responses

statusmeaningbody
200The list as text, ready to subscribe to.object
400brand, dialect, tier or shared is a value this route does not understand.object
500This app failed while answeringobject

Example

A blocklist for one brand, in the dialect a blocker reads..

GET /_/api/v1/blocks
curl -X GET 'https://zpe.vc/tv/_/api/v1/blocks?brand=string&dialect=string&shared=string&tier=string'
200 application/json
{}

The example is generated from the schema in the contract: the shape is the document's, the values are placeholders.

GET /_/api/v1/catalog Every rule with its class, confidence, sources and evidence, plus the artifact sha. getCatalog no account

Every rule with its class, confidence, sources and evidence, plus the artifact sha.

Parameters

No parameters.

Request body

None: this operation takes its arguments in the path and the query.

Responses

statusmeaningbody
200The catalogue.object
500This app failed while answeringobject

Example

Every rule with its class, confidence, sources and evidence, plus the artifact sha..

GET /_/api/v1/catalog
curl -X GET 'https://zpe.vc/tv/_/api/v1/catalog'
200 application/json
{}

The example is generated from the schema in the contract: the shape is the document's, the values are placeholders.

GET /_/api/v1/brands The platform profiles, including whether the on-device opt-out was found to work. getBrands no account

The platform profiles, including whether the on-device opt-out was found to work.

Parameters

No parameters.

Request body

None: this operation takes its arguments in the path and the query.

Responses

statusmeaningbody
200One profile per brand.object
500This app failed while answeringobject

Example

The platform profiles, including whether the on-device opt-out was found to work..

GET /_/api/v1/brands
curl -X GET 'https://zpe.vc/tv/_/api/v1/brands'
200 application/json
{}

The example is generated from the schema in the contract: the shape is the document's, the values are placeholders.

GET /_/api/v1/dataset The anonymised aggregates, floored so no single submission can publish a host. getDataset no account

The anonymised aggregates, floored so no single submission can publish a host.

Parameters

nameinrequiredtypenotes
weeksquerynostringHow far back to aggregate, an integer 1 to 52. Default 8. Anything else is refused.

Request body

None: this operation takes its arguments in the path and the query.

Responses

statusmeaningbody
200Aggregates, the window, and how many hosts were withheld by the floor.object
400weeks is not an integer from 1 to 52.object
500This app failed while answeringobject
503This deployment has no dataset database, so there is nothing to aggregate.object

Example

The anonymised aggregates, floored so no single submission can publish a host..

GET /_/api/v1/dataset
curl -X GET 'https://zpe.vc/tv/_/api/v1/dataset?weeks=string'
200 application/json
{}

The example is generated from the schema in the contract: the shape is the document's, the values are placeholders.

POST /_/api/v1/dataset Submit one anonymous observation: a rotating pseudonym, the platform, and hostnames with bucketed counts. postDataset no account

Submit one anonymous observation: a rotating pseudonym, the platform, and hostnames with bucketed counts.

Parameters

No parameters.

Request body application/json · required

fieldtyperequirednotes
v1yes
brand"samsung" | "lg" | "vizio" | "roku" | "amazon" | "hisense" | "sony" | "philips" | "xiaomi" | "panasonic"yes
os"tizen" | "webos" | "smartcast" | "roku-os" | "fire-os" | "vidaa" | "google-tv" | "titan-os" | "mi-tv" | "viera" | "unknown"yes
weekstringyesISO week, this week or last, e.g. 2026-W44.
pseudonymstringyes32 hex characters, derived per week and thrown away.
hostsarray of objectyes

Responses

statusmeaningbody
202Stored. Whether it reaches the published dataset depends on other machines.object
400The request could not be readobject
401The credential is missing or does not open this accountobject
403This account may not do thatobject
404Nothing is hereobject
413Body over 64KB.object
429More than 20 submissions an hour from one address.object

Example

Submit one anonymous observation: a rotating pseudonym, the platform, and hostnames with bucketed counts..

POST /_/api/v1/dataset
curl -X POST 'https://zpe.vc/tv/_/api/v1/dataset' \
  -H 'content-type: application/json' \
  -d '{
  "v": 1,
  "brand": "samsung",
  "os": "tizen",
  "week": "string",
  "pseudonym": "string",
  "hosts": [
    {
      "host": "string",
      "n": "1"
    }
  ]
}'
202 application/json
{}

The example is generated from the schema in the contract: the shape is the document's, the values are placeholders.