Design a PandaDoc template with named merge-field tokens (double-brace syntax, e.g., for party names, effective dates, and custom clauses) and a pricing table with at least one editable line-item row
POST to /documents with a content.id referencing the template and a fields object mapping each token name to its value, plus a pricing_tables array that supplies the dynamic line items (name, price, quantity, tax rate) for the pricing table block
Include a recipients array with each signer's email, name, and role, and set the status to document.draft or send immediately depending on whether a review step is needed before sending
Poll GET /documents/{documentId} or subscribe to a document_state_changed webhook event to detect when the document reaches a completed state
On completion, call GET /documents/{documentId}/download to retrieve the signed PDF with all merge fields rendered and pricing table totals calculated
Known gotchas
PandaDoc merge field token names are case-sensitive and must exactly match the token names defined in the template; a mismatched token name silently leaves the placeholder text unrendered in the output document
Dynamic pricing table rows supplied via API do not automatically apply catalog pricing rules or discounts defined in the PandaDoc product catalog unless a catalog_item_id is referenced; custom pricing rows bypass catalog constraints entirely
PandaDoc enforces a document creation rate limit; rapidly POSTing many documents in a loop without throttling will cause 429 errors, and documents that fail mid-creation may leave orphaned draft records that count against the account quota
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp