Guides
Add E-Signatures to Any n8n Workflow with Firma.dev

n8n is where a lot of teams already run their contract logic: a form comes in, a deal moves stages, a renewal date hits, and a workflow fires. The missing piece is usually the signature itself. Firma.dev now ships a dedicated n8n-nodes-firma community node with 83 operations, a trigger that manages its own webhooks, and a built-in tool for the n8n AI Agent, so you rarely need to hand-wire an HTTP Request node anymore.
Because Firma.dev bills per envelope at €0.049 (~5¢ USD) with no seats and no monthly minimums, it fits automated sending especially well. When a workflow blasts out fifty renewal contracts overnight, you pay for fifty envelopes, not for a tier you grew into. That is the difference between automation that saves money and automation that quietly runs up a bill.
This post covers four ways to wire Firma.dev into n8n: the dedicated node for sending and managing documents, the trigger node for reacting to signed contracts, Firma.dev as a tool for the AI Agent, and a manual Webhook plus HTTP Request setup if you would rather avoid community nodes entirely.
Path 1: install the Firma.dev node
This is the fastest way to get Firma.dev running in n8n. The node handles authentication, request formatting, and pagination for you, with dropdown fields instead of raw JSON.
From the workflow editor, click the + to add a node, search "Firma," and select Install under Community Nodes. The node installs and drops into your canvas in one step. If you would rather install ahead of time, go to Settings > Community Nodes, click Install, and enter n8n-nodes-firma. Self-hosted instances can also install it manually:
Restart n8n after a manual install.
Next, set up credentials. Click Credentials in the sidebar, add a new one, and search for Firma API. You will need your API key from Workspace Settings > API, and optionally a webhook secret from Workspace Settings > Webhooks if you plan to validate incoming events later. Leave Environment set to Production.
The node covers 83 operations across resources including Signing Request, Template, Webhook, Workspace, Company, Domain, and Email Template, so most workflows never need to leave it. A typical send looks like this:
Add a Firma node and select your Firma API credential
Set Resource to Signing Request and Operation to Create and Send
Set Document Source to Template and enter your Template ID
Under Recipients, add the signer's email, first name, designation, and order using expressions like
{{ $json.signer_email }}
The response includes the new signing request's id, which you can log or pass downstream. For approval flows, use the Create operation to save a draft, insert an approval or wait step, then call Send once it's cleared.
One thing worth flagging before you wire this into a busy workflow: Firma's write operations, Create, Create and Send, Send, and Resend, don't carry an idempotency key. If a node retries automatically after a timeout, you can end up sending the same contract twice, and both copies are legally binding once signed. Turn off Retry On Fail on these operations and handle retries with your own logic if you need them.
Path 2: react to signed documents with the Firma Trigger node
The trigger node does something a generic Webhook node can't: it registers and deregisters the webhook with Firma.dev automatically when you activate or deactivate the workflow. There's no dashboard step to remember and nothing left behind if you turn a workflow off.
Add a Firma Trigger node to a new workflow, select your Firma API credential, and pick which events to listen for under Events, such as Signing Request Completed or Signing Request Recipient Declined. You can scope the trigger to a single workspace ID if you run multiple. Activating the workflow creates the webhook pointing at your n8n instance; deactivating removes it, and orphaned webhooks from earlier runs get detected and resused rather than duplicated.
The trigger covers all 27 Firma.dev webhook events across signing requests, recipients, templates, workspaces, and domains. Route them with a Switch node on {{ $json.type }}:
signing_request.completedupdates your CRM and kicks off provisioningsigning_request.recipient.declinednotifies salessigning_request.expiredre-sends or moves the deal to lost
If you added a webhook secret to your credential, the trigger validates the X-Firma-Signature header with HMAC-SHA256 automatically, including the grace-period header used during secret rotation. Requests that fail validation get rejected before they reach your workflow logic. For a deeper look at how webhook events map to multi-tenant workspaces, see the workspace webhooks guide.
If your own next step is filing the finished document away automatically, the Google Drive walkthrough covers that exact four-step build, trigger through upload, in one dedicated guide.
Firma.dev's webhook API requires HTTPS. n8n Cloud handles that for you; self-hosted instances need a reverse proxy with TLS, or a tunnel like cloudflared tunnel --url http://localhost:5678 or ngrok http 5678 during development. And webhooks still need to be switched on in the Firma.dev dashboard under Workspace Settings > Webhooks. The per-webhook Test button bypasses that master switch, so a successful test doesn't guarantee real events are flowing.
Path 3: Firma.dev as a tool for the n8n AI Agent
The Firma node can also act as a native tool for the AI Agent node, no custom HTTP configuration needed. In an AI Agent workflow, add a Firma node as a tool input, select your credential, and choose the resource and operation you want to expose, such as Signing Request > Create and Send.
Expose more than one operation if you want the agent to have real options rather than a single hammer. A common pairing is Template > List, so the agent can look up the right template on its own, alongside Signing Request > Create and Send to dispatch it and Signing Request > Get to check status when asked. The agent decides which tool to call based on the conversation, so a prompt like "send the NDA to jane@acme.com" resolves without you writing that logic by hand.
This path requires n8n v1.47 or later.
Manual setup: Webhook plus HTTP Request
If your team avoids community nodes, or you're on a version of n8n that predates them, you can still wire up Firma.dev directly against the API. This is the same integration as above, just assembled from n8n's generic nodes instead of the dedicated ones.
For sending, add an HTTP Request node with a Header Auth credential named Firma API, header Authorization, value your API key, and point it at the create-and-send endpoint:
The same draft-then-send pattern applies: POST /signing-requests to create a draft, POST /signing-requests/{id}/send once it's ready to go out.
For reacting to signed documents, add a Webhook trigger node, copy its production URL, and paste it into Firma.dev's dashboard under Settings > Webhooks along with the events you want. Route the payload with a Switch node on {{ $json.body.type }}, and pull the signed file from {{ $json.body.data.signing_request.signed_document_url }} to archive it in Google Drive, S3, or Notion. Unlike the trigger node, you're resposible for registering and removing this webhook yourself when a workflow changes.
Signing inside another app
If your flow ends with the signer completing the document inside your own product rather than over email, pull the recipient's signing_request_user_id from the API response and embed Firma.dev's signing UI:
Everything runs on EU-hosted infrastructure and produces a full audit trail, so the automation you build stays defensible.
📘 Read the full n8n integration guide
The complete setup, including every node field, credential detail, and webhook event, lives in the docs: https://docs.firma.dev/guides/n8n-integration
Get started
You can have the Firma.dev node installed and your first signing request sent in the time it takes to create one credential. Get started with Firma.dev for free, no credit card required, and add e-signatures to the workflows you already run.
Related articles
Our platform is designed to empower businesses of all sizes to work smarter and achieve their goals with confidence.






