Zapier & Webhooks

Connect tocc.contact to Zapier, Make.com, or any automation tool using webhooks. When something happens — a new lead arrives, a conversation is escalated, a customer returns — tocc.contact instantly sends the details to your automation tool. No polling, no delays.

Available on Growth and Scale plans.

How to Connect With Zapier (Step by Step)

  1. In Zapier, create a new Zap. For the trigger, choose “Webhooks by Zapier” and then “Catch Hook”. Click Continue.
  2. Zapier will show you a webhook URL that looks like: https://hooks.zapier.com/hooks/catch/123456/abcdef/ Copy it.
  3. In tocc.contact, go to Settings > Zapier & Webhooks. Paste the Zapier URL and click Save.
  4. You will see a signing secret — copy it somewhere safe if you want to verify requests later (optional for Zapier, but good practice). This secret is shown once and cannot be retrieved again.
  5. Still in tocc.contact, click “Send test event”. This sends a sample lead notification to Zapier.
  6. Back in Zapier, click “Test trigger”. Zapier will find the test event and show you all the available fields: businessName, aliasEmail, eventType, customer email, customer name, etc.
  7. Add your action step — for example, send a Slack message, add a row to Google Sheets, create a HubSpot contact, or send yourself a text. Map the fields from the trigger to your action.
  8. Turn on your Zap. From now on, every real event will flow through automatically.

If you run multiple businesses, each one has its own webhook setting. You can point them to the same Zapier hook and use a Filter step on the “aliasEmail” field to route events, or create separate Zaps with separate hooks.

To disconnect, go to Settings > Zapier & Webhooks and click Remove. You can reconnect at any time — each save generates a fresh signing secret.

Connecting With Other Tools (Make.com, N8n, Custom)

The setup is the same idea: your tool gives you an HTTPS URL, you paste it into tocc.contact, and events arrive as JSON POST requests. Make.com uses a “Custom Webhook” module. n8n uses a “Webhook” trigger node.

For custom integrations, see the technical reference below.

Events

Six event types are delivered:

lead.new — A brand-new customer emails your business for the first time. Fields: customer email, name, source. customer.updated — A returning customer’s profile changed (new phone, company detected). Fields: customer email, name, what changed. customer.returning — A customer who has not emailed in 30+ days reaches out again. Fields: customer email, name, days since last contact. conversation.escalated — The AI escalated a conversation to the business owner. Fields: thread ID, reason. conversation.resolved — A conversation thread was marked resolved. Fields: thread ID, resolution type. lead.stalled — A lead has gone 48+ hours without an owner reply. Fields: customer email, name, thread ID, hours since last contact.

Technical Reference

Each webhook is an HTTPS POST with these headers:

  • Content-Type: application/json
  • X-Tocc-Signature: sha256= (HMAC-SHA256 of the raw JSON body using your signing secret)
  • X-Tocc-Event: (e.g. lead.new)

Your endpoint must respond within 5 seconds with any 2xx status code. If it fails, tocc.contact retries once immediately. There is no retry queue beyond that.

To verify the signature (optional — Zapier does not require this), compute HMAC-SHA256 of the raw request body using your signing secret and compare:

const crypto = require("crypto");
const expected = "sha256=" + crypto.createHmac("sha256", YOUR_SECRET).update(rawBody).digest("hex");
if (expected !== req.headers["x-tocc-signature"]) throw new Error("Invalid signature");

Every event payload has this shape:

{ "id": "evt_...", "businessId": "...", "alias": "jayshats", "aliasEmail": "jayshats@tocc.contact", "businessName": "Jays Hats", "eventType": "lead.new", "timestamp": "2026-03-21T...", "version": "1.0", "data": { ... } }

The alias, aliasEmail, and businessName fields identify which business triggered the event.

Detailed data fields per event type:

lead.new data: { customerId, email, name, source, stage }

customer.updated data: { customerId, email, name, changedFields }

customer.returning data: { customerId, email, name, daysSinceLast }

conversation.escalated data: { customerId, threadId, reason }

conversation.resolved data: { customerId, threadId, resolutionType }

lead.stalled data: { customerId, email, name, threadId, hoursSince }

The test event uses event type “lead.new” with data: { test: true, email: “test@example.com”, name: “Test Lead”, source: “webhook-test” }. It includes the same alias, aliasEmail, and businessName fields as real events.