MailoClean API Documentation

Use real-time verification, bulk jobs, and usage endpoints from any platform.

Base URL

https://mailoclean.com/api/v1

Rate Limit

60 requests/minute per API key

Quickstart

  1. 1. Create an account and generate an API key from dashboard API Docs.
  2. 2. Send your first request to https://mailoclean.com/api/v1/verify.
  3. 3. Handle JSON response and status code.
curl -X POST "https://mailoclean.com/api/v1/verify" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"email":"hello@company.com"}'
Need an API key? Sign up or log in.

Endpoints

Method Path Description
POST /api/v1/verify Single email verification.
POST /api/v1/bulk Submit comma/newline list and create bulk job.
GET /api/v1/bulk/{id} Get bulk job status and latest items.
GET /api/v1/usage Get credits and usage overview.

Code Snippets

curl -X POST "https://mailoclean.com/api/v1/verify" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"email":"hello@company.com"}'
const res = await fetch("https://mailoclean.com/api/v1/verify", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    "Accept": "application/json"
  },
  body: JSON.stringify({ email: "hello@company.com" })
});
const data = await res.json();
use Illuminate\Support\Facades\Http;

$response = Http::withToken('YOUR_API_KEY')
    ->acceptJson()
    ->post('https://mailoclean.com/api/v1/verify', ['email' => 'hello@company.com']);

$data = $response->json();
import requests

res = requests.post(
    "https://mailoclean.com/api/v1/verify",
    headers={"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"},
    json={"email": "hello@company.com"},
    timeout=15,
)
data = res.json()

Try It

Runs a real request to verify endpoint.

Error Handling

Status Meaning Example
401Invalid/missing key{"message":"Unauthorized"}
402Insufficient credits{"message":"Insufficient credits"}
422Invalid input{"errors":{"email":["..."]}}
429Rate limited{"message":"Too Many Attempts."}

Rate Limit & Retry

  • 60 requests/minute per key.
  • On `429`, retry with exponential backoff.
  • Use bulk endpoint for large lists to avoid burst throttling.
if response.status == 429:
    sleep(backoff_seconds)
    retry()