AI Tools Blocklist
Home AI Tools Database Taxonomy Pricing
Solutions
Enterprise IT & CISO Education Firewall Admins Shadow AI Prevention REST API Customer Login
Download Free Sample
Database Delivery API

Pull Your AI Blocklist
Straight Into Your Infrastructure

The Database Delivery API gives every subscriber programmatic access to their plan's blocklist export — 17,410+ classified AI-tool domains, refreshed daily. Check when the database last changed, download the full CSV, and automate your firewall or DNS-filter sync with a cron job and an API key.

4Endpoints
17,410+AI-Tool Domains
DailyDatabase Updates
Get an API Key Download Free Sample
Overview

Base URL and How It Works

The API is a single authenticated endpoint that dispatches on an action query parameter. All requests are HTTPS GET. Metadata responses are JSON; database downloads stream CSV.

# Base URL
https://www.aitoolsblocklist.com/api/database/

# Four actions
?action=database_info        # JSON — file name, last-updated time, size
?action=download_database    # CSV  — your plan's full blocklist export
?action=download_categories  # CSV  — category / subcategory domain counts
?action=status               # JSON — API key and subscription status
Database CSV

Columns: domain, relevant_categories_of_ai_tool (all matching categories, |-delimited) — ready for direct ingestion into firewalls, DNS filters, and proxies.

Categories CSV

Columns: category, subcategory, domain_count — the full 18-category / 172-subcategory taxonomy with counts.

Daily Refresh

Exports are regenerated every day. Poll database_info and re-download only when last_updated_unix changes.

Authentication

API Key Authentication

Every subscription plan includes an API key, issued when your plan is activated. Send it with each request either as the X-API-Key header (recommended) or as an api_key query parameter.

# Recommended: header authentication
curl -H "X-API-Key: YOUR_API_KEY" \
     "https://www.aitoolsblocklist.com/api/database/?action=status"

# Alternative: query parameter
curl "https://www.aitoolsblocklist.com/api/database/?action=status&api_key=YOUR_API_KEY"

Keep your key out of logs: prefer the X-API-Key header over the query parameter in production — URLs (and the keys embedded in them) routinely end up in proxy and web-server logs.

Plans and What the API Serves

Essentials — $99/month

download_database returns ai_tools_5k.csv — the 5,000 highest-traffic AI-tool domains.

Professional — $499/month

download_database returns ai_tools_full.csv — the complete database of 17,410+ domains.

Additional delivery formats included with your plan (JSON, EDL, PAC, hosts, DNS RPZ) are available from your account downloads page.

Reference

Endpoint Reference

GETaction=database_info

Returns metadata about your plan's database export — use it to decide whether a new download is needed.

curl -H "X-API-Key: YOUR_API_KEY" \
     "https://www.aitoolsblocklist.com/api/database/?action=database_info"

# Response
{
  "client": "Acme Corp",
  "plan": "Full Database ($499/month)",
  "database_file": "ai_tools_full.csv",
  "last_updated": "2026-07-14 05:30:02 CEST",
  "last_updated_unix": 1784088729,
  "file_size_bytes": 1183744,
  "file_size_human": "1.13 MB"
}

GETaction=download_database

Streams your plan's blocklist as CSV (Content-Type: text/csv, served as an attachment). Three columns: domain, category, subcategory.

curl -H "X-API-Key: YOUR_API_KEY" \
     -o ai_tools.csv \
     "https://www.aitoolsblocklist.com/api/database/?action=download_database"

# File contents (excerpt)
domain,category,subcategory
chatgpt.com,Text & Language,General assistants & chatbots
github.com,Code & Development,Code assistants & autocomplete
midjourney.com,Image & Visual,Image generation

GETaction=download_categories

Streams the taxonomy summary as CSV — every category and subcategory with its current domain count. Useful for building category pickers and policy UIs.

curl -H "X-API-Key: YOUR_API_KEY" \
     -o ai_tools_categories.csv \
     "https://www.aitoolsblocklist.com/api/database/?action=download_categories"

# File contents (excerpt)
category,subcategory,domain_count
Agents & Automation,AI workflow automation,678
Text & Language,General assistants & chatbots,1204

GETaction=status

Returns your API key and subscription status — handy as a health check in monitoring and for verifying a key after activation.

curl -H "X-API-Key: YOUR_API_KEY" \
     "https://www.aitoolsblocklist.com/api/database/?action=status"

# Response
{
  "client": "Acme Corp",
  "api_key_active": true,
  "plan": "Full Database ($499/month)",
  "subscribed_database": "ai_tools_full.csv",
  "database_last_updated": "2026-07-14 05:30:02 CEST",
  "database_file_size": "1.13 MB"
}
Errors

HTTP Status Codes and Error Responses

Errors are returned as JSON with an error flag and a human-readable message.

CodeMeaningTypical Cause
200SuccessJSON metadata or CSV stream returned
400Bad requestMissing or unknown action parameter
401UnauthorizedNo API key supplied in header or query
403ForbiddenInvalid API key, or key deactivated (e.g. lapsed subscription)
404Not foundExport file not yet generated for your account
500Server errorTemporary backend issue — retry with backoff
# Example error response
{
  "error": true,
  "message": "API key is inactive. Please contact support at [email protected]."
}
Integration

Integration Examples

Daily Sync Script (Python)

The canonical integration: a cron job that checks database_info, downloads the CSV only when it changed, and regenerates your enforcement config.

import csv, io, os, requests

BASE = "https://www.aitoolsblocklist.com/api/database/"
HEADERS = {"X-API-Key": os.environ["AITOOLS_API_KEY"]}
STATE_FILE = "/var/lib/aitools/last_updated"

def get_last_updated():
    info = requests.get(BASE, headers=HEADERS,
                        params={"action": "database_info"}, timeout=30).json()
    return str(info["last_updated_unix"])

def download_csv():
    resp = requests.get(BASE, headers=HEADERS,
                        params={"action": "download_database"}, timeout=120)
    resp.raise_for_status()
    return resp.text

def main():
    stamp = get_last_updated()
    if os.path.exists(STATE_FILE) and open(STATE_FILE).read() == stamp:
        return  # nothing new today

    rows = list(csv.DictReader(io.StringIO(download_csv())))

    # Category-level policy: block everything except approved code assistants
    blocked = [r["domain"] for r in rows
               if r["category"] != "Code & Development"]

    with open("/etc/squid/ai_blocklist.txt", "w") as f:
        f.write("\n".join(sorted(blocked)))

    open(STATE_FILE, "w").write(stamp)
    os.system("squid -k reconfigure")

if __name__ == "__main__":
    main()

One-Liner for Firewalls and DNS Filters (bash + cron)

# /etc/cron.d/aitools — refresh the blocklist every night at 06:15
15 6 * * * root curl -sf -H "X-API-Key: $AITOOLS_API_KEY" \
  "https://www.aitoolsblocklist.com/api/database/?action=download_database" \
  | cut -d, -f1 | tail -n +2 > /etc/unbound/ai_domains.txt \
  && unbound-control reload

Health Check (monitoring)

# Nagios/Zabbix-style check: alert if the key is inactive
curl -sf -H "X-API-Key: $AITOOLS_API_KEY" \
  "https://www.aitoolsblocklist.com/api/database/?action=status" \
  | jq -e '.api_key_active == true'
Best Practices

API Integration Best Practices

Poll metadata, not the file

Exports change once per day. Check database_info first and download only when last_updated_unix moves — it keeps your sync fast and your bandwidth use flat.

Keep enforcing on failure

If a download fails, keep enforcing yesterday's list rather than dropping enforcement entirely. The daily cadence means a stale list is at most a day behind.

Build policy on categories

Filter the CSV by category/subcategory instead of maintaining domain-level exceptions — allow approved tool categories, block the rest, and your policy survives daily domain churn.

Report misclassifications

Found a domain in the wrong category? Email [email protected] — corrections ship in a subsequent daily export.

Ready to Integrate the AI Blocklist API?

Every plan includes API access with your key issued at activation. Tell us about your stack and we'll help you wire up the sync.

Talk to Us About API Integration

Tell us about your firewall, DNS filter, or proxy setup and we will help you integrate the Database Delivery API.