New: Integrations

Live Chat Webhooks Send Every Chat Into the Tools You Already Use

When a chat starts, ends, a message arrives out of hours or a visitor leaves feedback, IMsupporting sends the details to your CRM, helpdesk, spreadsheet, Zapier, Make, n8n or your own code. Every event is signed, sent over HTTPS and retried until your system confirms it.

  • Standard Webhooks format
  • HMAC-SHA256 signed
  • HTTPS only
  • Retried for about a day
  • Included in the free plan

Already in use with police forces and councils across the UK.

A live chat window in the centre sending signed, padlocked events along beams of light to a CRM contact card, a helpdesk ticket stack, a spreadsheet, a team chat, an analytics chart and a records archive

The short answer

What are live chat webhooks?

In short

Live chat webhooks are automatic, signed messages that IMsupporting sends to your other systems the moment something happens in your live chat. They turn every conversation into data your CRM, helpdesk, reporting and automation tools can act on, with no exports, copying or polling.

Events
Chat started, chat closed, offline message received, feedback submitted
Format
JSON over HTTPS POST, in the open Standard Webhooks format
Security
HMAC-SHA256 signature on every request, secret shown once
Speed
Usually within a minute of the event
Reliability
7 attempts over about a day, then resend for 3 days
Plans
Free: 1 endpoint. Paid: up to 5 endpoints
Set up in
Dashboard > Integrations (Administrators)

Most live chat software keeps conversations inside its own dashboard. That's fine until a sales lead needs to be in the CRM, an out-of-hours message needs to be a ticket, or your manager wants chat feedback next to phone and email figures in one report.

Webhooks fix that. You add a secure web address (an endpoint) in your dashboard, choose the events you care about, and we post each one to it as it happens. Your system replies "got it", and if it doesn't, we keep trying.

An illustration of the Delivery log tab, with example values.

How it works

From chat to your system in about a minute

A visitor chats on your website. When the chat starts, ends or gets a rating, IMsupporting seals the details in a signed message, sends it over HTTPS and waits for your system to say it arrived.

Select to enlarge. Chat event, signature, HTTPS, confirmed delivery, and automatic retries if your system doesn't answer.

Set it up in five steps

  1. Open IntegrationsSign in to your IMsupporting dashboard as an Administrator and choose Integrations in the side menu.
  2. Add your endpointPaste the https:// address of your system or automation tool, describe it, and pick the events it should receive. Turn on the full transcript only if that system needs it.
  3. Copy the signing secretThe secret starts with whsec_ and is shown once. Store it in your system or password manager, never in a code repository.
  4. Send a test eventPress Send test event. Your endpoint receives a signed ping event and the result appears straight away.
  5. Watch the Delivery logReal events are usually sent within a minute. The Delivery log shows every attempt and result for 30 days, with Send now and Redeliver buttons.

What happens behind the scenes

  • The event is queued, never sent inline. A slow or broken receiver can never slow down a chat, a message or a rating.
  • It's signed with your endpoint's secret using HMAC-SHA256, so your system can prove it came from us and wasn't changed on the way.
  • It's posted over HTTPS to your address only. We don't follow redirects and we never send to private or internal network addresses.
  • Any 2xx reply means delivered. Anything else, or no reply within 10 seconds, is tried again on a schedule (see retries).
  • Every attempt is logged in the Delivery log for 30 days, with the result and the status code your system replied with.

Event explorer

The four live chat events, and exactly what's inside them

Pick an event to see when it's sent, what it carries and a real example of the JSON your system receives. Values are examples.

chat.started A visitor starts a chat

Sent when someone starts a chat with a person or with the AI agent, including when they accept an operator's chat invitation.

What you get

  • Who's chatting: name, email and phone when given
  • Department, and whether the AI agent or a person is handling it
  • The page they started on
  • Their pre-chat and chat flow answers, such as an order or reference number

Popular uses

  • Alert a Microsoft Teams or Slack channel when a sales chat starts
  • Look the visitor up in your CRM so the history is ready
  • Count live demand by hour and department
"data": {
  "chat": {
    "session_id": "a1b2c3d4e5f6g7h8i9j0",
    "started_at": "2026-10-06T14:20:02Z",
    "department": "Sales",
    "source": "flow_widget",
    "started_via": "chat_button",
    "handled_by": "ai",
    "operator": null
  },
  "visitor": {
    "name": "Alex Smith",
    "email": "alex@example.com",
    "phone": "+44 7700 900123"
  },
  "page_url": "https://www.example.com/pricing",
  "prechat_fields": [
    { "label": "Order number", "value": "10452" }
  ]
}

chat.closed A chat ends

Sent when an operator closes a chat, when an AI agent chat times out and when a chat flow finishes. It's the richest event, and the one most teams start with.

What you get

  • Start and end times, who handled and closed it, department and the category your team chose
  • Message counts, and whether the visitor left before getting a reply
  • Visitor details and every pre-chat and chat flow answer
  • The AI summary and sentiment, when AI chat summaries are on
  • The full public conversation, only if you turn it on for that endpoint

Popular uses

  • Create or update a contact and log the conversation in your CRM
  • Archive transcripts in your records system under your own retention rules
  • Turn a category such as "Callback needed" into a task in the right queue
"data": {
  "chat": {
    "session_id": "a1b2c3d4e5f6g7h8i9j0",
    "started_at": "2026-10-06T14:20:02Z",
    "closed_at": "2026-10-06T14:32:10Z",
    "closed_by": "sarah",
    "operator": "Sarah",
    "department": "Sales",
    "category": "Pricing question",
    "visitor_message_count": 6,
    "operator_message_count": 5,
    "abandoned": false,
    "abandoned_reason": null,
    "handled_by_ai": false
  },
  "visitor": {
    "name": "Alex Smith",
    "email": "alex@example.com",
    "phone": null
  },
  "prechat_fields": [
    { "label": "Order number", "value": "10452" }
  ],
  "ai_summary": {
    "summary": "Alex asked about annual pricing and was sent a quote.",
    "sentiment": "Positive"
  },
  "transcript": [
    { "from": "visitor", "name": "Alex Smith",
      "text": "Hi, do you offer annual plans?",
      "sent_at": "2026-10-06T14:20:15Z" },
    { "from": "operator", "name": "Sarah",
      "text": "We do. I can send you a quote now.",
      "sent_at": "2026-10-06T14:20:41Z" }
  ],
  "transcript_included": true
}

offline_message.created A message arrives while you're closed

Sent when a visitor leaves a message while chat is offline, from the classic chat widget or a chat flow.

What you get

  • The message, when it arrived and the department
  • The visitor's name, email and phone
  • A ticket id when your account turns offline messages into tickets

Popular uses

  • Open a helpdesk ticket so the morning shift starts with a tidy queue
  • Text or email the on-call person for urgent departments
  • Add the enquiry to your CRM as a new lead
"data": {
  "offline_message": {
    "id": 8812,
    "received_at": "2026-10-06T22:05:40Z",
    "message": "Please call me back about my order tomorrow morning.",
    "department": "Support",
    "source": "flow_widget",
    "session_id": "k1l2m3n4o5p6q7r8s9t0",
    "ticket_id": null
  },
  "visitor": {
    "name": "Jo Bloggs",
    "email": "jo@example.com",
    "phone": "01632 960123"
  }
}

feedback.submitted A visitor rates a chat

Sent when a visitor rates a chat or leaves a comment, in the chat window or from the rating link in a transcript email.

What you get

  • The rating from 1 to 5 and any comment
  • Answers to your own feedback questions
  • The department and the chat it belongs to

Popular uses

  • Alert a team leader the moment a 1 or 2 star rating arrives
  • Feed satisfaction scores into Power BI, Looker Studio or a spreadsheet
  • Ask happy customers for a public review
"data": {
  "feedback": {
    "id": 3301,
    "session_id": "a1b2c3d4e5f6g7h8i9j0",
    "rating": 5,
    "rating_scale": 5,
    "comment": "Quick and helpful, thank you!",
    "answers": [
      { "question": "Did we solve your problem?", "answer": "Yes" }
    ],
    "department": "Sales",
    "source": "chat_widget",
    "submitted_at": "2026-10-06T14:33:02Z"
  },
  "visitor": {
    "name": "Alex Smith",
    "email": "alex@example.com",
    "phone": null
  }
}

Every event shares the same outer envelope: id (for example msg_2f6c1d0e9a8b7c6d5e4f3a2b, the same on every retry), type, timestamp, api_version, site_id and data. Values we don't have are null, and visitor IP addresses and private operator notes are never included.

Use cases

Live chat integration ideas you can set up this week

Each idea is a simple recipe: when an event happens, then your tool does something with it. Build them with Zapier, Make or n8n, or a few lines of your own code.

A live chat window on the left with a ribbon of light flowing into a contact record that fills in automatically, beside a sales funnel and a rising bar chart

Sales and CRM

Stop retyping chat details. Every lead lands in your CRM with the conversation attached.

  • Whenchat.closed Create or update the contact in your CRM

    Match on email, add the AI summary to the timeline and attach the transcript, in tools such as HubSpot, Salesforce or Pipedrive through your automation tool.

  • Whenchat.started Ping the sales channel while the visitor is still there

    Filter on the Sales department or the page they're on (a pricing page, say) and post an alert to Microsoft Teams or Slack.

  • Whenchat.closed Chase the visitors who gave up

    abandoned is true when someone left before getting a reply. If they gave an email or phone number, add them to a call-back list.

At night, envelopes fly out of a closed shop's chat bubble and drop into a kanban board as ticket cards, ready for the team at sunrise with a smiling coffee mug

Customer support and helpdesk

Nothing waits in an inbox. Out-of-hours messages and follow-ups become tickets automatically.

  • Whenoffline_message.created Open a ticket in your helpdesk

    Zendesk, Freshdesk, Jira Service Management or your own queue, with the visitor's details and department already filled in.

  • Whenchat.closed Turn a chat category into a follow-up task

    Your team picks a category when they close a chat. "Refund request" or "Callback needed" can create a task in the right queue, with the transcript attached.

  • Whenchat.closed Keep a searchable archive

    Save each transcript to SharePoint, Google Drive, a database or a data warehouse, and keep it for as long as your own policy says.

Golden rating stars stream from a list of chat reviews into an analytics dashboard with line, donut and bar charts, while a notification bell lights up

Feedback, quality and reporting

Put chat next to your phone and email figures, and hear about unhappy customers in minutes, not at month end.

  • Whenfeedback.submitted Alert a team leader about low ratings

    Filter on a rating of 1 or 2 and send an email or a Teams message with the comment and a link back to the chat.

  • Whenfeedback.submitted Build a live satisfaction report

    Append every rating to Google Sheets or Excel, or feed Power BI or Looker Studio, split by department.

  • Whenchat.closed Measure AI and human chats side by side

    handled_by_ai, message counts and AI sentiment show how much your AI agent resolves and where people step in.

Ecommerce, bookings and local businesses

Add a note to the order

Ask for an order number in your pre-chat form. When the chat closes, your automation finds the order in your shop system and adds the AI summary as a note.

Never miss a booking request

Hotels, salons, garages and clinics: send out-of-hours messages to the booking team's shared inbox or diary tool so the first call in the morning is a confirmation.

Turn five stars into reviews

When a visitor gives 5 stars and left an email, send a friendly follow-up asking for a public review.

Quote requests into your pipeline

Chat flow answers (job type, postcode, budget) arrive as labelled fields, ready to drop into a quote template or job sheet.

See which pages start conversations

page_url on every chat.started shows which products, services or help pages make people reach out.

Agencies and multi-site teams

Send every client account's chats into one reporting database, with site_id telling them apart.

Public sector

Webhooks for police 101 live chat and council contact centres

Public services need a record of every contact and a reliable route for anything that needs action. Webhooks deliver both to systems your organisation controls.

Police non-emergency contact

From 101 live chat to the right team, with nothing retyped

  • A record of every contact. Send each closed chat, with the transcript turned on, into your records or contact log so it sits under your own retention and information management rules.
  • Chats that become follow-up tasks. Handlers choose a category when they close a chat. Your integration reads it, with the department, contact details, pre-chat answers and AI summary, and creates the task in the right queue.
  • Out-of-hours messages ready for the next shift. Messages left while chat is closed go straight into your contact centre's queue.
  • Chats that ended early, flagged for review. chat.closed shows when someone left before a reply, so you can review them under your own policies.
  • Demand and public feedback reporting. Chart demand by hour and department in Power BI, and add ratings and comments to your public confidence reporting.

There are no built-in records management, command and control or case management connectors. Events go to an endpoint your force or council runs, such as Azure Logic Apps, Power Automate or your integration hub, which then updates your systems under your own rules. Nothing is actioned automatically on our side.

Read more: live chat for police and live chat for councils.

A public service contact centre desk with a headset and chat screen, linked by glowing lines to a secure records cabinet with a shield and padlock and to a task board where cards are sorted into lanes

Councils: chats into your CRM

Log every resident conversation against the right service, such as waste, council tax or housing repairs, and create a case when a chat needs follow-up.

Your rules, your systems

You decide which events and fields leave the chat, where they're stored and for how long. Full conversations are off until an administrator turns them on.

Ready for assurance reviews

Open format, signed requests, HTTPS only, no IP addresses, administrator-only setup and a 30-day delivery log give your security and DPIA reviewers clear answers.

No code needed

Connect live chat to Zapier, Make, n8n and Microsoft tools

You don't need a developer to start. Automation tools give you a web address that "catches" incoming events. Paste it into IMsupporting as your endpoint, press Send test event, then build what happens next with clicks.

From there you can reach thousands of apps: CRMs, helpdesks, spreadsheets, email, SMS, Microsoft Teams and Slack.

Most no-code tools don't check our signature, so treat the catch address like a password: keep it private, and create a new one if it's ever shared.

Select to enlarge. One chat event can branch into email, team chat and spreadsheet steps.

Zapier

Create a Zap with the Webhooks by Zapier trigger and choose Catch Hook, then paste the address into IMsupporting.

Zapier: trigger Zap workflows from webhooks

Zapier's webhook triggers need a paid Zapier plan

n8n

Add a Webhook trigger node set to POST. n8n can be self-hosted, and a Code step can check our signature before anything else runs.

n8n: Webhook node documentation

Power Automate

The When an HTTP request is received trigger works too, but Microsoft is making new flows accept only signed-in users from your organisation by default. To receive our events, the flow must allow Anyone to trigger it, which your Microsoft 365 administrators may restrict.

Microsoft Learn: authentication for HTTP request triggers

Your own code

Any server that can receive an HTTPS POST: PHP, Node.js, Python, .NET, Go, or a serverless function. Copy-ready samples are below and in your dashboard.

Stuck? Ask the AI Integration Helper in your dashboard, or use our free integration assistance.

Slack and Discord webhook addresses expect their own message format, so put an automation tool in between. For chats that use a ChatFlow, the ChatFlow Webhook step can post to Slack and Discord directly.

For developers

Standard Webhooks, signed with HMAC-SHA256

We follow the open Standard Webhooks specification, the same format used by companies such as OpenAI, Twilio, PagerDuty and Svix. Any Standard Webhooks library can verify our requests, or use the samples below.

Request headers on every event
HeaderWhat it is
webhook-idThe event id, such as msg_2f6c1d0e9a8b7c6d5e4f3a2b. It stays the same on every retry, so use it to ignore duplicates.
webhook-timestampWhen this attempt was sent, in Unix seconds. Reject anything more than 5 minutes old.
webhook-signaturev1, then the Base64 HMAC-SHA256 of id.timestamp.body made with your secret. For 24 hours after you create a new secret there are two signatures, separated by a space.

Build a receiver that never misses

  • Verify against the raw request body, before any JSON parsing, using a constant-time comparison.
  • Reply with a 2xx within 10 seconds and do slow work afterwards, for example on a queue.
  • Store the event id and skip ids you have already processed. Delivery is at-least-once.
  • Use the timestamp in the body if order matters: events can arrive out of order.
  • Escape values before showing them in a web page. We remove HTML tags, but visitors can still type characters such as <.
  • Reply 410 Gone if you want us to stop: the endpoint is turned off straight away.
<?php
$secret    = getenv('IMS_WEBHOOK_SECRET'); // "whsec_..."
$body      = file_get_contents('php://input'); // raw body
$id        = $_SERVER['HTTP_WEBHOOK_ID'] ?? '';
$timestamp = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'] ?? '';
$header    = $_SERVER['HTTP_WEBHOOK_SIGNATURE'] ?? '';

// Replay protection: 5 minutes either way
if (!ctype_digit($timestamp) || abs(time() - (int)$timestamp) > 300) {
    http_response_code(400); exit;
}

$key      = base64_decode(substr($secret, strlen('whsec_')));
$expected = base64_encode(hash_hmac('sha256',
    $id . '.' . $timestamp . '.' . $body, $key, true));

$valid = false;
foreach (explode(' ', $header) as $part) {
    [$v, $sig] = array_pad(explode(',', $part, 2), 2, '');
    if ($v === 'v1' && hash_equals($expected, $sig)) { $valid = true; break; }
}
if (!$valid) { http_response_code(401); exit; }

http_response_code(204); // reply first, then do the work
$event = json_decode($body, true);
const crypto = require('crypto');
const express = require('express');
const app = express();

app.post('/webhooks/imsupporting',
  express.raw({ type: 'application/json' }), (req, res) => {
  const secret = process.env.IMS_WEBHOOK_SECRET; // "whsec_..."
  const id = req.get('webhook-id') || '';
  const ts = req.get('webhook-timestamp') || '';
  const header = req.get('webhook-signature') || '';

  if (!/^\d+$/.test(ts) || Math.abs(Date.now() / 1000 - Number(ts)) > 300) {
    return res.sendStatus(400);
  }
  const key = Buffer.from(secret.slice('whsec_'.length), 'base64');
  const expected = crypto.createHmac('sha256', key)
    .update(`${id}.${ts}.`).update(req.body).digest('base64');

  const valid = header.split(' ').some((part) => {
    const [v, sig] = part.split(',');
    return v === 'v1' && sig && sig.length === expected.length &&
      crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));
  });
  if (!valid) return res.sendStatus(401);

  res.sendStatus(204); // reply first, then do the work
  const event = JSON.parse(req.body.toString('utf8'));
});
import base64, hashlib, hmac, os, time
from flask import Flask, request, abort

app = Flask(__name__)
SECRET = os.environ['IMS_WEBHOOK_SECRET']  # "whsec_..."

@app.post('/webhooks/imsupporting')
def imsupporting_webhook():
    body = request.get_data()  # raw bytes
    msg_id = request.headers.get('webhook-id', '')
    ts = request.headers.get('webhook-timestamp', '')
    header = request.headers.get('webhook-signature', '')

    if not ts.isdigit() or abs(time.time() - int(ts)) > 300:
        abort(400)

    key = base64.b64decode(SECRET[len('whsec_'):])
    signed = f'{msg_id}.{ts}.'.encode() + body
    expected = base64.b64encode(
        hmac.new(key, signed, hashlib.sha256).digest()).decode()

    if not any(p.startswith('v1,') and hmac.compare_digest(p[3:], expected)
               for p in header.split(' ')):
        abort(401)

    event = request.get_json()
    return '', 204

Fuller versions, with comments, are in the Developer guide tab of your dashboard. The Standard Webhooks specification lists official libraries for more languages.

Delivery and retries

Built for the day your server has a bad morning

If your system is down, busy or mid-deployment, events wait and try again. Seven attempts spread over about a day, then three more days to send them by hand.

  1. First tryUsually within a minute
  2. +1 minuteSecond attempt
  3. +5 minutesThird attempt
  4. +30 minutesFourth attempt
  5. +2 hoursFifth attempt
  6. +6 hoursSixth attempt
  7. +12 hoursLast attempt
  8. 3 daysResend from the Delivery log

Send now and Redeliver

Fixed your receiver? Press Send now on a waiting event, or Redeliver a recent one. Each can be used up to three times per event.

Safe switch-off

If every delivery to an endpoint fails for 3 days, we turn it off and email the account owner. Fix it, press Send test event and switch it back on.

Fair limits

Unusually high activity is limited automatically, so a single visitor or bot can't use up your daily allowance. The owner is emailed if the allowance is reached.

Security and privacy

Secure webhooks by default, not by configuration

Webhooks carry customer conversations, so we treat them like it. You choose what is sent and where, and every change that matters is checked and recorded.

A sealed envelope with a green fingerprint wax seal and a tick, surrounded by a translucent shield, a padlock and a key on a dark blue background
Every request is signed
An HMAC-SHA256 signature over the event id, timestamp and body (RFC 2104). The secret is shown once; a new secret overlaps with the old one for 24 hours so you can switch without downtime.
HTTPS only, to public addresses only
Endpoints must use https:// with a domain name on port 443 or 8443. We never send to private or internal network addresses and don't follow redirects, the safeguards the OWASP SSRF guidance recommends for webhooks.
Only what you choose leaves the chat
Full conversations are off by default and turned on per endpoint. Visitor IP addresses and private operator notes are never sent. That supports the data minimisation principle in UK GDPR.
Administrators only, with step-up checks
Only Administrators can manage integrations. Adding an endpoint, changing its address, turning on transcripts, creating a new secret or switching an endpoint back on asks for the administrator's two-step sign-in code when they use one, and emails the account owner.
Encrypted while waiting, then removed
Events waiting to be sent are stored encrypted and removed 3 days after delivery finishes. Changing an endpoint's address or turning transcripts off clears its stored events. The delivery log keeps 30 days of results.
Part of a UK-hosted platform
Chat data is stored in UK data centres, and IMsupporting is Cyber Essentials certified. Once an event reaches your endpoint, it's covered by your own systems and policies. See GDPR-compliant live chat.

Choose the right tool

Webhooks, ChatFlow steps or AI tools: which do you need?

IMsupporting connects to your systems in four ways. Webhooks report what happened; the others act during the conversation.

Ways to connect IMsupporting live chat to other systems
Option Integrations webhooks ChatFlow Webhook step API Form and API Conditional AI tools
When it runs After a chat starts or ends, an offline message or feedback At the point you place it in a chat flow During a chat flow, waiting for your API's answer When the AI agent decides it needs live data
Covers Every chat on the account, both chat widgets Chats that use that ChatFlow Chats that use that ChatFlow AI agent conversations
Signed and retried Yes: Standard Webhooks signature, 7 attempts over about a day, delivery log Custom headers you set, short retries, doesn't wait for an answer Custom headers you set, the chat uses the answer Called server-side with the authentication you set
Best for CRM records, tickets, archives, reporting Instant Slack or Discord alerts mid-flow Submitting forms, checking a reference, branching Order status, availability, account lookups
Learn more You're here Webhook step API Form, API Conditional AI tool integrations

Plans and limits

Webhook limits by plan
LimitFree plan and trialsPaid plans
Endpoints1Up to 5
Events a dayUp to 500Up to 20,000
Test eventsNot countedNot counted
Message sizeUp to 256 KBUp to 256 KB
Delivery log30 days30 days

Webhooks are included on every plan, including free. Create an account, open Integrations and send your first test event in a few minutes.

Start Free

Webhook terms explained

Webhook glossary in plain English

New to webhooks? These are the words you'll see in your dashboard and in integration guides.

Webhook
An HTTP request one system sends to another when something happens, so the receiver hears about it straight away without having to ask.
Endpoint
The https:// address that receives your webhooks. It belongs to your system or to an automation tool such as Zapier, Make or n8n.
Event
Something that happened in your live chat, such as chat.started or chat.closed. Each event has its own id, type and timestamp.
Payload
The JSON body of the request: the details of the event, such as the visitor, the department, pre-chat answers and, if you opted in, the transcript.
Signing secret
A private key that starts with whsec_, shown once when you add an endpoint. Your system uses it to check that each request really came from IMsupporting.
HMAC signature
A code made from the message and your secret (HMAC-SHA256). If anyone changes the message or doesn't have the secret, the signature won't match.
Idempotency
Handling the same event twice without doing the work twice. Use the event id, which stays the same on every retry, to skip events you have already processed.
Retry
Sending an event again when the endpoint didn't reply with a 2xx status in time. IMsupporting retries over about a day.
Standard Webhooks
An open specification for sending webhooks securely and consistently, with the webhook-id, webhook-timestamp and webhook-signature headers.

Live chat webhooks FAQ

Questions about live chat webhooks

What is a live chat webhook?

A live chat webhook is a message your live chat software sends to another system the moment something happens, such as a chat starting or ending. Instead of exporting chats or copying details by hand, IMsupporting posts each event as JSON to a secure web address you choose, and your CRM, helpdesk, automation tool or own code takes it from there.

Which live chat events can IMsupporting send?

Four: chat.started when a visitor starts a chat with a person or the AI agent, chat.closed when a chat ends, offline_message.created when someone leaves a message while chat is closed, and feedback.submitted when a visitor rates a chat or leaves a comment. A ping test event is sent by the Send test event button. You choose which events each endpoint receives.

Can I send the full chat transcript to my CRM?

Yes. Turn on "Include the full chat transcript" for that endpoint and each chat.closed event carries the public conversation (the newest 500 messages for very long chats). It is off by default, so each endpoint only receives full conversations if an administrator chooses that. Private operator notes are never included.

How quickly are webhook events delivered?

Usually within a minute of the event. Your endpoint should reply with any 2xx status within 10 seconds and do slow work afterwards. Events can arrive out of order, so use the timestamp in the body if order matters.

What happens if my system is down?

We try again after about 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 12 hours. If all 7 attempts fail, the delivery is marked Failed and you can send it again from the Delivery log for 3 days. If every delivery to an endpoint fails for 3 days, we turn the endpoint off and email the account owner. Reply 410 Gone if you want us to stop sending.

How do I know a webhook really came from IMsupporting?

Check the signature. Every request carries webhook-id, webhook-timestamp and webhook-signature headers in the open Standard Webhooks format. The signature is an HMAC-SHA256 of the event id, timestamp and raw body, made with your endpoint's secret, so any Standard Webhooks library or the PHP, Node.js and Python samples on this page can verify it.

Can I get live chat alerts in Slack or Microsoft Teams?

Yes, through an automation tool. Slack and Teams expect their own message format, so you can't paste their webhook address in directly. Point your IMsupporting endpoint at Zapier, Make, n8n, Azure Logic Apps or Power Automate and let it post the message. For chats that use a ChatFlow, the ChatFlow Webhook step can post straight to Slack and Discord.

Do I need a developer to use webhooks?

No. With Zapier, Make or n8n you paste the address the tool gives you, press Send test event and build the rest with clicks. Connecting your own system needs a small piece of code, and the Developer guide in your dashboard has copy-ready samples. The AI Integration Helper in your dashboard answers setup questions, and our team offers free integration assistance.

Are webhooks included in the free plan?

Yes. The free plan and free trials include 1 endpoint and up to 500 events a day. Paid plans include up to 5 endpoints and up to 20,000 events a day. Test events don't count towards the daily allowance. See pricing.

What data is never sent in a webhook?

Visitor IP addresses and private operator notes are never sent. Full conversations are only sent to endpoints where you turn them on, and AI summaries only appear when AI chat summaries are switched on for your account. Text arrives with HTML tags removed, but always escape values before showing them in a web page.

Can police forces and councils connect webhooks to their own systems?

Yes, through an endpoint they control. There are no built-in connectors for records management, command and control, case management or council CRM systems. Events go to an HTTPS address your organisation runs, such as Azure Logic Apps, Power Automate or your integration hub, which then updates your systems under your own rules. See live chat for police and live chat for councils.

What is the difference between Integrations webhooks and the ChatFlow Webhook step?

Integrations webhooks cover every chat on your account, are signed and are retried for about a day, and you manage them in one place. The ChatFlow Webhook step fires from a point you choose inside a chat flow, can add custom headers and post straight to Slack or Discord, and doesn't wait for an answer. Many teams use both: the step for in-the-moment alerts, webhooks for records and reporting.

Can I receive webhooks on a server inside my private network?

Not directly. The endpoint must be a full https:// address with a domain name (not an IP address) that can be reached from the internet, on port 443 or 8443. Redirects are not followed, so use the final address. Systems on a private network need a public HTTPS front door, such as an API gateway or an integration platform.

Integrations

Put every conversation to work

Start free, add your first endpoint and watch your next chat arrive in your CRM, helpdesk or spreadsheet. Or book a demo and we'll map your integration with you.

Already in use with police forces and councils across the UK.