Check job status
Poll this endpoint until status is completed or failed. Recommended poll interval: 1–2 seconds; most jobs finish within 5–15 seconds.
Endpoint
GET
/v1/generate/jobs/:jobId Requires the document:read scope. Returns 404 NOT_FOUND if the job doesn't exist in your organisation.
Path parameters
| Parameter | Type | Description |
|---|---|---|
jobId | string (UUID) | Job ID returned from POST /v1/generate |
Status values
| Status | Meaning |
|---|---|
queued | Waiting to be picked up by a worker |
processing | Rendering in progress |
completed | PDF is ready — download it |
failed | Generation failed — see errorMessage. Failed jobs can be retried. |
cancelled | The job was cancelled before processing completed |
The job object has no download link. Once it's completed, call GET /v1/generate/jobs/:jobId/download for a signed URL. For a stage-by-stage log (useful when debugging), call GET /v1/generate/jobs/:jobId/events.
Avoid tight polling loops. Start at 1 second, then increase to 2–3 seconds if jobs routinely take longer. Or skip polling entirely with webhooks.
curl https://api.pdf-fox.com/v1/generate/jobs/7c9e6679-7425-40de-944b-e07fc1f90ae7 \ -H "Authorization: Bearer pdfs_a1b2c3d4_xxxx"
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"templateId": "a3f1d2e4-1111-4562-b3fc-2c963f66afa6",
"templateVersionId": "b4e2c3f5-2222-4562-b3fc-2c963f66afa6",
"templateName": "Invoice Template",
"status": "completed",
"sourceType": "api",
"inputPayload": { "customer": { "name": "Acme Ltd" } },
"webhookUrl": null,
"errorMessage": null,
"metadata": { "filename": "invoice-INV-0042" },
"createdBy": null,
"documentId": "d5f3b4a6-3333-4562-b3fc-2c963f66afa6",
"documentFilename": "invoice-INV-0042.pdf",
"documentExpiresAt": "2026-05-17T11:00:03Z",
"createdAt": "2026-05-17T10:00:00Z",
"startedAt": "2026-05-17T10:00:01Z",
"completedAt": "2026-05-17T10:00:03Z"
}