{
  "openapi": "3.0.1",
  "info": {
    "title": "Email Blacklist Checker (DNSBL) & Deliverability · SiteVerdict",
    "description": "Check domains and mail-server IPs against DNS blocklists whose terms allow it (plus Spamhaus/Abusix with your own key), with listing reasons, delisting links, SPF/DKIM/DMARC summary and alerts when you get listed or delisted.",
    "version": "1.0",
    "x-build-id": "epkrMUGSZh5fBc0Zd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/siteverdict~siteverdict-email-blacklist-checker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-siteverdict-siteverdict-email-blacklist-checker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/siteverdict~siteverdict-email-blacklist-checker/runs": {
      "post": {
        "operationId": "runs-sync-siteverdict-siteverdict-email-blacklist-checker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/siteverdict~siteverdict-email-blacklist-checker/run-sync": {
      "post": {
        "operationId": "run-sync-siteverdict-siteverdict-email-blacklist-checker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "executionMode": {
            "title": "Mode",
            "enum": [
              "live",
              "sample"
            ],
            "type": "string",
            "description": "<b>Live</b> checks your targets. <b>Sample</b> replays recorded DNS answers for two demo domains and one IP (free, no network).",
            "default": "live"
          },
          "targets": {
            "title": "Domains, IPs or email addresses",
            "type": "array",
            "description": "e.g. example.com, 203.0.113.10, news@example.com. For a domain we check its mail-server (MX) IPs, single-IP SPF senders and (with a key) the domain itself, plus an SPF/DKIM/DMARC summary.",
            "items": {
              "type": "string"
            }
          },
          "lists": {
            "title": "Blocklists",
            "type": "array",
            "description": "Leave empty for the defaults: PSBL, DroneBL, UCEPROTECT L1 (free terms verified) plus Spamhaus/Abusix/SpamRATS when you add your own key. Optional: uceprotect-2, uceprotect-3, backscatterer, spamcop, mailspike.",
            "items": {
              "type": "string",
              "enum": [
                "psbl",
                "dronebl",
                "uceprotect-1",
                "uceprotect-2",
                "uceprotect-3",
                "backscatterer",
                "spamcop",
                "mailspike",
                "spamhaus-zen",
                "spamhaus-dbl",
                "abusix",
                "abusix-dblack",
                "spamrats"
              ],
              "enumTitles": [
                "PSBL",
                "DroneBL",
                "UCEPROTECT Level 1",
                "UCEPROTECT Level 2 (aggressive)",
                "UCEPROTECT Level 3 (aggressive)",
                "Backscatterer",
                "SpamCop (no published lookup terms)",
                "Mailspike (no published lookup terms)",
                "Spamhaus ZEN (your DQS key)",
                "Spamhaus DBL domains (your DQS key)",
                "Abusix (your key)",
                "Abusix domains (your key)",
                "SpamRATS (your key)"
              ]
            }
          },
          "spamhausDqsKey": {
            "title": "Spamhaus DQS key (optional)",
            "type": "string",
            "description": "Your Spamhaus Data Query Service key. Spamhaus' free public mirrors are for non-commercial use only and refuse cloud resolvers, so Spamhaus is only checked with your own key."
          },
          "abusixKey": {
            "title": "Abusix Mail Intelligence key (optional)",
            "type": "string",
            "description": "Your Abusix query key (Abusix offers a free tier)."
          },
          "spamratsKey": {
            "title": "SpamRATS API key (optional)",
            "type": "string",
            "description": "Your free SpamRATS API key (not for commercial email-protection providers)."
          },
          "includeMxIps": {
            "title": "Check MX (inbound mail server) IPs",
            "type": "boolean",
            "description": "Resolve the domain's MX hosts and check their IPs.",
            "default": true
          },
          "includeSpfIps": {
            "title": "Check single-IP senders in SPF",
            "type": "boolean",
            "description": "Check ip4:x.x.x.x entries (/32) in the SPF record: these are usually your outbound sending servers.",
            "default": true
          },
          "includeWebIps": {
            "title": "Check website (A record) IPs",
            "type": "boolean",
            "description": "Also check the domain's own A/AAAA IPs (useful when the web server also sends mail).",
            "default": false
          },
          "maxIpsPerDomain": {
            "title": "Max IPs per domain",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Cap on IPs checked per domain.",
            "default": 12
          },
          "authChecks": {
            "title": "SPF / DKIM / DMARC summary",
            "type": "boolean",
            "description": "Summarise authentication: SPF validity and DNS-lookup count, DMARC policy, DKIM keys on common selectors.",
            "default": true
          },
          "dkimSelectors": {
            "title": "Extra DKIM selectors",
            "type": "array",
            "description": "Your provider's selector names if not common ones (e.g. 'k3', 's1024').",
            "items": {
              "type": "string"
            }
          },
          "fetchListingReasons": {
            "title": "Fetch listing reasons",
            "type": "boolean",
            "description": "For a listed IP, also read the list's TXT explanation.",
            "default": true
          },
          "dnsServers": {
            "title": "DNS resolvers for blocklist queries (optional)",
            "type": "array",
            "description": "Most blocklists refuse queries from big public resolvers (8.8.8.8, 1.1.1.1). Leave empty to use the platform's resolver; a list that refuses or does not answer its test entry is reported as 'unknown', never 'clean'.",
            "items": {
              "type": "string"
            }
          },
          "outputMode": {
            "title": "Output",
            "enum": [
              "all",
              "changes"
            ],
            "type": "string",
            "description": "'Only changes' outputs a target only when it was newly listed or delisted since the last run (for daily schedules).",
            "default": "all"
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store with each target's last listings.",
            "default": "siteverdict-email-blacklist-checker"
          },
          "webhookUrl": {
            "title": "Webhook URL (https)",
            "type": "string",
            "description": "POSTed when a target is newly listed or delisted. Stored encrypted."
          },
          "slackWebhookUrl": {
            "title": "Slack incoming webhook URL",
            "type": "string",
            "description": "Stored encrypted."
          },
          "maxConcurrency": {
            "title": "Targets in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "DNS queries are also capped globally.",
            "default": 4
          },
          "aiEnabled": {
            "title": "AI fix suggestions (your own key)",
            "type": "boolean",
            "description": "Off by default. For listed or misconfigured targets, your LLM (with YOUR key) writes a step-by-step remediation and delisting plan from the findings. One 'ai-fix' event per successful answer; your provider bills tokens separately.",
            "default": false
          },
          "aiProvider": {
            "title": "AI provider",
            "enum": [
              "anthropic",
              "openai"
            ],
            "type": "string",
            "description": "Which API your key belongs to.",
            "default": "anthropic"
          },
          "aiApiKey": {
            "title": "AI API key",
            "type": "string",
            "description": "Your Anthropic or OpenAI API key. Stored encrypted by Apify, never logged or written to the output."
          },
          "aiModel": {
            "title": "AI model (optional)",
            "type": "string",
            "description": "Leave empty for the default (Anthropic: claude-sonnet-5-5, OpenAI: gpt-5-mini)."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}