Activepieces
The Formfeed piece for Activepieces is on npm as @formfeed/activepieces-piece. It is not in
Activepieces' own catalogue, so a platform admin installs it by name. Where that is not possible, the
HTTP piece does the same job, see the end of this page.
Install and connect
A platform that allows custom pieces installs it by its npm name under
Platform Admin → Setup → Pieces → Install Piece: choose npm and enter
@formfeed/activepieces-piece. Then add a Formfeed connection with an
API key from the app (API keys); the connection is checked with
GET /account. A ff_test_ key renders for free (with a watermark on the Free plan).
The default scopes of a new key (render:create, render:read, template:read, account:read)
cover the connection check, the template list and fields and every render action. Tick
file:write for Upload File and webhook:manage for the
triggers, which register a webhook endpoint.
Actions and triggers
| Step | What it does |
|---|---|
| Create Document | Renders a template. Picking the template loads its fields from its data schema, or from its sample data. |
| Create Document from HTML | Renders HTML built earlier in the flow, in Jinja2, Liquid or Handlebars. |
| Create Document from URL | Renders a public page. |
| Get Render | Returns a render by its ID, with a fresh download URL. |
| Convert Document to PDF | Turns a Word, Excel, PowerPoint, OpenDocument or RTF file, or the render of a Word or PowerPoint template, into a PDF. Starter plan and above. |
| Upload File | Adds an image or PDF to the file library, where templates use it with asset(). |
| Custom API Call | Calls any other endpoint with the connection's key, for example /pdf/merge (paths are relative to https://api.formfeed.dev/v1). |
| Render Completed, Render Failed, Batch Finished | Start the flow when a render succeeds (render.completed) or fails (render.failed), or a batch finishes (job.completed, job.failed). |
The props of each action:
| Action | Props |
|---|---|
| Create Document | Template (required; the published version renders), Version (a release channel; published when empty), Template fields, Data (JSON) (merged over the fields), Output (empty: the template's format; PDF, PNG, JPG, WebP, DOCX or PPTX), File name, Locale (for example de-DE), Return the file (on by default) |
| Create Document from HTML | HTML (required, up to 5 MB), Template language (Jinja2, the default, Liquid or Handlebars), Data (JSON), Output (PDF, PNG, JPG or WebP), File name, Settings (JSON) (paper, margins, header and footer, as in Override settings per request), Return the file |
| Create Document from URL | URL (required, a public https page), Output, File name, Settings (JSON), Return the file |
| Get Render | Render ID (required, rnd_…) |
| Convert Document to PDF | File (DOCX, XLSX, PPTX, ODT, ODS, ODP, DOC, XLS, PPT or RTF, up to 20 MB) or Render ID (rnd_… of a render with output DOCX or PPTX); Page ranges (for example 1-3,5), Landscape, One page per sheet, File name (the file's own name with .pdf when empty), Return the file |
| Upload File | File (required: PNG, JPEG, WebP, GIF, SVG, AVIF or PDF, up to 10 MB), Name in library (the name templates use with asset(), for example brand/logo.png; the file's own name when empty; the same name replaces the file) |
The Template list shows the workspace's templates by name and kind; only published templates
render, and an unpublished one fails with template_not_found.
The document steps return the render and, unless Return the file is off, the document as a file for the next step. Lists such as invoice lines go into Data (JSON), which is merged over the fields value by value: an object adds to the fields at the same place, a value replaces the field's, and a list replaces the whole list. A render that takes longer than a minute continues in the background; the step then checks it every five seconds for up to five minutes.
The triggers register a webhook endpoint in the workspace when the flow is turned on and remove it when it is turned off; it is listed in the app under Webhooks as Activepieces. Environment chooses whose renders count: live keys, test keys or both (the default). The triggers pass on only deliveries whose signature matches and is at most five minutes old. Testing a trigger in the flow editor loads the workspace's latest matching renders, or a sample when there are none.
Without the piece
The HTTP piece's Send HTTP request calls the API directly: method POST, URL
https://api.formfeed.dev/v1/renders, header Authorization: Bearer ff_test_…, and a JSON body such
as {"template": "invoice-de", "data": {"invoice": {"number": "2026-0042"}}}. The response contains
download_url. The request shape is described in Rendering.