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

ParameterTypeDescription
jobIdstring (UUID)Job ID returned from POST /v1/generate

Status values

StatusMeaning
queuedWaiting to be picked up by a worker
processingRendering in progress
completedPDF is ready — download it
failedGeneration failed — see errorMessage. Failed jobs can be retried.
cancelledThe 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"
}