Skip to main content

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

ParamAllowed valuesPurpose
statusPending, Valid, Invalid, Unknown, Error, or AllFilter records by status
pageinteger ≥ 1Page number. Default = 1.
page_sizeinteger 1–1000Items 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

FieldTypeMeaning
idintegerRecord's primary key
ec_idstring | nullOptional caller-supplied external identifier (preserved from CSV column ec_id if present)
emailstringThe email address
statusstringSee Status Values
validator_usedstring | nullWhich validator stage produced the answer — see Validator Values
is_cachedbooleantrue if the answer came from the validator's 30-day cache
error_messagestring | nullPopulated when status == "Error" (validator unreachable, batch HTTP failure, etc.)
processed_atdatetime | nullWhen the record received its final status

Status Values

ValueSource
PendingDefault, before processing
ValidValidator returned Valid
InvalidValidator returned Invalid
UnknownValidator returned No Email (catch-all or undeliverable)
ErrorThe 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.

ValueNotes
PrimaryFirst-pass validation; most addresses resolve here
SecondarySecond-opinion validation when the primary check returns catch-all / ambiguous
SMTPDirect SMTP deliverability check; last resort
nullRecord 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:

  1. Primary validation runs first. If it returns a catch-all / ambiguous result…
  2. A second-opinion validation stage is consulted, and if still unresolved…
  3. 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

HTTPBodyWhen
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.