From pandadoc
Manages PandaDoc documents: creates proposals, quotes, contracts, SOWs, MSAs from templates; sends for e-signature; checks status; downloads signed copies; handles full lifecycle with tokens and pricing tables.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin pandadocThis skill uses the workspace's default tool permissions.
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-specif...
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Generates or updates index.md listing all files and subdirectories in a target folder with 3-10 word descriptions from file contents. Use for indexing documentation directories.
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.
| 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) |
Call pandadoc-create-document with:
template_uuid to the template IDname to the document title (e.g., "Acme Corp - Managed Services Agreement")recipients array with email, first_name, last_name, role, and optionally signing_ordertokens array with name and value pairs to populate template variablespricing_tables to populate line items with services and pricingfolder_uuid to organize the documentExample: 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"}]Call pandadoc-list-documents with optional parameters:
q to a document name or keywordstatus to a document status value (see status reference below)tag to a document tagorder_by to date_created, date_modified, name, or date_status_changedpage (1-based) and count (up to 100)Example: List all sent documents:
pandadoc-list-documents with status=document.sent, count=100Example: Search for a client's documents:
pandadoc-list-documents with q=Acme Corp, count=100Call pandadoc-get-document with the id parameter to get full document details including recipients, tokens, pricing, and metadata.
Call pandadoc-get-document-status with the id parameter to get the current status and recipient completion information.
Call pandadoc-send-document with:
id to the document ID (required)message for the email bodysubject for the email subject linesilent=true to create a signing link without sending an emailExample: 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"Call pandadoc-download-document with the id parameter to download the completed, signed document as a PDF.
Template --> Create (Draft) --> Send --> Viewed --> Completed (Signed)
| | |
waiting_approval declined download
| rejected
approved expired
|
voided
| 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 |
| 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 |
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 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 | 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 |
| 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 |
pandadoc-list-templates using q to searchpandadoc-create-document with template_uuid, name, recipients, and tokenspandadoc-get-document with the returned idpandadoc-send-document with id and an optional cover messagepandadoc-list-documents using q set to the document namepandadoc-get-document-status with id to get current statusrecipients to see who has and has not signeddocument.completed using pandadoc-get-document-statuspandadoc-download-document with id to get the signed PDFpandadoc-list-documents with status=document.sent and count=100date_created to calculate agepandadoc-list-documentsDocument:
{
"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 | 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 |
| 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 |
grand_total field to track proposal values in your pipeline