You can use built-in and custom macros inside text when using the /pdf/edit/add endpoint or the Fill PDF and Add Text and Images to PDF modules in Zapier, Make, and other integrations. Macros may look like this: {{$$newLine}}, [[$$newLine]], or {{object.property}} (when referencing custom data from JSON).

Built-in Macros

Built-in macros always use the $$ prefix. Available built-in macros:
Inserts the current page number, starting from 1.
{{$$PageNumber}}

Special Macro Style: Square Brackets

Some automation platforms use {{ ... }} style macros for their own purposes. To avoid conflicts, you can use [[ ... ]] square brackets instead. Just add the command ##replaceSquareBracketsToCurlyBrackets## at the beginning of the text (once per text block). Example

Use This Format

##replaceSquareBracketsToCurlyBrackets##[[macro1]]

It Will Render As

{{macro1}}

Custom Macros

You can provide custom data as JSON in the templateData property. Then you can use data from this JSON as {{name}} or {{object.property}} macros (or as [[name]] or [[object.property]] if you enabled square brackets to curly conversion).
JSON loaded into templateData should be escaped (with JSON.stringify(dataObject) in JS). Escaping means every " is replaced with \" (most programming languages do this automatically).
"templateData": "{ \"paid\": true, \"invoice_id\": \"0002\", \"total\": \"$999.99\" }"

Example Payload

To see the request size limits, please refer to the Request Size Limits.
{
  "url": "https://bytescout-com.s3-us-west-2.amazonaws.com/files/demo-files/cloud-api/pdf-edit/sample.pdf",
  "templateData": "{ \"firstName\": \"John\",  \"lastName\": \"Doe\",  \"age\": 26,   \"address\": {        \"streetAddress\": \"Market Street\",  \"city\": \"San-Francisco\",        \"postalCode\": \"94100\"    },    \"phoneNumbers\": [        {            \"type\": \"iPhone\",            \"number\": \"0123-4567-8888\"        },        {            \"type\": \"home\",            \"number\": \"0123-4567-8910\"        }    ]}",
  "annotations": [
    {
      "text": "{{firstName}} {{lastName}}\n{{address.streetAddress}}{{$$newLine}}{{phoneNumbers[0].number}}",
      "x": 250,
      "y": 100,
      "width": 150,
      "height": 100,
      "size": 12,
      "pages": "0-",
      "type": "TextFieldMultiline",
      "id": "multiline1"
    },
    {
      "text": "##replaceSquareBracketsToCurlyBrackets##Company: [[firstName]][[$$NewLine]][[lastName]]",
      "x": 50,
      "y": 50,
      "size": 12,
      "pages": "0-"
    }
  ]
}

Custom Pragma

You can disable HTML rendering support using a pragma at the beginning of the text.

Example Payload

To see the request size limits, please refer to the Request Size Limits.
{
  "url": "https://bytescout-com.s3-us-west-2.amazonaws.com/files/demo-files/cloud-api/pdf-edit/sample.pdf",
  "annotations": [
    {
      "text": "##disableHtmlFormatting##html formatting disabled: <b>bold</b>, <u>underline</u> and <i>italic</i> styles.",
      "x": 10,
      "y": 10,
      "size": 12,
      "pages": "0-"
    },
    {
      "text": "html formatting auto enabled: <b>bold</b>, <u>underline</u> and <i>italic</i> styles.",
      "x": 10,
      "y": 25,
      "size": 12,
      "pages": "0-"
    }
  ]
}