Sernate FireHOL Search IP API
The machine-readable OpenAPI contract is available at /openapi.json.
Compatibility Policy
Existing public response fields are treated as part of the API contract. We may add new fields, but we do not remove or rename documented fields on the current endpoints without a versioned replacement or deprecation period.
Automation should ignore unknown fields and depend only on fields
documented here or in /openapi.json.
Default Search Behavior
Public search answers the practical admin question: is this IPv4 address currently listed on a fresh feed? Historical removals and stale upstream sources are hidden by default.
| Setting | Default | Meaning |
|---|---|---|
current_only |
true |
Only return hits whose current_status is present. |
include_stale |
false |
Hide feed sources older than 366 days. |
Search Endpoints
GET /search/ip
curl -fsS 'https://blocklist.sernate.com/search/ip?v=1.15.51.236'
POST /search
curl -fsS -X POST \ -H 'Content-Type: text/plain' \ --data '8.8.8.8,1.1.1.1' \ 'https://blocklist.sernate.com/search'
History And Stale Feeds
Use investigation mode when you intentionally want to inspect old listings, removed listings, or source feeds that have not been updated recently.
Removed listings are kept in the database and can appear with
current_status: absent when current_only=false
is used. If the upstream source file is stale, also use
include_stale=true.
curl -fsS 'https://blocklist.sernate.com/search/ip?v=8.8.8.8¤t_only=false&include_stale=true'
Stale or historical hits should not be treated as current blocking evidence without manual review.
Limits
| IP version | IPv4 only |
|---|---|
| CIDR prefix range | /16 through /32 |
| Max search items | 100 |
| Max requested IPs | 65536 |
| Max returned hits |
500
Large CIDR searches may return truncated: true. Narrow the range for a complete view.
|
| Max POST body | 16384 bytes |
| Rate limiting | Too many requests may return HTTP 429. Batch related checks where possible. |
Client Caching
Automation may cache /version.txt for update checks.
Search results should not be cached aggressively across scheduled
checks because indexed listings can change after the next API sync.
Keeping results for the current check run is fine.
Use GET /search/ip for manual single IP or single CIDR
lookups. Use POST /search when checking multiple IPs in
one scheduled server check. Edge caching currently applies only to
identical GET /search/ip requests; clients should cache
their own scheduled or manual results where practical.
Important Response Fields
current_status |
present or absent for a feed hit. |
|---|---|
source_file_date |
Current source date reported by the upstream feed metadata when available. |
matched_source_file_date |
Source date stored with the matched entry. This can be older than the current feed source date when the entry stayed listed across later syncs. |
feed_last_synced_at |
When this API last synced metadata for the matching list/feed. |
source_age_days |
Age of the upstream source date when it can be parsed. |
source_is_stale |
Whether the source is older than the configured freshness limit. |
first_seen, last_added, last_removed |
Timeline fields tracked by this API for a feed hit. |
matched_entry |
Original feed entry that matched the query when
range-aware storage is active, for example
64.62.156.0/24.
|
match_type |
ip or cidr when range-aware storage is active. |
matched_range_start, matched_range_end |
Overlap between the requested IP/CIDR and the matched feed entry. |