How webhooks work

When Otis processes a forwarded email, it can send an HTTP POST request to a URL you configure. This lets you trigger automations in tools like Zapier, Make, Jira, Slack, or your own backend.

Webhooks are configured in your account settings. You provide a URL, and Otis sends a JSON payload each time an event fires.

Webhook events

Otis fires webhooks for three event types, matching its three email addresses:

draft.generated
Fired when Otis generates a draft reply. Includes the draft text, subject line, and metadata about the original email.
extraction.generated
Fired when Otis extracts structured data from an email. Includes key-value pairs, dates, amounts, and contact details found in the email.
summary.generated
Fired when Otis summarises an email thread. Includes the summary text, key points, and any action items identified.

Example payload

All webhook payloads follow the same structure. Here is an example for draft.generated:

// POST to your configured webhook URL { "event": "draft.generated", "timestamp": "2026-01-28T10:30:00Z", "data": { "subject": "Re: Q1 Budget Review", "draft_text": "Hi Sarah, thanks for sending...", "original_sender": "[email protected]", "original_subject": "Q1 Budget Review", "word_count": 142 }, "signature": "sha256=abc123..." }

Verifying webhook signatures

Every webhook request includes a signature field and an X-Otis-Signature header. Both contain an HMAC-SHA256 hash of the payload body, signed with your webhook secret.

To verify:

  1. Retrieve your webhook secret from your account settings.
  2. Compute an HMAC-SHA256 hash of the raw request body using your secret.
  3. Compare the computed hash with the value in the X-Otis-Signature header.

Always verify signatures before processing webhook data to ensure the request originated from Otis.

Connecting to automation platforms

Zapier

Use Zapier's "Webhooks by Zapier" trigger. Set it to "Catch Hook", copy the Zapier URL, and paste it into your Otis webhook settings. Zapier will receive the JSON payload and you can map fields to any of Zapier's 6,000+ app connections.

Make (formerly Integromat)

Create a new scenario with the "Webhooks" module as the trigger. Select "Custom webhook", copy the URL, and add it to your Otis settings. Make will parse the JSON automatically.

Custom endpoint

Point the webhook to any HTTPS endpoint that accepts POST requests with a JSON body. Your endpoint should return a 200 status within 10 seconds. Otis will retry failed deliveries up to 3 times with exponential backoff.

Example workflows

Email to Jira ticket
Forward a client email to [email protected]. Otis extracts key details. Your webhook sends the extraction to Jira, creating a ticket with the right fields populated.
[email protected] → webhook → Zapier/Make → Jira
Email summary to Slack
Forward a long thread to [email protected]. Otis summarises it. Your webhook posts the summary to a Slack channel so your team gets the short version.
[email protected] → webhook → Slack incoming webhook
Draft log to Google Sheets
Every time Otis generates a draft, log the subject, date, and word count to a Google Sheet. Useful for tracking email volume and response patterns.
[email protected] → webhook → Zapier → Google Sheets
Extraction to CRM
Forward inbound sales emails to [email protected]. Otis pulls out contact details, company name, and enquiry type. Your webhook creates or updates the contact in your CRM.
[email protected] → webhook → Make → HubSpot/Salesforce

Rate limits and reliability

Webhooks are dispatched within seconds of Otis completing a task. If your endpoint is unavailable, Otis retries up to 3 times: after 30 seconds, 5 minutes, and 30 minutes.

Each webhook delivery includes a unique X-Otis-Delivery-Id header. Use this to deduplicate if your endpoint receives the same event more than once.

Ready to connect Otis to your workflow?

Get Started Free