PandaDoc Document Management
Overview
Documents in PandaDoc represent proposals, quotes, contracts, statements of work (SOWs), managed service agreements (MSAs), and any other business documents that need to be created, sent, signed, and tracked. MSPs use PandaDoc documents to formalize client engagements -- from initial proposals through signed contracts. Documents are typically created from templates, populated with client-specific content, sent for e-signature, and archived after completion.
Anti-triggers
- Choosing or inspecting the blueprint before a document exists — use
pandadoc-templates.
- Who signs, in what order, and whether they have signed — use
pandadoc-recipients.
- The MSP sales motion layered over these same tools — proposal types,
token conventions, and pipeline reporting are
pandadoc-proposals.
- Building or pricing the offer — PandaDoc renders and sends an
already-priced proposal; catalog and margin work happens in
salesbuildr-quotes, connectwise-cpq-quotes, or
kaseya-quote-manager-quotes.
- Searching PandaDoc's developer documentation —
pandadoc-search-docs
searches the docs site, not your account; use pandadoc-api-patterns.
MCP Tools
Available Tools
| Tool |
Description |
Key Parameters |
pandadoc-list-documents |
List and filter documents |
status, q, tag, count, page, order_by, template_id, folder_uuid |
pandadoc-get-document |
Get full document details |
id (required) |
pandadoc-get-document-status |
Get document status |
id (required) |
pandadoc-create-document |
Create a document from template |
template_uuid, name, recipients, tokens, fields, pricing_tables, folder_uuid |
pandadoc-send-document |
Send a document for signature |
id (required), message, subject, silent |
pandadoc-download-document |
Download a completed document |
id (required) |
Create a Document
Call pandadoc-create-document with:
- Template: Set
template_uuid to the template ID
- Name: Set
name to the document title (e.g., "Acme Corp - Managed Services Agreement")
- Recipients: Provide
recipients array with email, first_name, last_name, role, and optionally signing_order
- Content tokens: Set
tokens array with name and value pairs to populate template variables
- Pricing tables: Set
pricing_tables to populate line items with services and pricing
- Folder: Optionally set
folder_uuid to organize the document
Example: Create an MSA from template:
pandadoc-create-document with template_uuid=abc123, name="Acme Corp - MSA", recipients=[{"email":"john@acme.com","first_name":"John","last_name":"Smith","role":"Client"}], tokens=[{"name":"Client.Company","value":"Acme Corporation"}]
List Documents
Call pandadoc-list-documents with optional parameters:
- Search by name: Set
q to a document name or keyword
- Filter by status: Set
status to a document status value (see status reference below)
- Filter by tag: Set
tag to a document tag
- Sort: Set
order_by to date_created, date_modified, name, or date_status_changed
- Paginate: Set
page (1-based) and count (up to 100)
Example: List all sent documents:
pandadoc-list-documents with status=document.sent, count=100
Example: Search for a client's documents:
pandadoc-list-documents with q=Acme Corp, count=100
Get Document Details
Call pandadoc-get-document with the id parameter to get full document details including recipients, tokens, pricing, and metadata.
Check Document Status
Call pandadoc-get-document-status with the id parameter to get the current status and recipient completion information.
Send a Document
Call pandadoc-send-document with:
- Document ID: Set
id to the document ID (required)
- Message: Optionally set
message for the email body
- Subject: Optionally set
subject for the email subject line
- Silent: Set
silent=true to create a signing link without sending an email
Example: Send with a cover message:
pandadoc-send-document with id=msFYActMfJHqNTKH9tcPFa, message="Please review and sign the attached managed services agreement.", subject="MSA for your review - Acme Corp"
Download a Document
Call pandadoc-download-document with the id parameter to download the completed, signed document as a PDF.
Key Concepts
Document Lifecycle
Template --> Create (Draft) --> Send --> Viewed --> Completed (Signed)
| | |
waiting_approval declined download
| rejected
approved expired
|
voided
Document Statuses
| Status |
API Value |
Description |
| Draft |
document.draft |
Created but not yet sent to recipients |
| Sent |
document.sent |
Sent to recipients, awaiting action |
| Completed |
document.completed |
All recipients have signed |
| Viewed |
document.viewed |
At least one recipient has opened the document |
| Waiting Approval |
document.waiting_approval |
Internal approval required before sending |
| Approved |
document.approved |
Internal approval granted |
| Rejected |
document.rejected |
Internal approval rejected |
| Waiting Payment |
document.waiting_pay |
Payment collection pending |
| Paid |
document.paid |
Payment collected |
| Voided |
document.voided |
Document cancelled/voided after sending |
| Declined |
document.declined |
Recipient declined to sign |
| Expired |
document.expired |
Document passed its expiration date |
Document Types for MSPs
| Type |
Description |
Typical Template |
| MSA |
Managed Service Agreement |
Long-term IT management contract |
| SOW |
Statement of Work |
Project-specific deliverables and scope |
| Proposal |
Service proposal |
Proposed services with pricing |
| Quote |
Hardware/software quote |
Line-item pricing for products |
| NDA |
Non-disclosure agreement |
Confidentiality before engagement |
| Change Order |
Scope change request |
Modifications to existing agreements |
Content Tokens
Tokens are template variables that get replaced with client-specific values when creating a document:
| Token Pattern |
Example Value |
Use Case |
Client.Company |
Acme Corporation |
Client company name |
Client.Name |
John Smith |
Client contact name |
Client.Email |
john@acme.com |
Client email |
Client.Address |
123 Main St, Springfield, IL |
Client address |
MSP.Company |
TechForce IT Solutions |
Your MSP name |
Contract.StartDate |
March 1, 2026 |
Agreement start date |
Contract.Term |
12 months |
Agreement duration |
Contract.Value |
$5,000/month |
Monthly recurring revenue |
Pricing Tables
Pricing tables contain line items for services and products:
{
"pricing_tables": [
{
"name": "Services",
"sections": [
{
"rows": [
{
"options": {
"optional": false,
"optional_selected": true
},
"data": {
"name": "Managed IT Services - Per User",
"description": "24/7 monitoring, helpdesk, patching, endpoint security",
"price": 125.00,
"qty": 50,
"discount": 0
}
},
{
"data": {
"name": "Backup & Disaster Recovery",
"description": "Cloud backup with 1-hour RPO, 4-hour RTO",
"price": 250.00,
"qty": 1,
"discount": 0
}
}
]
}
]
}
]
}
Field Reference
Document Fields
| Field |
Type |
Description |
id |
string |
Document unique identifier |
name |
string |
Document display name |
status |
string |
Current document status |
date_created |
datetime |
When the document was created |
date_modified |
datetime |
When the document was last modified |
date_completed |
datetime |
When all signatures were collected |
expiration_date |
datetime |
When the document expires |
version |
string |
Document version number |
template |
object |
Source template reference |
recipients |
array |
List of document recipients |
tokens |
array |
Content token values |
pricing |
object |
Pricing tables and totals |
grand_total |
object |
Document total amount and currency |
tags |
array |
Document tags for organization |
folder_uuid |
string |
Folder the document belongs to |
Recipient Fields
| Field |
Type |
Description |
email |
string |
Recipient email address |
first_name |
string |
Recipient first name |
last_name |
string |
Recipient last name |
role |
string |
Recipient role (e.g., "Client", "Signer", "Approver") |
signing_order |
integer |
Order in which recipient signs (1, 2, 3...) |
has_completed |
boolean |
Whether recipient has completed their action |
Common Workflows
Create and Send a Proposal
- Find the appropriate template with
pandadoc-list-templates using q to search
- Call
pandadoc-create-document with template_uuid, name, recipients, and tokens
- Verify the document was created by calling
pandadoc-get-document with the returned id
- Call
pandadoc-send-document with id and an optional cover message
Check Document Status
- Search for the document with
pandadoc-list-documents using q set to the document name
- Call
pandadoc-get-document-status with id to get current status
- Review
recipients to see who has and has not signed
Download a Signed Document
- Verify the document status is
document.completed using pandadoc-get-document-status
- Call
pandadoc-download-document with id to get the signed PDF
Track All Sent Documents
- Call
pandadoc-list-documents with status=document.sent and count=100
- For each document, check
date_created to calculate age
- Flag documents that have been sent for more than 7 days without action
Void a Stale Proposal
- Find the document with
pandadoc-list-documents
- Verify it is in a sent or viewed state
- The document can be voided through the PandaDoc UI or API
Response Examples
Document:
{
"id": "msFYActMfJHqNTKH9tcPFa",
"name": "Acme Corp - Managed Services Agreement",
"status": "document.sent",
"date_created": "2026-01-15T10:30:00.000000Z",
"date_modified": "2026-01-16T14:22:00.000000Z",
"expiration_date": "2026-02-15T00:00:00.000000Z",
"version": "2",
"recipients": [
{
"email": "john@acme.com",
"first_name": "John",
"last_name": "Smith",
"role": "Client",
"signing_order": 1,
"has_completed": false
}
],
"grand_total": {
"amount": "5000.00",
"currency": "USD"
}
}
Document Status:
{
"id": "msFYActMfJHqNTKH9tcPFa",
"status": "document.viewed",
"date_created": "2026-01-15T10:30:00.000000Z",
"date_modified": "2026-01-17T09:15:00.000000Z"
}
Error Handling
Common Errors
| Error |
Cause |
Resolution |
| Document not found |
Invalid document ID |
Verify the ID with pandadoc-list-documents |
| Cannot send document |
Document not in draft status |
Check status -- only drafts can be sent |
| Cannot download |
Document not completed |
Wait for all recipients to sign |
| Template not found |
Invalid template UUID |
Verify with pandadoc-list-templates |
| Invalid recipient |
Missing or invalid email |
Ensure all recipients have valid email addresses |
| Token not found |
Token name does not match template |
Check template for exact token names |
Status Transition Errors
| Current Status |
Attempted Action |
Notes |
document.sent |
Create |
Document already exists -- modify or void instead |
document.completed |
Send |
Already completed -- download instead |
document.voided |
Send |
Cannot send a voided document -- create a new one |
document.expired |
Send |
Cannot send expired -- create a new document |
document.declined |
Send |
Recipient declined -- create a new document or void and recreate |
Best Practices
- Use templates - Always create documents from templates for consistency and branding
- Name documents clearly - Use a pattern like "Company Name - Document Type" for easy searching
- Set expiration dates - Add expiration to proposals to create urgency and keep pipeline clean
- Tag documents - Use tags for client name, document type, and project for easy filtering
- Include cover messages - Personalize the email when sending for signature
- Archive completed documents - Download and archive signed documents in your PSA or file system
- Use signing order - For multi-party agreements, set signing order to control the flow
- Track grand totals - Use the
grand_total field to track proposal values in your pipeline
Related Skills
1---2name: pandadoc-documents3description: PandaDoc document lifecycle end to end: creating documents from templates, sending for e-signature, status checks and PDF downloads, the full document status enum, MSP document types, content tokens, pricing-table structure, document and recipient fields, and status-transition errors.4---56# PandaDoc Document Management78## Overview910Documents in PandaDoc represent proposals, quotes, contracts, statements of work (SOWs), managed service agreements (MSAs), and any other business documents that need to be created, sent, signed, and tracked. MSPs use PandaDoc documents to formalize client engagements -- from initial proposals through signed contracts. Documents are typically created from templates, populated with client-specific content, sent for e-signature, and archived after completion.1112## Anti-triggers1314- **Choosing or inspecting the blueprint before a document exists** — use15 `pandadoc-templates`.16- **Who signs, in what order, and whether they have signed** — use17 `pandadoc-recipients`.18- **The MSP sales motion layered over these same tools** — proposal types,19 token conventions, and pipeline reporting are `pandadoc-proposals`.20- **Building or pricing the offer** — PandaDoc renders and sends an21 already-priced proposal; catalog and margin work happens in22 `salesbuildr-quotes`, `connectwise-cpq-quotes`, or23 `kaseya-quote-manager-quotes`.24- **Searching PandaDoc's developer documentation** — `pandadoc-search-docs`25 searches the docs site, not your account; use `pandadoc-api-patterns`.2627## MCP Tools2829### Available Tools3031| Tool | Description | Key Parameters |32|------|-------------|----------------|33| `pandadoc-list-documents` | List and filter documents | `status`, `q`, `tag`, `count`, `page`, `order_by`, `template_id`, `folder_uuid` |34| `pandadoc-get-document` | Get full document details | `id` (required) |35| `pandadoc-get-document-status` | Get document status | `id` (required) |36| `pandadoc-create-document` | Create a document from template | `template_uuid`, `name`, `recipients`, `tokens`, `fields`, `pricing_tables`, `folder_uuid` |37| `pandadoc-send-document` | Send a document for signature | `id` (required), `message`, `subject`, `silent` |38| `pandadoc-download-document` | Download a completed document | `id` (required) |3940### Create a Document4142Call `pandadoc-create-document` with:4344- **Template:** Set `template_uuid` to the template ID45- **Name:** Set `name` to the document title (e.g., "Acme Corp - Managed Services Agreement")46- **Recipients:** Provide `recipients` array with `email`, `first_name`, `last_name`, `role`, and optionally `signing_order`47- **Content tokens:** Set `tokens` array with `name` and `value` pairs to populate template variables48- **Pricing tables:** Set `pricing_tables` to populate line items with services and pricing49- **Folder:** Optionally set `folder_uuid` to organize the document5051**Example: Create an MSA from template:**52- `pandadoc-create-document` with `template_uuid=abc123`, `name="Acme Corp - MSA"`, `recipients=[{"email":"john@acme.com","first_name":"John","last_name":"Smith","role":"Client"}]`, `tokens=[{"name":"Client.Company","value":"Acme Corporation"}]`5354### List Documents5556Call `pandadoc-list-documents` with optional parameters:5758- **Search by name:** Set `q` to a document name or keyword59- **Filter by status:** Set `status` to a document status value (see status reference below)60- **Filter by tag:** Set `tag` to a document tag61- **Sort:** Set `order_by` to `date_created`, `date_modified`, `name`, or `date_status_changed`62- **Paginate:** Set `page` (1-based) and `count` (up to 100)6364**Example: List all sent documents:**65- `pandadoc-list-documents` with `status=document.sent`, `count=100`6667**Example: Search for a client's documents:**68- `pandadoc-list-documents` with `q=Acme Corp`, `count=100`6970### Get Document Details7172Call `pandadoc-get-document` with the `id` parameter to get full document details including recipients, tokens, pricing, and metadata.7374### Check Document Status7576Call `pandadoc-get-document-status` with the `id` parameter to get the current status and recipient completion information.7778### Send a Document7980Call `pandadoc-send-document` with:8182- **Document ID:** Set `id` to the document ID (required)83- **Message:** Optionally set `message` for the email body84- **Subject:** Optionally set `subject` for the email subject line85- **Silent:** Set `silent=true` to create a signing link without sending an email8687**Example: Send with a cover message:**88- `pandadoc-send-document` with `id=msFYActMfJHqNTKH9tcPFa`, `message="Please review and sign the attached managed services agreement."`, `subject="MSA for your review - Acme Corp"`8990### Download a Document9192Call `pandadoc-download-document` with the `id` parameter to download the completed, signed document as a PDF.9394## Key Concepts9596### Document Lifecycle9798```99Template --> Create (Draft) --> Send --> Viewed --> Completed (Signed)100 | | |101 waiting_approval declined download102 | rejected103 approved expired104 |105 voided106```107108### Document Statuses109110| Status | API Value | Description |111|--------|-----------|-------------|112| Draft | `document.draft` | Created but not yet sent to recipients |113| Sent | `document.sent` | Sent to recipients, awaiting action |114| Completed | `document.completed` | All recipients have signed |115| Viewed | `document.viewed` | At least one recipient has opened the document |116| Waiting Approval | `document.waiting_approval` | Internal approval required before sending |117| Approved | `document.approved` | Internal approval granted |118| Rejected | `document.rejected` | Internal approval rejected |119| Waiting Payment | `document.waiting_pay` | Payment collection pending |120| Paid | `document.paid` | Payment collected |121| Voided | `document.voided` | Document cancelled/voided after sending |122| Declined | `document.declined` | Recipient declined to sign |123| Expired | `document.expired` | Document passed its expiration date |124125### Document Types for MSPs126127| Type | Description | Typical Template |128|------|-------------|-----------------|129| MSA | Managed Service Agreement | Long-term IT management contract |130| SOW | Statement of Work | Project-specific deliverables and scope |131| Proposal | Service proposal | Proposed services with pricing |132| Quote | Hardware/software quote | Line-item pricing for products |133| NDA | Non-disclosure agreement | Confidentiality before engagement |134| Change Order | Scope change request | Modifications to existing agreements |135136### Content Tokens137138Tokens are template variables that get replaced with client-specific values when creating a document:139140| Token Pattern | Example Value | Use Case |141|---------------|---------------|----------|142| `Client.Company` | Acme Corporation | Client company name |143| `Client.Name` | John Smith | Client contact name |144| `Client.Email` | john@acme.com | Client email |145| `Client.Address` | 123 Main St, Springfield, IL | Client address |146| `MSP.Company` | TechForce IT Solutions | Your MSP name |147| `Contract.StartDate` | March 1, 2026 | Agreement start date |148| `Contract.Term` | 12 months | Agreement duration |149| `Contract.Value` | $5,000/month | Monthly recurring revenue |150151### Pricing Tables152153Pricing tables contain line items for services and products:154155```json156{157 "pricing_tables": [158 {159 "name": "Services",160 "sections": [161 {162 "rows": [163 {164 "options": {165 "optional": false,166 "optional_selected": true167 },168 "data": {169 "name": "Managed IT Services - Per User",170 "description": "24/7 monitoring, helpdesk, patching, endpoint security",171 "price": 125.00,172 "qty": 50,173 "discount": 0174 }175 },176 {177 "data": {178 "name": "Backup & Disaster Recovery",179 "description": "Cloud backup with 1-hour RPO, 4-hour RTO",180 "price": 250.00,181 "qty": 1,182 "discount": 0183 }184 }185 ]186 }187 ]188 }189 ]190}191```192193## Field Reference194195### Document Fields196197| Field | Type | Description |198|-------|------|-------------|199| `id` | string | Document unique identifier |200| `name` | string | Document display name |201| `status` | string | Current document status |202| `date_created` | datetime | When the document was created |203| `date_modified` | datetime | When the document was last modified |204| `date_completed` | datetime | When all signatures were collected |205| `expiration_date` | datetime | When the document expires |206| `version` | string | Document version number |207| `template` | object | Source template reference |208| `recipients` | array | List of document recipients |209| `tokens` | array | Content token values |210| `pricing` | object | Pricing tables and totals |211| `grand_total` | object | Document total amount and currency |212| `tags` | array | Document tags for organization |213| `folder_uuid` | string | Folder the document belongs to |214215### Recipient Fields216217| Field | Type | Description |218|-------|------|-------------|219| `email` | string | Recipient email address |220| `first_name` | string | Recipient first name |221| `last_name` | string | Recipient last name |222| `role` | string | Recipient role (e.g., "Client", "Signer", "Approver") |223| `signing_order` | integer | Order in which recipient signs (1, 2, 3...) |224| `has_completed` | boolean | Whether recipient has completed their action |225226## Common Workflows227228### Create and Send a Proposal2292301. Find the appropriate template with `pandadoc-list-templates` using `q` to search2312. Call `pandadoc-create-document` with `template_uuid`, `name`, `recipients`, and `tokens`2323. Verify the document was created by calling `pandadoc-get-document` with the returned `id`2334. Call `pandadoc-send-document` with `id` and an optional cover `message`234235### Check Document Status2362371. Search for the document with `pandadoc-list-documents` using `q` set to the document name2382. Call `pandadoc-get-document-status` with `id` to get current status2393. Review `recipients` to see who has and has not signed240241### Download a Signed Document2422431. Verify the document status is `document.completed` using `pandadoc-get-document-status`2442. Call `pandadoc-download-document` with `id` to get the signed PDF245246### Track All Sent Documents2472481. Call `pandadoc-list-documents` with `status=document.sent` and `count=100`2492. For each document, check `date_created` to calculate age2503. Flag documents that have been sent for more than 7 days without action251252### Void a Stale Proposal2532541. Find the document with `pandadoc-list-documents`2552. Verify it is in a sent or viewed state2563. The document can be voided through the PandaDoc UI or API257258## Response Examples259260**Document:**261262```json263{264 "id": "msFYActMfJHqNTKH9tcPFa",265 "name": "Acme Corp - Managed Services Agreement",266 "status": "document.sent",267 "date_created": "2026-01-15T10:30:00.000000Z",268 "date_modified": "2026-01-16T14:22:00.000000Z",269 "expiration_date": "2026-02-15T00:00:00.000000Z",270 "version": "2",271 "recipients": [272 {273 "email": "john@acme.com",274 "first_name": "John",275 "last_name": "Smith",276 "role": "Client",277 "signing_order": 1,278 "has_completed": false279 }280 ],281 "grand_total": {282 "amount": "5000.00",283 "currency": "USD"284 }285}286```287288**Document Status:**289290```json291{292 "id": "msFYActMfJHqNTKH9tcPFa",293 "status": "document.viewed",294 "date_created": "2026-01-15T10:30:00.000000Z",295 "date_modified": "2026-01-17T09:15:00.000000Z"296}297```298299## Error Handling300301### Common Errors302303| Error | Cause | Resolution |304|-------|-------|------------|305| Document not found | Invalid document ID | Verify the ID with `pandadoc-list-documents` |306| Cannot send document | Document not in draft status | Check status -- only drafts can be sent |307| Cannot download | Document not completed | Wait for all recipients to sign |308| Template not found | Invalid template UUID | Verify with `pandadoc-list-templates` |309| Invalid recipient | Missing or invalid email | Ensure all recipients have valid email addresses |310| Token not found | Token name does not match template | Check template for exact token names |311312### Status Transition Errors313314| Current Status | Attempted Action | Notes |315|----------------|-----------------|-------|316| `document.sent` | Create | Document already exists -- modify or void instead |317| `document.completed` | Send | Already completed -- download instead |318| `document.voided` | Send | Cannot send a voided document -- create a new one |319| `document.expired` | Send | Cannot send expired -- create a new document |320| `document.declined` | Send | Recipient declined -- create a new document or void and recreate |321322## Best Practices3233241. **Use templates** - Always create documents from templates for consistency and branding3252. **Name documents clearly** - Use a pattern like "Company Name - Document Type" for easy searching3263. **Set expiration dates** - Add expiration to proposals to create urgency and keep pipeline clean3274. **Tag documents** - Use tags for client name, document type, and project for easy filtering3285. **Include cover messages** - Personalize the email when sending for signature3296. **Archive completed documents** - Download and archive signed documents in your PSA or file system3307. **Use signing order** - For multi-party agreements, set signing order to control the flow3318. **Track grand totals** - Use the `grand_total` field to track proposal values in your pipeline332333## Related Skills334335- [PandaDoc API Patterns](../api-patterns/SKILL.md) - MCP tools reference and connection info336- [PandaDoc Templates](../templates/SKILL.md) - Template library and management337- [PandaDoc Recipients](../recipients/SKILL.md) - Recipient and signature management338- [PandaDoc Proposals](../proposals/SKILL.md) - MSP proposal workflows