Bulk endpoint
POST /api/v1/bulk — validate a batch of emails in one request.
Create a bulk job
POST https://mailsentry.dev/api/v1/bulk
Content-Type: application/json
X-API-Key: ms_live_your_key_here
{
"emails": ["jane@example.com", "bob@tempmail.org", "info@company.co"],
"filename": "leads-april.csv"
}
The emails field is required (array of strings). filename is optional — it's stored for your reference in job history.
Batch size limits: 100 (Free), 500 (Starter), 1,000 (Pro), 5,000 (Business), 10,000 (Enterprise).
Response
{
"id": "job_abc123",
"status": "completed",
"total": 3,
"results": [
{ "email": "jane@example.com", "score": 95, "verdict": "valid", "issues": [] },
{ "email": "bob@tempmail.org", "score": 12, "verdict": "invalid", "issues": ["Disposable email"] },
{ "email": "info@company.co", "score": 72, "verdict": "caution", "issues": ["Role-based address"] }
]
}Retrieve a job
Fetch a previously submitted job by ID:
GET https://mailsentry.dev/api/v1/bulk/{job_id}
X-API-Key: ms_live_your_key_here
Returns the same response shape as the create endpoint. Useful for polling status or downloading results later.
Streaming results
For real-time progress, add ?stream=1 to the request URL. The response is NDJSON (newline-delimited JSON) — one result per line as each email finishes:
{"i":0,"total":3,"email":"jane@example.com","score":95,"verdict":"valid","issues":[]}
{"i":1,"total":3,"email":"bob@tempmail.org","score":12,"verdict":"invalid","issues":["Disposable email"]}
{"i":2,"total":3,"email":"info@company.co","score":72,"verdict":"caution","issues":["Role-based address"]}
{"done":true,"jobId":"job_abc123"}
The dashboard uses this for its live progress display.