PandaDoc MCP Tools & API Patterns
Overview
PandaDoc provides a hosted MCP server at https://developers.pandadoc.com/mcp for AI tool integration. The MCP server provides direct API access to PandaDoc's document automation platform, documentation search, and code generation assistance.
Anti-triggers
- Your own documents —
pandadoc-search-docs and
pandadoc-get-code-sample search PandaDoc's developer documentation, not
your PandaDoc account; use pandadoc-documents.
- Document status values and what each transition allows — use
pandadoc-documents.
Connection & Authentication
MCP Server
PandaDoc hosts an official MCP server. Authentication uses an API key passed via the Authorization header:
- Log into app.pandadoc.com
- Navigate to Settings > Integrations > API
- Generate an API key
MCP Server URL: https://developers.pandadoc.com/mcp
Required Header:
| Header |
Value |
Description |
Authorization |
API-Key <key> |
API key from PandaDoc Settings |
Authentication Modes
| Mode |
Auth Required |
Use Case |
| Documentation search |
No |
Browsing PandaDoc API docs and guides |
| Code generation assistance |
No |
Generating code snippets for PandaDoc integration |
| Live API calls |
Yes |
Creating documents, sending for signature, checking status |
Note: Documentation search and code generation work without an API key. All live API operations (creating documents, managing templates, sending for signature) require a valid API key.
Environment Variables
export PANDADOC_API_KEY="your-api-key"
Claude Desktop Configuration
{
"mcpServers": {
"pandadoc": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://developers.pandadoc.com/mcp",
"--header", "Authorization:API-Key YOUR_API_KEY"
]
}
}
}
Complete MCP Tool Reference
Document Tools
| Tool |
Description |
Key Parameters |
pandadoc-list-documents |
List and filter documents |
status, q (search query), tag, count, page, order_by, template_id, folder_uuid |
pandadoc-get-document |
Get a single document's 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) |
Template Tools
| Tool |
Description |
Key Parameters |
pandadoc-list-templates |
List available templates |
q (search query), count, page, tag, folder_uuid |
pandadoc-get-template |
Get template details |
id (required) |
Recipient Tools
| Tool |
Description |
Key Parameters |
pandadoc-add-recipient |
Add a recipient to a document |
document_id (required), email, first_name, last_name, role, signing_order |
Documentation Tools
| Tool |
Description |
Key Parameters |
pandadoc-search-docs |
Search PandaDoc API documentation |
query (required) |
pandadoc-get-code-sample |
Generate code samples |
endpoint, language |
Pagination
Page-Based Pagination
List tools use 1-based page pagination with configurable count:
Pagination Parameters:
| Parameter |
Description |
Default |
Max |
page |
Page number (1-based) |
1 |
- |
count |
Results per page |
50 |
100 |
Iterating Through All Pages
To fetch all results, call the list tool repeatedly, incrementing page from 1 until the number of results returned is less than count:
- Call the tool with
page=1 and count=100
- If the response contains 100 results, call again with
page=2
- Continue until fewer than 100 results are returned
- Collect results from each response
Filtering & Sorting
Document Filters
| Parameter |
Values |
Description |
status |
document.draft, document.sent, document.completed, document.viewed, document.waiting_approval, document.approved, document.rejected, document.waiting_pay, document.paid, document.voided, document.declined, document.expired |
Filter by document status |
q |
string |
Search documents by name |
tag |
string |
Filter by document tag |
template_id |
UUID |
Filter by source template |
folder_uuid |
UUID |
Filter by folder |
order_by |
date_created, date_modified, name, date_status_changed |
Sort field |
Template Filters
| Parameter |
Values |
Description |
q |
string |
Search templates by name |
tag |
string |
Filter by template tag |
folder_uuid |
UUID |
Filter by folder |
Response Format
Single 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
}
],
"tokens": [
{
"name": "Client.Company",
"value": "Acme Corporation"
}
],
"grand_total": {
"amount": "2500.00",
"currency": "USD"
}
}
Paginated Document List:
{
"results": [
{
"id": "msFYActMfJHqNTKH9tcPFa",
"name": "Acme Corp - Managed Services Agreement",
"status": "document.sent",
"date_created": "2026-01-15T10:30:00.000000Z"
}
]
}
Rate Limiting
Rate Limit Details
| Plan |
Limit |
| Business |
300 requests per minute |
| Enterprise |
600 requests per minute |
When rate limited, the API returns HTTP 429. Wait before retrying. Use exponential backoff for automated retries.
Rate Limit Best Practices
- Batch operations - Minimize total API calls by using filters and pagination efficiently
- Cache template data - Templates change infrequently; cache for minutes to hours
- Avoid polling - Use webhooks where possible instead of repeatedly checking document status
- Stagger requests - When processing multiple documents, add small delays between calls
Error Handling
Common Errors
| Error |
HTTP Code |
Cause |
Resolution |
| Unauthorized |
401 |
Invalid or missing API key |
Check PANDADOC_API_KEY and regenerate if needed |
| Forbidden |
403 |
Insufficient permissions |
Verify API key has required access scope |
| Not Found |
404 |
Document/template ID does not exist |
Verify the resource ID |
| Rate Limited |
429 |
Too many requests |
Wait and retry with exponential backoff |
| Validation Error |
422 |
Invalid request parameters |
Check required fields and parameter formats |
| Server Error |
500 |
PandaDoc internal error |
Retry after a brief delay |
Troubleshooting MCP Connection
- Verify API key - Ensure the API key is valid and not revoked
- Check URL - MCP server URL must be
https://developers.pandadoc.com/mcp
- Test with docs search - Try
pandadoc-search-docs (no auth required) to verify connectivity
- Test with a simple call - Try
pandadoc-list-documents with count=1 to verify authentication
- Regenerate key - If authentication fails, generate a new key from PandaDoc Settings > API
Best Practices
- Use template-based creation - Always create documents from templates for consistency
- Filter server-side - Use
status, q, and tag parameters to narrow results
- Use document tags - Tag documents by client, type, or project for easy filtering
- Check status before sending - Verify a document is in
draft status before sending
- Use content tokens - Populate template variables (tokens) to personalize documents
- Set expiration dates - Use expiration dates on proposals to create urgency
- Track recipient completion - Check
has_completed for each recipient to monitor progress
- Download completed documents - Archive signed documents after completion
- Use folders - Organize templates and documents in folders for better management
Related Skills
1---2name: pandadoc-api-patterns3description: PandaDoc hosted MCP server and API fundamentals: API-key authentication and which operations work without a key, the complete MCP tool catalog (documents, templates, recipients, docs search, code samples), page-based pagination, document and template filters, rate limits per plan, and error codes.4---56# PandaDoc MCP Tools & API Patterns78## Overview910PandaDoc provides a hosted MCP server at `https://developers.pandadoc.com/mcp` for AI tool integration. The MCP server provides direct API access to PandaDoc's document automation platform, documentation search, and code generation assistance.1112## Anti-triggers1314- **Your own documents** — `pandadoc-search-docs` and15 `pandadoc-get-code-sample` search PandaDoc's developer documentation, not16 your PandaDoc account; use `pandadoc-documents`.17- **Document status values and what each transition allows** — use18 `pandadoc-documents`.1920## Connection & Authentication2122### MCP Server2324PandaDoc hosts an official MCP server. Authentication uses an API key passed via the Authorization header:25261. Log into [app.pandadoc.com](https://app.pandadoc.com)272. Navigate to **Settings > Integrations > API**283. Generate an API key2930**MCP Server URL:** `https://developers.pandadoc.com/mcp`3132**Required Header:**3334| Header | Value | Description |35|--------|-------|-------------|36| `Authorization` | `API-Key <key>` | API key from PandaDoc Settings |3738### Authentication Modes3940| Mode | Auth Required | Use Case |41|------|---------------|----------|42| Documentation search | No | Browsing PandaDoc API docs and guides |43| Code generation assistance | No | Generating code snippets for PandaDoc integration |44| Live API calls | Yes | Creating documents, sending for signature, checking status |4546> **Note:** Documentation search and code generation work without an API key. All live API operations (creating documents, managing templates, sending for signature) require a valid API key.4748### Environment Variables4950```bash51export PANDADOC_API_KEY="your-api-key"52```5354### Claude Desktop Configuration5556```json57{58 "mcpServers": {59 "pandadoc": {60 "command": "npx",61 "args": [62 "-y", "mcp-remote",63 "https://developers.pandadoc.com/mcp",64 "--header", "Authorization:API-Key YOUR_API_KEY"65 ]66 }67 }68}69```7071## Complete MCP Tool Reference7273### Document Tools7475| Tool | Description | Key Parameters |76|------|-------------|----------------|77| `pandadoc-list-documents` | List and filter documents | `status`, `q` (search query), `tag`, `count`, `page`, `order_by`, `template_id`, `folder_uuid` |78| `pandadoc-get-document` | Get a single document's details | `id` (required) |79| `pandadoc-get-document-status` | Get document status | `id` (required) |80| `pandadoc-create-document` | Create a document from template | `template_uuid`, `name`, `recipients`, `tokens`, `fields`, `pricing_tables`, `folder_uuid` |81| `pandadoc-send-document` | Send a document for signature | `id` (required), `message`, `subject`, `silent` |82| `pandadoc-download-document` | Download a completed document | `id` (required) |8384### Template Tools8586| Tool | Description | Key Parameters |87|------|-------------|----------------|88| `pandadoc-list-templates` | List available templates | `q` (search query), `count`, `page`, `tag`, `folder_uuid` |89| `pandadoc-get-template` | Get template details | `id` (required) |9091### Recipient Tools9293| Tool | Description | Key Parameters |94|------|-------------|----------------|95| `pandadoc-add-recipient` | Add a recipient to a document | `document_id` (required), `email`, `first_name`, `last_name`, `role`, `signing_order` |9697### Documentation Tools9899| Tool | Description | Key Parameters |100|------|-------------|----------------|101| `pandadoc-search-docs` | Search PandaDoc API documentation | `query` (required) |102| `pandadoc-get-code-sample` | Generate code samples | `endpoint`, `language` |103104## Pagination105106### Page-Based Pagination107108List tools use 1-based page pagination with configurable count:109110**Pagination Parameters:**111112| Parameter | Description | Default | Max |113|-----------|-------------|---------|-----|114| `page` | Page number (1-based) | 1 | - |115| `count` | Results per page | 50 | 100 |116117### Iterating Through All Pages118119To fetch all results, call the list tool repeatedly, incrementing `page` from 1 until the number of results returned is less than `count`:1201211. Call the tool with `page=1` and `count=100`1222. If the response contains 100 results, call again with `page=2`1233. Continue until fewer than 100 results are returned1244. Collect results from each response125126## Filtering & Sorting127128### Document Filters129130| Parameter | Values | Description |131|-----------|--------|-------------|132| `status` | `document.draft`, `document.sent`, `document.completed`, `document.viewed`, `document.waiting_approval`, `document.approved`, `document.rejected`, `document.waiting_pay`, `document.paid`, `document.voided`, `document.declined`, `document.expired` | Filter by document status |133| `q` | string | Search documents by name |134| `tag` | string | Filter by document tag |135| `template_id` | UUID | Filter by source template |136| `folder_uuid` | UUID | Filter by folder |137| `order_by` | `date_created`, `date_modified`, `name`, `date_status_changed` | Sort field |138139### Template Filters140141| Parameter | Values | Description |142|-----------|--------|-------------|143| `q` | string | Search templates by name |144| `tag` | string | Filter by template tag |145| `folder_uuid` | UUID | Filter by folder |146147## Response Format148149**Single Document:**150151```json152{153 "id": "msFYActMfJHqNTKH9tcPFa",154 "name": "Acme Corp - Managed Services Agreement",155 "status": "document.sent",156 "date_created": "2026-01-15T10:30:00.000000Z",157 "date_modified": "2026-01-16T14:22:00.000000Z",158 "expiration_date": "2026-02-15T00:00:00.000000Z",159 "version": "2",160 "recipients": [161 {162 "email": "john@acme.com",163 "first_name": "John",164 "last_name": "Smith",165 "role": "Client",166 "signing_order": 1,167 "has_completed": false168 }169 ],170 "tokens": [171 {172 "name": "Client.Company",173 "value": "Acme Corporation"174 }175 ],176 "grand_total": {177 "amount": "2500.00",178 "currency": "USD"179 }180}181```182183**Paginated Document List:**184185```json186{187 "results": [188 {189 "id": "msFYActMfJHqNTKH9tcPFa",190 "name": "Acme Corp - Managed Services Agreement",191 "status": "document.sent",192 "date_created": "2026-01-15T10:30:00.000000Z"193 }194 ]195}196```197198## Rate Limiting199200### Rate Limit Details201202| Plan | Limit |203|------|-------|204| Business | 300 requests per minute |205| Enterprise | 600 requests per minute |206207When rate limited, the API returns HTTP 429. Wait before retrying. Use exponential backoff for automated retries.208209### Rate Limit Best Practices2102111. **Batch operations** - Minimize total API calls by using filters and pagination efficiently2122. **Cache template data** - Templates change infrequently; cache for minutes to hours2133. **Avoid polling** - Use webhooks where possible instead of repeatedly checking document status2144. **Stagger requests** - When processing multiple documents, add small delays between calls215216## Error Handling217218### Common Errors219220| Error | HTTP Code | Cause | Resolution |221|-------|-----------|-------|------------|222| Unauthorized | 401 | Invalid or missing API key | Check `PANDADOC_API_KEY` and regenerate if needed |223| Forbidden | 403 | Insufficient permissions | Verify API key has required access scope |224| Not Found | 404 | Document/template ID does not exist | Verify the resource ID |225| Rate Limited | 429 | Too many requests | Wait and retry with exponential backoff |226| Validation Error | 422 | Invalid request parameters | Check required fields and parameter formats |227| Server Error | 500 | PandaDoc internal error | Retry after a brief delay |228229### Troubleshooting MCP Connection2302311. **Verify API key** - Ensure the API key is valid and not revoked2322. **Check URL** - MCP server URL must be `https://developers.pandadoc.com/mcp`2333. **Test with docs search** - Try `pandadoc-search-docs` (no auth required) to verify connectivity2344. **Test with a simple call** - Try `pandadoc-list-documents` with `count=1` to verify authentication2355. **Regenerate key** - If authentication fails, generate a new key from PandaDoc Settings > API236237## Best Practices2382391. **Use template-based creation** - Always create documents from templates for consistency2402. **Filter server-side** - Use `status`, `q`, and `tag` parameters to narrow results2413. **Use document tags** - Tag documents by client, type, or project for easy filtering2424. **Check status before sending** - Verify a document is in `draft` status before sending2435. **Use content tokens** - Populate template variables (tokens) to personalize documents2446. **Set expiration dates** - Use expiration dates on proposals to create urgency2457. **Track recipient completion** - Check `has_completed` for each recipient to monitor progress2468. **Download completed documents** - Archive signed documents after completion2479. **Use folders** - Organize templates and documents in folders for better management248249## Related Skills250251- [PandaDoc Documents](../documents/SKILL.md) - Document management252- [PandaDoc Templates](../templates/SKILL.md) - Template library253- [PandaDoc Recipients](../recipients/SKILL.md) - Recipient and signature management254- [PandaDoc Proposals](../proposals/SKILL.md) - MSP proposal workflows