pdfs-build Render jobs API
Status and download for async renders.
Status and download for async renders.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/pdfs-build:pdfs-build-render-jobs-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: pdfs.build Render jobs API
version: '2.0'
summary: Render PDFs from templates, manage templates, webhooks, embedded editor sessions and delegated agent access.
description: 'All requests are authenticated with an organization-scoped API key (`prs_...`) sent as a Bearer token. Create keys under **Settings → API Keys** in the dashboard or with the MCP `create_api_key` tool. Keys are shown once.
The organization in every `/v2` URL must match the key''s organization, otherwise the request fails with `403 organization_scope_mismatch`.
**Errors** are JSON with a top-level `error` string — a machine-readable code for most failures, a phrase for a few legacy ones — usually alongside a human-readable `message`. Data validation and template compilation failures carry `details` / `diagnostics` instead of a `message`.
**Versions.** `/v2` addresses templates by an external id you control. The legacy `/v1` routes identify templates by their generated internal id and remain supported for existing integrations.
**Timestamps.** Objects served by the render service (templates, render jobs, logs, webhook endpoints) carry UTC timestamps in ISO 8601 form without a timezone suffix, e.g. `2026-08-30T12:00:00.123456`. Embedded-editor sessions and delegated access return RFC 3339 with a trailing `Z`.
The narrative guide — authentication, webhook signatures, the MCP server, migrating from v1 — lives at https://pdfs.build/docs/ (Markdown mirror: https://pdfs.build/docs.md).'
contact:
name: pdfs.build
url: https://pdfs.build
email: hello@pdfs.build
termsOfService: https://pdfs.build/terms/
license:
name: Proprietary
url: https://pdfs.build/terms/
servers:
- url: https://api.pdfs.build
description: Production
security:
- apiKey: []
tags:
- name: Render jobs
description: Status and download for async renders.
paths:
/v2/organizations/{organizationId}/renders/{jobId}:
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/jobId'
get:
tags:
- Render jobs
summary: Get render job
operationId: getRenderJob
responses:
'200':
description: Job status. `downloadUrl` appears once the job has succeeded.
content:
application/json:
schema:
$ref: '#/components/schemas/RenderJob'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/OrganizationScopeMismatch'
'404':
description: Unknown job.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: Render job not found
/v2/organizations/{organizationId}/renders/{jobId}/pdf:
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/jobId'
get:
tags:
- Render jobs
summary: Download async render
operationId: getRenderJobPdf
description: The PDF of a succeeded async render. Requires the same API key that created the job.
responses:
'200':
description: The rendered PDF.
content:
application/pdf:
schema:
type: string
format: binary
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/OrganizationScopeMismatch'
'404':
description: Unknown job.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: Render job not found
'409':
description: The job has not succeeded (yet).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: Render job is 'processing'; the PDF is only available once the job has succeeded
/v2/organizations/{organizationId}/batches/{batchId}:
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/batchId'
get:
tags:
- Render jobs
summary: Get render batch
operationId: getRenderBatch
responses:
'200':
description: Batch progress and every item's status, in submission order.
content:
application/json:
schema:
$ref: '#/components/schemas/RenderBatch'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/OrganizationScopeMismatch'
'404':
description: Unknown batch.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: Render batch not found
components:
schemas:
Timestamp:
type: string
description: UTC, ISO 8601 without a timezone suffix.
example: '2026-08-30T12:00:00.123456'
RenderBatch:
type: object
required:
- id
- status
- templateExternalId
- total
- succeeded
- failed
- pending
- createdAt
- items
properties:
id:
type: string
status:
type: string
enum:
- processing
- completed
templateExternalId:
type:
- string
- 'null'
total:
type: integer
succeeded:
type: integer
failed:
type: integer
pending:
type: integer
description: Items still queued or processing.
createdAt:
$ref: '#/components/schemas/Timestamp'
completedAt:
$ref: '#/components/schemas/Timestamp'
items:
type: array
items:
type: object
required:
- index
- jobId
- status
properties:
index:
type: integer
description: Position in the submitted `items`.
jobId:
type: string
description: Also usable with the render job routes.
status:
type: string
enum:
- queued
- processing
- success
- error
downloadUrl:
type: string
format: uri
description: Present once the item has succeeded. Requires the same API key.
error:
type: string
description: Present when `status` is `error`.
Error:
type: object
required:
- error
properties:
error:
type: string
description: Machine-readable code (e.g. `draft_not_renderable`) or, for a few legacy failures, a short phrase.
message:
type: string
description: Human-readable detail. Present on most coded errors.
example:
error: draft_not_renderable
message: Only published templates can be rendered via the API. Publish this template first.
RenderJob:
type: object
required:
- id
- status
- templateExternalId
- createdAt
properties:
id:
type: string
status:
type: string
enum:
- queued
- processing
- success
- error
templateExternalId:
type:
- string
- 'null'
durationMs:
type: integer
error:
type: string
description: Present when `status` is `error`.
downloadUrl:
type: string
format: uri
description: Present once `status` is `success`. Requires the same API key.
createdAt:
$ref: '#/components/schemas/Timestamp'
completedAt:
$ref: '#/components/schemas/Timestamp'
responses:
Unauthorized:
description: Missing, invalid or expired API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: Unauthorized
OrganizationScopeMismatch:
description: The organization in the URL does not match the API key's organization.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: organization_scope_mismatch
message: The organization in the URL does not match the API key organization
parameters:
jobId:
name: jobId
in: path
required: true
schema:
type: string
description: Async render job id (`job_...`).
batchId:
name: batchId
in: path
required: true
schema:
type: string
description: Render batch id (`batch_...`).
organizationId:
name: organizationId
in: path
required: true
schema:
type: string
description: Your organization id. Must match the API key's organization.
example: org_abc
securitySchemes:
apiKey:
type: http
scheme: bearer
bearerFormat: prs_...
description: Organization-scoped API key, created under Settings → API Keys or with the MCP `create_api_key` tool.
externalDocs:
description: 'API guide: authentication, errors, webhooks, MCP, migrating from v1'
url: https://pdfs.build/docs/