{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk Email Verifier API - Deliverability and Toxicity",
    "description": "Verify up to ten thousand email addresses in one request with syntax, DNS, MX and SMTP checks, and get the verdict, the reason code, a 0-100 deliverability score, a 0-5 toxicity score plus catch-all, disposable, free, role and full mailbox flags. Domain checks cost one credit. Pay per result.",
    "version": "0.1",
    "x-build-id": "IdAg9MeHpy97QZL34"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~bulk-email-verifier-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-bulk-email-verifier-api",
        "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/nabeelbaghoor~bulk-email-verifier-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-bulk-email-verifier-api",
        "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/nabeelbaghoor~bulk-email-verifier-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-bulk-email-verifier-api",
        "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": {
          "mode": {
            "title": "What to check",
            "enum": [
              "verify",
              "domain",
              "toxicity"
            ],
            "type": "string",
            "description": "Verify runs the full check on a list of addresses: syntax, domain, mail exchanger records and an SMTP conversation with the receiving server. Domain check answers what can be known about a domain without touching any mailbox, and costs one credit per domain rather than per address. Toxicity scores a list for spam traps, complainers and other addresses that damage a sender reputation.",
            "default": "verify"
          },
          "emails": {
            "title": "Email addresses",
            "type": "array",
            "description": "Email addresses, one per line. Used by verification and by the toxicity list. An address pasted inside a longer string, such as a mail header or a name and address pair, is extracted before the request.",
            "items": {
              "type": "string"
            }
          },
          "domains": {
            "title": "Company domains",
            "type": "array",
            "description": "Domains to check, one per line. A pasted URL is reduced to the bare hostname and an address is reduced to the part after the at sign, so a messy list still works. Domain check only.",
            "items": {
              "type": "string"
            }
          },
          "statuses": {
            "title": "Keep only these verdicts",
            "type": "array",
            "description": "Only keep addresses with these verdicts. Restricting to deliverable is how you turn a raw list into one that is safe to send to. Leave empty to keep every verdict. Verification only, and applied after the provider answers, so it reduces dataset noise and Apify spend rather than provider credits.",
            "items": {
              "type": "string",
              "enum": [
                "deliverable",
                "risky",
                "undeliverable",
                "unknown"
              ],
              "enumTitles": [
                "Deliverable: mailbox accepts mail",
                "Risky: may accept, but likely to underperform",
                "Undeliverable: will bounce",
                "Unknown: no verdict could be reached"
              ]
            },
            "default": []
          },
          "reasons": {
            "title": "Keep only these reason codes",
            "type": "array",
            "description": "Only keep addresses whose reason code is one of these. The reason code is the detail under the verdict, and it is what separates a server that timed out and will verify on a retry from a mailbox that genuinely does not exist. Leave empty to keep every reason. Verification only.",
            "items": {
              "type": "string",
              "enum": [
                "accepted_email",
                "low_deliverability",
                "low_quality",
                "invalid_email",
                "invalid_domain",
                "rejected_email",
                "dns_error",
                "unavailable_smtp",
                "unsupported",
                "timeout",
                "unknown"
              ],
              "enumTitles": [
                "Accepted by the receiving server",
                "Low deliverability",
                "Low quality address",
                "Invalid address format",
                "Invalid domain",
                "Rejected by the receiving server",
                "DNS error",
                "Mail server unavailable",
                "Unsupported mailbox provider",
                "Timed out",
                "Unknown"
              ]
            },
            "default": []
          },
          "excludeFreeEmail": {
            "title": "Drop free consumer mailboxes",
            "type": "boolean",
            "description": "Leave out addresses on free consumer providers such as the large webmail services, keeping only company addresses. Useful when the list is meant for B2B outreach. Verification only.",
            "default": false
          },
          "excludeRoleAccounts": {
            "title": "Drop role accounts",
            "type": "boolean",
            "description": "Leave out shared inboxes such as info, sales and support, keeping only addresses that belong to an individual. Verification only.",
            "default": false
          },
          "excludeDisposable": {
            "title": "Drop disposable addresses",
            "type": "boolean",
            "description": "Leave out addresses on throwaway providers, which are created to expire and are worth nothing in a list. Verification only.",
            "default": false
          },
          "excludeAcceptAll": {
            "title": "Drop catch-all domains",
            "type": "boolean",
            "description": "Leave out addresses on domains that accept everything sent to them. A catch-all domain answers yes to every mailbox, so a positive result there says nothing about the individual address. Verification only.",
            "default": false
          },
          "minScore": {
            "title": "Minimum deliverability score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only keep addresses scoring at least this on the provider's zero to one hundred deliverability scale. A useful middle ground when the verdict alone is too blunt: it keeps the stronger risky addresses and drops the weak ones. Leave at zero to keep every score. Verification only.",
            "default": 0
          },
          "maxToxicity": {
            "title": "Maximum toxicity",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only keep addresses at or below this on the provider's zero to five toxicity scale, where zero is clean and five should never be mailed. Applies to both verification and the toxicity list. Leave at five to keep every address.",
            "default": 5
          },
          "batchSize": {
            "title": "Addresses per request",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many addresses to verify in one request against the provider's synchronous bulk endpoint, up to its own ceiling of ten thousand. Larger batches mean far fewer requests for a big list, at the cost of waiting longer for each response. Verification only.",
            "default": 1000
          },
          "timeout": {
            "title": "Per address timeout in seconds",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "How long the provider may spend on one address before answering unknown. This is only honoured on the single address route, which the actor uses when exactly one address is given, because the bulk route sets its own pace.",
            "default": 10
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Pace the run so it stays under whatever rate your plan allows. The provider's defaults are one hundred requests per minute on verification and one thousand on domain checks. Lower this if it starts returning rate limit responses.",
            "default": 100
          },
          "skipNotFound": {
            "title": "Skip inputs with no result",
            "type": "boolean",
            "description": "Leave inputs the provider had nothing for out of the dataset. Off by default, because keeping the misses is what lets you see which inputs resolved and which did not. Misses are never charged for either way.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many rows. This is the cap on both spend and run time.",
            "default": 100
          },
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own API key for the email verification API. Sent as a request header, never on the URL. Required for every lookup. Stored as a secret."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}