API documentation

Verify single addresses or submit bulk jobs over HTTPS with a Bearer API key.

Authentication

Create a key on the API page and send it as Authorization: Bearer ev_live_…. Keys are stored hashed and shown once.

Endpoints

  • POST /api/v1/verify
  • POST /api/v1/bulk
  • GET /api/v1/bulk/:jobId
  • GET /api/v1/bulk/:jobId/results

Examples

curl
curl -X POST https://your-app.lovable.app/api/v1/verify \
  -H "Authorization: Bearer ev_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"email":"john@example.com"}'
javascript
const res = await fetch("https://your-app.lovable.app/api/v1/verify", {
  method: "POST",
  headers: {
    Authorization: "Bearer ev_live_your_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ email: "john@example.com" }),
});
const result = await res.json();
python
import requests

res = requests.post(
    "https://your-app.lovable.app/api/v1/verify",
    headers={"Authorization": "Bearer ev_live_your_key"},
    json={"email": "john@example.com"},
    timeout=60,
)
print(res.json())

Response

json
{
  "email": "john@example.com",
  "status": "valid",
  "confidence": 0.9,
  "checks": {
    "syntax": "pass",
    "domain": "pass",
    "mx": "pass",
    "smtp": "accepted",
    "disposable": false,
    "role": false,
    "catch_all": false
  }
}

Errors & rate limits

  • 400 — invalid request body
  • 401 — missing or invalid API key
  • 402 — not enough credits
  • 429 — rate limit exceeded
  • 500 — unexpected error (no internal details are returned)

Rate limits apply separately to web verification, API requests and bulk job creation.