> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.bannerify.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Pipedream

> Learn how to render images and PDFs in a Pipedream workflow with the Bannerify actions.

The [Bannerify app in Pipedream](https://pipedream.com/apps/bannerify) has three actions. Two of them render a template and return the link of the file. The third lists your templates. The app has no triggers, so start the workflow with any Pipedream trigger.

## Actions

| Action | What it does | Fields |
| - | - | - |
| Render Image | Renders a template as a PNG, JPEG, or WebP file | Template ID, Format, Modifications JSON |
| Render PDF | Renders a template as a PDF file | Template ID, Modifications JSON |
| List Templates | Lists the templates of your workspace | Include Layers |

Render Image and Render PDF return an object with a `url` field. Bannerify saves the file on its CDN, and each run counts as one generation. List Templates does not count.

## Prerequisites

* A Pipedream account.
* A Bannerify [API key](/docs/api-reference/authentication#create-an-api-key).
* A template with named layers. [Modifications](/docs/essentials/modifications#name-your-layers) explains why the names matter.

## Render a file

1. In your workflow, add a step after the trigger and search for **Bannerify**.
2. Choose **Render Image** or **Render PDF**.
3. Connect your account and paste your API key.
4. In **Template ID**, choose a template. The list shows the names of the templates in the workspace that owns the key.
5. For Render Image, choose a **Format**: `png`, `jpeg`, or `webp`. The default is `png`.
6. In **Modifications JSON**, enter the values. This field is optional. Reference data from earlier steps with Pipedream expressions:

```json theme={null}
{
  "headline": "{{steps.trigger.event.body.title}}",
  "photo": { "src": "{{steps.trigger.event.body.imageUrl}}" }
}
```

7. Test the step. The result has a `url` field.

The field takes an object where each key is a layer name, or the array that the API uses. [Modifications](/docs/essentials/modifications) lists the fields that each layer type reads.

## Find layer names

Run **List Templates** with **Include Layers** turned on to see the layers of each template. Use the layer names as the keys in **Modifications JSON**.

## Troubleshooting

| Problem | What to do |
| - | - |
| The step fails with `Invalid JSON in modifications` | Check that **Modifications JSON** is valid JSON, either an object such as `{"headline":"Hello"}` or the array format |
| The **Template ID** list is empty | Check that the API key belongs to the workspace that owns the templates |
| A layer does not change | Check the layer name in the editor. Names are case-sensitive, and the API ignores a name that does not exist |
| The step fails with a usage limit message | The workspace reached its daily or monthly limit. See [Quota and limits](/docs/account/quota) |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.