Job Records
Paginated list of every individual validation result for a job.
Endpoint
Method: GET
Path: /email-validation/jobs/{job_id}/records/
Full URL: https://backend.ecoreservice.com/api/v1/email-validation/jobs/{job_id}/records/
Auth: Authorization: Token YOUR_API_TOKEN — see Authentication
Query Parameters
| Param | Allowed values | Purpose |
|---|---|---|
status | Pending, Valid, Invalid, Unknown, Error, or All | Filter records by status |
page | integer ≥ 1 | Page number. Default = 1. |
page_size | integer 1–1000 | Items per page. Default = 100. |
Example Request
curl -X GET \
"https://backend.ecoreservice.com/api/v1/email-validation/jobs/42/records/?status=Valid&page=1&page_size=100" \
-H "Authorization: Token YOUR_API_TOKEN"
Successful Response — 200 OK
{
"count": 250,
"total_pages": 3,
"current_page": 1,
"next": "...",
"previous": null,
"results": [
{
"id": 9881,
"ec_id": null,
"email": "jane@acme.com",
"status": "Valid",
"validator_used": "Primary",
"is_cached": false,
"error_message": null,
"processed_at": "2026-05-06T11:42:31.412Z"
}
]
}
Per-record Fields
| Field | Type | Meaning |
|---|---|---|
id | integer | Record's primary key |
ec_id | string | null | Optional caller-supplied external identifier (preserved from CSV column ec_id if present) |
email | string | The email address |
status | string | See Status Values |
validator_used | string | null | Which validator stage produced the answer — see Validator Values |
is_cached | boolean | true if the answer came from the validator's 30-day cache |
error_message | string | null | Populated when status == "Error" (validator unreachable, batch HTTP failure, etc.) |
processed_at | datetime | null | When the record received its final status |
Status Values
| Value | Source |
|---|---|
Pending | Default, before processing |
Valid | Validator returned Valid |
Invalid | Validator returned Invalid |
Unknown | Validator returned No Email (catch-all or undeliverable) |
Error | The batch this record was in failed; check error_message |
Validator Values
validator_used reflects which stage of eCore's validation cascade produced the final answer.
| Value | Notes |
|---|---|
Primary | First-pass validation; most addresses resolve here |
Secondary | Second-opinion validation when the primary check returns catch-all / ambiguous |
SMTP | Direct SMTP deliverability check; last resort |
null | Record has not been processed yet, or the batch errored |
The boolean is_cached is true whenever the answer came from a 30-day cache — independent of which validator produced the original answer.
Catch-all Domains
A catch-all (accept-all) mail server accepts mail to any address at its domain, so a single check can't confirm whether a specific mailbox actually exists. eCore doesn't give up at the first ambiguous answer:
- Primary validation runs first. If it returns a catch-all / ambiguous result…
- A second-opinion validation stage is consulted, and if still unresolved…
- A direct SMTP deliverability check is the last resort.
Every address resolves to one of three final statuses — there is no separate "catch-all" status:
Valid— confirmed deliverable.Invalid— confirmed undeliverable.Unknown— could not be confirmed either way (this is where a catch-all address that survives all three stages lands).
Billing: you are only charged for Valid results. An address that ends as Unknown — including an unconfirmable catch-all — is refunded, so catch-all ambiguity never costs you credits. See Credit Costs.
Error Responses
| HTTP | Body | When |
|---|---|---|
| 401 | {"detail": "Invalid token."} | Missing or invalid token |
| 404 | {"detail": "Not found."} | job_id doesn't exist or belongs to another user |
| 400 | {"error": "Invalid status filter."} | status value not recognized |
See Error Codes for the full list.