{
  "openapi": "3.0.1",
  "info": {
    "title": "Domain Health Audit: DNS, WHOIS, SSL, SPF, DKIM & DMARC",
    "description": "Audit 1 to 5,000 domains for DNS, WHOIS, SSL, HTTP and email-authentication problems, and get the exact DNS records to publish to fix each one. Scored, exportable, with a client-ready report. Validated against RFC 9989. For people and AI agents.",
    "version": "0.0",
    "x-build-id": "iL8plmBQ4CIqIVRqJ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apifmcpfactory~domain-health-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apifmcpfactory-domain-health-audit",
        "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/apifmcpfactory~domain-health-audit/runs": {
      "post": {
        "operationId": "runs-sync-apifmcpfactory-domain-health-audit",
        "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/apifmcpfactory~domain-health-audit/run-sync": {
      "post": {
        "operationId": "run-sync-apifmcpfactory-domain-health-audit",
        "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",
        "required": [
          "domains"
        ],
        "properties": {
          "domains": {
            "title": "Domains to audit",
            "type": "array",
            "description": "One domain per line. Paste plain domains (example.com), full web addresses (https://example.com/page) or email addresses (someone@example.com) — anything extra is stripped for you. Duplicates are removed. Up to 5,000 domains per run.",
            "items": {
              "type": "string"
            }
          },
          "auditPreset": {
            "title": "How much to check",
            "enum": [
              "quick",
              "standard",
              "full",
              "mandate",
              "custom"
            ],
            "type": "string",
            "description": "Choose the depth of the audit. Standard is right for almost everyone. Pick Custom only if you want to turn individual checks on and off yourself.",
            "default": "standard"
          },
          "checkDns": {
            "title": "DNS records (A, AAAA, NS, TXT, CNAME, SOA, CAA)",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkMx": {
            "title": "Mail servers (MX)",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkSpf": {
            "title": "SPF — who may send your mail",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkDmarc": {
            "title": "DMARC — what to do with forged mail",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkDkim": {
            "title": "DKIM — message signing keys",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkWhois": {
            "title": "Registration and expiry (WHOIS / RDAP)",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkSsl": {
            "title": "Website security certificate",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkHttp": {
            "title": "Website redirects and security headers",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkMtaSts": {
            "title": "MTA-STS — enforced encryption for inbound mail",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkTlsRpt": {
            "title": "TLS-RPT — reports on encryption failures",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkDnssec": {
            "title": "DNSSEC — signed DNS answers",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkDane": {
            "title": "DANE / TLSA — certificate pinning for mail",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkFcrdns": {
            "title": "Reverse DNS on your mail servers",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom.",
            "default": true
          },
          "checkBimi": {
            "title": "BIMI — your logo beside your messages",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom. BIMI is a draft specification, not a finished standard.",
            "default": true
          },
          "checkSubdomains": {
            "title": "Subdomain discovery",
            "type": "boolean",
            "description": "Only applies when 'How much to check' is set to Custom. Finds subdomains that send or receive mail and checks whether they are protected.",
            "default": false
          },
          "dkimSelectors": {
            "title": "Your DKIM selector names",
            "type": "array",
            "description": "The names your email provider publishes your signing keys under — for example 'google', 'selector1', 'k1'. Supplying them is the ONLY way to get a definitive DKIM answer: selector names cannot be discovered from public records, so without them a negative result means 'not found at the names we tested', never 'not configured'. Your provider's setup page lists them.",
            "items": {
              "type": "string"
            }
          },
          "deepDkimScan": {
            "title": "Deep DKIM scan (2,056 known selector names)",
            "type": "boolean",
            "description": "Tries a large list of selector names used across the industry. Slower and charged per domain. Only worth it when you do not know your selectors and the standard list found nothing.",
            "default": false
          },
          "generateReport": {
            "title": "Produce a report",
            "type": "boolean",
            "description": "Builds a client-ready report covering the whole run: overall grade, what is failing the Gmail and Outlook requirements, a ranked list of fixes, and a page per domain with the exact records to publish.",
            "default": false
          },
          "reportFormat": {
            "title": "Report format",
            "enum": [
              "html",
              "pdf",
              "both"
            ],
            "type": "string",
            "description": "HTML opens in any browser and prints cleanly to A4. PDF is ready to send to a client. Both produces the two.",
            "default": "both"
          },
          "reportCompanyName": {
            "title": "Your company name",
            "type": "string",
            "description": "Appears on the cover. Setting this (or a logo) puts the report in white-label mode: the cover becomes entirely yours."
          },
          "reportLogoUrl": {
            "title": "Your logo (web address)",
            "type": "string",
            "description": "A direct link to a PNG, JPG or SVG. Shown on the cover in place of ours."
          },
          "reportAccentColor": {
            "title": "Accent colour",
            "type": "string",
            "description": "Hex colour used for headings and highlights, for example #4338CA.",
            "default": "#4338CA"
          },
          "reportFooterText": {
            "title": "Footer line",
            "type": "string",
            "description": "Appears at the bottom of every page — usually your company name or a client reference."
          },
          "onlyReportChanges": {
            "title": "Only return domains that changed since the last run",
            "type": "boolean",
            "description": "For scheduled runs. Compares against the previous result for each domain and returns only those whose score, findings or records have changed. The first run always returns everything.",
            "default": false
          },
          "alertThreshold": {
            "title": "Alert on problems at or above",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "type": "string",
            "description": "How serious a new problem must be before the webhook fires.",
            "default": "high"
          },
          "webhookUrl": {
            "title": "Webhook address",
            "type": "string",
            "description": "Called with a JSON summary when a domain gets worse — a lower score or a new problem at or above your threshold. Leave empty for no alerts."
          },
          "acknowledgedFindings": {
            "title": "Problems you have already accepted",
            "type": "array",
            "description": "Entries in the form example.com:SPF_LOOKUP_LIMIT_EXCEEDED. These stop triggering alerts and drop out of the priority list, but they still appear in the results marked as acknowledged, and they still count against the score — accepting a problem does not make it go away.",
            "items": {
              "type": "string"
            }
          },
          "timeoutPerDomainSecs": {
            "title": "Time limit per domain (seconds)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "A domain that runs out of time returns whatever finished, marked as a partial result, rather than failing the run.",
            "default": 60
          },
          "maxConcurrency": {
            "title": "Domains checked at once",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Higher is faster on large lists. Lower if you are auditing infrastructure that rate-limits you.",
            "default": 10
          },
          "cacheTtlSecs": {
            "title": "Reuse lookups for (seconds)",
            "minimum": 0,
            "maximum": 3600,
            "type": "integer",
            "description": "Avoids repeating identical lookups within a run, which matters when a list shares parent domains.",
            "default": 300
          },
          "useAuthoritativeResolvers": {
            "title": "Ask each domain's own nameservers directly",
            "type": "boolean",
            "description": "Reads records from the source rather than a shared cache, so you see what is published right now. Turn off only if your network blocks direct nameserver queries.",
            "default": true
          },
          "enableCtEnrichment": {
            "title": "Also look for subdomains in public certificate logs",
            "type": "boolean",
            "description": "Finds additional subdomains that have ever been issued a certificate. Off by default: it relies on a third-party service with no commercial terms, so it is never required and is skipped silently if unavailable.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}