Public API

Read-only, public JSON API. No authentication, no API key, no rate-limited abuse protection beyond a fair-use per-IP limit.

Why or when to use the API

Note: torrent activity is public by design - any peer in a swarm can observe it. The API simply exposes that public record in a machine-readable form. Be aware that IP addresses are shared between devices and users (NAT, CGNAT, Wi-Fi hotspots), so activity on an IP is not necessarily proof of a specific person.

Acceptable Use

Endpoints

GET
/api/public/torrents?limit=&offset=&category=
Newly added torrents, newest first. Each item has the info hash, name, category, peer counts and a link to the torrent page.
Params: limit (1-100, default 20) · offset (default 0) · category (movie|series|porn|music|ebook|software|other)
GET
/api/public/torrents/<info_hash>?peers_per_page=&peers_page=
A single torrent: metadata, current peers, plus paginated peer list (last octet redacted), countries and clients.
Params: peers_per_page (1-100, default 25) · peers_page (default 1)
GET
/api/public/peers?limit=&offset=
Recently seen peers across all swarms. IP addresses are redacted to the last octet; includes client, country, ASN and the torrent they were seen on.
Params: limit (1-100, default 25) · offset (default 0)
GET
/api/public/clients?limit=&offset=
Most common BitTorrent clients, ranked by appearances, with unique-IP counts and a link to each client's page.
Params: limit (1-100, default 25) · offset (default 0)
GET
/api/public/asn/<asn>/peers?limit=&offset=
Every peer observed on a specific ASN/provider, newest first. IP addresses are redacted to the last octet; includes client, country, seeder status and the torrent each peer was seen on.
Params: limit (1-100, default 25) · offset (default 0)
GET
/api/public/countries?limit=
Countries ranked by unique peer IP addresses, with appearance counts and a link to each country page.
Params: limit (1-100, default 25)
GET
/api/public/summary
Headline statistics: total unique IP addresses, torrents, connections and category breakdowns.
GET
/api/public/leaderboards
Aggregated leaderboards: top countries, providers (ASNs), clients, torrents and categories.
GET
/api/public/leaderboard?kind=&period=&page=&per_page=
Paginated leaderboards. kind: countries|providers|clients · period: today|yesterday|last_week|last_month|all_time.
GET
/api/public/active
A live sample of real peers currently active in the monitored swarms (for real-time feeds).
GET
/api/public/search?ip=
Search the download history of a specific IP address. Returns one row per torrent that IP was seen on, with aggregated connection counts, plus other addresses in the same /24 with recorded activity (full IP required - the search reveals your own data).
GET
/api/public/torrents/search?q=
Search torrents by name or infohash. Returns matching torrents ranked by how many distinct IP addresses were observed on them, with links to their pages.
GET
/api/public/my-ip
The visitor's own IP and whether this site has any records for it.
GET
/api/public/map-countries
All countries with peer data (used by the frontpage map).
GET
/api/public/dht-nodes?limit=&offset=&q=&all=
The live BitTorrent DHT routing table observed by the crawler: every node's IP, port, country, ASN/provider, uptime percentage and how long ago it was last seen. Paginated, with an optional text search.
Params: limit (1-500, default 25) · offset (default 0) · q (filter by IP / country / ASN) · all (1 = include stale nodes, default live-only)

Examples

curl
curl "https://AnyoneCanSeeWhatYou.download/api/public/torrents?limit=5"
DHT nodes
curl "https://AnyoneCanSeeWhatYou.download/api/public/dht-nodes?limit=3"
# {"success":true,"data":{"nodes":[{"ip":"1.2.3.4","port":6881,"last_seen":42,
#   "country":"NL","country_name":"The Netherlands","city":"Amsterdam",
#   "asn":1136,"as_org":"KPN B.V.","uptime":98.2},...],
#   "total":7013,"live":7012,"countries":150,"avg_uptime":87.4}}
Python
import requests
r = requests.get("https://AnyoneCanSeeWhatYou.download/api/public/peers", params={"limit": 10})
data = r.json()["data"]
for p in data["peers"]:
    print(p["ip"], p["client"], p["torrent"])
JavaScript
const res = await fetch("https://AnyoneCanSeeWhatYou.download/api/public/countries?limit=5");
const data = (await res.json()).data;
data.countries.forEach(c => console.log(c.country_name, c.unique_ips));