{
  "service": "mails_so",
  "displayName": "Mails",
  "categories": [
    "Communication",
    "Marketing"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "mails_api_key",
      "description": "Mails API key used with the x-mails-api-key header. Create a Mails account and copy the key from your account settings."
    }
  ],
  "homepageUrl": "https://mails.so",
  "actions": [
    {
      "id": "mails_so.create_validation_batch",
      "service": "mails_so",
      "name": "create_validation_batch",
      "description": "Create one Mails batch validation job for a list of email addresses.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "emails": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "One email address to include in the batch job.",
              "format": "email"
            },
            "description": "The list of email addresses to validate in one batch job.",
            "minItems": 1
          }
        },
        "additionalProperties": false,
        "description": "The input payload for creating one batch validation job."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The batch job identifier.",
            "format": "uuid"
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "description": "The batch job name, or null when Mails did not return one."
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "description": "The ISO 8601 timestamp when the batch job was created.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "The ISO 8601 timestamp when the batch job was last updated.",
            "format": "date-time"
          },
          "deletedAt": {
            "anyOf": [
              {
                "type": "string",
                "description": "The batch job deletion timestamp, or null when the batch job has not been deleted.",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "finishedAt": {
            "anyOf": [
              {
                "type": "string",
                "description": "The batch job completion timestamp, or null when the batch job is still running.",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "userId": {
            "type": "string",
            "description": "The Mails user identifier that owns the batch job.",
            "format": "uuid"
          },
          "size": {
            "type": "integer",
            "minimum": 0,
            "description": "The number of emails in the batch job."
          }
        },
        "additionalProperties": false,
        "description": "The normalized batch job metadata returned after Mails accepts the batch request."
      }
    },
    {
      "id": "mails_so.get_validation_batch",
      "service": "mails_so",
      "name": "get_validation_batch",
      "description": "Fetch one Mails batch validation job together with its email results.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "batchId": {
            "type": "string",
            "description": "The batch job identifier returned by Mails.",
            "format": "uuid"
          }
        },
        "additionalProperties": false,
        "description": "The input payload for fetching one batch validation job."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The batch job identifier.",
            "format": "uuid"
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "description": "The batch job name, or null when Mails did not return one."
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "description": "The ISO 8601 timestamp when the batch job was created.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "The ISO 8601 timestamp when the batch job was last updated.",
            "format": "date-time"
          },
          "deletedAt": {
            "anyOf": [
              {
                "type": "string",
                "description": "The batch job deletion timestamp, or null when the batch job has not been deleted.",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "finishedAt": {
            "anyOf": [
              {
                "type": "string",
                "description": "The batch job completion timestamp, or null when the batch job is still running.",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "userId": {
            "type": "string",
            "description": "The Mails user identifier that owns the batch job.",
            "format": "uuid"
          },
          "size": {
            "type": "integer",
            "minimum": 0,
            "description": "The number of emails in the batch job."
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The validation result identifier.",
                  "format": "uuid"
                },
                "email": {
                  "type": "string",
                  "description": "The email address that was validated.",
                  "format": "email"
                },
                "username": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The email username, or null when Mails did not return one."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "domain": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The email domain, or null when Mails did not return one."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "mxRecord": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The MX record, or null when Mails did not return one."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "score": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "The validation score from 0 to 100 returned by Mails."
                },
                "isValidFormat": {
                  "type": "boolean",
                  "description": "Whether the email format is valid."
                },
                "isValidDomain": {
                  "type": "boolean",
                  "description": "Whether the email domain is valid."
                },
                "isValidMx": {
                  "anyOf": [
                    {
                      "type": "boolean",
                      "description": "Whether the MX record is valid, or null when Mails did not complete MX validation."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasNoBlocklist": {
                  "type": "boolean",
                  "description": "Whether the email was not found on a provider blocklist."
                },
                "hasNoCatchall": {
                  "type": "boolean",
                  "description": "Whether the email domain is not configured as catch-all."
                },
                "hasNoGeneric": {
                  "type": "boolean",
                  "description": "Whether the email is not a generic role inbox."
                },
                "isFree": {
                  "type": "boolean",
                  "description": "Whether the email uses a free mailbox provider."
                },
                "result": {
                  "type": "string",
                  "enum": [
                    "deliverable",
                    "undeliverable",
                    "risky",
                    "unknown"
                  ],
                  "description": "The overall Mails validation result."
                },
                "reason": {
                  "type": "string",
                  "enum": [
                    "accepted_email",
                    "invalid_format",
                    "invalid_domain",
                    "invalid_smtp",
                    "rejected_email",
                    "catch_all",
                    "disposable",
                    "no_connect",
                    "timeout",
                    "other"
                  ],
                  "description": "The detailed reason returned by Mails for the validation result."
                }
              },
              "additionalProperties": false,
              "description": "One normalized Mails validation result."
            },
            "description": "The normalized validation results returned for this batch job."
          }
        },
        "additionalProperties": false,
        "description": "The normalized batch job detail returned by the Mails batch retrieval endpoint."
      }
    },
    {
      "id": "mails_so.validate_email",
      "service": "mails_so",
      "name": "validate_email",
      "description": "Validate one email address with the Mails single validation endpoint.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "The email address to validate.",
            "format": "email"
          }
        },
        "additionalProperties": false,
        "description": "The input payload for validating one email address."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The validation result identifier.",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "description": "The email address that was validated.",
            "format": "email"
          },
          "username": {
            "anyOf": [
              {
                "type": "string",
                "description": "The email username, or null when Mails did not return one."
              },
              {
                "type": "null"
              }
            ]
          },
          "domain": {
            "anyOf": [
              {
                "type": "string",
                "description": "The email domain, or null when Mails did not return one."
              },
              {
                "type": "null"
              }
            ]
          },
          "mxRecord": {
            "anyOf": [
              {
                "type": "string",
                "description": "The MX record, or null when Mails did not return one."
              },
              {
                "type": "null"
              }
            ]
          },
          "score": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "description": "The validation score from 0 to 100 returned by Mails."
          },
          "isValidFormat": {
            "type": "boolean",
            "description": "Whether the email format is valid."
          },
          "isValidDomain": {
            "type": "boolean",
            "description": "Whether the email domain is valid."
          },
          "isValidMx": {
            "anyOf": [
              {
                "type": "boolean",
                "description": "Whether the MX record is valid, or null when Mails did not complete MX validation."
              },
              {
                "type": "null"
              }
            ]
          },
          "hasNoBlocklist": {
            "type": "boolean",
            "description": "Whether the email was not found on a provider blocklist."
          },
          "hasNoCatchall": {
            "type": "boolean",
            "description": "Whether the email domain is not configured as catch-all."
          },
          "hasNoGeneric": {
            "type": "boolean",
            "description": "Whether the email is not a generic role inbox."
          },
          "isFree": {
            "type": "boolean",
            "description": "Whether the email uses a free mailbox provider."
          },
          "result": {
            "type": "string",
            "enum": [
              "deliverable",
              "undeliverable",
              "risky",
              "unknown"
            ],
            "description": "The overall Mails validation result."
          },
          "reason": {
            "type": "string",
            "enum": [
              "accepted_email",
              "invalid_format",
              "invalid_domain",
              "invalid_smtp",
              "rejected_email",
              "catch_all",
              "disposable",
              "no_connect",
              "timeout",
              "other"
            ],
            "description": "The detailed reason returned by Mails for the validation result."
          }
        },
        "additionalProperties": false,
        "description": "One normalized Mails validation result."
      }
    }
  ]
}
