skills/pandadoc/SKILL.md
Create, send, and manage documents with e-signatures via PandaDoc API. Full document lifecycle management including templates, webhooks, and embedded signing.
npx skillsauth add tippyentertainment/skills pandadocInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Complete integration with PandaDoc Public API for document creation, e-signature workflows, template management, and webhook automation.
PandaDoc is a document automation platform that enables:
PandaDoc supports two authentication methods:
Authorization: API-Key {{api_key}}
How to obtain:
Sandbox API Key: Use during development/free trial. Sender and recipient emails must be from the same domain.
Production API Key: Use for live integrations with real documents.
Authorization: Bearer {{oauth_token}}
OAuth Flow:
client_id, redirect_uri, and statecodecode for access_token and refresh_tokenaccess_token in Authorization headerhttps://api.pandadoc.com/public/v1
| Value | Status | Description | |-------|--------|-------------| | 0 | document.draft | Document is in draft state | | 1 | document.sent | Document has been sent | | 2 | document.completed | Document is completed | | 3 | document.uploaded | Document uploaded | | 4 | document.error | Document has an error | | 5 | document.viewed | Document has been viewed | | 6 | document.waiting_approval | Document is waiting for approval | | 7 | document.approved | Document has been approved | | 8 | document.rejected | Document has been rejected | | 9 | document.waiting_pay | Document is waiting for payment | | 10 | document.paid | Document has been paid | | 11 | document.voided | Document has been voided | | 12 | document.declined | Document has been declined | | 13 | document.external_review | Document is under external review |
Retrieve all documents with filtering options.
Endpoint: GET /documents
Parameters:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | id | string | No | Filter by specific document ID | | template_id | string | No | Filter by parent template ID | | form_id | string | No | Filter by parent form ID | | q | string | No | Search by document name or reference number | | membership_id | string | No | Filter by document owner's membership ID | | contact_id | string | No | Filter by recipient or approver contact ID | | status | integer | No | Filter by document status (see status values) | | status__ne | integer | No | Exclude documents with specified status | | folder_uuid | string | No | Filter by folder UUID | | tag | string | No | Filter by document tag | | metadata | object | No | Filter by metadata key-value pairs | | completed_from | datetime | No | Include documents completed after this date | | completed_to | datetime | No | Include documents completed before this date | | created_from | datetime | No | Include documents created after this date | | created_to | datetime | No | Include documents created before this date | | modified_from | datetime | No | Include documents modified after this date | | modified_to | datetime | No | Include documents modified before this date | | deleted | boolean | No | Include only deleted documents when true | | count | integer | No | Number of results per page (max: 100, default: 50) | | page | integer | No | Page number (starts from 1) | | order_by | string | No | Field to order results by |
Create a new document from an existing PandaDoc template.
Endpoint: POST /documents
Request Body:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | template_uuid | string | Yes | The ID of the template to use | | name | string | No | Document name | | folder_uuid | string | No | Folder UUID to store document | | owner | object | No | Document owner (email or membership_id) | | recipients | array | Yes | List of recipients | | fields | object | No | Field values to pre-fill | | tokens | array | No | Variables to populate | | metadata | object | No | Custom key-value data | | tags | array | No | Document tags |
Recipient Object:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | email | string | Yes* | Recipient email (or phone) | | phone | string | Yes | Recipient phone (*or email) | | first_name | string | No | Recipient first name | | last_name | string | No | Recipient last name | | role | string | No | Role name from template | | signing_order | integer | No | Order for sequential signing |
Send a document to recipients for signature.
Endpoint: POST /documents/{id}/send
Request Body:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | message | string | No | Email message to recipients | | subject | string | No | Email subject line | | silent | boolean | No | If true, disables email notifications | | sender | object | No | Sender email or membership_id |
Important Notes:
document.draft statusdocument.uploaded status for 3-5 secondsDownload a document as PDF.
Endpoint: GET /documents/{id}/download
Download the completed (signed) version.
Endpoint: GET /documents/{id}/download-completed
Delete a document.
Endpoint: DELETE /documents/{id}
Update document properties.
Endpoint: PATCH /documents/{id}
Retrieve all templates.
Endpoint: GET /templates
Create a new template from a PDF or DOCX file.
Endpoint: POST /templates
Retrieve template information.
Endpoint: GET /templates/{id}
Delete a template.
Endpoint: DELETE /templates/{id}
Retrieve all webhook subscriptions.
Endpoint: GET /webhook-subscriptions
Subscribe to document events.
Endpoint: POST /webhook-subscriptions
Request Body:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | url | string | Yes | Webhook endpoint URL | | events | array | Yes | Array of event types to subscribe to | | shared_key | string | No | Secret key for webhook signature verification |
Available Events:
| Event | Description | |-------|-------------| | document_created | Document created | | document_state_changed | Document status changed | | document_deleted | Document deleted | | document_updated | Document updated | | document_creation_failed | Document creation failed | | recipient_completed | Recipient completed signing | | document_completed_pdf_ready | Completed PDF available | | quote_updated | Quote updated | | template_created | Template created | | template_updated | Template updated | | template_deleted | Template deleted |
Headers:
Content-Type: application/json
X-PandaDoc-Signature: sha256=...
X-PandaDoc-Timestamp: 2024-01-15T10:30:00Z
Node.js Example:
const crypto = require('crypto');
function verifyWebhook(payload, signature, sharedKey) {
const expectedSignature = 'sha256=' +
crypto
.createHmac('sha256', sharedKey)
.update(JSON.stringify(payload))
.digest('hex');
return signature === expectedSignature;
}
Create an embedded signing session for in-app signing.
Endpoint: POST /documents/{id}/session/embedded-sign
Request Body:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | recipient | string | Yes | Recipient email or ID | | redirect_url | string | No | URL to redirect after signing |
Add a recipient to a document.
Endpoint: POST /documents/{id}/recipients
Update recipient information.
Endpoint: PATCH /documents/{id}/recipients/{recipient_id}
Remove a recipient from a document.
Endpoint: DELETE /documents/{id}/recipients/{recipient_id}
Endpoint: GET /documents/folders
Endpoint: POST /documents/folders
Endpoint: GET /contacts
Endpoint: POST /contacts
GET /templatesPOST /documentsPOST /documents/{id}/sendGET /documents/{id}/download-completedPOST /documentsPOST /documents/{id}/send with silent: truePOST /documents/{id}/session/embedded-signPOST /webhook-subscriptions| Code | Description | |------|-------------| | 200 | Success | | 201 | Created | | 400 | Bad Request - Invalid parameters | | 401 | Authentication error - Invalid API key | | 403 | Permission error - Insufficient permissions | | 404 | Not found - Resource doesn't exist | | 409 | Conflict - Resource state conflict | | 429 | Too Many Requests - Rate limit exceeded |
date_created ordering for consistent pagination resultspip install pandadoc-api-clientnpm install @pandadoc/node-clientgem install pandadoc_apiImport the official PandaDoc Postman collection from the Developer Portal.
action: create_document
params: {
"template_uuid": "iMymdDd9XFD3HyxP5VD67Q",
"name": "NDA - Client",
"recipients": [{"email": "[email protected]", "role": "Signer"}]
}
action: send_document
params: {
"document_id": "xyz789abc",
"subject": "Please sign",
"message": "Review and sign the attached document."
}
action: create_webhook
params: {
"url": "https://your-server.com/webhooks/pandadoc",
"events": ["document_state_changed", "recipient_completed"]
}
development
A top-tier product/UI designer skill that uses Tailwind v4 plus Google Gemini Nano Banana image models to craft visually stunning, “award‑winning” marketing sites and apps with strong art direction, motion, and systems thinking.
development
Meticulously detect and fix missing React/TSX imports, undefined components, and bundler runtime errors in the WASM SPA build/preview pipeline. Ensures JSX components, icons, and hooks are properly imported or defined before running the browser preview, so the runtime safety-net rarely triggers.
development
Debug and auto-fix Vite projects running inside WebContainers: resolve mount/root issues, alias/path errors, missing scripts, and other common dev-time problems so the app boots cleanly.
tools
Diagnose and fix Vite + React 19 configuration issues for TypeScript SPA and WASM preview builds. Specializes in React 19’s JSX runtime, @vitejs/plugin-react, path aliases, SPA routing, and dev-server behavior so the app and in-browser preview bundle cleanly without manual trial-and-error.