{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk Email Validator: MX, Disposable, Typo and Role Check",
    "description": "Cut bounces before you send: bulk email validation with syntax, MX and null MX, dead domains, disposable and role addresses, free providers, typos (gmial.com) with fixes, SPF and DMARC. Status valid, risky, invalid or unknown with reasons. DNS only, no SMTP, so mailboxes are not confirmed.",
    "version": "1.0",
    "x-build-id": "jRgMSCPxS6CRAgxMr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/joesimo~email-validator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-joesimo-email-validator",
        "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/joesimo~email-validator/runs": {
      "post": {
        "operationId": "runs-sync-joesimo-email-validator",
        "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/joesimo~email-validator/run-sync": {
      "post": {
        "operationId": "run-sync-joesimo-email-validator",
        "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": {
          "emails": {
            "title": "Email addresses",
            "type": "array",
            "description": "One address per line. Wrappers such as <code>Jane Doe &lt;jane@acme.com&gt;</code> or <code>mailto:</code> are cleaned automatically. Up to a few hundred thousand per run. Only addresses you supply are checked; this Actor never collects or finds emails. If you start a run with no emails, no bulk paste and no dataset (for example an API call with <code>{}</code>), it checks the 6 sample addresses shown here as a demo (about $0.006).",
            "items": {
              "type": "string"
            }
          },
          "emailsText": {
            "title": "Bulk paste",
            "type": "string",
            "description": "Paste a list (for example a CSV column). Addresses can be separated by new lines, commas, semicolons or tabs. Tokens without an @ (such as a header row) are skipped and not charged."
          },
          "datasetId": {
            "title": "Dataset ID",
            "type": "string",
            "description": "Optional. Check the emails stored in one of your Apify datasets, for example the output of another Actor run. Combined with the lists above."
          },
          "datasetField": {
            "title": "Dataset field",
            "type": "string",
            "description": "Field that holds the email in each dataset item. Dot paths work (<code>contact.email</code>). Arrays of emails are expanded.",
            "default": "email"
          },
          "maxItems": {
            "title": "Max emails",
            "minimum": 0,
            "type": "integer",
            "description": "Check at most this many unique addresses. 0 = all. You pay per address checked.",
            "default": 0
          },
          "dedupe": {
            "title": "Remove duplicates",
            "type": "boolean",
            "description": "Check each address once (case-insensitive domain and local part). Duplicates are not saved and not charged.",
            "default": true
          },
          "roleAsRisky": {
            "title": "Mark role accounts as risky",
            "type": "boolean",
            "description": "Role or shared mailboxes such as <code>info@</code>, <code>sales@</code> or <code>support@</code> get status risky. Turn off to only flag them with <code>isRoleAccount</code>.",
            "default": true
          },
          "disposableStatus": {
            "title": "Disposable domains",
            "enum": [
              "risky",
              "invalid"
            ],
            "type": "string",
            "description": "Status for throwaway domains such as mailinator.com. They can receive mail, so the default is risky.",
            "default": "risky"
          },
          "freeAsRisky": {
            "title": "Mark free providers as risky",
            "type": "boolean",
            "description": "For B2B lists: give gmail.com, yahoo.com, outlook.com and other free consumer providers status risky. Off by default; <code>isFreeProvider</code> is always filled.",
            "default": false
          },
          "checkMxHosts": {
            "title": "Check that mail servers resolve",
            "type": "boolean",
            "description": "Also resolve the host names in the MX records. Catches domains whose MX points to a host that does not exist or to localhost.",
            "default": true
          },
          "checkSpfDmarc": {
            "title": "Check SPF and DMARC",
            "type": "boolean",
            "description": "Report whether the domain publishes SPF and DMARC records and the DMARC policy. Informational, it does not change the status.",
            "default": true
          },
          "includeSpfRecord": {
            "title": "Include the SPF record text",
            "type": "boolean",
            "description": "Add the raw SPF TXT record to each result as <code>spfRecord</code>.",
            "default": false
          },
          "dnsMode": {
            "title": "DNS transport",
            "enum": [
              "udp",
              "doh"
            ],
            "type": "string",
            "description": "Plain DNS queries the servers below. If they fail the startup check, the Actor falls back to the system resolver and then to DNS over HTTPS (Cloudflare and Google) automatically.",
            "default": "udp"
          },
          "dnsServers": {
            "title": "DNS servers",
            "type": "array",
            "description": "Resolver IP addresses, used in rotation. Leave empty to use the system resolver.",
            "default": [
              "1.1.1.1",
              "8.8.8.8"
            ],
            "items": {
              "type": "string"
            }
          },
          "dohFallback": {
            "title": "DNS over HTTPS second opinion",
            "type": "boolean",
            "description": "When a plain DNS lookup still times out or fails after all retries, ask Google DNS over HTTPS once before giving up. Turns many unknown results into real answers. Ignored when DNS transport is already DNS over HTTPS.",
            "default": true
          },
          "dnsConcurrency": {
            "title": "DNS concurrency",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum DNS queries in flight at once.",
            "default": 50
          },
          "dnsTimeoutSecs": {
            "title": "DNS timeout (seconds)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Timeout per DNS query attempt.",
            "default": 4
          },
          "dnsRetries": {
            "title": "DNS retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for timeouts and server failures, rotating resolvers with backoff. Lookups that still fail give status unknown.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}