- authentication
- Secret API key as a bearer token
- billing
- Free.
The job's current status and running counts. status moves from queued to processing and ends in completed, failed, or cancelled; processed and the verdict counts advance as chunks finish. A job that belongs to another account answers 404.
Parameters
| name | in | type | description |
|---|---|---|---|
| jobIdrequired | path | integer | The id returned at creation. |
Example request
curl https://spaw.co/api/v1/email/bulk/512 \ -H "Authorization: Bearer sk_live_…"
Responses
200The job.
{
"success": true,
"data": {
"job": {
"id": 512,
"status": "processing",
"total": 2000,
"duplicate_count": 12,
"processed": 900,
"deliverable": 610,
"risky": 140,
"undeliverable": 150,
"credits_used": 750,
"stopped_reason": null,
"cancel_requested": false,
"webhook_status": null,
"created_at": "2026-09-03T10:12:44+00:00",
"finished_at": null
}
}
}401The key is missing, malformed, or revoked.
{
"success": false,
"error": {
"code": "UNAUTHENTICATED",
"message": "Provide a valid API key as a bearer token.",
"request_id": "req_01m1kgdm4xngzmbmff68g94w0c"
}
}404No such record on this account.
{
"message": "Not Found"
}429Over 5 requests per second for the key. Retry after the limit resets.
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Retry after the limit resets.",
"request_id": "req_01m1kgdm4xngzmbmff68g94w0c"
}
}Error codes
Failures answer { success: false, error: { code, message, request_id } }. Each code has its own page.