Create from a Template with Content Placeholder
Introduction
Make your document dynamic with Content Placeholders and add content to a document in the creation request. Decide what Content Library Items to add (different countries' terms & conditions, pricing tables with predefined currencies, additional fields or product information, etc.) to the document based on the data merged. In addition, you can prefill fields/variables values, add items to pricing tables, and assign recipients to roles from the specific Content Library Item.
This recipe assumes:
- You have authenticated via OAuth (see Authentication process) or have an API key (see API key authentication process)
- You have created a template (see Save time with templates)
Add Content Placeholder to a template
Easily add Content Placeholder (Smart Content) block to a template where you want to add content during document creation.
Locate your template ID, Content Placeholder Block IDs, and Content Library Item IDs to be added to a document
- Open a template and find the ID as the final part of the URL. For example, in
https://app.pandadoc.com/a/#/templates/ustHNnVaPCD6MzuoNBbZ8L the template ID is “ustHNnVaPCD6MzuoNBbZ8L”
- Open the settings section of Content Placeholder (smart Content) to find or change a Block ID or get template details via API.
"content_placeholders": [
{
"uuid": "a3293bbf-9109-4478-a875-8271e10a99e9",
"block_id": "Content Placeholder 1",
"description": "Click here to add content library items"
}
]
- Open a Content Library Item and find the ID in the same way as for the template.
Get Content Library Item Details
Use get content library item details endpoint to understand what structure does it have and what values you can prefill.
- Sample Pricing Table
{
"id": "9d9k7VtSQ5KCXfsUQv4GxE",
"name": "Sample Pricing Table",
"date_created": "2021-08-11T14:12:20.017074Z",
"date_modified": "2021-08-11T14:13:38.562290Z",
"created_by": {
"id": "ajnN7eGutJZsRKjQrNuPkC",
"email": "[email protected]",
"first_name": "Jane",
"last_name": "Roe",
"avatar": "https://avatars.pandadoc-static.com/users/ajnN7eGutJZsRKjQrNuPkC/avatar.JPG"
},
"metadata": {},
"tokens": [],
"fields": [],
"pricing": {
"tables": [
{
"name": "Pricing Table 1",
"id": "6cf232ef-1266-43f7-859a-e05a0f65baee",
"total": "38.25",
"is_included_in_total": true,
"summary": {
"subtotal": "45",
"total": "38.25",
"discount": "6.75",
"tax": "0"
},
"items": [
{
"id": null,
"sku": null,
"qty": "5",
"name": "Monthly Subscription - Individual Plan",
"cost": null,
"price": "9",
"description": "",
"custom_fields": {},
"custom_columns": {
"Cost": "",
"Images": "",
"Subtotal": ""
},
"discount": null,
"tax_first": null,
"tax_second": null,
"subtotal": "45",
"options": {
"optional": true,
"optional_selected": true
},
"sale_price": "9",
"taxes": {},
"discounts": {},
"fees": {}
},
{
"id": null,
"sku": null,
"qty": "1",
"name": "Monthly Subscription - Business Plan",
"cost": null,
"price": "49",
"description": "",
"custom_fields": {},
"custom_columns": {
"Cost": "",
"Images": "",
"Subtotal": ""
},
"discount": null,
"tax_first": null,
"tax_second": null,
"subtotal": "49",
"options": {
"optional": true,
"optional_selected": false
},
"sale_price": "49",
"taxes": {},
"discounts": {},
"fees": {}
}
],
"currency": "USD"
}
],
"total": "38.25"
},
"tags": [],
"roles": [],
"version": "2",
"content_placeholders": []
}
- Sample Signature Block
{
"id": "5NfLkZRqa2PeujSVDUCT3Z",
"name": "Sample Signature Block",
"date_created": "2021-08-12T08:53:16.607387Z",
"date_modified": "2021-08-12T08:54:14.435441Z",
"created_by": {
"id": "ajnN7eGutJZsRKjQrNuPkC",
"email": "[email protected]",
"first_name": "Jane",
"last_name": "Roe",
"avatar": "https://avatars.pandadoc-static.com/users/ajnN7eGutJZsRKjQrNuPkC/avatar.JPG"
},
"metadata": {},
"tokens": [],
"fields": [
{
"uuid": "d924a2b7-053c-489a-aa8a-ff2926ded8a0",
"name": "Signature",
"title": "",
"placeholder": "Signature",
"value": {},
"assigned_to": {
"id": "keLAiTCNJUsNo4BZJ8ap5k",
"name": "Signer",
"preassigned_person": null,
"type": "role"
}
},
{
"uuid": "80222a28-8894-48fc-9e9d-f0f6305d5e9d",
"name": "Date",
"title": "",
"placeholder": "Select date",
"value": null,
"assigned_to": {
"id": "keLAiTCNJUsNo4BZJ8ap5k",
"name": "Signer",
"preassigned_person": null,
"type": "role"
},
"merge_field": "Date"
}
],
"pricing": {},
"tags": [],
"roles": [
{
"id": "keLAiTCNJUsNo4BZJ8ap5k",
"name": "Signer",
"preassigned_person": null
}
],
"version": "2",
"content_placeholders": []
}
Structure your Document details
Use the create document endpoint description to decide what content you want to pass to your document.
{
"name": "API Sample Document for PandaDoc Template",
"template_uuid": "{{template_id}}",
"recipients": [
{
"email": "[email protected]",
"first_name": "Jane",
"last_name": "Roe"
}
],
"content_placeholders": [
{
"block_id": "{{block_id}}",
"content_library_items": [
{
"id": "{{cli_id}}",
"pricing_tables": [
{
"name": "Pricing Table 1",
"options": {
"currency": "USD",
"discount": {
"is_global": true,
"type": "absolute",
"name": "Discount",
"value": 2.26
}
},
"sections": [
{
"title": "Sample Section",
"default": true,
"rows": [
{
"options": {
"optional": true,
"optional_selected": true,
"qty_editable": true
},
"data": {
"name": "Placeholder Panda",
"price": 10,
"qty": 3
}
}
]
}
]
}
]
},
{
"id": "{{cli_id_2}}",
"recipients": [
{
"email": "[email protected]",
"first_name": "John",
"last_name": "Roe",
"role": "Signer"
}
],
"fields": {
"Date": {
"value": "2019-12-31T00:00:00.000Z"
}
}
}
]
}
]
}
Create the Document
Using your authentication token or API key, and the content-type application/json
POST https://api.pandadoc.com/public/v1/documents
The response will contain the document ID as the element “id”
{
"id": "YbyruETM8yzgMMaaLQa2RP",
"name": "API Sample Document from PandaDoc Template",
"status": "document.uploaded",
"date_created": "2021-08-20T07:04:15.654510Z",
"date_modified": "2021-08-20T07:04:15.654510Z",
"expiration_date": null,
"version": null,
"uuid": "YbyruETM8yzgMMaaLQa2RP"
}
Wait for the Document to enter a draft status
See Listening for changes in document status. If you are actively polling your document ID is “id” from the previous step.
Check Document content
As you can see a content placeholder from the template has been replaced with 2 content library items in the document (Sample pricing table and signature block).
Send the Document
Once you’ve determined that the document has entered “document.draft” status you can send it with a
POST https://api.pandadoc.com/public/v1/documents/{id}/send
Where {id} is the document ID from above. If you want you can include the optional parameters in your POST to set a subject line and body text
{
"message": "Hello! This document was sent from the PandaDoc API.",
"subject": "Please check this test API document from PandaDoc"
}
Do not set the “silent” parameter to “true” unless you don’t want an email to go out with the document link. For more information about why you might want to send silently see “Create a document and share it in real time”
Updated 11 months ago