{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk Email Verifier — MX, SMTP & Disposable Detection at Scale",
    "description": "Verify email deliverability in bulk — MX records, live SMTP mailbox checks, disposable domain detection (55,000+ domains), role-based flagging, catch-all detection, and confidence scores. $0.005/email, no subscription.",
    "version": "1.3",
    "x-build-id": "av74h7p4fd2FAL89L"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ryanclinton~bulk-email-verifier/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ryanclinton-bulk-email-verifier",
        "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/ryanclinton~bulk-email-verifier/runs": {
      "post": {
        "operationId": "runs-sync-ryanclinton-bulk-email-verifier",
        "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/ryanclinton~bulk-email-verifier/run-sync": {
      "post": {
        "operationId": "run-sync-ryanclinton-bulk-email-verifier",
        "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": [
          "emails"
        ],
        "properties": {
          "emails": {
            "title": "Email addresses",
            "maxItems": 100000,
            "type": "array",
            "description": "List of email addresses to verify. One result per email.",
            "items": {
              "type": "string"
            },
            "default": [
              "test@apify.com",
              "invalid@nonexistent-domain-xyz123.com",
              "test@mailinator.com"
            ]
          },
          "mode": {
            "title": "Execution mode",
            "enum": [
              "raw",
              "prospecting",
              "crm-hygiene",
              "signup-gate",
              "enrichment-validation",
              "deliverability-audit"
            ],
            "type": "string",
            "description": "Opinionated preset for common workflows. prospecting = strict cold-outbound gate (deep + suppress free/role/catch-all). crm-hygiene = weekly cleanup with watchlist + deltas. signup-gate = real-time signup screening (fast). enrichment-validation = final gate after pattern-finder/enrichment. deliverability-audit = pre-campaign list audit. raw = no opinionated routing.",
            "default": "raw"
          },
          "systemMode": {
            "title": "System mode (stateful service)",
            "type": "boolean",
            "description": "Auto-enable watchlist + delta + domain insights + batch insights + deliverability simulation. One-flag stateful experience.",
            "default": false
          },
          "decisionProfile": {
            "title": "Decision profile",
            "type": "object",
            "description": "Tune the decision engine: strictness (high/balanced/aggressive), allowCatchAll, allowFreeProvider, allowRoleAddress, minConfidence (0-100). Mode preset sets sensible defaults; explicit values override.",
            "default": {}
          },
          "verificationLevel": {
            "title": "Verification level",
            "enum": [
              "basic",
              "standard",
              "deep"
            ],
            "type": "string",
            "description": "basic = syntax + MX only (fastest). standard = + disposable/role/free detection (recommended). deep = + SMTP mailbox check (slowest, most accurate).",
            "default": "standard"
          },
          "maxEmails": {
            "title": "Maximum emails to verify",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap the number of emails processed per run. Useful for deep mode to stay within timeout. Set to 0 for no limit.",
            "default": 0
          },
          "outputProfile": {
            "title": "Output profile",
            "enum": [
              "minimal",
              "standard",
              "full",
              "llm"
            ],
            "type": "string",
            "description": "minimal = decision + routing primitives only (smallest payload). standard / full = everything. llm = decision + reasoning blocks for AI agents.",
            "default": "standard"
          },
          "outputMode": {
            "title": "Output mode (alias)",
            "enum": [
              "pipeline",
              "analysis",
              "debug"
            ],
            "type": "string",
            "description": "Alternate naming for outputProfile. pipeline = minimal. analysis = standard. debug = full. outputProfile wins if both are set."
          },
          "deltaMode": {
            "title": "Delta mode (cross-run change detection)",
            "type": "boolean",
            "description": "When watchlistName is set, emit a per-record delta block (new / changed / unchanged / recovered / degraded) plus a DELTA.json KV mirror. Auto-enabled by mode=crm-hygiene and systemMode=true.",
            "default": false
          },
          "includeDomainInsights": {
            "title": "Include domain insights",
            "type": "boolean",
            "description": "Per-record domainInsights block (catchAll, smtpReliability, authScore, riskProfile, recommendedStrategy) + DOMAIN_SUMMARY KV. Auto-enabled by most opinionated modes and systemMode.",
            "default": false
          },
          "includeBatchInsights": {
            "title": "Include batch insights",
            "type": "boolean",
            "description": "Run-level batchInsights in SUMMARY (listQualityScore, estimatedBounceRate, recommendedSendVolume, riskDistribution + diagnosis + recommendations). Auto-enabled by most opinionated modes and systemMode.",
            "default": false
          },
          "includeDeliverabilitySimulation": {
            "title": "Include deliverability simulation",
            "type": "boolean",
            "description": "Per-record deliverabilitySimulation (expectedInboxRate, spamRisk, bounceRisk, confidence, drivers). Auto-enabled by prospecting / enrichment-validation / deliverability-audit / systemMode.",
            "default": false
          },
          "includeStrategySequence": {
            "title": "Include strategy playbook (multi-step cadence)",
            "type": "boolean",
            "description": "Per-record strategy block — primary channel + fallback[] + multi-step sequence with afterDays + sibling-actor pointers. Advisory only; actor doesn't execute. Auto-enabled by systemMode.",
            "default": false
          },
          "feedbackEvents": {
            "title": "Feedback events (delivery outcomes)",
            "type": "array",
            "description": "Closed-loop calibration. Pass observed delivery outcomes from your ESP / webhook / replied-tracking: [{email, observed: 'delivered'|'opened'|'replied'|'soft-bounce'|'hard-bounce'|'spam'|'unsubscribed', feedbackSource?, observedAt?, campaignId?}]. Per-record `feedback` block + run-level `calibration` block (expectedVsActual + drift + adjustments) emitted in SUMMARY.",
            "default": []
          },
          "sourceActorHint": {
            "title": "Source actor (provenance)",
            "type": "string",
            "description": "Optional hint of which upstream actor produced these emails (e.g. 'email-pattern-finder', 'website-contact-scraper'). Used to populate actorGraph.previous and tune trust signals."
          },
          "watchlistName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Set to enable cross-run state. Subsequent runs against the same watchlist add temporalSignals (trend / reengage / confidenceDelta) per email. Leave blank for one-shot runs."
          },
          "monitorStateKey": {
            "title": "Monitor state key (alias for watchlistName)",
            "type": "string",
            "description": "Suite-aligned alias for watchlistName. Either input works; if both are set, watchlistName wins. Lets the same upstream orchestrator pass one consistent field name across bulk-email-verifier, waterfall-contact-enrichment, phone-number-finder, company-deep-research, and lead-enrichment-pipeline."
          },
          "lastAction": {
            "title": "Last action (closes the feedback loop)",
            "type": "object",
            "description": "Optional. Tells the actor what action you took on this watchlist since the last run. On the next scheduled run, the actor compares the current confidence score against the snapshot at action time and emits decisionMemory with an inferred outcome. Honest: only signal-change is observable — direct send / open / reply outcomes are not. Shape: { type: 'sent-campaign' | 'added-to-suppress' | 'flagged-bouncer' | string, takenAt: ISO date, note?: string }. Requires watchlistName / monitorStateKey."
          },
          "suppressionList": {
            "title": "Suppression list",
            "type": "array",
            "description": "Email addresses to auto-flag as suppress regardless of verification result (e.g. unsubscribes, complaints, do-not-contact entries).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "negativeRules": {
            "title": "Negative scoring rules",
            "type": "array",
            "description": "Per-rule penalty / block. Each rule may match on domainContains / domainEquals / localPartContains / localPartEquals. penalty 0-100; set blocks=true to force suppress.",
            "default": []
          },
          "smtpTimeout": {
            "title": "SMTP timeout (seconds)",
            "minimum": 3,
            "maximum": 30,
            "type": "integer",
            "description": "Maximum seconds to wait for SMTP server response. Only used in deep verification mode.",
            "default": 10
          },
          "maxConcurrency": {
            "title": "Max concurrent checks",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of emails to verify in parallel. Lower values are safer for SMTP checks.",
            "default": 5
          },
          "smtpVerifySecret": {
            "title": "SMTP verification key",
            "type": "string",
            "description": "Internal authentication key for SMTP verification service."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}