Skip to main content

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

ParameterTypeRequiredDescription
ipstringYesIPv4 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

FieldTypeDescription
ipstringThe checked IP address (normalized)
listedbooleanWhether the IP is currently blocklisted
listingobjectActive listing details (only present when listed is true)

Listing Object

FieldTypeDescription
typestringListing type (spam, malware, phishing)
reasonstringHuman-readable reason for the listing
return_codestringDNS return code for the listing
listed_atstringISO 8601 timestamp when the IP was listed
expires_atstringExpiration 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
}
}
FieldTypeDescription
total_activeintegerTotal number of active listings
by_typeobjectActive listing count broken down by type
new_listings_24hintegerNumber of listing events in the last 24 hours
delistings_24hintegerNumber 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

ParameterTypeDefaultDescription
limitinteger50Number of events to return, capped at 100
offsetinteger0Number 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/recent to detect new listings and delistings in your pool
  • Pool health: Batch-check your entire sending pool to identify contaminated IPs
  • Email Reputation - Full reputation scoring beyond blocklist status
  • Warmup - Warm-up guidance that factors in blocklist state