API documentation

Read access is public and returns JSON. Write access (feeding new detections) requires an API key. Base URL: https://www.blocklist.heinsen-it.de

Read endpoints (public)

EndpointDescriptionParameters
GET/api or /api/listPaginated threat listpage, limit (max 100), search, threat_filter (critical|high|medium|low), country_filter (ISO code), min_threat (1–99), days, sort_by (ip_address, first_seen, last_seen, threat_level, sightings, location, country_code), sort_dir, format=csv
GET/api/statsTotals by category, activity of the last 7 days, top countries, daily trend
GET/api/ipDetails and activity log of one addressip (required)
GET/api/activityRecent activity logip_id, limit (max 100)
GET/exportPlain-text blocklist (one IP per line, comment header) for firewalls and IDSmin (threat level, default 60), category, days, download
GET/export/csv, /export/jsonSame selection as CSV or JSONas above

Examples

curl "https://www.blocklist.heinsen-it.de/api?threat_filter=critical&limit=50"
curl "https://www.blocklist.heinsen-it.de/api/ip?ip=203.0.113.5"
curl "https://www.blocklist.heinsen-it.de/export?min=75" -o blocklist.txt

Response format

{
  "status": "success",
  "timestamp": "2026-09-13 18:00:00",
  "pagination": { "page": 1, "limit": 20, "total_count": 3412, "total_pages": 171 },
  "ips": [
    { "id": 3415, "ip": "203.0.113.5", "first_seen": "2026-09-13 17:28:22", "last_seen": "2026-09-13 17:28:22",
      "threat_level": 55, "threat_category": "medium", "sightings": 1, "location": null, "country_code": "DE",
      "isp": null, "notes": null, "created_at": "...", "updated_at": "..." }
  ]
}

Write endpoints (API key required)

Send the key as X-Api-Key: <key> or Authorization: Bearer <key>. Keys are configured per source; the source name is recorded with every event. Bodies are JSON.

EndpointDescriptionBody
POST/api/addReport a detection. Existing addresses get +1 sighting and keep the highest threat level.ip*, threat_level* (1–99), location, country_code, isp, notes, activity_type (scan, attack, brute_force, web_attack, spam …), severity, source, description, metadata (object), detected_at (ISO 8601 or unix time)
POST/api/bulkUp to 500 detections in one requestthreats: array of the objects above (optional defaults threat_level, activity_type at top level)
POST/api/activityLog an event for an address (threat level optional)as /api/add
POST/api/statusActivate/deactivate an address (deactivated = removed from list and exports)ip*, is_active
POST/api/syncForward pending addresses to the AbuseIPDB reporter platformlimit, dry_run=1 (query parameters)
GET/api/syncForwarding status (pending, forwarded, last run)

Example

curl -X POST "https://www.blocklist.heinsen-it.de/api/add" \
  -H "X-Api-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{
    "ip": "203.0.113.5",
    "threat_level": 75,
    "activity_type": "brute_force",
    "source": "WordPress-Firewall",
    "description": "12 failed logins on wp-login.php",
    "country_code": "DE",
    "metadata": {"wordpress_site": "https://example.org", "detection_method": "log_analysis"}
  }'
Detections are forwarded automatically to the AbuseIPDB reporter platform (if configured), including threat level, country, ISP, source and metadata. There, an administrator reviews the entries and reports them to AbuseIPDB.

Threat levels

CategoryThreat levelMeaning
critical90 – 99Confirmed attacks, repeated abuse from the same address
high70 – 89Attack attempts (brute force, exploits, injection)
medium40 – 69Scans, probing, suspicious bot activity
low1 – 39Minor anomalies, single observations

Rate limits: please cache list responses for at least 60 seconds and use /export for full blocklists instead of paging through the API.