Skip to main content

Triggering an automation with an inbound webhook

Use the Catch inbound webhook trigger to start a Speak AI automation from an external tool, copy the unique Inbound URL, reference payload data with {{trigger.payload.*}} tokens, and review Recent deliveries.

Written by Speak Ai

An inbound webhook lets any external tool start a Speak AI automation by sending it an HTTP request. Tools like Zapier, GoHighLevel, Make, or your own script can POST data to a unique URL, and your automation runs with that data available to every later step. For the basics of building automations, see How to use automations in Speak AI.

Add the inbound webhook trigger

  1. Open the automation canvas and add a trigger step.

  2. Choose Catch inbound webhook from the trigger list.

  3. Save the automation. The Inbound URL field generates a unique URL for this automation. Until you save, the field shows Save this automation to generate the URL.

Copy the Inbound URL

After saving, the Inbound URL field shows a copyable link with a Copy button. It looks like this:

https://api.speakai.co/v1/webhook/in/<your-token>

  • The URL is unique to this one automation. Keep it private. Anyone with the URL can trigger the automation.

  • Send the data as an HTTP POST request to this URL.

Send a sample request so Speak AI learns the payload

Open the test step in the canvas. Under Send a request to this URL, the helper text reads Send a sample request to this URL so Speak AI can learn the payload shape. Send one real request from your external tool. Speak AI captures the fields from that request so you can reference them in later steps.

Use payload data in later steps

Once a field is captured, reference it with a token in any later step. The token format is:

{{trigger.payload.<path>}}

For example, if your request sends a contact object with an email, you can use {{trigger.payload.contact.email}} in a later step. Nested fields use a dot path.

View recent deliveries

The trigger shows a Recent deliveries list of incoming requests, newest first. Each delivery shows a status badge:

  • Captured: the request was received and its payload was captured as a sample.

  • Ran: the request was accepted and the automation ran.

  • Rejected: the request was refused, for example a failed signature check.

  • Error: another error occurred, shown with its code.

If No deliveries yet shows, no request has reached the URL. Deliveries are kept for 90 days.

Limits and optional signature checking

  • Rate limit: up to 60 requests per minute per URL and sending IP address. Extra requests get an HTTP 429 response with the message Too many requests. Please retry shortly.

  • Optional signature verification: if a signing secret is set on the webhook, each request must include an x-speak-timestamp header and an x-speak-signature header in the form sha256=<hex-digest>. The signature is HMAC-SHA256 over the timestamp and the raw request body, and the timestamp must be within 5 minutes. Failed checks return an HTTP 401. If no signing secret is set, the unguessable URL is the only control.

Next, chain a Speak Upload step after this trigger to transcribe a file URL from the payload automatically.


The fastest way to reach us is the live chat in the app (the chat bubble in the bottom corner). You can also email [email protected].

Did this answer your question?