openapi: 3.1.0
info:
title: PandaDoc REST API
description: >-
The PandaDoc REST API provides programmatic access to PandaDoc's document
automation platform, enabling developers to create, send, track, and manage
documents within their own applications. The API supports the full document
lifecycle including generating documents from templates with dynamic data,
collecting e-signatures, managing recipients, and tracking document status.
Authentication is handled via API keys or OAuth 2.0, and a free sandbox
environment is available for testing integrations before moving to
production. An active Enterprise plan is required to access the production
API.
version: '7.18.0'
contact:
name: PandaDoc API Support
url: https://developers.pandadoc.com/
email: [email protected]
termsOfService: https://www.pandadoc.com/master-services-agreement/
externalDocs:
description: PandaDoc API Reference
url: https://developers.pandadoc.com/reference/about
servers:
- url: https://api.pandadoc.com/public/v1
description: Production Server
tags:
- name: API Logs
description: >-
Operations for retrieving API request logs useful for debugging and
auditing integration activity.
- name: Contacts
description: >-
Operations for managing the PandaDoc contacts directory, including
creating, reading, updating, and deleting contact records.
- name: Document Attachments
description: >-
Operations for managing file attachments associated with a document,
including uploading and downloading attachment files.
- name: Document Fields
description: >-
Operations for retrieving and updating field values within a document,
such as text fields, checkboxes, signatures, and date fields.
- name: Document Link to CRM
description: >-
Operations for managing links between PandaDoc documents and external
CRM entities such as contacts, deals, or accounts.
- name: Document Recipients
description: >-
Operations for managing recipients within documents, including adding,
editing, reassigning, and deleting recipients.
- name: Document Reminders
description: >-
Operations for configuring automatic reminders sent to document recipients
who have not yet completed their actions.
- name: Documents
description: >-
Operations for creating, retrieving, sending, and managing the full
lifecycle of documents including drafting, sending for signature,
downloading, and deleting.
- name: Folders
description: >-
Operations for organizing documents and templates into folders, including
creating, renaming, and listing folder contents.
- name: Forms
description: >-
Operations for retrieving and managing forms, which are publicly shareable
document templates that can be filled and signed without a predefined
recipient list.
- name: Members
description: >-
Operations for managing and retrieving details about workspace members,
including listing members and generating member API tokens.
- name: Templates
description: >-
Operations for managing document templates, including listing available
templates, retrieving template details, creating templates from file
upload, and deleting templates.
- name: Webhook Events
description: >-
Operations for querying the log of webhook events that have been
dispatched, including filtering by type and delivery status.
- name: Webhook Subscriptions
description: >-
Operations for managing webhook subscriptions that deliver real-time event
notifications for document lifecycle and other platform events.
- name: Workspaces
description: >-
Operations for managing organization workspaces, including listing,
creating, and deactivating workspaces.
security:
- apiKey: []
- oauth2: []
paths:
/documents:
get:
operationId: listDocuments
summary: List Documents
description: >-
Returns a paginated list of documents accessible to the authenticated
user. Supports filtering by template, form, folder, contact, status,
tag, owner, and date ranges. Results can be ordered by various fields.
tags:
- Documents
parameters:
- $ref: '#/components/parameters/QueryCount'
- $ref: '#/components/parameters/QueryPage'
- name: template_id
in: query
description: Filter by the parent template identifier.
schema:
type: string
- name: form_id
in: query
description: Filter by the parent form identifier.
schema:
type: string
- name: folder_uuid
in: query
description: Filter by the folder where documents are stored.
schema:
type: string
- name: contact_id
in: query
description: Filter by recipient or approver contact identifier.
schema:
type: string
- name: status
in: query
description: Filter by document status.
schema:
$ref: '#/components/schemas/DocumentStatus'
- name: tag
in: query
description: Filter by document tag (exact match).
schema:
type: string
- name: q
in: query
description: Search by document name substring.
schema:
type: string
- name: id
in: query
description: Filter by a specific document identifier.
schema:
type: string
- name: owner_id
in: query
description: Filter by the document owner member identifier.
schema:
type: string
- name: order_by
in: query
description: Sort field for results.
schema:
type: string
enum:
- name
- date_created
- date_modified
- date_status_changed
- name: asc
in: query
description: Set to true for ascending order, false for descending.
schema:
type: boolean
responses:
'200':
description: Paginated list of documents.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
post:
operationId: createDocument
summary: Create Document
description: >-
Creates a new document from a template, an uploaded file, or a URL.
The document is created in draft status and can be customized with
recipient details, field values, pricing table data, and metadata
tokens before being sent for signature.
tags:
- Documents
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentCreateRequest'
responses:
'201':
description: Document created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentCreateResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}:
get:
operationId: getDocumentDetails
summary: Get Document Details
description: >-
Retrieves comprehensive details for a specific document including its
status, recipients, fields, pricing tables, tokens, tags, and metadata.
tags:
- Documents
parameters:
- $ref: '#/components/parameters/DocumentId'
responses:
'200':
description: Document details retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentDetailsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
delete:
operationId: deleteDocument
summary: Delete Document
description: >-
Permanently deletes a specific document by its identifier. This action
is irreversible and removes the document and all associated data.
tags:
- Documents
parameters:
- $ref: '#/components/parameters/DocumentId'
responses:
'204':
description: Document deleted successfully.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/status:
get:
operationId: getDocumentStatus
summary: Get Document Status
description: >-
Returns the current status of a document. Use this endpoint to poll
for status transitions after creating or sending a document.
tags:
- Documents
parameters:
- $ref: '#/components/parameters/DocumentId'
responses:
'200':
description: Document status retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentStatusResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/send:
post:
operationId: sendDocument
summary: Send Document
description: >-
Sends a document in draft status to its recipients for e-signature
collection or review. Optionally includes a subject line, custom
message, and controls whether email notifications are sent silently.
The document must be in document.draft status before it can be sent.
tags:
- Documents
parameters:
- $ref: '#/components/parameters/DocumentId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentSendRequest'
responses:
'200':
description: Document sent successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentSendResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/download:
get:
operationId: downloadDocument
summary: Download Document
description: >-
Downloads the signed PDF for a completed document. The document must
be in document.completed status. Returns the binary PDF file content
with appropriate Content-Disposition headers.
tags:
- Documents
parameters:
- $ref: '#/components/parameters/DocumentId'
- name: watermark_color
in: query
description: Hex color code for watermark text applied to the downloaded PDF.
schema:
type: string
- name: watermark_font_size
in: query
description: Font size for watermark text in points.
schema:
type: integer
- name: watermark_opacity
in: query
description: Opacity of the watermark from 0.0 to 1.0.
schema:
type: number
format: float
- name: watermark_text
in: query
description: Text to render as a watermark on every page of the PDF.
schema:
type: string
- name: separate_files
in: query
description: >-
If true, returns a ZIP archive containing each document section
as a separate PDF file.
schema:
type: boolean
responses:
'200':
description: PDF file content.
content:
application/pdf:
schema:
type: string
format: binary
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/session:
post:
operationId: createDocumentSession
summary: Create Document Session
description: >-
Creates a time-limited session token for embedded document viewing or
signing. The returned session ID is used to embed the PandaDoc document
viewer within an iframe in the host application. Session lifetime and
recipient scope are configurable.
tags:
- Documents
parameters:
- $ref: '#/components/parameters/DocumentId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentSessionCreateRequest'
responses:
'201':
description: Document session created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentSessionCreateResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/recipients:
get:
operationId: listDocumentRecipients
summary: List Document Recipients
description: >-
Returns the list of recipients associated with a document, including
their roles, completion status, signing order, and contact information.
tags:
- Document Recipients
parameters:
- $ref: '#/components/parameters/DocumentId'
responses:
'200':
description: List of document recipients.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentRecipientsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
post:
operationId: addDocumentRecipient
summary: Add Document Recipient
description: >-
Adds a new recipient to a document that is in draft status. Recipients
can be assigned roles that map to signature and form fields within the
document. The recipient will receive signing instructions when the
document is sent.
tags:
- Document Recipients
parameters:
- $ref: '#/components/parameters/DocumentId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentRecipientCreateRequest'
responses:
'201':
description: Recipient added to document.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentRecipient'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/recipients/{recipient_id}:
patch:
operationId: updateDocumentRecipient
summary: Update Document Recipient
description: >-
Updates the details of an existing recipient on a document, such as
their name, email, role, or signing order. The document must be in
an editable state.
tags:
- Document Recipients
parameters:
- $ref: '#/components/parameters/DocumentId'
- $ref: '#/components/parameters/RecipientId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentRecipientUpdateRequest'
responses:
'200':
description: Recipient updated successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentRecipient'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
delete:
operationId: deleteDocumentRecipient
summary: Delete Document Recipient
description: >-
Removes a recipient from a document. The document must not have been
sent yet. If the recipient has associated fields, those fields will
be unassigned.
tags:
- Document Recipients
parameters:
- $ref: '#/components/parameters/DocumentId'
- $ref: '#/components/parameters/RecipientId'
responses:
'204':
description: Recipient removed from document.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/fields:
get:
operationId: listDocumentFields
summary: List Document Fields
description: >-
Returns all fields defined in a document, including their identifiers,
types, values, roles, and positions. Supports filtering by field type
and recipient role.
tags:
- Document Fields
parameters:
- $ref: '#/components/parameters/DocumentId'
responses:
'200':
description: List of document fields.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentFieldsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
patch:
operationId: updateDocumentFields
summary: Update Document Fields
description: >-
Updates the values of one or more fields in a document that is in
draft status. Supports updating text fields, checkboxes, dropdowns,
dates, and other field types by name.
tags:
- Document Fields
parameters:
- $ref: '#/components/parameters/DocumentId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentFieldsUpdateRequest'
responses:
'200':
description: Fields updated successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentFieldsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/attachments:
get:
operationId: listDocumentAttachments
summary: List Document Attachments
description: >-
Returns a list of all file attachments associated with a document.
Includes attachment metadata such as name, size, and upload date.
tags:
- Document Attachments
parameters:
- $ref: '#/components/parameters/DocumentId'
responses:
'200':
description: List of document attachments.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentAttachmentsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{id}/attachments/{attachment_id}/download:
get:
operationId: downloadDocumentAttachment
summary: Download Document Attachment
description: >-
Downloads a specific attachment file associated with a document.
Returns the binary file content with appropriate content type headers.
tags:
- Document Attachments
parameters:
- $ref: '#/components/parameters/DocumentId'
- name: attachment_id
in: path
required: true
description: Unique identifier of the document attachment.
schema:
type: string
responses:
'200':
description: Attachment file content.
content:
application/octet-stream:
schema:
type: string
format: binary
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/{document_id}/auto-reminders:
get:
operationId: getDocumentAutoReminders
summary: Get Document Auto-Reminders
description: >-
Retrieves the automatic reminder configuration for a specific document,
including the schedule and message used for outstanding recipient
notification emails.
tags:
- Document Reminders
parameters:
- $ref: '#/components/parameters/DocumentIdByDocumentId'
responses:
'200':
description: Auto-reminder configuration retrieved.
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentAutoReminderResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/linked-objects:
get:
operationId: listLinkedObjects
summary: List Linked Objects
description: >-
Returns a list of documents that are linked to a specified CRM object.
Supports filtering by CRM provider, object type, and object identifier.
tags:
- Document Link to CRM
parameters:
- name: provider
in: query
required: true
description: CRM provider name (e.g., salesforce, hubspot).
schema:
type: string
- name: entity_type
in: query
required: true
description: CRM entity type (e.g., contact, deal, account).
schema:
type: string
- name: entity_id
in: query
required: true
description: Unique identifier of the CRM entity.
schema:
type: string
responses:
'200':
description: List of documents linked to the CRM object.
content:
application/json:
schema:
$ref: '#/components/schemas/LinkedObjectsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/templates:
get:
operationId: listTemplates
summary: List Templates
description: >-
Returns a paginated list of templates available in the authenticated
workspace. Supports filtering by tag, folder, and search query.
tags:
- Templates
parameters:
- $ref: '#/components/parameters/QueryCount'
- $ref: '#/components/parameters/QueryPage'
- name: q
in: query
description: Search by template name substring.
schema:
type: string
- name: tag
in: query
description: Filter by template tag (exact match).
schema:
type: string
- name: folder_uuid
in: query
description: Filter by folder identifier.
schema:
type: string
- name: deleted
in: query
description: If true, include deleted templates in the results.
schema:
type: boolean
- name: id
in: query
description: Filter by specific template identifier.
schema:
type: string
responses:
'200':
description: Paginated list of templates.
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/templates/{id}/details:
get:
operationId: getTemplateDetails
summary: Get Template Details
description: >-
Retrieves detailed information about a specific template including its
roles, fields, tokens, pricing tables, and content configuration.
Use this information to determine the data needed when creating
documents from this template.
tags:
- Templates
parameters:
- $ref: '#/components/parameters/TemplateId'
responses:
'200':
description: Template details retrieved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateDetailsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/templates/{id}:
delete:
operationId: deleteTemplate
summary: Delete Template
description: >-
Permanently deletes a template by its identifier. This action cannot
be undone and will prevent creation of new documents from this template.
Existing documents created from this template are not affected.
tags:
- Templates
parameters:
- $ref: '#/components/parameters/TemplateId'
responses:
'204':
description: Template deleted successfully.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/forms:
get:
operationId: listForms
summary: List Forms
description: >-
Returns a paginated list of forms in the authenticated workspace.
Forms are publicly shareable documents that allow recipients to fill
and sign without being pre-specified as named recipients.
tags:
- Forms
parameters:
- $ref: '#/components/parameters/QueryCount'
- $ref: '#/components/parameters/QueryPage'
- name: name
in: query
description: Filter forms by name substring.
schema:
type: string
- name: status
in: query
description: Filter forms by status.
schema:
type: string
enum:
- active
- disabled
responses:
'200':
description: Paginated list of forms.
content:
application/json:
schema:
$ref: '#/components/schemas/FormListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/documents/folders:
get:
operationId: listDocumentFolders
summary: List Document Folders
description: >-
Returns a list of folders used to organize documents in the workspace.
Supports filtering by parent folder and search by name.
tags:
- Folders
parameters:
- $ref: '#/components/parameters/QueryCount'
- $ref: '#/components/parameters/QueryPage'
- name: parent_uuid
in: query
description: >-
Filter by parent folder UUID to retrieve sub-folders. Omit to
retrieve root-level folders.
schema:
type: string
- name: name
in: query
description: Filter folders by name substring.
schema:
type: string
responses:
'200':
description: List of document folders.
content:
application/json:
schema:
$ref: '#/components/schemas/FolderListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
post:
operationId: createDocumentFolder
summary: Create Document Folder
description: >-
Creates a new folder for organizing documents. An optional parent UUID
may be specified to create a nested sub-folder within an existing folder.
tags:
- Folders
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FolderCreateRequest'
responses:
'201':
description: Folder created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/Folder'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/contacts:
get:
operationId: listContacts
summary: List Contacts
description: >-
Returns a paginated list of contacts from the workspace contacts
directory. Supports search by name, email, or company. Contacts can
be used to pre-populate recipient data when creating documents.
tags:
- Contacts
parameters:
- $ref: '#/components/parameters/QueryCount'
- $ref: '#/components/parameters/QueryPage'
- name: q
in: query
description: Search contacts by name, email, or company substring.
schema:
type: string
responses:
'200':
description: Paginated list of contacts.
content:
application/json:
schema:
$ref: '#/components/schemas/ContactListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
post:
operationId: createContact
summary: Create Contact
description: >-
Creates a new contact record in the workspace contacts directory.
The email field is optional. Contacts can be referenced when adding
recipients to documents.
tags:
- Contacts
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactCreateRequest'
responses:
'201':
description: Contact created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/contacts/{id}:
get:
operationId: getContact
summ
# --- truncated at 32 KB (85 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pandadoc/refs/heads/main/openapi/pandadoc-rest-api-openapi.yml