Document Step
Generate documents from templates and fill them with workflow data, without collecting signatures.
The Document step generates a document by placing fields onto a template and filling them with workflow data. Use it when you need to produce a rendered file (such as a PDF) as part of a workflow, without collecting signatures. If you need signatures, use the Sign step instead.
Configuration
| name | type | required | description |
|---|---|---|---|
name | string | yes | A human-friendly name for this document set. |
type | string | yes | dynamic (generated from workflow data) or static (from a fixed asset). |
templates | array | yes | One or more document templates to render. See Templates below. |
Templates
Each template defines a file to render and the fields to populate within it.
| name | type | required | description |
|---|---|---|---|
name | string | yes | Template display name. |
fileId | string | yes | Identifier of the base file or template to render. |
fields | array | yes | Positioned fields to populate. See Fields below. |
Fields
Each field defines a positioned control on the document—where it appears on the page and what value it holds.
| name | type | required | description |
|---|---|---|---|
id | string | yes | Unique identifier for this field. |
fieldType | string | yes | Must be form_field. |
fieldSubType | string | yes | Visual control type: text, checkbox, or radio. |
wrapText | boolean | yes | Whether text wraps within the bounding box. Default: false. |
required | boolean | yes | Whether a value must be supplied. Default: false. |
pageNumber | number | yes | Page index to place the field on (1-based). |
xPosition | number | no | Horizontal position on the page. |
yPosition | number | no | Vertical position on the page. |
width | number | no | Bounding box width. |
height | number | no | Bounding box height. |
fontSize | number | no | Font size for text fields. |
optionValue | string | no | The specific value for radio or checkbox fields. |
value | string | no | Static value to pre-fill (for text fields). |
radioGroupId | string | no | Group identifier for related radio options. |
Examples
Let's start with the smallest valid configuration: a single template with one text field.
{
"name": "Onboarding Letter",
"type": "dynamic",
"templates": [
{
"name": "Letter",
"fileId": "file_123",
"fields": [
{
"id": "fld-001",
"fieldSubType": "text",
"wrapText": false,
"required": true,
"xPosition": 120,
"yPosition": 240,
"pageNumber": 1,
"width": 300,
"height": 24,
"fontSize": 12,
"optionValue": "",
"value": "",
"radioGroupId": "",
"fieldType": "form_field"
}
]
}
]
}Here's a fuller example showing all three field subtypes—text, checkbox, and radio—across multiple pages.
{
"name": "Onboarding Packet",
"type": "dynamic",
"templates": [
{
"name": "Packet",
"fileId": "file_123",
"fields": [
{
"id": "fld-001",
"fieldSubType": "text",
"wrapText": false,
"required": true,
"xPosition": 120,
"yPosition": 240,
"pageNumber": 1,
"width": 300,
"height": 24,
"fontSize": 12,
"optionValue": "",
"value": "",
"radioGroupId": "",
"fieldType": "form_field"
},
{
"id": "fld-002",
"fieldSubType": "checkbox",
"wrapText": false,
"required": false,
"xPosition": 120,
"yPosition": 300,
"pageNumber": 1,
"width": 12,
"height": 12,
"fontSize": 10,
"optionValue": "yes",
"value": "yes",
"radioGroupId": "",
"fieldType": "form_field"
},
{
"id": "fld-003",
"fieldSubType": "radio",
"wrapText": false,
"required": false,
"xPosition": 120,
"yPosition": 340,
"pageNumber": 2,
"width": 12,
"height": 12,
"fontSize": 10,
"optionValue": "A",
"value": "A",
"radioGroupId": "grp-choices",
"fieldType": "form_field"
}
]
}
]
}Updated 20 days ago
