Guide · n8n
n8n Webhook: Automate Your Conversions
Subtraq knows where every conversion came from. Your database, your channel, your invoicing tool don't yet. n8n expects exactly what Subtraq sends: an address and a JSON.
The whole guide fits right here
Subtraq
Settings → Connect other tools → Outgoing webhooks
n8n
Webhook node → POST → production URL
The address is n8n's: you copy it from the Webhook node and paste it into Subtraq. From there, every lead or every sale fires the workflow — no Subtraq node to install, no community repo to wait on.
Read this before pasting the address
A self-hosted n8n must be reachable from the outside
The reason isn't cosmetic: a webhook carries email addresses and amounts. Sending them in the clear, or to an address we can't verify, would mean leaking a client's data for the sake of a convenient setup.
n8n Cloud doesn't have this problem. On your own instance, you need a domain name and a certificate — a reverse proxy in front of n8n is enough. Redirects are not followed: the registered address must be the one that answers.
Two possible rejections, before the first send
An outgoing webhook address must be in HTTPS, and it cannot target a private host. An http address, a 192.168.x.x address, or localhost are rejected at registration — and re-checked before each send.
In n8n, 6 steps
Six steps, and one address to get right
n8n comes in a self-hosted version and a cloud offering; the Webhook node and the HTTP Request node are core nodes, present in both.
In n8n, add a Webhook node
This is the node that receives an incoming HTTP call. Method: POST. It shows two addresses: a test one and a production one — and confusing the two is the number-one reason "it's not triggering."
Listen for a test event
The "Listen for test event" button opens the test address for one hundred and twenty seconds, according to n8n's documentation, and shows the received data in the editor. That's the moment to trigger a conversion to see the JSON shape.
In Subtraq, add the outgoing webhook
Settings → Connect other tools → Outgoing webhooks. Paste n8n's production address, choose what goes out — leads, sales, or both — and whether the webhook applies to a single client workspace or the whole account.
Note the signing secret
It is shown only once, at creation. Each send carries the X-Subtraq-Signature header in the form t=TIMESTAMP,v1=SIGNATURE, where the signature is the HMAC-SHA256 of TIMESTAMP.BODY. A "Code" node is enough to verify it.
Activate the workflow
The production address only responds on a published workflow. A workflow left as a draft returns an error on each send, and Subtraq logs it next to the webhook, with its date and message.
Chain whatever you want behind it
The JSON arrives split: the email to the CRM, the source link label to a column, the amount to a message. That's the whole point of a workflow over a fixed integration.
Paths recorded from n8n's documentation on September 12, 2026 — the Webhook node and its two addresses. Interfaces change: if what you see no longer matches, the source is the authority.
What the workflow receives
A signed JSON, with a field that can be empty
A placement of null is not an oversight: it's a conversion Subtraq couldn't tie to a link, and it says so rather than inventing a source. Plan the branch: an "If" node that separates the two cases avoids writing "undefined" in a client's column.
The amount arrives in cents — $4,300 is written as 430000 — and it's zero for a lead. Divide by a hundred when displaying it, never when storing it.
The fields, as the code writes them
event (lead or sale) · at · space (slug and name of the space) · person (email, external identifier) · placement (slug and label of the source link, or null if the conversion is unattributed) · amountMinor and currency for a sale · eventId.
The other direction
n8n can also send a sale to Subtraq
This is the service few tools provide: setting an authorization header. Shopify, WooCommerce, and PrestaShop can't do it on their native webhooks. n8n makes it a credential type.
The "HTTP Request" node, method POST
Address https://subtraq.co/api/v1/sales. This is the node that sends an outgoing request, as opposed to the Webhook node that receives one.
Credentials of type "Header auth"
n8n lists these among its generic authentications. Header name: Authorization. Value: Bearer followed by the Subtraq server key, the one starting with stq_sk_ that carries the events:write right.
Five fields in the body
space, amount in cents, currency, invoiceId, and at least one way to identify the person — email, externalId, or clickId. Subtraq returns 201 for a new sale, 200 if the invoice ID has already come through.
The setting that will save you a sleepless night
On the node, Settings then "Retry On Fail," with "Max Tries" and "Wait Between Tries." A temporarily unavailable API is not a lost sale if the node retries — and the invoice ID ensures a second pass doesn't count twice.
Recorded from the HTTP Request node documentation and the error handling page, on September 12, 2026.
The hard cases, handled honestly
An automation is judged on the day it breaks, not the day it's set up.
An event was lost. How do I replay it?
Two answers, and you need both. On the n8n side: the executions list lets you rerun a failed execution, with the saved workflow or the original. On the Subtraq side: there is no queue — two attempts per send, then the failure is logged next to the webhook, with its date and message. A destination that's down for several minutes loses the sends from that window; the conversion itself stays recorded.
My workflow takes twenty seconds. Is that a problem?
Yes. The send is abandoned after five seconds. Make the Webhook node respond immediately and work after: n8n can send the response on receipt and continue the workflow behind it. A workflow that responds fast is not a workflow that does little.
The workflow fires twice on the same conversion.
That's possible: the second attempt goes out when the first failed after being processed. Use the eventId field, which is stable: a step that rejects an already-seen ID makes the workflow idempotent, exactly as invoiceId does in the other direction.
Should I verify the signature?
It's not required, it's recommended. Without verification, anyone who knows your workflow's address can send it fake numbers. The timestamp goes into the calculation: reject what's too old and a captured send can't be replayed indefinitely.
Frequently asked questions
Do I need an n8n node for Subtraq?
No. n8n expects an address and a JSON in one direction, and can set a header in the other. Nothing to install, nothing to wait on from a community repo.
Does this work on self-hosted n8n?
Yes, with one condition: the workflow address must be in HTTPS and reachable from the outside. A local address or private network is rejected.
Why is my test address receiving nothing?
Because it's only open for one hundred and twenty seconds after clicking "Listen for test event." For a permanent connection, paste the production address into Subtraq, on an active workflow.
Can I send only sales?
Yes. The webhook can be set to leads, sales, or both, and can be limited to a single client workspace instead of the whole account.
Zapier, Make — same thing?
Yes, the same JSON to the address of a "receive a webhook" trigger. Both have their guide, with the path through their interface.
A store to connect, and no authorization header available?
That's exactly n8n's job: receive the store's webhook and call Subtraq with the authorization the store can't set.
The Shopify guidePaste the address into your workflow
Create the account, add the outgoing webhook, paste n8n's production address. The first attributed lead fires the first workflow.
Create a free account