Blocklist
The Blocklist endpoints let you check whether IP addresses are listed on the LimesIndex-owned blocklist and monitor recent listing/delisting activity.
Single IP Check
GET/v1/public/blocklist/ip/{ip}
Check if a single IP address is currently blocklisted. This public endpoint is rate-limited and does not require an API key. API-key clients can also use the authenticated /v1/blocklist/ip/{ip} route.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
ip | string | Yes | IPv4 or IPv6 address to check |
Response (200)
{
"data": {
"ip": "192.0.2.1",
"listed": true,
"listing": {
"type": "spam",
"reason": "High volume spam sending detected",
"return_code": "127.0.0.2",
"listed_at": "2026-03-15T10:30:00Z",
"expires_at": "2026-04-15T10:30:00Z"
}
},
"meta": {
"processing_time_ms": 3
}
}
Response Fields
Data Object
| Field | Type | Description |
|---|---|---|
ip | string | The checked IP address (normalized) |
listed | boolean | Whether the IP is currently blocklisted |
listing | object | Active listing details (only present when listed is true) |
Listing Object
| Field | Type | Description |
|---|---|---|
type | string | Listing type (spam, malware, phishing) |
reason | string | Human-readable reason for the listing |
return_code | string | DNS return code for the listing |
listed_at | string | ISO 8601 timestamp when the IP was listed |
expires_at | string | Expiration timestamp (null if permanent) |
Batch Check
POST/v1/blocklist/check
Check multiple IP addresses against the blocklist in a single request. Maximum 100 IPs.
Request Body
{
"ips": ["192.0.2.1", "198.51.100.5", "203.0.113.10"]
}
Response (200)
{
"data": [
{
"ip": "192.0.2.1",
"listed": true,
"listing": {
"type": "spam",
"reason": "High volume spam sending detected",
"return_code": "127.0.0.2",
"listed_at": "2026-03-15T10:30:00Z"
}
},
{
"ip": "198.51.100.5",
"listed": false
},
{
"ip": "203.0.113.10",
"listed": false
}
],
"meta": {
"processing_time_ms": 8
}
}
Limits
- Maximum 100 IPs per request
- Invalid IPs return
400 INVALID_IP; the response identifies the invalid input
Statistics
GET/v1/blocklist/stats
Get aggregate statistics about current blocklist entries.
Response (200)
{
"data": {
"total_active": 4523,
"by_type": {
"spam": 3200,
"malware": 800,
"phishing": 523
},
"new_listings_24h": 92,
"delistings_24h": 17
},
"meta": {
"processing_time_ms": 5
}
}
| Field | Type | Description |
|---|---|---|
total_active | integer | Total number of active listings |
by_type | object | Active listing count broken down by type |
new_listings_24h | integer | Number of listing events in the last 24 hours |
delistings_24h | integer | Number of delisting events in the last 24 hours |
Recent Events
GET/v1/blocklist/recent
Get recent listing and delisting events. Results are ordered newest first and paginated.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 50 | Number of events to return, capped at 100 |
offset | integer | 0 | Number of events to skip |
Response (200)
{
"data": {
"events": [
{
"ip": "192.0.2.1",
"action": "listed",
"type": "spam",
"reason": "High bounce rate",
"return_code": "127.0.0.2",
"listed_at": "2026-04-13T08:00:00Z",
"expires_at": "2026-04-14T08:00:00Z",
"performed_at": "2026-04-13T08:00:00Z"
},
{
"ip": "198.51.100.5",
"action": "delisted",
"type": "malware",
"reason": "false positive",
"return_code": "127.0.0.4",
"listed_at": "2026-04-12T07:45:00Z",
"delisted_at": "2026-04-13T07:45:00Z",
"performed_at": "2026-04-13T07:45:00Z"
}
],
"count": 2,
"limit": 50,
"offset": 0
},
"meta": {
"processing_time_ms": 4
}
}
Error Responses
400 Bad Request
{
"data": {
"error": "invalid IP address",
"code": "INVALID_IP"
},
"meta": {
"processing_time_ms": 0
}
}
400 Too Many IPs (Batch)
{
"data": {
"error": "maximum 100 IPs per request",
"code": "TOO_MANY_IPS"
},
"meta": {
"processing_time_ms": 0
}
}
Code Examples
cURL
# Single IP check
curl -X GET "https://api.limesindex.com/v1/public/blocklist/ip/192.0.2.1"
# Batch check
curl -X POST "https://api.limesindex.com/v1/blocklist/check" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ips": ["192.0.2.1", "198.51.100.5"]}'
# Statistics
curl -X GET "https://api.limesindex.com/v1/blocklist/stats" \
-H "X-API-Key: YOUR_API_KEY"
# Recent listing/delisting events
curl -X GET "https://api.limesindex.com/v1/blocklist/recent?limit=50&offset=0" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.limesindex.com"
HEADERS = {"X-API-Key": API_KEY}
# Check single IP
resp = requests.get(f"{BASE_URL}/v1/public/blocklist/ip/192.0.2.1")
result = resp.json()
if result["data"]["listed"]:
listing = result["data"]["listing"]
print(f"Listed: {listing['type']} - {listing['reason']}")
# Batch check a pool of IPs
pool = ["192.0.2.1", "198.51.100.5", "203.0.113.10"]
resp = requests.post(
f"{BASE_URL}/v1/blocklist/check",
headers=HEADERS,
json={"ips": pool}
)
for item in resp.json()["data"]:
status = "LISTED" if item["listed"] else "clean"
print(f"{item['ip']}: {status}")
Use Cases
- Pre-send check: Verify IPs before starting an email campaign
- Monitoring: Poll
/v1/blocklist/recentto detect new listings and delistings in your pool - Pool health: Batch-check your entire sending pool to identify contaminated IPs
Related Endpoints
- Email Reputation - Full reputation scoring beyond blocklist status
- Warmup - Warm-up guidance that factors in blocklist state