Webhooks
Start Plandalf automations from generated catch URLs or send outbound HTTP requests from automation actions.
Webhooks /hooks/catch/{sequence}/{trigger} Plandalf automation supports webhooks in two directions. A generated catch URL can start a sequence from an external system, and a Send Webhook action can call your own endpoint during a sequence.
Catch URLs are public endpoints
Inbound automation webhooks are routed under /hooks/catch/SEQUENCE_ID/TRIGGER_ID and do not require dashboard authentication. Treat each generated URL as a secret, rotate it by replacing the trigger if it leaks, and validate important payload fields before using them for fulfillment.
Inbound automation webhooks
Use an inbound webhook when something outside Plandalf should start a sequence: a form submission, an email platform event, a backend account event, or a promo enrolment flow.
-
Create or open a sequence
In Automations, create the sequence that should run after the external event.
-
Add the Plandalf Webhook trigger
Choose the Plandalf app and the Webhook trigger. The trigger stores
trigger_type: "webhook"and exposes a generated catch URL. -
Copy the catch URL
The trigger editor shows the Webhook URL and a copy button. Promo enrolment automations also expose the same catch URL from the promo email/enrolment panel.
-
POST a real payload
Send a test request with the fields your sequence actions need. The test panel waits for a webhook event and then lets you select the received payload as a sample record.
Path parameters
sequencestringrequiredSequence route key embedded in the generated catch URL.
triggerstringrequiredTrigger route key embedded in the generated catch URL.
Request body
emailstringBuyer or participant email when the automation should personalize downstream actions.
refstringOptional reference value from the source system, campaign, or form.
sourcestringOptional origin label that helps branch, filter, or audit the automation run.
Send a sample payload
curl -X POST "https://your-plandalf-app-host/hooks/catch/SEQUENCE_ID/TRIGGER_ID" \
-H "Content-Type: application/json" \
-d '{
"email": "buyer@example.com",
"ref": "launch-list-42",
"source": "newsletter-form",
"offer": "spring-launch"
}' Accepted webhook response
{
"success": true,
"message": "Workflow started",
"workflow_id": 1842
} Skipped trigger response
{
"success": true,
"message": "Webhook received but trigger was skipped",
"workflow_id": null
} Payload and metadata
The inbound webhook controller passes the request body into the automation trigger payload and records request metadata for the automation event.
webhook_payload.emailstringPromo enrolment templates use {{webhook_payload.email}} as the default participant email and reference value.
headersobjectPlandalf keeps relevant headers such as content type, user agent, forwarded IP headers, API key/signature headers, and signature headers. authorization and x-api-key values are masked in recorded metadata.
methodstringThe route accepts any HTTP method, but use POST with JSON for predictable automation payloads.
Test an inbound webhook
When no webhook event has been received yet, the trigger test endpoint returns a waiting state with the catch URL. Send a real request to that URL, refresh the test panel, and choose the received event as the sample record for downstream field mapping.
Waiting for the first webhook event
{
"success": false,
"message": "No webhook received yet. POST a real payload to the catch URL below to generate test data.",
"samples": [],
"data": {
"trigger_id": 91,
"trigger_name": "Webhook",
"waiting_for_webhook": true,
"catch_url": "https://your-plandalf-app-host/hooks/catch/SEQUENCE_ID/TRIGGER_ID"
}
} Outbound webhook actions
Use the Send Webhook action when Plandalf should call your backend, CRM, fulfilment system, or automation router during a sequence.
urlstringrequiredThe endpoint to call. Plandalf validates that the value is a valid URL before sending.
methodGET | POST | PUT | DELETE | PATCHrequireddefault: POSTThe HTTP method for the outgoing request.
payloadJSON stringOptional JSON payload. Leave it empty for GET requests.
headersmapOptional key-value headers for the outgoing request. If a payload is present and no Content-Type is supplied, Plandalf sends Content-Type: application/json.
Outbound action result
{
"success": true,
"status_code": 200,
"response_body": "{\"ok\":true}",
"headers": {
"content-type": ["application/json"]
},
"url": "https://api.example.com/plandalf",
"payload": "{\"email\":\"buyer@example.com\"}",
"method": "post"
}