A webhook is a small, automated message Maestra fires off to another service the instant something happens — a customer signs up, places an order, hits a loyalty tier, abandons a cart. Instead of the other service constantly asking “anything new yet?”, Maestra Platform tells it directly.Documentation Index
Fetch the complete documentation index at: https://help.maestra.io/llms.txt
Use this file to discover all available pages before exploring further.
What you can do with webhooks
Trigger external workflows
Notify your helpdesk, warehouse, or any other tool the moment a customer takes an action.
Sync data in real time
Push customer attributes, order details, or loyalty status to any third-party tool.
Send to custom channels
Reach Telegram, WhatsApp Business, voice bots, or any service with an API.
Pull data into flows
Use the webhook’s response to branch a flow or personalize the next message.
How it works
Setting up a webhook in Maestra Platform is a two-part job:Create an integration
The integration holds everything shared across your webhooks for a given service: the base URL, auth headers, and rate limits.
Part 1: Create the integration
Name your integration
Use something a teammate will recognize three months from now — for example,
Shopify Order Sync or Zendesk Ticket Webhooks.Set the root URL
This is the base URL all webhooks in this integration will share. You can either:
- Put the full URL here and leave the path blank on individual webhooks, or
- Put only the root here and let each webhook add its own path.

Set a request rate limit (optional)
If the receiving service has a rate cap, set the max requests per second here. All webhooks in this integration share this budget.
The actual rate can vary slightly due to network delays. Set the limit a little below what the service can handle to stay safely under the cap.

Add headers
Headers that apply to every webhook in this integration go here. The most common ones:

| Header | Purpose |
|---|---|
Authorization | API key, bearer token, or basic auth credentials |
Content-Type | Usually application/json for modern APIs |
| Custom headers | Anything else the receiving service requires |

Part 2: Create the webhook
Fill in the basics
| Field | What it’s for |
|---|---|
| Name | What teammates will see in the flow builder and campaigns list. |
| System name | A unique ID used to reference this webhook’s response. Use lowercase and hyphens, e.g. shopify-create-order. |
| Description | Optional. Drop a sentence here so future-you remembers why this exists. |
| Method | GET, POST, PUT, PATCH, or DELETE — whatever the receiving service expects. |
| URL | The path that gets appended to the root URL from your integration. Leave blank if the integration already has the full URL. |
| URL preview | Shows the full assembled URL. Read-only — just for sanity-checking. |

Add an idempotency key (recommended)
By default, a webhook is sent once. If the receiving service returns a You can put it in the URL, a header, or the request body. Where it goes depends on what the receiving service expects.
5xx or 429 error, the request is gone.Adding an idempotency key tells Maestra Platform to safely retry — up to 3 times over 6 minutes — without the receiving service treating the retries as new, duplicate events.Use the template variable:Example: adding it to the URL as a query parameter
Example: adding it to the URL as a query parameter
Append it after a 
If the URL already has query parameters, use 
?:
& instead:
Example: adding it as a header
Example: adding it as a header
Many APIs (Stripe-style) expect it as a header like
Idempotency-Key: ${WebhookRequest.TransactionalId}.Example: adding it to the request body
Example: adding it to the request body
Drop it into your JSON payload as a field the receiving service expects, e.g.
"request_id": "${WebhookRequest.TransactionalId}".Set webhook-specific headers
Headers from the integration are inherited automatically. You can:
In the example above, the final headers sent are:
- Turn off an inherited header by unchecking Use.
- Add extra headers that only apply to this webhook.

Build the request body
Drop in a JSON payload and pull in customer data using dynamic parameters from the message template engine.You can use:
- Variables like
${customer.email}or${order.totalPrice} - Conditionals with if / else if / end if
- Loops with for / end for — handy for line items in an order

Capture the response (optional)
If the receiving service sends back data you want to use later in your flow — an order number, a status, a tracking link — capture it here.Once captured, you can:
- Branch the flow based on whether the call succeeded
-
Personalize the next message with values from the response

Cloning a webhook
If you need a near-duplicate (same auth, different endpoint or payload), open the webhook’s menu and click Copy — faster than rebuilding from scratch.
Troubleshooting and monitoring
Once your webhook is live, the Webhook Logs view is your source of truth for what was actually sent, what came back, and where things went wrong.Use webhook responses in flows
Branch flows or personalize messages with data the receiving service sends back.
Webhook logs
Inspect every request and response for debugging and auditing.
Webhook-powered campaign content
Pull live data from an external service into your campaign content.
Message template engine
Reference for variables, conditionals, and loops in your request body.





