PandaDoc
Generate, send, and track quotes and proposals via the PandaDoc REST API.
This tool lists documents, reads a document's status/details, creates a
document from a template, and sends a document for signature. It uses the
Python standard library only (no requests), and every call returns the raw
PandaDoc response body plus the HTTP status code.
- Base URL:
https://api.pandadoc.com/public/v1 - Auth:
Authorization: API-Key <apiKey>(a single API key — no OAuth flow required)
Operations
| operation | method + path | required inputs | optional inputs |
|---|---|---|---|
list_documents |
GET /documents |
— | status, count, query |
get_document |
GET /documents/{id} |
documentId |
— |
create_document |
POST /documents |
name, templateUuid, recipientEmail |
recipientFirstName, recipientLastName, recipientRole |
send_document |
POST /documents/{id}/send |
documentId |
subject, message, silent |
Notes:
- list_documents status is a PandaDoc status code (0–13); count defaults
to 50, max 100; query searches by name or reference number.
- A document must be in document.draft status before send_document will
send it. create_document is asynchronous — poll get_document until the
status leaves document.uploaded before sending.
- silent: true on send_document suppresses recipient and sender email
notifications.
API key setup
- Sign in to PandaDoc.
- Go to Settings → API & Integrations → API Key.
- Copy the Sandbox key for testing or the Production key for live use.
- Pass it as the
apiKeyinput. The tool sends it asAuthorization: API-Key <apiKey>.
The key is the only credential needed — there is no OAuth/JWT exchange for the API-key flow.
Output
Every operation prints a JSON envelope:
{ "status": "200", "result": "<raw PandaDoc JSON response as a string>" }
On a bad input or a transport failure (DNS, connection refused, timeout) the
tool prints {"error": "<message>"} and exits non-zero so the job step fails.
HTTP 4xx/5xx responses are NOT treated as transport failures — the PandaDoc
error body is returned in result with its real status code so you can see
exactly what PandaDoc rejected.
Examples
List the 10 most recently changed documents:
{
"apiKey": "YOUR_KEY",
"operation": "list_documents",
"count": "10"
}
Search documents by name or reference number:
{
"apiKey": "YOUR_KEY",
"operation": "list_documents",
"query": "Acme Q3 Proposal"
}
Get one document's status/details:
{
"apiKey": "YOUR_KEY",
"operation": "get_document",
"documentId": "ABCdef123..."
}
Create a document from a template:
{
"apiKey": "YOUR_KEY",
"operation": "create_document",
"name": "Acme Q3 Proposal",
"templateUuid": "TEMPLATE_UUID",
"recipientEmail": "[email protected]",
"recipientFirstName": "Jordan",
"recipientLastName": "Lee",
"recipientRole": "signer"
}
Send a (draft) document for signature:
{
"apiKey": "YOUR_KEY",
"operation": "send_document",
"documentId": "ABCdef123...",
"subject": "Your proposal from Acme",
"message": "Hi Jordan — please review and sign.",
"silent": "false"
}
Publishes
The keys a later task may reference as {{taskName.key}}. Referencing anything not listed here resolves to nothing at run time.
errorresultstatus
Input Properties
Every property this tool accepts, from its own tool.iml.
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
apiKey |
string | yes | — | DEPRECATED — bind an API Key credential to the task with credentialName instead. A key pasted here is stored in the workflow definition in clear and appears in every export of it. Still honoured for workflows built before the change. |
operation |
string | yes | — | One of: list_documents, get_document, create_document, send_document |
status |
string | no | — | Filter list_documents by document status code (0-13). Ignored by other operations. |
count |
string | no | — | Max number of results for list_documents (PandaDoc 'count', default 50, max 100). |
query |
string | no | — | Search list_documents by name or reference number (PandaDoc 'q'). Ignored by other operations. |
documentId |
string | no | — | Document id (uuid). Required for get_document and send_document. |
name |
string | no | — | Document name for create_document. |
templateUuid |
string | no | — | Template uuid for create_document (the PandaDoc template the document is built from). |
recipientEmail |
string | no | — | Recipient email for create_document. |
recipientFirstName |
string | no | — | Recipient first name for create_document (optional). |
recipientLastName |
string | no | — | Recipient last name for create_document (optional). |
recipientRole |
string | no | — | Recipient role for create_document (matches a role defined in the template, e.g. 'signer'). |
subject |
string | no | — | Email subject for send_document (optional). |
message |
string | no | — | Email message body for send_document (optional). |
silent |
string | no | — | If 'true', send_document suppresses recipient/sender email notifications. Default false. |