---
title: "Get a job"
method: GET
path: "/jobs/{job_id}"
tags: ["Jobs"]
---

# Get a job

`GET /jobs/{job_id}`

## Request

- Base URL: `https://api.podpdf.com`
- URL: `https://api.podpdf.com/jobs/{job_id}`
- Auth: API key in header `X-API-Key`

## Response `200`

The job

- Job
  - `job_id` string
  - `status` 'draft' | 'queued' | 'processing' | 'completed' | 'partial_failed' | 'failed' | 'timeout' | 'cancelled'
  - `job_type` 'quick' | 'long' | 'bulk' | 'pdfop' | 'mailmerge'
  - `mode` string
  - `pages` integer, nullable
  - `truncated` boolean
  - `timeout_occurred` boolean
  - `bundle_type` string, nullable
  - `file_count` integer, nullable
  - `processed_count` integer, nullable
  - `success_count` integer, nullable
  - `failure_count` integer, nullable
  - `pages_total` integer, nullable
  - `cancel_requested` boolean: Bulk jobs and mail merge campaigns. True once a cancel is asked for; `status` becomes `cancelled` when the job stops.
  - `campaign_name` string, nullable: Mail merge campaigns.
  - `valid_row_count` integer, nullable: Mail merge campaigns.
  - `sent_count` integer, nullable: Mail merge campaigns: emails the mail server accepted.
  - `failed_count` integer, nullable: Mail merge campaigns.
  - `rejected_count` integer, nullable: Mail merge campaigns.
  - `unconfirmed_count` integer, nullable: Mail merge campaigns.
  - `skipped_count` integer, nullable: Mail merge campaigns.
  - `report_available` boolean: Mail merge campaigns: the report CSV can be downloaded.
  - `unsent_available` boolean: Mail merge campaigns: rows that were not sent can be downloaded or sent again.
  - `unsent_count` integer, nullable: Mail merge campaigns.
  - `unsent_summary` MailMergeUnsentSummary, nullable: Rows a finished campaign did not send, by reason. Null when every row was sent.
    - `failed` integer: The email could not be sent, or its PDF could not be made.
    - `not_attempted` integer: The campaign stopped or was cancelled first.
    - `rejected` integer: The mail server refused the address.
    - `unconfirmed` integer: The connection dropped after sending; the email may have arrived.
    - `invalid` integer: Invalid address or missing data. In the CSV only.
  - `outcome_counts` object, nullable: Mail merge campaigns, once finished: how many rows ended each way, keyed by `sent` or the row's error code.
  - `retry_of` string, nullable: Mail merge campaigns: the campaign whose unsent rows this one sends.
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `s3_url` string, uri, nullable: Present only for jobs with stored output.
  - `s3_url_expires_at` string, date-time, nullable
  - `webhook_delivered` boolean
  - `webhook_delivered_at` string, date-time, nullable
  - `webhook_retry_count` integer
  - `error_code` string, nullable
  - `error_message` string, nullable
  - `pdf_standard` 'pdf/ua-1' | 'pdf/ua-2': **Alpha.** Make an accessible, tagged PDF that conforms to PDF/UA-1 (ISO 14289-1, PDF 1.7) or PDF/UA-2 (ISO 14289-2, PDF 2.0). For `input_type` `html` and `markdown` and for template renders; other inputs return 400. Leave it out for an ordinary PDF. PodPDF adds what the file itself needs (tags, language, title, metadata, link descriptions, artifacts for page furniture) and checks the result with veraPDF. What depends on your HTML stays yours: alt text on images, headings in order, header cells in tables. The check's verdict comes back in `X-PDF-Conformance` (or `conformance` in JSON). Built-in templates pass both standards.
  - `pdf_standard_stability` 'alpha': **Alpha.** Present with `pdf_standard`.
  - `conformance` Conformance: **Alpha.** veraPDF's verdict on a `pdf_standard` render. Present only when the request set `pdf_standard`.
    - `status` 'pass' | 'fail' | 'unavailable'
    - `validator` string, nullable
    - `failed_rules` object[]
      - `rule` string: Clause and test number in the standard.
      - `specification` string
      - `description` string
      - `failed_checks` integer

## Other responses

- `401`: Missing or invalid API key
- `404`: No such resource for this account

## Changes

- **2026-10-20** `84eb21f3ee27`: 3 info
  - added the optional property `conformance` to the response with the `200` status
  - added the optional property `pdf_standard` to the response with the `200` status
  - added the optional property `pdf_standard_stability` to the response with the `200` status

[Operation history](https://skmtc.dev/podpdf/apis/podpdf-api/changes/jobs/:job_id/get.md)

---

[API](https://skmtc.dev/podpdf/apis/podpdf-api.md) · [All operations](https://skmtc.dev/podpdf/apis/podpdf-api/llms.txt) · [OpenAPI document](https://skmtc.dev/podpdf/apis/podpdf-api/revisions/84eb21f3ee27?raw)
