Skip to main content

Lists and entries

Every check is held against two kinds of list: your own entries, which you add and remove, and the public lists, which the service downloads from their publishers. Both are on the console's Blocklists page; the public lists' schedules are on the Maintenance page.

Your own entries​

ListAn entry isMatches
AddressA full mail address, name@example.comThat address only
DomainA domain, example.com (a leading @ is ignored)The domain and every subdomain of it, so example.com also holds mail.example.com
Client IP or rangeAn IPv4 or IPv6 address, or a range in CIDR form, 203.0.113.0/24Every client IP in it
Exception of a public listA domain, an IP or a rangeLets it through that one list; see Exceptions

Entries are lower-cased when they are stored. Each can carry a note of up to 300 characters, and the list shows who added it and when. Adding an entry that is already there changes nothing and says so.

Adding and removing entries needs an Operator or an Administrator. Each is a job, and the entry is checked against from the moment its job succeeds; see Every change is a job.

Entries from the deployment​

Addresses and @domain entries set in the API container's environment (Blocklist__Entries__0 and on; see Installing Blocklist) are listed first and locked, with "set by the deployment" as their note. Nothing in the console or the API removes them: they change with the deployment.

Through the API​

MethodRouteWhat it does
GET/api/v1/entriesEvery entry: the deployment's first, marked locked, then your own
POST/api/v1/entriesQueues adding an entry; answers 202 with the job
DELETE/api/v1/entries/{id}Queues removing one; answers 202 with the job, or 404 when it is not on the list

An entry is {"kind": "...", "value": "...", "note": "..."}. The kinds are address, domain, ip, and a public list's own exception kind: GET /api/v1/sources gives it for each list as exceptionKind (fakefilter-exception, for example). A value that does not fit its kind is refused with 400 and a sentence: '...' is not an e-mail address., '...' is not a domain. or '...' is not an IP address or a CIDR range.

Exceptions​

An exception lets something through one public list although that list holds it: a domain your customers really do use that a throwaway-domain list holds, or an address range of a partner on an IP list.

  • An exception names a domain for a list of domains, and an IP address or range for a list of IPs.
  • An excepted domain is excepted with its subdomains.
  • It changes only the list it belongs to. Another list that holds the same domain still reports it, and your own entries are not affected.
  • Each card on the Blocklists page shows how many exceptions its list has.

Add one on the Blocklists page with Exception of and the list's name.

The public lists​

The service knows these public lists. Each has a card on the Blocklists page, which shows it only when your license covers it; see Licensing.

ListWhat it listsTerms, as its card names them
disposable-email-domainsThrowaway mail domains. Also built into every releaseCC0 1.0 (public domain)
FakeFilterThrowaway mail domainsBSD 3-Clause
burner-email-providersThrowaway mail domainsMIT
The hijacked network ranges listIP ranges of hijacked and criminal networks, IPv4 and IPv6Free of charge under its publisher's terms of use; see A list with a daily limit
Tor exit listIP addresses of Tor exit nodesCC0 1.0 (Tor Metrics exit-list data)

On the three throwaway-domain lists, a subdomain of a listed domain counts as listed.

Every card shows:

LineWhat it is
ListsWhat the list holds
EntriesHow many domains, or IP addresses and ranges, are in force
CheckedWhether checks consult it: on or off
SourceThe hosts it is downloaded from. These are the hosts the service needs to reach over HTTPS
LicenseIts license or terms, linked to the publisher's text, with a note where the terms restrict how it may be used
CreditFor a list whose terms ask for it, the copyright line and the date the publisher produced the file in force
ExceptionsHow many exceptions you made for it
RefreshedWhen the entries in force were downloaded, and by whom (a person, or schedule)

Refresh now on a card downloads the list again at once, for Administrators. The same lists, with their schedules and state, are GET /api/v1/sources.

Use each list as its terms allow

Each list is downloaded by your installation from its own publisher, and used only to answer your checks. Read the terms on each card before relying on a list, and follow the note where there is one: a list's terms may restrict how its data may be used or named.

The built-in list of throwaway domains​

disposable-email-domains is also built into every release, so a new installation, or one without a license, still knows the common throwaway domains:

  • Without a license that covers downloading it, the built-in copy is the one checked, and it is never downloaded. Its card says the list built into this release is in force.
  • With one, the built-in copy is in force until the first good download, and the downloaded copy from then on.

It is the one public list that is shown and checked without a license. Switching it off on the Maintenance page stops it being checked either way.

A list with a daily limit​

One IP list - the hijacked network ranges list - allows at most one download every 24 hours; its card in the console says so. The service holds to that:

  • Refresh now and Run now are refused within 24 hours of its last good download, with the time it may be downloaded again.
  • Its schedule cannot be hourly or every fewer than 24 hours; such a schedule is refused when saved.
  • A scheduled run that falls inside the 24 hours waits for the first slot of its schedule after them, and Run at startup does not download it again inside them.

Its terms also ask that the copyright line of its file stays with the data, which its card shows as Credit, and that the list is used to refuse requests only: never named to your visitors or in promotion. Keep the reason of a check (which names the list) in your own logs and reports rather than showing it on your forms.

A download that fails​

All the files a list is made of must download for a refresh to count. A refresh that cannot reach its host fails, and one whose file holds fewer entries than any sound copy of that list would is treated as a broken download, not a refresh. Either way the job fails with a sentence saying which file and why, and the entries in force are kept: a list is never emptied by a bad download.

A download may take up to a minute and be up to 32 MB. The service names itself in each request, as Antelao-Blocklist and its version, so a publisher can tell who is asking.

Schedules​

The Maintenance page holds one task per public list your license covers: whether it is on, and when it is refreshed. Changing a task needs an Administrator.

ScheduleRuns
Daily (the default)Once a day at the time given, 03:00 UTC unless changed
WeeklyOn the day and at the time given
HourlyEvery hour at the minute given
Every N hoursEvery 1 to 720 hours after the last run
  • Times are entered and stored in UTC; the list on the page shows them in your own time zone.
  • Run at startup also refreshes the list each time the service starts.
  • A list that has never run is refreshed a minute after the service starts. A run that was missed while the service was down runs at once.
  • Switching a task off also stops its list being checked, not only its refresh. Every list is on on a new installation.
  • Run now refreshes the list straight away, as Refresh now does on its card.
  • Blocklist__ScheduledRefresh=false in the API container's environment stops every scheduled refresh; lists are then refreshed only by hand.

A list's task is PUT /api/v1/sources/{key}, and a refresh by hand POST /api/v1/sources/{key}/refresh, where key is the list's key in GET /api/v1/sources. A refresh of a list that is already queued or running answers 409.

Every change is a job​

Every change to the entries, the lists, the firewall and threat protection is a job. The API answers at once with 202 Accepted, the job in the body and its address in Location (/api/v1/jobs/{id}), and the service runs the job in the background. The console waits for it and shows how it ended; a program reads the job until it has ended.

{
"id": "0193f6a2-...",
"type": "list.add",
"detail": "Add discard.example to the domain blocklist",
"status": "Succeeded",
"requestedBy": "jane",
"createdUtc": "2026-11-05T09:12:03+00:00",
"startedUtc": "2026-11-05T09:12:03+00:00",
"finishedUtc": "2026-11-05T09:12:03+00:00",
"result": "discard.example is on the domain blocklist.",
"error": null
}
statusMeaning
QueuedWaiting its turn. Jobs run one at a time, in the order they were asked for
RunningBeing done now
SucceededDone; result says what came of it
FailedNot done; error says why, in a sentence
InterruptedThe service stopped while it ran, so its effect is unknown: check what it changed and ask again

A job still queued when the service stops runs at the next start. The scheduled refreshes are jobs too, queued by the service itself, so they show on the Jobs page beside everything people asked for. Finished jobs are kept for 90 days.

MethodRouteWhat it does
GET/api/v1/jobsThe newest jobs first; ?take= up to 1,000, 200 by default
GET/api/v1/jobs/{id}One job and how it ended