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

nametyperequireddescription
namestringyesA human-friendly name for this document set.
typestringyesdynamic (generated from workflow data) or static (from a fixed asset).
templatesarrayyesOne or more document templates to render. See Templates below.

Templates

Each template defines a file to render and the fields to populate within it.

nametyperequireddescription
namestringyesTemplate display name.
fileIdstringyesIdentifier of the base file or template to render.
fieldsarrayyesPositioned 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.

nametyperequireddescription
idstringyesUnique identifier for this field.
fieldTypestringyesMust be form_field.
fieldSubTypestringyesVisual control type: text, checkbox, or radio.
wrapTextbooleanyesWhether text wraps within the bounding box. Default: false.
requiredbooleanyesWhether a value must be supplied. Default: false.
pageNumbernumberyesPage index to place the field on (1-based).
xPositionnumbernoHorizontal position on the page.
yPositionnumbernoVertical position on the page.
widthnumbernoBounding box width.
heightnumbernoBounding box height.
fontSizenumbernoFont size for text fields.
optionValuestringnoThe specific value for radio or checkbox fields.
valuestringnoStatic value to pre-fill (for text fields).
radioGroupIdstringnoGroup 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"
        }
      ]
    }
  ]
}