English
Webhook received
Starts the workflow on a POST to the workflow URL. The JSON body lands in data.webhook.
The Webhook received trigger starts the workflow when an HTTP POST reaches the workflow's own URL. Use it to connect a form, an e-commerce site, a CRM or any tool that can call a URL. The JSON body of the request becomes the input of the run, under data.webhook.
There is no triggering email: nodes that act on the triggering email (reply in the thread, Move, Flag) cannot be used after this trigger, and the editor reports them as a blocking error. Send still works when you choose the sending mailbox on the node.
When the caller is MyNotary, Yousign or Notion, prefer the dedicated triggers (MyNotary — event, Yousign — event, Notion — event): they filter events and, for Yousign and Notion, check the signature of the body.
At a glance
- Type:
trigger.webhook· version 1 - Category: Triggers
- Kind: Trigger — starts a run
- Effect: No external effect (
none) — nothing is written outside Mankomail; safe to replay - Needs a carrier email: No
- Connection: None
- Outputs:
main
Parameters
This node has no parameter.
Outputs
main— Taken by every run started by an accepted call to the workflow URL.
Data produced
What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).
{{ data.webhook }}—object. The JSON body of the request, exactly as sent. Neither the headers nor the query string are kept.nullwhen the body is empty.{{ data.webhook.<field> }}—string. A field of the body, e.g.{{ data.webhook.client.email }}. Array items are read by position:{{ data.webhook.items.0.id }}.
Example
A contact form posts each request to the workflow:
POST <PUBLIC_BASE_URL>/hooks/wf/<token>
Content-Type: application/json
{ "client": { "name": "Ada Martin", "email": "ada@example.com" }, "message": "Please call me back." }The call returns 202 Accepted with { "executionId": "…" } and the run starts on the main port. A Send node downstream can write To: {{ data.webhook.client.email }} and Hello {{ data.webhook.client.name }}.
Tips
- URL.
<PUBLIC_BASE_URL>/hooks/wf/<token>, one per workflow. The token (256 random bits) is generated on the first publication of the workflow, or earlier with "Generate the URL" in the node panel. It is shown only once: only a fingerprint is stored. If it is lost or leaked, "Generate a new URL" issues a new one and the previous URL stops working immediately. The same can be done through the API withPOST /api/v1/workflows/<id>/webhook. - Authentication. The token in the URL is the only proof: anyone who knows the URL can start the workflow. No header or signature is checked. Keep the URL secret and regenerate it if in doubt.
- Method and body. Only
POSTis accepted. SendContent-Type: application/json. The body is limited to 256 KB of JSON; above that the call is refused with413and coderequest.payload_too_large. A body that is not valid JSON is refused with400. - Responses.
202with{ "executionId" }when a run is created.404with codenot_found, always the same, when the token is unknown, the workflow is not published or is archived, or its published version no longer has an active Webhook received trigger: the URL never reveals which case applies.429with aRetry-Afterheader beyond 300 calls per minute from the same IP address. - The call does not wait. The response arrives as soon as the run is queued; the caller never receives the result of the workflow. Follow it in the runs list.
- No deduplication. Two identical calls are two events and start two runs. If the caller may retry, make the workflow idempotent (for example by checking a table first).
- Published version only. The URL always runs the published version; it starts nothing while the workflow has never been published.
- Testing. In the editor, test this trigger by typing a JSON object: it lands under
data.webhookexactly as a real call would, and the draft runs in a test run (see Test runs). - A workflow has at most one Webhook received trigger: the URL belongs to the workflow, not to a node.