Pandadoc integrationPandadoc logo

Pandadoc integration for AI agents.

Pandadoc integration for AI agents with secure authentication and server-side credential injection. Open Connector runs the OAuth, seals the token in an encrypted vault, and serves Pandadoc tools to your agent over MCP or a typed API — credentials injected server-side, every call audited, nothing leaving your infrastructure. Open source (AGPL-3.0) and self-hostable.

What your agents can do

Real Pandadoc actions, managed and audited.

Your user connects Pandadoc once; your agent can then secure AI-agent actions — scoped to the OAuth permissions you grant and the tool allowlist you configure. Every action is least-privilege and written to a tamper-evident audit trail.

  1. 1

    Your user grants Pandadoc access once (OAuth) — the token lands in the vault.

  2. 2

    Your agent calls a tool over MCP or the typed API; Open Connector injects the credential server-side.

  3. 3

    Every routed call appends a hash-chained audit record — nothing leaves your infra.

Tools & triggers

Supported Pandadoc tools.

129 tools are generated from the published Pandadoc catalog. Descriptions are plain text; each action remains subject to its configured authentication and tool allowlist.

Showing 129 tools. All published catalog entries are included in this page's server-rendered HTML.

Create/Refresh Access Token
Create or refresh an access token to make requests on behalf of a user. This endpoint is used to obtain an `access_token` and `refresh_token` for the first time, and to refresh the `access_token` when it expires. This endpoint is part of OAuth 2.0 implementation. You need to configure OAuth App to obtain `client_id` and `client_secret`. Read more about [OAuth 2.0 implementation](https://developers.pandadoc.com/reference/authentication-process). Make sure you're sending the header `Content-Type: application/x-www-form-urlencoded`. ## Create Access Token As a result of the OAuth 2.0 user authentication process, you should get a `code` that can be exchanged for an `access_token`. Use this endpoint to do this exchange, and to refresh the token later. > 🚧 Invalid Grant? > > If you receive an `invalid grant` response it is likely because you used the same `code` more than once from the [Authorize a PandaDoc User](ref:authorize-a-user) step above. The `code` parameter is generated for one-time use. A new `code` value must be generated if you wish to change API users, permissions, or simply generate a new `code` value for the same PandaDoc user. > 📘 expires_in > > `expires_in` is based in seconds. Currently, a token expires in 31535999 seconds = 1 year. ## Refresh Access Token Eventually, `access_token` expires and accessing an API method returns **401 unauthorized**. Your application needs to refresh the OAuth2 token with the stored `refresh_token` returned when initially creating an access token. Once refreshed, calls on behalf of the originally authorized user can resume immediately. Use the newly returned `access_token` for all future API requests. > 🚧 Invalid Grant? > > If you receive an `invalid grant` response, it is likely because your `refresh_token` is invalid.
OAuth 2.0 Authentication
Add Document Recipient
Add a CC recipient to a document. > 🚧 Before you start > > To add a CC recipient, please ensure that: > > - You have the 'Can Manage Recipients' permission. > - This recipient is already created in your contacts. If not, add them using the [Create Contact](https://developers.pandadoc.com/reference/create-contact) endpoint. To add a new CC recipient to a document, two parameters must be included in the request body: - `kind`: Set this parameter to `contact` to specify an individual contact. - `id`: Input the ID of the desired contact. To retrieve the contact's ID, use the [List Contacts](https://developers.pandadoc.com/reference/list-contacts) endpoint to access a list of all contacts, and then locate the desired contact by searching using the name or email address within the returned list. ### Document status You can add CC recipients in any document status except for the 'Expired' (`document.voided`) and 'Declined' (`document.declined`). > 📘 Email notification to access the document > > **Note**: When a document is in one of the following statuses: 'Sent' (`document.sent`), 'Viewed' (`document.viewed`), 'Completed' (`document.completed`), 'Waiting for Payment' (`document.waiting_pay`), or 'Paid' (`document.paid`), any added CC recipient will receive an instant notification at their email address, allowing them access to the document.
Document Recipients
Add DSV Named Items to a Document
Adds one or more named items to the specified document by ID. These items define the document's structure and hierarchy (e.g., sections or headings) for display or navigation purposes within the Document Structure View (DSV).
Document Structure View
Add Member to Workspace
Add an existing user to a workspace. - You must be an organization admin or a workspace admin to add members.
User and Workspace management
Append Content Library Item to a document
Appends a Content Library Item (CLI) to a document and provides a name mapping for its content blocks.
Documents
[Beta] Get AI Metadata for Multiple Documents
Returns AI metadata for a list of documents in a single request. The batch variant of <a href="#/operations/getDocumentAiMetadata">Get AI Metadata for a Document</a>. Use this endpoint when you need AI metadata for several documents and want to avoid issuing one request per document. Each `results[]` entry mirrors the per-document outcome of the single-document endpoint. ### Partial-success model The response is always `200 OK` when the request itself is valid and the caller is authenticated. Per-document outcomes are reported inside `results[]` via a `status` discriminator. A failure for one document (not found, access denied, isolated server-side failure) does not fail the whole request — the response still returns successful entries for the rest. Per-document `status` values mirror the HTTP semantics of the single-document endpoint: | Single-document HTTP | Batch `status` | Notes | | -------------------- | -------------------------- | ---------------------------------------------------------------------------------- | | `200` | `ok` | `ai_metadata` carries the same payload as the single-document `200` body. | | `202` | `extraction_pending` | Includes `retry_after` (seconds). Retry the whole batch or just this `document_id`.| | `204` | `extraction_failed` | Terminal. Retrying will not help — contact support. | | `409` | `extraction_not_started` | Typically because the document is not yet completed. | | `404` | `not_found` | Document does not exist or is deleted. | | `403` | `access_denied` | Caller cannot access this specific document. | | _(none — batch only)_| `internal_error` | Isolated server-side failure for this document. Retrying the affected document is safe. | Top-level non-`2xx` responses (`400`, `401`, `403`, `429`) are reserved for whole-request failures — for example, request validation, missing or invalid authentication, the caller has no read scope at all, or rate limiting. > 🚧 **Beta** > > This endpoint is currently in beta and may change without notice.
Documents
Delete documents (bulk)
Delete multiple documents in one request by sending a JSON array. Each element must be an object with an `id` field (the document ID, same value as elsewhere in the Documents API). The caller must have permission to delete each document. Documents must belong to the authenticated workspace. This batch operation returns **200 OK** with a JSON body containing an `id` array of deleted document IDs. That differs from [Delete Document](#operation/deleteDocument) (`DELETE /public/v1/documents/{id}`), which returns **204 No Content** for a single document.
Documents
Document Status Change
PandaDoc has eight document statuses, but you can manually set your document status to only four: ### Document statuses - Completed - `document.completed` - API code `2` - Expired - `document.voided` - code `11` - Paid - `document.paid` - code `10`. **Important**: You can only set it if you have a payment app connected. - Declined - `document.declined` - code `12` > 🚧 Pass a numeric code for the corresponding document status, for example, `2` for `document.completed`. Find more details in [\[Editor 2.0\] Manually change document status](https://support.pandadoc.com/en/articles/9714842-manually-change-document-status) topic. | Current Status | To Completed: | To Expired: | To Paid: | To Declined: | |----------------|---------------|-------------|----------|--------------| | Draft | YES | NO | YES | YES | | Approved | NO | NO | NO | NO | | Sent | YES | YES | NO | YES | | Viewed | YES | YES | NO | YES | | Completed (Auto) | NO | NO | NO | YES | | Waithing for payment | NO | NO | YES | YES | | Paid | NO | NO | NO | NO | | Expired | YES | NO | YES | YES | | Declined | YES | NO | YES | NO | > ✅ - from `document.voided` to `document.paid` > > ❌ - from `document.paid` to `document.voided`
Documents
Document Status Change with Upload
PandaDoc has eight document statuses, but you can manually set your document status to only four: ### Document statuses - Completed - `document.completed` - API code `2` - Expired - `document.voided` - code `11` - Paid - `document.paid` - code `10`. **Important**: You can only set it if you have a payment app connected. - Declined - `document.declined` - code `12` > 🚧 Pass a numeric code for the corresponding document status, for example, `2` for `document.completed`. Find more details in [\[Editor 2.0\] Manually change document status](https://support.pandadoc.com/en/articles/9714842-manually-change-document-status) topic. | Current Status | To Completed: | To Expired: | To Paid: | To Declined: | |----------------|---------------|-------------|----------|--------------| | Draft | YES | NO | YES | YES | | Approved | NO | NO | NO | NO | | Sent | YES | YES | NO | YES | | Viewed | YES | YES | NO | YES | | Completed (Auto) | NO | NO | NO | YES | | Waithing for payment | NO | NO | YES | YES | | Paid | NO | NO | NO | NO | | Expired | YES | NO | YES | YES | | Declined | YES | NO | YES | NO | > ✅ - from `document.voided` to `document.paid` > > ❌ - from `document.paid` to `document.voided`
Documents
Change Member Role in Workspace
Change the role of an existing workspace member. - You must be an organization admin, a workspace admin, or hold a role with permission to edit member roles to call this endpoint. - The `role` field accepts either a built-in role name (`Admin`, `Manager`, `Member`, `Collaborator`) or the name of a custom role defined for the workspace. - The role of the workspace owner cannot be changed. - The role of the last member with admin privileges in the workspace cannot be changed. - When a member with a `Guest` license is promoted to any non-`Collaborator` role, the user's license is automatically upgraded to `Full (Standard)`. If the organization has no free seats available, an additional seat is purchased.
User and Workspace management
Create API Key
Generate a new API key for the workspace. Check out [API Key Authentication article](https://developers.pandadoc.com/reference/api-key-authentication-process) for detailed API Keys description. > 📘 > - Only an **Org Admin** can generate an API keys. > - To make another user a key's owner, pass `user_id` of this user. The user should has an **Admin** role in the workspace. > - Generating a new key invalidates existing key with the same type. Using this request, you can deactivate the key you're using for the request.
User and Workspace management
Create Catalog Item
Create a new catalog item.
Product catalog
Create contact
This method adds a contact into a contacts list.
Contacts
Create Content Library Item
This API endpoint allows users to create an empty item in the content library. No actual content or data is required to be provided in the initial creation.
Content Library Items
Create Content Library Item from File Upload
This asynchronous endpoint allows users to create a new CLI by uploading a file. The uploaded file is processed in the background to generate the CLI. The maximum allowable file size for upload is 100 MB. Field tags and form fields are not supported yet. Once the file is uploaded, the processing will happen asynchronously, and users need to check the status of the CLI creation.
Content Library Items
Create Document
## Create from a template > See the [Create document from template](https://developers.pandadoc.com/docs/create-document-from-template) tutorial for details on how to use this endpoint, as well as a sample template. ## Create from a URL > See the [Create from public PDF](https://developers.pandadoc.com/docs/create-and-send-a-document-from-a-publicly-available-pdf) guide for info about roles and fields, as well as PDF examples.
Documents
Create Document Attachment
Creates an attachment for a particular document
Document Attachments
Create Document Attachment From Upload
Creates an attachment for a particular document
Document Attachments
Create Document Editing Session
Creates a new editing session for the Embedded Editor. The response includes an E-Token, which is required to open the document. > 🚧 **Important:** The Embedded Editor can only open documents that have a `draft` status. #### Limitations - **Single Active Session per User-Document Pair** Only one editing session can be active at a time for a specific user and document. Creating a new session for the same user-document pair will automatically invalidate the previous one. - **Weekly Session Cap** A maximum of **250** editing sessions can be created for a single document per week. Any attempt to exceed this limit will result in a `403 Forbidden` error.
Documents
Create Document Fields
Creates fields for a particular document. For CFR11-compliant workspaces (21 CFR Part 11), signature fields must have a minimum size of 108×33.
Document Fields
Create Documents Folder
Create a new folder to store your documents. For the full list of folder operations and their limitations, see [Organize Documents and Folders](https://developers.pandadoc.com/docs/organize-folders).
Folders
Create Document from Markdown File Upload
## Create from a Markdown upload Upload a Markdown (`.md`) file to create a new document. The file content will be converted into a PandaDoc document. **Note**: A file you upload is not stored in your PandaDoc account, so you have to upload it with every request. > **Alpha:** Markdown file upload is currently in alpha. > This functionality may change or be removed without notice.
Documents
Create Document from File Upload
## Create from an upload > See the [Create from PDF](https://developers.pandadoc.com/docs/create-document-from-file) tutorial for the usage specifics and sample PDF files. **Note**: A file you upload is not stored in your PandaDoc account, so you have to upload it with every request.
Documents
Create Document Session for Embedded Sign
Creates a document session for a recipient to view and sign a document. > 📘 How to create an Embedded Sign session > For more information on how to create an Embedded Sign session, see the [Embedded Signing](https://developers.pandadoc.com/docs/embedded-signing) documentation.
Documents
[Beta] Create DOCX Export Task
> ⏱️ Export as DOCX is a non-blocking (asynchronous) operation > The document generation process may take some time. > With a successful request, you receive a response with task ID, status **created** and document id. After process completes, usually in a few minutes, the task status moves to the **done** state. > You can download documents up to 300 pages. For documents of 301+ pages, you will receive an error “400: The number of pages more then limit 300”
Documents
Create Linked Object
Create a linked object in the document. > 🚧 > > You can only link each document to each CRM once. This ensures the consistent functionality of the [two-way CRM sync](https://support.pandadoc.com/en/articles/9714877-hubspot-crm#h_3a3344e8-2a6e-4fd8-86be-0da8c121e4ac). > > You can, however, link one document to several external systems.
Document Link to CRM
Send Manual Reminder
Sends manual reminders to one or more recipients of a specified document.
Document Reminders
Create Member Token
> 🚧 > > This endpoint is only exposed upon request. Please reach out to your Account Manager to get access. > 📘 > > Make sure you're using Public API keys generated by Org Admin, otherwise you'll receive a 403 response.
Members
Create Notarization Request
Create a notarization request to connect with a notary and complete online notarizations for your signers within minutes. > 🚧 **Important:** This endpoint supports only documents in draft status. ## Prerequisites > 🚧 Before you start > > Ensure the following before creating a notarization request: > > - Install the Notary On-Demand or Notary add-on > - Create a document for notarization and get its `document_id`. To create a document, use the [Create Document from Template](https://developers.pandadoc.com/reference/create-document-from-pandadoc-template) or [Create Document from File Upload](https://developers.pandadoc.com/reference/create-document-from-pdf) endpoint. ## Request Details For the notarization request, include in the request body: - `document_id` - At least one `invitees`, specifying their `email`, `first_name`, and `last_name` - Optionally, include a `message` for your signers - Optionally, using `disable_invitees_notifications` you can disable all notifications for invitees including email with invitation for notarization. This is useful when you are using alternative delivery methods. - If in-house notary must be assigned to this request, include the `notary` object with the notary's `id`, `scheduled_at` timestamp, and an optional `message` for the notary After the API call is executed, your signers will receive an email invitation for notarization. Alternatively, you can directly share the `notarization_link` with your signers, which is available in the 201 response body. Upon successful notarization, you will receive an email with a link to the notarized document. ## Usage Tips > 📘 Best Practices > > - Ensure that signers are added as both invitees in the request body and recipients in the document to avoid inconveniences during notary sessions > - Signers will receive an email with a notary link upon a successful API call; this link is also in the 201 response > - In case if notary is not specified in the request, signers will use the link to connect with commissioned online notaries, available Mon-Fri, 9 AM - 9 PM Central Time, typically responding within 2 minutes > - If notary is specified, signers will use the link to connect with your in-house notary at the scheduled time ## Limits A maximum of 100 API calls per minute is permitted. Exceeding this limit triggers a 429 Too Many Requests error. ## Troubleshooting **Solutions for 4xx Response Codes:** - **403 Forbidden (Inactive Add-on)**: Ensure the Notary On-Demand or Notary add-on is installed - **403 Forbidden (Transactions Limit)**: Purchase additional transactions either through the Notary UI or by contacting the Sales team - **429 Too Many Requests**: If you hit the limit, hold your API calls, then send them after waiting for the retry time > 📘 To learn more about PandaDoc Notary On-Demand, visit our [website](https://notary.pandadoc.com/notary-on-demand/).
Notary
Create Template
This operation allows you to create a new template by providing the necessary template details.
Templates
Create Template Editing Session
Creates a new editing session for the Embedded Editor. The response includes an E-Token, which is required to open the template. #### Limitations - **Single Active Session per User-Template Pair** Only one editing session can be active at a time for a specific user and template. Creating a new session for the same user-template pair will automatically invalidate the previous one. - **Weekly Session Cap** A maximum of **250** editing sessions can be created for a single template per week. Any attempt to exceed this limit will result in a `403 Forbidden` error.
Templates
Create Templates Folder
Create a new folder to store your templates. For the full list of folder operations and their limitations, see [Organize Templates and Folders](https://developers.pandadoc.com/docs/organize-folders).
Folders
Create Template from File Upload
This asynchronous endpoint allows users to create a new template by uploading a file. The uploaded file is processed in the background to generate the template. The maximum allowable file size for upload is 100 MB. Field tags and form fields are not supported yet. Once the file is uploaded, the processing will happen asynchronously, and users need to check [the status of the template](https://developers.pandadoc.com/reference/template-status) creation.
Templates
Create User
Create users, and assign them roles, licenses, and workspaces. - You must be an organization admin to create users. - We check that the user email domain matches your organization domain. - We check that the user email and phone number have a valid format.
User and Workspace management
Create Webhook Subscription
This operation creates a new webhook subscription by specifying its details.
Webhook subscriptions
Create Workspace
Create a workspace in your organization. - You need to be an Org Admin to create a workspace. - You will be added to the new workspace with an Admin role.
User and Workspace management
Deactivate Workspace
Deactivate the workspace, remove all the members from it and make it unavailable.
User and Workspace management
Delete Catalog Item
Delete catalog item.
Product catalog
Delete Contact
This method deletes a contact.
Contacts
Delete Document
Delete a document by ID.
Documents
Delete Document Attachment
Deletes an attachment from the document.
Document Attachments
Delete Document Recipient
Remove a recipient from a document. > 🚧 Before you start > > Please ensure that you have the 'Can Manage Recipients' permission. To remove a recipient from a document, you must specify their ID in the path parameter (note that this is different from their contact's ID). The recipient's ID can be retrieved via the [Document Details](https://developers.pandadoc.com/reference/document-details) endpoint. ### Document status - Removing a signer is only possible when the document is in the 'Draft' (`document.draft`) status and this action will unassign all fields associated with that signer. - Removing a CC recipient is allowed in any document status except for the 'Expired' (`document.voided`) and 'Declined' (`document.declined`). If a CC recipient is removed, their access will be revoked.
Document Recipients
Delete Linked Object
Delete a linked object associated with a document.
Document Link to CRM
Delete Notarization Request
Use this method to delete a notarization request. Once notarization request is deleted it cannot be restored. > 🚧 Notarization Request status > > You can only delete a notarization request in status 'SENT', 'WAITING_FOR_NOTARY' or 'INCOMPLETE'. > If the notarization request is in any other status, the request will return a 400 Bad Request error. By default all invitees will receive email notification about deletion of the notarization request. If you want to disable this notification, you can use the `disable_invitees_notifications` parameter when creating request (see [Create Notarization Request](https://developers.pandadoc.com/reference/create-notarization-request)).
Notary
Delete Document Section
Removes selected section from the document.
Document Sections (Bundles)
Delete Template
Delete a template
Templates
Delete Webhook Subscription
This operation deletes a specific webhook subscription identified by its UUID.
Webhook subscriptions
Contact Details
Returns contact details by its ID.
Contacts
Content Library Item Details
Retrieve detailed information about a specific content library item using its ID. The details include: - **Roles** - **All fields with values** - **All tokens with values** - **Pricing information (pricing tables, products, etc)** - **Metadata** - **Tags** - **Modification Timestamps**: note that `date_modified` means any changes associated with the CLI, while `content_date_modified` logs any changes in CLI content.
Content Library Items
Current Member Details
Returns the member details of the current user (the owner of the API key). **User** - is an account with a license in the Organization. **Member** - is a User with a predefined Role in the Workspace. | Parameter | Description | |---|---| | `user_id` | A unique identifier of the `user` in the **organization** | | `membership_id` | A unique identifier of the `user` in the **workspace** | | `email` | A user email address | | `first_name` | A user's first name | | `last_name` | A user's last name | | `is_active` | A boolean value that identifies if a member is active and not blocked | | `workspace` | A unique identifier of the user's current active workspace | | `workspace_name` | A name of the user's current active workspace | | `email_verified` | A boolean value that identifies if the email is verified | | `role` | A member's role in the workspace | | `user_license` | A user license in the organization:  <br/>`Full (Standard)`;  <br/>`Read-only`;  <br/>`eSignature`;  <br/>`Guest`;  <br/>`Creator` | | `date_created` | A date when a member was added to the workspace | | `date_modified` | Last modified date of a member |
Members
Document Details
Return detailed data about a document. Use Document Status for getting just a basic info and status. Get details about a document by its `id`. Details include: - Basic document information (name, document state, owner, sender, grand total, etc.) - Recipients (completion status, signing order, etc.) - Fields with values (incl. Collect Files field) - Tokens (variables) with values - Pricing information (pricing tables, products, quotes, etc.) - Content block names for table, image, and text blocks (tables, images, texts) - Metadata - Tags - Linked objects - [Approval flow](https://support.pandadoc.com/en/articles/9714799-approval-workflow) (if present) - Active editing lock (holder and expiry), when the document is locked - Timestamps associated with a document. Note that `date_modified` means any changes associated with the recipients and document status, while `content_date_modified` reflects any changes in the document content.
Documents
Document Attachment Details
Returns details of the specific document's attachment.
Document Attachments
API Log Details
Returns details of the specific API log event.
API Logs
API Log Details
Returns details of the specific API log event.
API Logs
Member Details
A method to retrieve a member's details by ID. **User** - is an account with a license in the Organization. **Member** - is a User with a predefined Role in the Workspace. | Parameter | Description | |---|---| | `user_id` | A unique identifier of the `user` in the **organization** | | `membership_id` | A unique identifier of the `user` in the **workspace** | | `email` | A user email address | | `first_name` | A user's first name | | `last_name` | A user's last name | | `is_active` | A boolean value that identifies if a member is active and not blocked | | `workspace` | A unique identifier of the user's current active workspace | | `workspace_name` | A name of the user's current active workspace | | `email_verified` | A boolean value that identifies if the email is verified | | `role` | A member's role in the workspace | | `user_license` | A user license in the organization:  <br/>`Full (Standard)`;  <br/>`Read-only`;  <br/>`eSignature`;  <br/>`Guest`;  <br/>`Creator` | | `date_created` | A date when a member was added to the workspace | | `date_modified` | Last modified date of a member |
Members
Template Details
Get details about a template by `id`. Details include: - Basic template information (name, author, etc) - Roles - All fields with values - All tokens with values - Pricing information (pricing tables, products, quotes) - Template metadata - Template tags - Content placeholders - Modification timestamps. Note that `date_modified` means any changes associated with the template roles, while `content_date_modified` logs any changes in the template content.
Templates
Get User Details by ID
Get detailed information about a specific user by their ID, including contact information, license type, and workspace roles. You must be an organization admin to get user details.
User and Workspace management
Webhook Event Details
This operation fetches detailed information about a specific webhook event using its unique identifier.
Webhook events
Webhook Subscription Details
Get webhook subscription by uuid
Webhook subscriptions
Document eSign disclosure
Retrieves the current version of eSign disclosure text for a specified document.
Documents
Document move to folder
This operation allows you to move a document to a folder by specifying the document ID and folder ID.
Documents
Move Document to Draft
Revert your document back to draft to continue editing it. > 📘 Returning to Draft works for any document status except Removed. ## After you move your document to the Draft status - `Signature` and `Initials` fields are cleared. All other fields stay filled in. - Recipients are **not** notified that the document is back in Draft. - You'll need to resend the document so that recipients can sign the updated version.
Documents
Get document settings
Retrieves the settings for a specified document.
Document Settings
Update document settings
Updates the settings for a specified document.
Document Settings
Document Download
Download documents as a PDF. > ❗️ Downloading completed and signed documents > > To download completed and signed documents, you should use the [Download Protected Document](https://developers.pandadoc.com/reference/download-protected-document) endpoint instead. See the [How to download a completed document](https://developers.pandadoc.com/docs/how-to-download-completed-document) guide for details.
Documents
Download Document Attachment
Download an attachment by ID.
Document Attachments
Download Completed Document
Download a completed document as a verifiable PDF (Download Protected Document) > 🚧 Production key only > > This endpoint only works with a Production key. You'll get a 401 Unauthorized error when trying to use a Sandbox key. Download a signed PDF of a completed document
Documents
Duplicate Template
## Duplicate Template Creates a copy of a template within the same workspace. > 📘 **Permissions** > > Requires `can_read_templates` and `can_duplicate_templates` permissions. Duplicating templates owned by other users additionally requires `can_duplicate_any_template`.
Templates
Update Document Recipient
Modify a recipient's personal details, or update a recipient group's name and members. > 🚧 Before you start > > To edit a recipient, please ensure that you have the 'Can Edit Document' permission. Use this endpoint to easily fix typos in a recipient's name or email, or to change any other recipient information in a sent document. ### Editing a recipient group When the `recipient_id` points to a recipient group, you can rename the group and/or change its members: - Send `name` to rename the group. - Send `members` to replace the group's membership. The list you send becomes the group's new full membership: members you omit are removed, and new entries are added. Members are matched by `email`; for a retained member, only the contact fields you include (`first_name`, `last_name`) are updated, and omitted fields keep their existing values. - At least one of `name` or `members` must be provided, and `members` (when sent) must contain at least one member. On a sent document, newly added members are notified and receive their access link, while removed members lose access. Both individual recipient and recipient group edits return `204 No Content`. > 📘 Please note that changes made to a recipient within a document will also update their `Contact` information. However, these changes will not update information about this recipient in other documents where they have already been added. ### Document status - You can edit a signer in the following document statuses: - 'Draft' (`document.draft`), - 'Waiting Approval' (`document.waiting_approval`), - 'Approved' (`document.approved`), - 'Rejected' (`document.rejected`), - 'Sent' (`document.sent`), - 'Viewed' (`document.viewed`), but only until they have signed the document. - You can edit a CC recipient in any document status **except**: - 'Expired' (`document.voided`), - 'Declined' (`document.declined`). > 📘 Updating a recipient's email after sending a document > > **Note**: If you update a recipient's email address after sending a document, they will receive an instant notification at the new email address, allowing them access to the document. Access via the previous email will be revoked. ### Restrictions for updating a recipient's email - You cannot change emails of PandaDoc users. - You cannot use the email addresses of existing contacts. If you need to use an email from an existing contact, use the [Change Signer](https://developers.pandadoc.com/reference/change-signer) endpoint to replace a signer with this contact. ### Recipient communication preferences PandaDoc honors recipient opt-outs when re-notifying a recipient on a sent document. The request will return `400 Bad Request` in the following cases: - **Email** — when changing a recipient's email or enabling email delivery, if the new email address has been marked as opted-out for your organization (for example, the recipient previously reported a PandaDoc email from your organization as spam). - **SMS** — when changing a recipient's phone number or enabling SMS delivery, if the recipient has opted out of receiving SMS messages (for example, by replying STOP). To remove a recipient from the opt-out list, contact PandaDoc Support.
Document Recipients
Catalog Item Details
Get catalog item.
Product catalog
[Beta] Get AI Metadata for a Document
Returns the AI metadata fields populated for the document. Each result combines the field definition (`id`, `key`, `field_type`, `settings`) with the extracted value (`value`, `acceptance_status`). Only fields that have an extracted value for the document are returned. The endpoint signals AI extraction state via the HTTP status code: - `202 extraction_pending` — extraction is in progress. Clients should retry after the number of seconds indicated in the `Retry-After` header. - `204 No Content` — extraction has terminally failed for this document. No body is returned; retrying will not help — contact support. - `409 not_started` — extraction has not been triggered for this document (typically because the document is not yet completed).
Documents
Document Auto Reminder Settings
Retrieves the current auto reminder configuration for a specified document.
Document Reminders
[Beta] Document Content
Returns the document content for the specified document. Use query parameter `format` to select the content format.
Documents
[Beta] Document Summary
Returns a summary for the specified document. Use query parameter `type` to select summary granularity.
Documents
[Beta] DOCX Export Task
> 📘 This endpoint returns the current state of a DOCX export task for a document. > The endpoint supports downloading only multiple files if the document contains several sections. Downloading as a single file in this case is not possible.
Documents
Get Template Sharing Settings
Retrieves template sharing settings.
Template Settings
List Workspaces
Get a list of all the active workspaces in the organization.
User and Workspace management
List contacts
This method returns a list of contacts associated with a workspace.
Contacts
List Content Library Item
The endpoint retrieves items from the content library in PandaDoc. This endpoint supports filtering options to narrow down the results, allowing users to search by query, tags, folder, and more. > ### ⚠️ Please avoid empty values for the parameters > API returns "400" error when any of the parameters has an empty value. Please remove such a parameter from the request or add a value.
Content Library Items
List Document Attachments
Returns a list of attachments associated with a specified document.
Document Attachments
List Document Audit Trail
Retrieves the full audit trail for a specified document. The audit trail includes detailed user actions such as sending, viewing, signing, and editing, along with metadata like timestamps, IP addresses, and user identity. This endpoint is accessible to authorized workspace administrators only.
Document Audit Trail
List Document Fields
Return the list of fields for a particular document.
Document Fields
List Documents Folders
Get the list of folders which contain Documents in your account. > 📘 > > The root folder is not listed in the response. For the full list of folder operations and their limitations, see [Organize Documents and Folders](https://developers.pandadoc.com/docs/organize-folders).
Folders
List Documents
This endpoint will let you list and search for the documents. ### [Here](https://developers.pandadoc.com/docs/list-search-documents-api) you can find how to filter, search and order documents.
Documents
List Documents by Linked Object
Get a list of documents connected to a linked object - an entity from an integration.
Document Link to CRM
List Forms
Retrieve a paginated list of forms with optional filtering and sorting options.
Forms
List Linked Objects
Get a list of linked objects for the document.
Document Link to CRM
List API Log
Get the list of all logs within the selected workspace.\ Optionally filter by date, page, and `#` of items per page.
API Logs
List API Log
Get the list of all logs within the selected workspace.\ Optionally filter by date, page, and `#` of items per page.
API Logs
List Members
Retrieve all members details of the workspace implied by the OAuth token or API key.\ For each member, the `workspace` parameter shows their active workspace, that is the workspace they are currently working in.\ This means the `workspace` value can differ from the workspace implied by your API key.
Members
List Notaries
Retrieve a list of notaries associated with your organization. ## Important Notes - At the moment, notaries can be added to organization only manually through the PandaDoc Notary UI. - Organization must have Notary addon enabled to use this endpoint
Notary
List Notarization Requests
Retrieve a paginated list of notarization requests for your organization. Results can be filtered by status, creator, or document, and sorted by status or by the request's creation or completion dates. ## Permissions > 🔒 **Requirements** > > - The **Notary On-Demand** or **Notary** add-on must be enabled for your organization. Without an active add-on, the endpoint returns `403 Forbidden`. > - The request is executed with the permissions of the API key owner. By default, the response only includes notarization requests created by the API key owner. To list notarization requests created by any user in the organization, the API key owner must have the **Can view any notarization request** permission. ## Limits A maximum of 100 API calls per minute is permitted. Exceeding this limit triggers a 429 Too Many Requests error.
Notary
Recent SMS Opt-out
Retrieves a list of the most recent SMS opt-out changes for each phone numbers used in your workspace. > 📘 You can filter results by time range using `timestamp_from` and `timestamp_to`.
Communication Preferences
List Document Sections
Retrieve information about the sections within a document.
Document Sections (Bundles)
List Templates Folders
Get the list of folders that contain Templates in your account. > 📘 > > The root folder is not listed in the response. For the full list of folder operations and their limitations, see [Organize Templates and Folders](https://developers.pandadoc.com/docs/organize-folders).
Folders
List Templates
Retrieves a list of templates. You can filter results by a search query, tags, or fields.
Templates
List Users
Get a list of all users with membership in your organization, with their contact information, license type, and workspace roles. You must be an organization admin to list users.
User and Workspace management
List Webhook Events
This operation retrieves a paginated list of all webhook events.
Webhook events
List Webhook Subscriptions
This operation fetches a paginated list of webhook subscriptions.
Webhook subscriptions
Notarization Request Details
Get details about a notarization request by its `id`. Details include: - Basic notarization request information (status, creator, invitees). - Signed documents information with links for downloading. - Notarization session recording information with link for downloading. - Timestamps associated with a notarization request. - Termination reason and details when the notarization session was not completed successfully. ## Available Notarization Request Statuses The following is a complete list of all possible notarization request statuses returned: | Notarization Request Status | Status Description | | :-------------------------- | :----------------------------------------------------------------------------------------------------------------- | | SENT | Notarization request has been created. Invitees are notified and can start the process of finding a notary. | | WAITING_FOR_NOTARY | One of the invitees initialised the process of finding a notary. | | ACCEPTED | Notarization request has been accepted by the notary. At this time nobody has joined the notarization session yet. | | LIVE | Notarization session has started. | | COMPLETED | Notarization session is finished. Documents have been successfully signed and ready for downloading. | | INCOMPLETE | Notarization session has started but was not completed successfully. | ## Signed documents Signed documents are the documents that were successfully signed during the notarization session. The signed document's info is available only if the notarization request has `COMPLETED` status, otherwise the returned list will be empty. In case you uploaded several documents for notarization then the `signed_documents` list will contain links for downloading for each document separately (with `SINGLE` document type) and link for the combined document (with `COMBINED` document type accordingly). ## Recording Recording is the video of the notarization session. The recording info is available only if the notarization request has `COMPLETED` status and recording is available, otherwise the returned object will be empty. > 📘 Links expire in 1 hour > > **Note**: The signed document and recording links expire in 1 hour. After this time it will be not possible to download files using the returned urls. In this case you need to call endpoint again since each request generates a new link. ## Limits A maximum of 100 API calls per minute is permitted. Exceeding this limit triggers a 429 Too Many Requests error.
Notary
Quote update
This operation updates the details of a specific quote within a document by specifying the document ID and quote ID.
Quotes
Change Signer (Reassign Document Recipient)
Reassign fields to another signer. > 🚧 Before you start > > To change a signer in a document, please ensure that: > > - You have the 'Can Manage Recipients' permission. > - New signer is already created in your contacts. If not, add them using the [Create Contact](https://developers.pandadoc.com/reference/create-contact) endpoint. You can reassign fields to another signer before the original signer has signed the document. You can choose any person except those recipients who have already signed the document. The endpoint path includes the `recipient_id` of the original signer and the request body must include the following two parameters: - `kind`: Set this parameter to `contact` to specify an individual contact. - `id`: Input the ID of the contact you want to use as a replacement for the original signer. To retrieve the contact's ID, use the [List Contacts](https://developers.pandadoc.com/reference/list-contacts) endpoint to access a list of all contacts, and then locate the desired contact by searching using the name or email address within the returned list. Once you execute the call to change the signer, the original signer will be entirely removed from the document. If you wish to retain the original signer as a CC recipient, you can re-add them using the [Add CC Recipient](https://developers.pandadoc.com/reference/add-new-recipient-cc) endpoint. > 🚧 Pre-filled fields > > If you change the signer in a document that has already been sent, the signer's pre-filled fields will be completely reset. In the 'Draft' (`document.draft`) status, pre-filled fields will remain.
Document Recipients
Remove Member from Workspace
This operation removes a specified member from a workspace by providing the workspace ID and member ID.
User and Workspace management
Rename Documents Folder
Rename Documents Folder. For the full list of folder operations and their limitations, see [Organize Documents and Folders](https://developers.pandadoc.com/docs/organize-folders).
Folders
Rename Templates Folder
Rename a templates folder. For the full list of folder operations and their limitations, see [Organize Templates and Folders](https://developers.pandadoc.com/docs/organize-folders).
Folders
List Catalog Items Search
This method searches for items in your [product catalog](https://support.pandadoc.com/en/articles/9714691-product-catalog). Use the `query` parameter to search in title, SKU, description, category name, custom fields name and value. You can also search for items by their type, billing type, and category id. Order search results, in both ascending and descending order, by these item properties: - SKU - Name - Price - Modification date Use the `exclude_uuids` parameter to exclude particular uuids from the search request.
Product catalog
[Beta] List Documents Search
Find documents from a natural-language query. PandaDoc AI interprets the query and returns the matching documents. PandaDoc offers two document search tools: this AI-powered search and the structured <a href="#/operations/listDocuments">List Documents</a> endpoint. <details><summary><strong>Document Search Tools Guide</strong> — click to expand</summary> #### When to use AI Search (this endpoint) - The query is in natural language (e.g., "show me all completed documents from Q2 2026") - The query mentions people by name (e.g., "contracts shared with John Smith") - The query uses relative date expressions (e.g., "last week", "this quarter") - You want the system to automatically determine the best filtering strategy - You want follow-up suggestions to help refine the search #### When to use List Documents - You already have exact, structured filter parameters (specific status codes, precise ISO-8601 date ranges) - You need to paginate through a large result set (explicit page/count control) - You need faster, more predictable response times - You need deterministic, repeatable queries for automation workflows #### Comparison | Feature | AI Search | List Documents | | ------------------------ | --------------------------------------------------- | ------------------------------------------------ | | **Input** | Single natural-language query | Search query + optional structured filters | | **Date handling** | Understands relative dates ("last week", "Q2 2026") | Requires explicit ISO-8601 date range | | **Status filtering** | Interprets from query ("completed", "sent") | Requires numeric status codes | | **Contact/owner search** | Resolves people by name | Not supported | | **Pagination** | Returns top 100 results | Supports explicit page and page size (up to 100) | | **Suggestions** | Returns follow-up suggestions for refinement | No suggestions | | **Best for** | Conversational, exploratory search | Precise, structured, repeatable queries | </details> The response may return fewer items than the total matches. The search caps the returned list based on query complexity: `count` shows the number of items returned in `results`. When the query matches more documents than returned, use one of the returned `suggestions` as a stricter follow-up query to narrow the results. > 🚧 **Beta** > > This endpoint is currently in beta and may change without notice.
Documents
Document Section Upload Status
Receive the upload status of the document and sections by their `upload_id`. Requesting document section upload status is useful to ensure a document section upload is in the expected state before calling additional API methods. In response, you receive an array with `sections_uuid`. You can receive information about each section using the [Document Section Info](https://developers.pandadoc.com/reference/document-section-info) endpoint. ```json "section_uuids": [ "H8T8CJofGY6JwTsWsPuDEF", "8MwLaU4SaZywqLiDk26mDF" ] ``` ## Available Document Section Upload Statuses The following is a complete list of all possible document statuses returned: | Document Status | Status Description | | :----------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `document_sections_upload.UPLOADED` | The document section upload process has just been created. It is in processing and will be in `document_sections_upload.PROCESSED` state momentarily. | | `document_sections_upload.PROCESSED` | The document sections upload is processed and the sections are already created in the document. All aspects of the document sections can be edited in this state. | | `document_sections_upload.ERROR` | Document section upload procces has been failed. For more information check error details in the response. |
Document Sections (Bundles)
Document Section Details
Receive information about each section.
Document Sections (Bundles)
Send Document
> 🚧 Using the Sandbox Key > > When you use a [sandbox API key](https://developers.pandadoc.com/reference/sandbox-key) during the free trial period, the sender and recipient email addresses must be from the same organisation (email domain). ## Document State - You can only send a document in the `document.draft` status. - After creating a new document, it usually retains a `document.uploaded` status for 3-5 seconds while the document syncs across PandaDoc servers. When the document is available for further API calls, it moves to the `document.draft` state. Use [Document Status](/reference/document-status) or [Webhooks](/reference/on-document-status-change) to check document status. - Moving a document to the `document.sent` status finalizes the document structure, before recipients can complete it. - If a template used for the document creation has an approval workflow turned on, the sent document moves to the `document.waiting_approval` status. Once the document is approved, you need to make the call again to move the document to `document.sent` status. ## Send and Silence Notifications - By default, PandaDoc sends a notification email to the recipient, as well as notifications the sender has configured. You may disable all notifications for recipients by passing `silent: true`. This is useful when you are using alternative delivery methods such as linking to the document or embedding the document. - The `silent: true` parameter disables sent, viewed, comment and completed document email notifications. "Document Approval" notification won't be affected by this parameter. - If you pass `silent: false`, the document is going to be delivered by email and/or SMS. ![Example email. Branding can be changed in workspace settings](https://files.readme.io/cc5a03e-email2.png) ## Select Approver from Group If you have previously set up an approval workflow with selectable groups on the UI, you can select a particular approver from this group. Learn more about [selectable groups](https://support.pandadoc.com/en/articles/9714799-approval-workflow#h_01H4GNY5GSGG38BPYY46XV7GB4). To set an approver, we recommend to follow these steps: 1. Run the [Document Details](https://developers.pandadoc.com/reference/document-details) request. 2. Copy the `steps` part from the `approval_execution` section of the response into the `selected_approvers` field of the Send Document payload. 3. Modify your payload according to business needs: set `is_selected` to true for one approver. > 📘 **Note**: You can change the selected approver only if you revert your document back to the `document.draft` status.
Documents
Content Library Item Status
Requesting the CLI status helps verify that a CLI is in the expected state before invoking additional API methods. ## Available CLI Statuses The following is a complete list of all possible CLI statuses returned: | CLI Status | Status Description | |-----------------|--------------------| | `cli.UPLOADED` | The CLI upload process has been initiated and is currently in progress. It will soon transition to the `cli.PROCESSED` state. | | `cli.PROCESSED` | The CLI has been successfully uploaded and created. At this stage, all aspects of the CLI are editable. | | `cli.ERROR` | The CLI upload process has failed. Please refer to the error details in the response for more information. |
Content Library Items
Document Status
It is useful to request document status to ensure a document is in the expected state before calling additional API methods. ### Required Document Statuses Here are some common methods and the `document.status` required to proceed: | API Method | Required Document State | | :------------------- | :---------------------- | | Send A Document | `document.draft` | | Get Document Details | `document.draft` | | Embed A Document | `document.sent` | | Download A Document | `document.completed` | > 📘 Polling vs Webhooks > > If you are using the `GET` document status endpoint for [**polling**](https://en.wikipedia.org/wiki/Polling_(computer_science)), we also support and recommend using **webhooks** for event-driven needs: <https://developers.pandadoc.com/docs/listen-document-status-changes#/> ### Available Document Statuses The following is a complete list of all possible document statuses returned: | Document Status | Status Description | | :-------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `document.uploaded` | The document has just been created or uploaded. It is in processing and will be in `document.draft` state soon. | | `document.error` | The document creation has failed. This status is terminal, you should stop polling after getting it. | `document.draft` | The document is in a draft state. All aspects of the document can be edited in this state. Our API does not support edits after the document has been created, but it can still be edited manually on <https://app.pandadoc.com> | | `document.sent` | The document has been "sealed" and optionally sent. No further document edits can occur except for document recipient(s) filling out or signing the document. | | `document.viewed` | Document recipient(s) have viewed the sent document. | | `document.waiting_approval` | The document has an [automatic approval workflow](https://support.pandadoc.com/en/articles/9714799-approval-workflow) and has not yet been approved. | | `document.rejected` | The document has an [automatic approval workflow](https://support.pandadoc.com/en/articles/9714799-approval-workflow) and was rejected. | | `document.approved` | The document has an [automatic approval workflow](https://support.pandadoc.com/en/articles/9714799-approval-workflow) and was approved. | | `document.waiting_pay` | The document has a [Stripe payment](https://support.pandadoc.com/en/articles/9714942-stripe-checkout-payments) option and is awaiting payment. | | `document.paid` | The document has a [Stripe payment](https://support.pandadoc.com/en/articles/9714942-stripe-checkout-payments) option and was paid. | | `document.completed` | The document has been completed by all recipients. | | `document.voided` | The document expired and is no longer available for completion or signature. | | `document.declined` | The document was [manually marked](https://support.pandadoc.com/en/articles/9714842-manually-change-document-status) as "Declined" | | `document.external_review` | The document is reviewed by it's recipient using Suggest Edit feature | | `document.scheduled` | The document is a draft scheduled to be sent automatically at a future time. |
Documents
Document Auto Reminder Status
Retrieves the current auto reminder status per recipient for a specified document. Recipients who could not receive reminders due to validations (recipient groups, non-signers, etc.) will be skipped and not included in the response.
Document Reminders
Template Status
## Available Template Statuses The following is a complete list of all possible template statuses returned: | Template Status | Status Description | | :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | | `template.UPLOADED` | The template upload process has been initiated and is currently in progress. It will soon transition to the `template.PROCESSED` state. | | `template.PROCESSED` | The template has been successfully uploaded and created. At this stage, all aspects of the template are editable. | | `template.ERROR` | The template upload process has failed. Please refer to the error details in the response for more information. |
Templates
Get template settings
Retrieves the settings for a specified template. Only the language field is currently supported.
Template Settings
Update template settings
Updates the settings for a specified template. Only the language field is currently supported.
Template Settings
Transfer all documents ownership
This method transfers ownership of all documents from one member to another.
Documents
Update document ownership
This operation allows transferring the ownership of a document to another user by specifying the document ID and membership ID.
Documents
Update Catalog Item
Update catalog item.
Product catalog
Update Contact
This method updates a contact details.
Contacts
Update Document
Use the PATCH method to update a PandaDoc document. > 🚧 Document status > > You can only update a document in the Draft status (`document.draft`). > > After creating a new document, it usually retains a `document.uploaded` status for 3-5 seconds while the document syncs across PandaDoc servers. When the document is available for further API calls, the document moves to the `document.draft` state. Use [Document Status](https://developers.pandadoc.com/reference/document-status) or Webhooks to check document status.
Documents
Update Document Auto Reminder Settings
Configures automatic reminders for document recipients. These reminders are sent after the document's initial dispatch. Settings include enabling reminders, delivery method (email/SMS), initial delay, and recurrence frequency.
Document Reminders
Update Document Fields Assignment
Assign, reassign, or unassign document fields to recipients. Supports bulk operations by accepting multiple field assignment items in a single request. > 🚧 Before you start > > - The document must be in the 'Draft' (`document.draft`) status. > - You must have the 'Can Edit Document' permission.
Document Fields
Template Update
Update a template. Currently supports updating template variables (`tokens`) and managing template roles. > 🚧 Template status > > You can only update a template in the PROCESSED status (`template.PROCESSED`). > > After creating a new template, it usually retains a `template.uploaded` status for 3-5 seconds while the template syncs across PandaDoc servers. When the template is available for further API calls, the template moves to the `template.PROCESSED` state. Use [Template Status](https://developers.pandadoc.com/reference/template-status) or Webhooks to check template status. ## Managing template roles Pass a `roles` array to replace the full set of template roles in a single request: - Items with an existing `id` update that role (`name`, `signing_order`). - Items without an `id` create a new role. - Existing roles whose `id` is not in the array are deleted. Role names must be unique within a template. Preassigned contacts and contact groups attached to roles in the template editor are preserved on updates and removed together with their role on deletion — they are not managed by this endpoint.
Templates
Update Template Sharing Settings
Replaces the full list of Workspaces this Template is shared with. The caller must be a member of every Workspace being newly shared by this call. Unsharing a Workspace only requires permission to edit the Template.
Template Settings
Update Webhook Subscription
This operation updates the details of a webhook subscription.
Webhook subscriptions
Update Webhook Subscription Shared Key
This operation regenerates the shared key for a specific webhook subscription identified by its UUID.
Webhook subscriptions
Create Document Section
With this endpoint, you can add a new section to an existing PandaDoc document (create a bundle). You can upload a section to the document using a PandaDoc template or a file by URL. > ⏱️ Document Section creation is a non-blocking (asynchronous) operation > > The document creation process may take some time. > > With a successful request, you receive a response with the created upload ID and status `document_sections_upload.uploaded`. After processing completes on our servers, usually a few seconds, the document moves to the `document_sections_upload.PROCESSED` status. ## Using a PandaDoc template <details> > 🚧 Current Version Limitations > > Images in sections are currently not supported. > 📘 Pricing tables note > > Each pricing table must have a unique name to populate it with data correctly. A PandaDoc template is a document template created and edited in the PandaDoc web application. Our [help center](https://support.pandadoc.com/en/articles/9714616-save-time-with-a-reusable-template) has further information on PandaDoc templates. If you don't have any PandaDoc Template yet, you can easily create one by clicking [Copy a Sample PandaDoc template](https://app.pandadoc.com/get-this-template/?pt=public_template&pub=eiC3a6qBVfEfbw7VCYgaeN). This will open the PandaDoc application in a new tab, copy the sample template into your account, and create a new document from the template. </details> ## Using a File by URL <details> Using this endpoint you can add a section to the existing document. The section is created from a file you upload. The file can be a PDF, DocX, or RTF. > 📘 We've prepared two samples that you can use to test the request. > Download them here: > > - [Download a Sample PDF with Form Fields](https://cdn2.hubspot.net/hubfs/2127247/public-templates/SamplePandaDocPdf_FormFields.pdf) > - [Download a Sample PDF with Field Tags](https://5132871.fs1.hubspotusercontent-na1.net/hubfs/5132871/SamplePandaDocPdf_FieldTags_updated.pdf) > ❗️ Limitations > > * This method does not support multiple documents. > * The maximum supported file size is 50 MB. API returns "413 Request entity too large" in case of bigger files. > * PandaDoc does not support creating document from a PDF with encrypted files (to check whether a file is encrypted or not, try Get info -> Secure: Password Encrypted). ### PDF Form Fields PandaDoc recognizes PDF form fields. To enable this feature, pass the optional `parse_form_fields` value as `true` when making a create document section API call. We support Text fields, Dropdowns, and Signature fields. If you would like to pass additional parameters to configure PDF form fields, use the PDF field name as an optId. You can use a PDF editor such as Adobe Acrobat, Foxit to get and edit field names in your PDF. [**Download a Sample PDF with Form Fields**](https://cdn2.hubspot.net/hubfs/2127247/public-templates/SamplePandaDocPdf_FormFields.pdf) ### PDF/DocX/RTF Field Tags This parsing format allows a word processor such as [Microsoft Word](https://support.office.com/en-us/article/Save-as-PDF-d85416c5-7d77-4fd6-a216-6f4bf7c7c110?ui=en-US&rs=en-US&ad=US) or [Google Docs](https://support.google.com/drive/answer/2423534?co=GENIE.Platform%3DDesktop&hl=en) to prepare a document and save it in PDF, DocX or RTF format. Within the text, PandaDoc parses field tags. A field tag starts and ends with brackets. The field tag includes basic information on how to create a form field in the PandaDoc document. The request JSON object `optId` can also extend this information for even greater control. Here is an example of how the field tag in a PDF/DocX/RTF is converted to a text field in the PandaDoc document: ![](https://files.readme.io/38afedf-ex3.png "ex3.png") [**Download a Sample PDF with Field Tags**](https://cdn2.hubspot.net/hubfs/2127247/public-templates/SamplePandaDocPdf_FieldTags.pdf) #### PDF Field Tag Key ![](https://files.readme.io/a81fbf1-field-tag-structure.png "field-tag-structure.png") | Number | Key | Description | Example | | :----- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------- | | 1 | `fieldType` | Field type from the table documented below | `signature`, or `s` for shorthand | | 2 | `*` | Optional `*` denotes the field is not required | `*` | | 3 | `role` | Role name. Associate the field tag with a recipient role. Roles must be assigned to recipients in the request body. In this case we are using role `s1` to keep the length short and denote the concept of "signer 1". `s1` would be the value passed as role in a recipient JSON object. | `s1` | | 4 | `optId` | Optional field Id. Specify more information about the field tag within the post request by using this id. | `sigBox17` | | 5 | `_____` | Use underscores to widen the field if desired. The form fields in PandaDoc will scale to the length and size of your field tag. | `_____` | > 🚧 Role names restrictions > > Underscores are not supported in role names for a file with a Field Tag. #### PDF/DocX/RTF Field Tag Supported Types | Field Type | Short Notation | Is PandaDoc Field | | :---------- | :------------- | :---------------- | | `textfield` | `t` | Field | | `checkbox` | `c` | Field | | `signature` | `s` | Field | | `date` | `d` | Field | | `initials` | `i` | Field | | `dropdown` | `dd` | Field | ```json Field Tags Example "fields": { "textfield": { "value": "Jane", "role": "user" }, "dropdown": { "value": "opt1", "role": "user", "options":[ "opt1", "opt2", "opt3" ] }, "checkbox": { "value": true, "role": "user" }, "date":{ "value": "2022-05-20", "role": "user" }, "signature": { "value": "", "role": "user" } } ``` > 📘 Fields in PandaDoc > > The following article explains how to use Fields: [Everything you need to know about Fields](https://support.pandadoc.com/en/articles/9714583-fields) ### Signing order Set a signing order for document section sections created from a file. ```json "recipients": [ { "email": "josh@example.com", "first_name": "Josh", "last_name": "Ron", "role": "user", "signing_order": 1 } ] ``` > 📘 Signing order in PandaDoc > > The following article explains how to use signing order: [How to use signing order](https://support.pandadoc.com/en/articles/9714771-signing-order) ### Error handling | Error description | Type | Root cause | |---|---|---| | Document version 1 is not supported. | Validation errors: Form fields | The creation document section is supported only for document version 2 | | PDF content hasn't been processed: document is broken or locked | Processing errors: Failed to process document content | Document converter service can’t process PDF. This may be caused by locked PDF or if it’s broken. | | Error occurred while parsing PDF field tags. Please try PDF flattening or reach out to support | Processing errors: Field tag / Form field validation error | Doc converter managed to parse PDF and extract tags, but at least 1 of them is invalid (having negative position, for example). Usually we recommend PDF flattening and it helps | | No role='{role}' for field tag specified in `recipients` found, roles passed were {roles} | Validation errors: Field tags | Role is invalid. When the role specified in field tag is empty or wasn’t provided in a payload for any recipient | | All field tags within PDF must be declared within `fields`  object of the JSON Payload. No field with optId='{optid}' found in fields object, fields passed were {optids} | Validation errors: Field tags | Label is invalid. Occurs when **optId** specified in field tag is empty or no field with **name = optId** was provided in a payload | | One of field tags in PDF with type='{field}' doesn't have a role | Validation errors: Field tags | Field tag in PDF has no role. One of field tags in PDF with type=% doesn't have a role. | | Role for form field with name='{role}' is not provided in payload | Validation errors: Form fields | Role for form field with ‘name’ is not provided. Occurs when `role` for form field with name=%s  is not provided in payload | | Field for form field with name='{name}' is not specified in payload, available names are {names} | Validation errors: Form fields | Field ‘name’ is not specified in payload. Occurs when no field with name = form field name was provided in a payload | | No role='{role}' for form field specified in 'recipients' found, roles passed were {roles}" | Validation errors: Form fields | Failed to resolve field actor for `role` in form field with ‘name’.   Occurs when role from the form field is not found in recipient’s from payload | | Failed to download file from link {url}. | Source errors | Error on attempt to download file.  An error has occurred on an attempt to download file using the provided ‘url’ in payload | | Failed to download file from link {url} (status code: {status code}) | Source errors | Error with HTTP status code on attempt to download file.  An error has occurred on an attempt to download file using the provided ‘url’ in payload - remote server responded with the HTTP status code | | Content type='{type}' is not supported, available types are {types} | Source errors | Content type is not supported.  Content type should be one of the following: PDF, ZIP, doc, docx, RTF | | The maximum file size is exceeded, limit is {limit} MB | Source errors | The file size has exceeded the allowed limits. An error occurred while trying to download a file that is too large (limit is 50M) | </details>
Document Sections (Bundles)
Create Document Section from File Upload
With this endpoint, you can add a new section to an existing PandaDoc document (create a bundle). The section is created from a file you upload. The file can be a PDF, DocX, or RTF. > 📘 We've prepared two samples that you can use to test the request. > Download them here: > > - [Download a Sample PDF with Form Fields](https://cdn2.hubspot.net/hubfs/2127247/public-templates/SamplePandaDocPdf_FormFields.pdf) > - [Download a Sample PDF with Field Tags](https://5132871.fs1.hubspotusercontent-na1.net/hubfs/5132871/SamplePandaDocPdf_FieldTags_updated.pdf) > 🚧 Usage specifics > > 1. This method uses a `multipart/form-data` request type instead of the `application/json` typically found in the PandaDoc API. This is to accommodate the upload of the included document. > 2. You can send a URL instead of a file in the document creation request. > In this case, you need to use the `application/json` content type and add the URL parameter in the body request. As an example, see [Create from public PDF](https://developers.pandadoc.com/docs/create-and-send-a-document-from-a-publicly-available-pdf) guide for more details. > 3. A file you upload is not stored in your PandaDoc account, so you have to upload it with every request. > ❗️ Limitations > > 1. This method does not support multiple documents. > 2. The maximum supported file size is 50 MB. API returns "413 Request entity too large" in case of bigger files. > 3. PandaDoc does not support creating document from a PDF with encrypted files (to check whether a file is encrypted or not, try Get info -> Secure: Password Encrypted). > ⏱️ Document Section creation is a non-blocking (asynchronous) operation > > The document creation process may take some time. > > With a successful request, you receive a response with the created upload ID and status `document_sections_upload.uploaded`. After processing completes on our servers, usually a few seconds, the document moves to the `document_sections_upload.PROCESSED` status. ## PDF Form Fields PandaDoc recognizes PDF form fields. To enable this feature, pass the optional `parse_form_fields` value as `true` when making a create document section API call. We support Text fields, Dropdowns, and Signature fields. If you would like to pass additional parameters to configure PDF form fields, use the PDF field name as an optId. You can use a PDF editor such as Adobe Acrobat, Foxit to get and edit field names in your PDF. [**Download a Sample PDF with Form Fields**](https://cdn2.hubspot.net/hubfs/2127247/public-templates/SamplePandaDocPdf_FormFields.pdf) ## PDF/DocX/RTF Field Tags This parsing format allows a word processor such as [Microsoft Word](https://support.office.com/en-us/article/Save-as-PDF-d85416c5-7d77-4fd6-a216-6f4bf7c7c110?ui=en-US&rs=en-US&ad=US) or [Google Docs](https://support.google.com/drive/answer/2423534?co=GENIE.Platform%3DDesktop&hl=en) to prepare a document and save it in PDF, DocX or RTF format. Within the text, PandaDoc parses field tags. A field tag starts and ends with brackets. The field tag includes basic information on how to create a form field in the PandaDoc document. The request JSON object `optId` can also extend this information for even greater control. Here is an example of how the field tag in a PDF/DocX/RTF is converted to a text field in the PandaDoc document: ![](https://files.readme.io/38afedf-ex3.png "ex3.png") [**Download a Sample PDF with Field Tags**](https://cdn2.hubspot.net/hubfs/2127247/public-templates/SamplePandaDocPdf_FieldTags.pdf) <details> ### PDF Field Tag Key ![](https://files.readme.io/a81fbf1-field-tag-structure.png "field-tag-structure.png") | Number | Key | Description | Example | | :----- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------- | | 1 | `fieldType` | Field type from the table documented below | `signature`, or `s` for shorthand | | 2 | `*` | Optional `*` denotes the field is not required | `*` | | 3 | `role` | Role name. Associate the field tag with a recipient role. Roles must be assigned to recipients in the request body. In this case we are using role `s1` to keep the length short and denote the concept of "signer 1". `s1` would be the value passed as role in a recipient JSON object. | `s1` | | 4 | `optId` | Optional field Id. Specify more information about the field tag within the post request by using this id. | `sigBox17` | | 5 | `_____` | Use underscores to widen the field if desired. The form fields in PandaDoc will scale to the length and size of your field tag. | `_____` | > 🚧 Role names restrictions > > Underscores are not supported in role names for a file with a Field Tag. ### PDF/DocX/RTF Field Tag Supported Types | Field Type | Short Notation | Is PandaDoc Field | | :---------- | :------------- | :---------------- | | `textfield` | `t` | Field | | `checkbox` | `c` | Field | | `signature` | `s` | Field | | `date` | `d` | Field | | `initials` | `i` | Field | | `dropdown` | `dd` | Field | > 📘 Fields in PandaDoc > > The following article explains how to use Fields: [Everything you need to know about Fields](https://support.pandadoc.com/en/articles/9714583-fields) ```json Field Tags Example "fields": { "textfield": { "value": "Jane", "role": "user" }, "dropdown": { "value": "opt1", "role": "user", "options":[ "opt1", "opt2", "opt3" ] }, "checkbox": { "value": true, "role": "user" }, "date":{ "value": "2022-05-20", "role": "user" }, "signature": { "value": "", "role": "user" } } ``` </details> ## Signing order Set a signing order for document section sections created from a file. ```json "recipients": [ { "email": "josh@example.com", "first_name": "Josh", "last_name": "Ron", "role": "user", "signing_order": 1 } ] ``` ## Error handling | Error description | Type | Root cause | |---|---|---| | Document version 1 is not supported. | Validation errors: Form fields | The creation document section is supported only for document version 2 | | PDF content hasn't been processed: document is broken or locked | Processing errors: Failed to process document content | Document converter service can’t process PDF. This may be caused by locked PDF or if it’s broken. | | Error occurred while parsing PDF field tags. Please try PDF flattening or reach out to support | Processing errors: Field tag / Form field validation error | Doc converter managed to parse PDF and extract tags, but at least 1 of them is invalid (having negative position, for example). Usually we recommend PDF flattening and it helps | | No role='{role}' for field tag specified in `recipients` found, roles passed were {roles} | Validation errors: Field tags | Role is invalid. When the role specified in field tag is empty or wasn’t provided in a payload for any recipient | | All field tags within PDF must be declared within `fields`  object of the JSON Payload. No field with optId='{optid}' found in fields object, fields passed were {optids} | Validation errors: Field tags | Label is invalid. Occurs when **optId** specified in field tag is empty or no field with **name = optId** was provided in a payload | | One of field tags in PDF with type='{field}' doesn't have a role | Validation errors: Field tags | Field tag in PDF has no role. One of field tags in PDF with type=% doesn't have a role. | | Role for form field with name='{role}' is not provided in payload | Validation errors: Form fields | Role for form field with ‘name’ is not provided. Occurs when `role` for form field with name=%s  is not provided in payload | | Field for form field with name='{name}' is not specified in payload, available names are {names} | Validation errors: Form fields | Field ‘name’ is not specified in payload. Occurs when no field with name = form field name was provided in a payload | | No role='{role}' for form field specified in 'recipients' found, roles passed were {roles}" | Validation errors: Form fields | Failed to resolve field actor for `role` in form field with ‘name’.   Occurs when role from the form field is not found in recipient’s from payload | | Failed to download file from link {url}. | Source errors | Error on attempt to download file.  An error has occurred on an attempt to download file using the provided ‘url’ in payload | | Failed to download file from link {url} (status code: {status code}) | Source errors | Error with HTTP status code on attempt to download file.  An error has occurred on an attempt to download file using the provided ‘url’ in payload - remote server responded with the HTTP status code | | Content type='{type}' is not supported, available types are {types} | Source errors | Content type is not supported.  Content type should be one of the following: PDF, ZIP, doc, docx, RTF | | The maximum file size is exceeded, limit is {limit} MB | Source errors | The file size has exceeded the allowed limits. An error occurred while trying to download a file that is too large (limit is 50M) |
Document Sections (Bundles)
FAQ

Pandadoc integration, answered

How do AI agents use Pandadoc through Open Connector?
Your user connects Pandadoc once with one of its cataloged authentication methods. Open Connector stores the credential in an encrypted vault and exposes Pandadoc tools to your agent over MCP or a typed API, with credentials injected server-side on each call.
Is this a Pandadoc MCP server?
Yes. Open Connector can serve Pandadoc as a named MCP server with a scoped allowlist and a per-user connection URL, so any MCP client can call Pandadoc actions with credentials injected server-side.
Where do Pandadoc credentials live?
In your own infrastructure. Open Connector keeps credentials in its own vault and injects them at call time, so they never leave your environment.

Give your agents Pandadoc — keep the keys.

Open source, self-hostable, with Pandadoc credentials that never leave your infrastructure. Run it from source today.