{
  "openapi": "3.0.1",
  "info": {
    "title": "Email Verification API - Verify, Find and Reverse Lookup",
    "description": "Verify email addresses with SMTP checks, a safe-to-send verdict and a reason code, find the address behind a person at a company, and reverse-look-up the person or company behind an address, a domain or a profile URL. Flags catch-all, disposable, free, role and gibberish. Pay per result.",
    "version": "0.1",
    "x-build-id": "ZcGmRn4bxvxTBlJvg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~email-verification-finder-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-email-verification-finder-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~email-verification-finder-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-email-verification-finder-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~email-verification-finder-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-email-verification-finder-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 look up",
            "enum": [
              "verify",
              "find",
              "reverse-email",
              "reverse-domain",
              "reverse-linkedin",
              "catchall",
              "disposable",
              "free",
              "role",
              "gibberish",
              "business",
              "name-validate",
              "company-domains",
              "mx",
              "whois"
            ],
            "type": "string",
            "description": "Which question to ask. Each mode reads a different input list, so fill in the list named in the mode you pick and leave the others empty.",
            "default": "verify"
          },
          "emails": {
            "title": "Email addresses",
            "type": "array",
            "description": "Addresses to look up, one per line. Used by the verify, reverse email and single flag modes. An address pasted inside a longer string, such as a mail header or a name and address pair, is extracted before the request, and duplicates are removed so you are never charged twice for the same address.",
            "items": {
              "type": "string"
            }
          },
          "people": {
            "title": "People",
            "type": "array",
            "description": "Names to find addresses for, one per line, used by the find mode. Each line is paired with the matching line in Companies. Give a single company and it applies to every person on the list, which is the usual way to run everyone at one account.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Companies or domains",
            "type": "array",
            "description": "Company names or websites, one per line. Paired line by line with People in the find mode, and read on its own in the company to domains mode. A pasted URL is reduced to its bare hostname before the request, since the provider matches on the domain.",
            "items": {
              "type": "string"
            }
          },
          "domains": {
            "title": "Domains",
            "type": "array",
            "description": "Domains to look up, one per line. Used by the reverse domain, mail exchanger record and registration record modes. Pasted URLs are reduced to the bare hostname.",
            "items": {
              "type": "string"
            }
          },
          "profileUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "Public professional profile URLs to look up, one per line, used by the reverse profile URL mode.",
            "items": {
              "type": "string"
            }
          },
          "names": {
            "title": "Names",
            "type": "array",
            "description": "Names to check, one per line, used by the validate names mode. Useful on signup and lead forms, where a name field collects as much keyboard noise as it does real names.",
            "items": {
              "type": "string"
            }
          },
          "statuses": {
            "title": "Keep only these verdicts",
            "type": "array",
            "description": "Only keep rows whose verification verdict is one of these. Restricting to valid is how you turn a raw list into one that is safe to send to. Leave empty to keep every verdict. Applied after the provider answers, so it reduces dataset noise and Apify spend rather than provider credits.",
            "items": {
              "type": "string",
              "enum": [
                "valid",
                "invalid",
                "catch_all",
                "unknown"
              ],
              "enumTitles": [
                "Valid: a real mailbox that is accepting mail",
                "Invalid: will bounce",
                "Catch-all: the domain accepts everything, so the mailbox is unproven",
                "Unknown: the receiving server gave no usable answer"
              ]
            },
            "default": []
          },
          "safeToSend": {
            "title": "Keep only these safe-to-send verdicts",
            "type": "array",
            "description": "Only keep rows the provider rated this way. This is the blunter, more practical companion to the verdict: it folds in the reasons a technically valid address still bounces. Leave empty to keep every rating.",
            "items": {
              "type": "string",
              "enum": [
                "yes",
                "risky",
                "no",
                "unknown"
              ],
              "enumTitles": [
                "Yes: safe to send",
                "Risky: usable when you control the sending infrastructure",
                "No: do not send",
                "Unknown: cannot be determined right now"
              ]
            },
            "default": []
          },
          "subStatusCodes": {
            "title": "Keep only these reason codes",
            "type": "array",
            "description": "Only keep rows whose reason code is one of these, given as numbers such as 200, 406 or 411. The reason code is the detail under the verdict and it is where the useful decisions live: 407 is a greylisting server that will verify on a retry, while 406 is a mailbox that does not exist. Every row carries the code and the reason it stands for.",
            "items": {
              "type": "string"
            }
          },
          "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.",
            "default": false
          },
          "excludeFreeEmail": {
            "title": "Drop free consumer mailboxes",
            "type": "boolean",
            "description": "Leave out addresses on free consumer providers, keeping only company addresses. Useful when the list is meant for business outreach.",
            "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.",
            "default": false
          },
          "excludeGibberish": {
            "title": "Drop gibberish addresses",
            "type": "boolean",
            "description": "Leave out addresses whose mailbox part looks machine generated rather than chosen by a person. These are what a form fills up with when it is being tested or abused.",
            "default": false
          },
          "excludeCatchAll": {
            "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.",
            "default": false
          },
          "requireBusinessEmail": {
            "title": "Keep only business addresses",
            "type": "boolean",
            "description": "Only keep addresses the provider identifies as belonging to a company rather than an individual consumer account.",
            "default": false
          },
          "minConfidence": {
            "title": "Minimum finder confidence",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "In the find mode, only keep addresses the provider is at least this confident about, on its zero to one hundred scale. Leave at zero to keep every candidate.",
            "default": 0
          },
          "gibberishThreshold": {
            "title": "Gibberish sensitivity for name checks",
            "enum": [
              "off",
              "medium",
              "high"
            ],
            "type": "string",
            "description": "How strictly the validate names mode judges a name to be gibberish. Off skips the check entirely, medium is a reasonable default for signup forms, and high is worth using when the form is being actively abused."
          },
          "timeoutMs": {
            "title": "Per lookup timeout in milliseconds",
            "minimum": 1000,
            "maximum": 180000,
            "type": "integer",
            "description": "How long the provider may spend on one lookup before answering, from one thousand to one hundred and eighty thousand milliseconds. A short timeout returns more unknown verdicts, which cost you nothing but tell you nothing either. Leave empty to use the provider's own default."
          },
          "queueSlowFinds": {
            "title": "Wait for slow finder lookups",
            "type": "boolean",
            "description": "When a find outruns its timeout, let the provider finish it in the background and poll for the answer instead of giving up. On by default, and worth leaving on: the lookup has already been paid for, so abandoning it wastes a credit.",
            "default": true
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Pace the run so it stays under whatever rate your plan allows. Lower this if the provider starts reporting its per minute limit; raise it to finish a long list sooner.",
            "default": 60
          },
          "skipNotFound": {
            "title": "Skip inputs with no result",
            "type": "boolean",
            "description": "Leave inputs the provider returned nothing for out of the dataset. Note that an invalid address is a verdict, not a miss, so this does not drop invalid rows. Off by default. 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
          },
          "authScheme": {
            "title": "How to send the API token",
            "enum": [
              "auto",
              "bearer",
              "raw"
            ],
            "type": "string",
            "description": "This provider accepts two token shapes. Tokens created on the current dashboard go as a bearer token, while the older account id and secret pair goes with no scheme word in front of it. Automatic picks by looking at your key and is right almost always; the other two are there for when it is not.",
            "default": "auto"
          },
          "apiKey": {
            "title": "API token",
            "type": "string",
            "description": "Your own API token for the email verification API, created on the provider's dashboard. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}