{
  "service": "neverbounce",
  "displayName": "NeverBounce",
  "categories": [
    "Communication",
    "Marketing"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "NEVERBOUNCE_API_KEY",
      "description": "NeverBounce API key passed with the key query or form parameter. Create a Custom Integration App to get one: https://developers.neverbounce.com/docs/api-getting-started."
    }
  ],
  "homepageUrl": "https://neverbounce.com",
  "actions": [
    {
      "id": "neverbounce.create_job",
      "service": "neverbounce",
      "name": "create_job",
      "description": "Create a NeverBounce bulk verification job from a remote file or supplied rows.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "input_location": {
                "const": "remote_url",
                "type": "string",
                "description": "The bulk input is a remote URL."
              },
              "input": {
                "type": "string",
                "description": "The remote URL to the CSV file.",
                "format": "uri"
              },
              "auto_parse": {
                "type": "boolean",
                "description": "Whether NeverBounce should parse the job immediately."
              },
              "auto_start": {
                "type": "boolean",
                "description": "Whether NeverBounce should start verification immediately after parsing."
              },
              "run_sample": {
                "type": "boolean",
                "description": "Whether NeverBounce should run the job as a sample."
              },
              "filename": {
                "type": "string",
                "minLength": 1,
                "description": "The display filename shown for the job."
              },
              "request_meta_data": {
                "type": "object",
                "properties": {
                  "leverage_historical_data": {
                    "type": "boolean",
                    "description": "Whether to leverage historical data during verification."
                  }
                },
                "additionalProperties": false,
                "description": "Additional metadata that influences verification behavior."
              },
              "allow_manual_review": {
                "type": "boolean",
                "description": "Whether the job is allowed to enter manual review."
              },
              "callback_url": {
                "type": "string",
                "description": "The optional callback URL for job lifecycle events.",
                "format": "uri"
              },
              "callback_headers": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "description": "Header value."
                },
                "description": "Optional headers appended to callback requests."
              }
            },
            "additionalProperties": false,
            "required": [
              "input_location",
              "input"
            ],
            "description": "Create a NeverBounce job from a remote CSV URL."
          },
          {
            "type": "object",
            "properties": {
              "input_location": {
                "const": "supplied",
                "type": "string",
                "description": "The bulk input is supplied inline."
              },
              "input": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "string",
                        "description": "A string cell value."
                      },
                      {
                        "type": "number",
                        "description": "A numeric cell value."
                      },
                      {
                        "type": "boolean",
                        "description": "A boolean cell value."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "One primitive cell value supplied to NeverBounce."
                  },
                  "description": "One supplied input row as a flat object."
                },
                "description": "Supplied rows to verify.",
                "minItems": 1
              },
              "auto_parse": {
                "type": "boolean",
                "description": "Whether NeverBounce should parse the job immediately."
              },
              "auto_start": {
                "type": "boolean",
                "description": "Whether NeverBounce should start verification immediately after parsing."
              },
              "run_sample": {
                "type": "boolean",
                "description": "Whether NeverBounce should run the job as a sample."
              },
              "filename": {
                "type": "string",
                "minLength": 1,
                "description": "The display filename shown for the job."
              },
              "request_meta_data": {
                "type": "object",
                "properties": {
                  "leverage_historical_data": {
                    "type": "boolean",
                    "description": "Whether to leverage historical data during verification."
                  }
                },
                "additionalProperties": false,
                "description": "Additional metadata that influences verification behavior."
              },
              "allow_manual_review": {
                "type": "boolean",
                "description": "Whether the job is allowed to enter manual review."
              },
              "callback_url": {
                "type": "string",
                "description": "The optional callback URL for job lifecycle events.",
                "format": "uri"
              },
              "callback_headers": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "description": "Header value."
                },
                "description": "Optional headers appended to callback requests."
              }
            },
            "additionalProperties": false,
            "required": [
              "input_location",
              "input"
            ],
            "description": "Create a NeverBounce job from supplied rows."
          }
        ],
        "description": "The input payload for creating a NeverBounce bulk verification job."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The request status returned by NeverBounce."
          },
          "job_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The NeverBounce job identifier returned by the jobs API."
          },
          "execution_time": {
            "type": "integer",
            "minimum": 0,
            "description": "The server execution time in milliseconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "job_id",
          "execution_time"
        ],
        "description": "The response returned after NeverBounce creates a bulk job."
      }
    },
    {
      "id": "neverbounce.download_job_results",
      "service": "neverbounce",
      "name": "download_job_results",
      "description": "Download a NeverBounce bulk job as CSV with optional result filters and extra columns.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The NeverBounce job identifier returned by the jobs API."
          },
          "valids": {
            "type": "boolean",
            "description": "Whether valid email results should be included."
          },
          "invalids": {
            "type": "boolean",
            "description": "Whether invalid email results should be included."
          },
          "catchalls": {
            "type": "boolean",
            "description": "Whether catchall email results should be included."
          },
          "unknowns": {
            "type": "boolean",
            "description": "Whether unknown email results should be included."
          },
          "disposables": {
            "type": "boolean",
            "description": "Whether disposable email results should be included."
          },
          "include_duplicates": {
            "type": "boolean",
            "description": "Whether duplicate rows should be included."
          },
          "only_duplicates": {
            "type": "boolean",
            "description": "Whether only duplicate rows should be returned."
          },
          "only_bad_syntax": {
            "type": "boolean",
            "description": "Whether only bad-syntax rows should be returned."
          },
          "email_status": {
            "type": "boolean",
            "description": "Whether the CSV should include the email_status column."
          },
          "email_status_int": {
            "type": "boolean",
            "description": "Whether the CSV should include the integer email_status column."
          },
          "has_dns_info": {
            "type": "boolean",
            "description": "Whether the CSV should include has_dns_info."
          },
          "has_mail_server": {
            "type": "boolean",
            "description": "Whether the CSV should include has_mail_server."
          },
          "mail_server_reachable": {
            "type": "boolean",
            "description": "Whether the CSV should include mail_server_reachable."
          },
          "free_email_host": {
            "type": "boolean",
            "description": "Whether the CSV should include free_email_host."
          },
          "role_account": {
            "type": "boolean",
            "description": "Whether the CSV should include role_account."
          },
          "addr": {
            "type": "boolean",
            "description": "Whether the CSV should include addr."
          },
          "alias": {
            "type": "boolean",
            "description": "Whether the CSV should include alias."
          },
          "host": {
            "type": "boolean",
            "description": "Whether the CSV should include host."
          },
          "fqdn": {
            "type": "boolean",
            "description": "Whether the CSV should include fqdn."
          },
          "subdomain": {
            "type": "boolean",
            "description": "Whether the CSV should include subdomain."
          },
          "domain": {
            "type": "boolean",
            "description": "Whether the CSV should include domain."
          },
          "tld": {
            "type": "boolean",
            "description": "Whether the CSV should include tld."
          },
          "network": {
            "type": "boolean",
            "description": "Whether the CSV should include network."
          },
          "bad_syntax": {
            "type": "boolean",
            "description": "Whether the CSV should include bad_syntax."
          },
          "binary_operators_type": {
            "type": "string",
            "enum": [
              "BIN_1_0",
              "BIN_Y_N",
              "BIN_y_n",
              "BIN_yes_no",
              "BIN_Yes_No",
              "BIN_true_false"
            ],
            "description": "The representation used for binary flags."
          },
          "line_feed_type": {
            "type": "string",
            "enum": [
              "LINEFEED_0A0D",
              "LINEFEED_0D0A",
              "LINEFEED_0A",
              "LINEFEED_0D"
            ],
            "description": "The line feed style used in the downloaded CSV."
          }
        },
        "additionalProperties": false,
        "required": [
          "job_id"
        ],
        "description": "Input parameters for downloading NeverBounce job results as CSV."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "filename": {
            "type": "string",
            "minLength": 1,
            "description": "The filename inferred from the NeverBounce response."
          },
          "content_type": {
            "type": "string",
            "minLength": 1,
            "description": "The CSV response content type."
          },
          "csv": {
            "type": "string",
            "description": "The raw CSV body returned by NeverBounce."
          }
        },
        "additionalProperties": false,
        "required": [
          "content_type",
          "csv"
        ],
        "description": "The normalized CSV download returned by NeverBounce."
      }
    },
    {
      "id": "neverbounce.get_account_info",
      "service": "neverbounce",
      "name": "get_account_info",
      "description": "Get the current NeverBounce account credit summary and bulk job counters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "This action does not require any input."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The request status returned by NeverBounce."
          },
          "credits_info": {
            "type": "object",
            "properties": {
              "paid_credits_used": {
                "type": "integer",
                "minimum": 0,
                "description": "Paid credits already consumed."
              },
              "free_credits_used": {
                "type": "integer",
                "minimum": 0,
                "description": "Free credits already consumed."
              },
              "paid_credits_remaining": {
                "type": "integer",
                "minimum": 0,
                "description": "Paid credits currently remaining."
              },
              "free_credits_remaining": {
                "type": "integer",
                "minimum": 0,
                "description": "Free credits currently remaining."
              }
            },
            "additionalProperties": false,
            "description": "The credit summary returned by NeverBounce."
          },
          "job_counts": {
            "type": "object",
            "properties": {
              "completed": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of completed bulk jobs."
              },
              "under_review": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of jobs currently under manual review."
              },
              "queued": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of jobs currently queued."
              },
              "processing": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of jobs currently processing."
              }
            },
            "additionalProperties": false,
            "description": "The job counters returned by the account info endpoint."
          },
          "execution_time": {
            "type": "integer",
            "minimum": 0,
            "description": "The server execution time in milliseconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "credits_info",
          "job_counts",
          "execution_time"
        ],
        "description": "The NeverBounce account information response."
      }
    },
    {
      "id": "neverbounce.get_job_results",
      "service": "neverbounce",
      "name": "get_job_results",
      "description": "Retrieve paginated NeverBounce verification results for a completed bulk job.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The NeverBounce job identifier returned by the jobs API."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The results page to fetch."
          },
          "items_per_page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "description": "The number of results per page."
          }
        },
        "additionalProperties": false,
        "required": [
          "job_id"
        ],
        "description": "Input parameters for retrieving paginated NeverBounce job results."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The request status returned by NeverBounce."
          },
          "total_results": {
            "type": "integer",
            "minimum": 0,
            "description": "The total number of matching result rows."
          },
          "total_pages": {
            "type": "integer",
            "minimum": 0,
            "description": "The total number of result pages."
          },
          "query": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The query echo returned by NeverBounce."
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "The original row data submitted for this result."
                },
                "verification": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The verification object returned for the result row."
                }
              },
              "additionalProperties": false,
              "required": [
                "data",
                "verification"
              ],
              "description": "One row returned by the NeverBounce job results endpoint."
            },
            "description": "Paginated NeverBounce result rows."
          },
          "execution_time": {
            "type": "integer",
            "minimum": 0,
            "description": "The server execution time in milliseconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "total_results",
          "total_pages",
          "query",
          "results",
          "execution_time"
        ],
        "description": "The NeverBounce paginated job results response."
      }
    },
    {
      "id": "neverbounce.get_job_status",
      "service": "neverbounce",
      "name": "get_job_status",
      "description": "Retrieve the current processing status and aggregate counts for a NeverBounce job.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The NeverBounce job identifier returned by the jobs API."
          }
        },
        "additionalProperties": false,
        "required": [
          "job_id"
        ],
        "description": "Input parameters for retrieving a NeverBounce job status."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The request status returned by NeverBounce."
          },
          "id": {
            "type": "integer",
            "minimum": 1,
            "description": "The NeverBounce job identifier returned by the jobs API."
          },
          "filename": {
            "type": "string",
            "description": "The filename shown for the job."
          },
          "created_at": {
            "type": "string",
            "description": "The timestamp when the job was created."
          },
          "total": {
            "type": "object",
            "properties": {
              "records": {
                "type": "integer",
                "minimum": 0,
                "description": "The total number of submitted records."
              },
              "billable": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of billable records."
              },
              "processed": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of processed records."
              },
              "valid": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of valid email results."
              },
              "invalid": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of invalid email results."
              },
              "catchall": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of catchall email results."
              },
              "disposable": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of disposable email results."
              },
              "unknown": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of unknown email results."
              },
              "duplicates": {
                "type": "integer",
                "minimum": 0,
                "description": "The number of duplicate rows."
              },
              "bad_syntax": {
                "type": "integer",
                "minimum": 0,
                "description": "Rows rejected for bad email syntax."
              }
            },
            "additionalProperties": false,
            "description": "The aggregate counters returned by NeverBounce for a bulk job."
          },
          "bounce_estimate": {
            "type": "integer",
            "description": "The estimated bounce rate percentage."
          },
          "percent_complete": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "description": "The percent completion reported by NeverBounce."
          },
          "job_status": {
            "type": "string",
            "description": "The current NeverBounce bulk job status."
          },
          "execution_time": {
            "type": "integer",
            "minimum": 0,
            "description": "The server execution time in milliseconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "id",
          "filename",
          "created_at",
          "total",
          "bounce_estimate",
          "percent_complete",
          "job_status",
          "execution_time"
        ],
        "description": "The NeverBounce bulk job status response."
      }
    },
    {
      "id": "neverbounce.parse_job",
      "service": "neverbounce",
      "name": "parse_job",
      "description": "Parse a NeverBounce bulk job created without auto_parse enabled.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The NeverBounce job identifier returned by the jobs API."
          },
          "auto_start": {
            "type": "boolean",
            "description": "Whether NeverBounce should start verification after parsing."
          }
        },
        "additionalProperties": false,
        "required": [
          "job_id"
        ],
        "description": "Input parameters for parsing a NeverBounce bulk job."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The request status returned by NeverBounce."
          },
          "queue_id": {
            "type": "string",
            "minLength": 1,
            "description": "The queue identifier returned when the parse request succeeds."
          },
          "execution_time": {
            "type": "integer",
            "minimum": 0,
            "description": "The server execution time in milliseconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "execution_time"
        ],
        "description": "The response returned after NeverBounce parses a bulk job."
      }
    },
    {
      "id": "neverbounce.single_check",
      "service": "neverbounce",
      "name": "single_check",
      "description": "Verify a single email address with NeverBounce and return the verification result.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "The email address to verify.",
            "format": "email"
          },
          "address_info": {
            "type": "boolean",
            "description": "Whether to include the optional address_info object."
          },
          "credits_info": {
            "type": "boolean",
            "description": "Whether to include current credit counters."
          },
          "timeout": {
            "type": "integer",
            "minimum": 1,
            "description": "The maximum verification time in seconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "email"
        ],
        "description": "Input parameters for verifying a single email with NeverBounce."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The request status returned by NeverBounce."
          },
          "result": {
            "type": "string",
            "enum": [
              "valid",
              "invalid",
              "disposable",
              "catchall",
              "unknown"
            ],
            "description": "The NeverBounce verification result code."
          },
          "flags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "description": "Verification flags returned by NeverBounce."
          },
          "suggested_correction": {
            "type": "string",
            "description": "The typo correction suggested by NeverBounce when applicable."
          },
          "address_info": {
            "type": "object",
            "properties": {
              "original_email": {
                "type": "string",
                "description": "The original email address submitted to NeverBounce."
              },
              "normalized_email": {
                "type": "string",
                "description": "The normalized email address returned by NeverBounce."
              },
              "addr": {
                "type": "string",
                "description": "The local part of the email address."
              },
              "alias": {
                "type": "string",
                "description": "The alias part detected in the email address."
              },
              "host": {
                "type": "string",
                "description": "The full host portion of the email address."
              },
              "fqdn": {
                "type": "string",
                "description": "The fully qualified domain name."
              },
              "domain": {
                "type": "string",
                "description": "The registrable domain name."
              },
              "subdomain": {
                "type": "string",
                "description": "The subdomain portion of the email address."
              },
              "tld": {
                "type": "string",
                "description": "The top-level domain."
              }
            },
            "additionalProperties": false,
            "description": "The optional address_info object returned by NeverBounce."
          },
          "credits_info": {
            "type": "object",
            "properties": {
              "paid_credits_used": {
                "type": "integer",
                "minimum": 0,
                "description": "Paid credits already consumed."
              },
              "free_credits_used": {
                "type": "integer",
                "minimum": 0,
                "description": "Free credits already consumed."
              },
              "paid_credits_remaining": {
                "type": "integer",
                "minimum": 0,
                "description": "Paid credits currently remaining."
              },
              "free_credits_remaining": {
                "type": "integer",
                "minimum": 0,
                "description": "Free credits currently remaining."
              }
            },
            "additionalProperties": false,
            "description": "The credit summary returned by NeverBounce."
          },
          "execution_time": {
            "type": "integer",
            "minimum": 0,
            "description": "The server execution time in milliseconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "result",
          "flags",
          "suggested_correction",
          "execution_time"
        ],
        "description": "The NeverBounce single check response."
      }
    },
    {
      "id": "neverbounce.start_job",
      "service": "neverbounce",
      "name": "start_job",
      "description": "Start a parsed NeverBounce bulk job.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "job_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The NeverBounce job identifier returned by the jobs API."
          },
          "run_sample": {
            "type": "boolean",
            "description": "Whether NeverBounce should run the job as a sample."
          }
        },
        "additionalProperties": false,
        "required": [
          "job_id"
        ],
        "description": "Input parameters for starting a parsed NeverBounce bulk job."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The request status returned by NeverBounce."
          },
          "queue_id": {
            "type": "string",
            "minLength": 1,
            "description": "The queue identifier returned when the start request succeeds."
          },
          "message": {
            "type": "string",
            "description": "An optional message returned by NeverBounce."
          },
          "execution_time": {
            "type": "integer",
            "minimum": 0,
            "description": "The server execution time in milliseconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "execution_time"
        ],
        "description": "The response returned after NeverBounce starts a bulk job."
      }
    }
  ]
}
