Skip to main content

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​

StepWhat it does
Create DocumentRenders a template. Picking the template loads its fields from its data schema, or from its sample data.
Create Document from HTMLRenders HTML built earlier in the flow, in Jinja2, Liquid or Handlebars.
Create Document from URLRenders a public page.
Get RenderReturns a render by its ID, with a fresh download URL.
Convert Document to PDFTurns 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 FileAdds an image or PDF to the file library, where templates use it with asset().
Custom API CallCalls 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 FinishedStart 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:

ActionProps
Create DocumentTemplate (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 HTMLHTML (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 URLURL (required, a public https page), Output, File name, Settings (JSON), Return the file
Get RenderRender ID (required, rnd_…)
Convert Document to PDFFile (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 FileFile (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.