Job Status
Poll a single email generation job for progress and the first 100 records.
Endpoint
Method: GET
Path: /email-generation/jobs/{job_id}/
Full URL: https://backend.ecoreservice.com/api/v1/email-generation/jobs/{job_id}/
Auth: Authorization: Bearer <JWT>
Poll every 3–5 seconds until status is Processed or Failed.
Response Payload
{
"id": 123,
"uuid": "…",
"list_name": "Q3 prospects",
"status": "Processing",
"total_records": 4000,
"generated_count": 1800,
"no_email_count": 320,
"total_credits_charged": 20000,
"results_summary": "2120/4000",
"duration": "3m 12s",
"created_at": "…",
"started_at": "…",
"completed_at": null,
"records": [ /* first 100 records — same shape as Records */ ]
}
| Field | Type | Description |
|---|---|---|
id | integer | Job id |
list_name | string | Display label |
status | string | Uploading → Processing → Processed (terminal) / Failed (terminal, credits refunded) |
total_records | integer | Contacts in the job |
generated_count | integer | Contacts with an email found so far |
no_email_count | integer | Contacts with no email found so far |
total_credits_charged | integer | Net credits charged (after refunds) |
results_summary | string | processed/total |
duration | string | Human-readable processing time |
created_at / started_at / completed_at | datetime | null | Lifecycle timestamps |
records | array | First 100 records — see Records for the per-record shape |
Progress & Polling
- Drive a progress bar from
results_summary(processed/total) orgenerated_count + no_email_count. - Stop polling when
statusisProcessedorFailed. - A
Failedjob has already had its credits refunded.
Error Responses
| HTTP | When | Body |
|---|---|---|
| 404 | Job not found / not owned by this account | { "error": "..." } |
See Error Codes for the full list.