Kenso

Webhooks

Kenso sends events to your HTTPS endpoint as signed POST requests: a reply arrives, a meeting is booked, a campaign launches. This guide covers adding an endpoint, checking each delivery's signature, what happens when your endpoint fails, and every event type with an example payload.

Ken-Version: 2026-11-02

Add an endpoint

In the Kenso app, open Settings > Integrations > Webhooks, add your URL and pick the event types. Or create the endpoint with the API:

Request
curl -X POST "https://api.ken.so/v1/webhook-endpoints" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: 812" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/webhooks/kenso", "events": ["reply.received", "meeting.booked"]}'
  • The url must use https and resolve to a public address. A workspace holds at most 25 endpoints.
  • events lists the event types the endpoint receives. campaignIds and classifications narrow them further (Filters and batches).
  • Every webhook endpoint call needs the integrations permission in the workspace.

Each endpoint has its own signing secret, which starts with whsec_. Read it with the API, using the endpoint's id (ep_...), and keep it as private as an API key:

Request
curl "https://api.ken.so/v1/webhook-endpoints/$ENDPOINT_ID/signing-secret" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: 812"

There is no call to rotate a secret yet. To replace one, add a new endpoint, switch your receiver to its secret, then delete the old endpoint.

What a delivery looks like

Each event is one POST with a JSON body. The body is the event itself, with no wrapper: eventType says what happened, eventId identifies the event, timestamp is when it happened (ISO 8601, UTC) and clientId is your workspace id. Field names are camelCase.

Header
Value
svix-id
The message id (msg_...). The same on every retry and resend of one message, so dedupe on it.
svix-timestamp
When this attempt was sent, in Unix seconds. Each retry carries a new one.
svix-signature
One or more signatures separated by spaces, each v1, followed by a base64 HMAC-SHA256.
content-type
application/json
user-agent
Svix-Webhooks/ and the version of the delivery service.

Kenso delivers webhooks through Svix, an open-source webhook service, which is where the header names come from.

Verify the signature

Check every delivery before you act on it. The signature is an HMAC-SHA256 of {svix-id}.{svix-timestamp}.{body}. Its key is your secret after whsec_, base64-decoded, and the header carries the result base64-encoded after v1,. Three things to get right:

  • Sign the raw body, the bytes you received. A body your framework parsed and turned back into JSON can differ by one space and fail.
  • Reject a svix-timestamp more than 5 minutes away from your clock, in either direction, so an old delivery can't be replayed. Every retry is signed again with a fresh timestamp, so retries pass.
  • Compare in constant time, and accept the delivery when any v1 signature in the header matches.

In Node.js, with no dependencies:

Node.js
import crypto from "node:crypto";

const TOLERANCE_SECONDS = 5 * 60;

// Checks a Kenso webhook delivery and returns its event. Throws when the delivery is not genuine.
// rawBody: the body exactly as received (Buffer or string), before any JSON parsing.
// headers: lowercase header names (Express req.headers, or Object.fromEntries(request.headers)).
// secret: the endpoint's signing secret, whsec_...
export function verifyKensoWebhook(rawBody, headers, secret) {
  const id = headers["svix-id"];
  const timestamp = headers["svix-timestamp"];
  const signatures = headers["svix-signature"];
  if (!id || !timestamp || !signatures) throw new Error("Missing svix-id, svix-timestamp or svix-signature");

  const age = Math.abs(Date.now() / 1000 - Number(timestamp));
  if (!/^\d+$/.test(timestamp) || age > TOLERANCE_SECONDS) throw new Error("Timestamp outside the 5-minute tolerance");

  const key = Buffer.from(secret.replace(/^whsec_/, ""), "base64");
  const expected = crypto.createHmac("sha256", key).update(`${id}.${timestamp}.`).update(rawBody).digest();

  const valid = signatures.split(" ").some((entry) => {
    const [version, signature] = entry.split(",");
    const given = Buffer.from(signature ?? "", "base64");
    return version === "v1" && given.length === expected.length && crypto.timingSafeEqual(given, expected);
  });
  if (!valid) throw new Error("No valid signature");
  return JSON.parse(rawBody.toString());
}

Used from an Express route:

Node.js
import express from "express";
import { verifyKensoWebhook } from "./verify-kenso-webhook.js";

const app = express();

// express.raw keeps the body as bytes. A body parsed and serialized again no longer matches the signature.
app.post("/webhooks/kenso", express.raw({ type: "application/json" }), (req, res) => {
  let event;
  try {
    event = verifyKensoWebhook(req.body, req.headers, process.env.KENSO_WEBHOOK_SECRET);
  } catch {
    return res.sendStatus(400);
  }
  res.sendStatus(200);
  // Hand event to your own queue here, after the 2xx.
});

In Python, with the standard library only:

Python
import base64
import hashlib
import hmac
import json
import time

TOLERANCE_SECONDS = 5 * 60


def verify_kenso_webhook(raw_body: bytes, headers, secret: str) -> dict:
    """Checks a Kenso webhook delivery and returns its event. Raises ValueError when it is not genuine.

    raw_body: the body exactly as received, before any JSON parsing.
    headers: Flask or Django request.headers, or a dict with lowercase names.
    secret: the endpoint's signing secret, whsec_...
    """
    msg_id = headers.get("svix-id")
    timestamp = headers.get("svix-timestamp")
    signatures = headers.get("svix-signature")
    if not msg_id or not timestamp or not signatures:
        raise ValueError("Missing svix-id, svix-timestamp or svix-signature")
    if not timestamp.isdigit() or abs(time.time() - int(timestamp)) > TOLERANCE_SECONDS:
        raise ValueError("Timestamp outside the 5-minute tolerance")

    key = base64.b64decode(secret.removeprefix("whsec_"))
    signed = f"{msg_id}.{timestamp}.".encode() + raw_body
    expected = hmac.new(key, signed, hashlib.sha256).digest()

    for entry in signatures.split(" "):
        version, _, signature = entry.partition(",")
        if version != "v1":
            continue
        try:
            given = base64.b64decode(signature, validate=True)
        except ValueError:
            continue
        if hmac.compare_digest(given, expected):
            return json.loads(raw_body)
    raise ValueError("No valid signature")

Used from a Flask route:

Python
import os
from flask import Flask, request

app = Flask(__name__)


@app.post("/webhooks/kenso")
def kenso_webhook():
    try:
        event = verify_kenso_webhook(request.get_data(), request.headers, os.environ["KENSO_WEBHOOK_SECRET"])
    except ValueError:
        return "", 400
    # Hand event to your own queue here, so the 2xx goes back right away.
    return "", 200

Svix's open-source svix libraries (Node, Python, Go, Ruby, PHP, Java, Kotlin, C# and Rust) run the same check: new Webhook(secret).verify(rawBody, headers) in Node, Webhook(secret).verify(raw_body, headers) in Python.

Respond fast, and how retries work

Answer with any 2xx status within 30 seconds, and do the work afterwards, from a queue: a slow handler times out and gets the same delivery again. Any other status, a timeout or a connection error is a failed attempt, and Kenso tries again on this schedule:

Attempt
Wait after the previous attempt
Time since the first attempt
1
-
0
2
5 seconds
5 seconds
3
5 minutes
about 5 minutes
4
30 minutes
about 35 minutes
5
2 hours
about 2 h 35 min
6
5 hours
about 7 h 35 min
7
10 hours
about 17 h 35 min
8
10 hours
about 27 h 35 min
  • Each wait varies by up to 20% either way, so the retries of many deliveries don't land at once.
  • After a timeout or a 429, the next wait is at least 60 seconds. A Retry-After header can stretch a wait to at most twice its scheduled length.
  • After the eighth failed attempt the delivery is marked failed. You can still resend it, or recover it with every other failed delivery from the last 14 days (Test, resend and recover).

If an endpoint fails every delivery for 5 days (120 hours) in a row, with no success in between, Kenso disables it and sends it nothing more. Turn it back on with PATCH /v1/webhook-endpoints/{webhookEndpointId} and { "isDisabled": false }, then recover the deliveries that failed before.

Kenso warns you before that: once an endpoint has been failing for 6 hours, the workspace owner and the members who manage integrations get an email, at most once a day per endpoint, and once more if it is disabled.

Duplicates and order

Delivery is at least once. A delivery your endpoint answered too late, or one you resent, arrives again with the same svix-id. Store the ids you have handled and skip one you have seen. Keep them for 14 days, the furthest a recover reaches back.

eventId in the body is the event's own stable id, built from your workspace id, the event type and the record it comes from, such as 4821:lead_replied:1644085. Use it to dedupe the items of a batch, which share one svix-id. One reply can fire several event types (lead_replied, lead_interested and reply.received), each with its own eventId.

Events can arrive out of order: a retried delivery can land after a newer one. Order them by the body's timestamp, and read the current state from the API when order matters.

How empty fields are sent

Webhook payloads do not follow the REST API rule of leaving null fields out. Every single event, and every item of a batch's events, carries the six blocks contact, company, campaign, email, reply and click, as null when one doesn't apply, and their empty fields are sent as null. The blocks added later (links, sender, account, person and the others) are left out when there is nothing to send.

So treat a missing key and null the same way, and read every field except eventType, eventId, timestamp and clientId as optional. Test sends add "test": true, which real deliveries don't carry.

Two naming schemes

Event types use two naming schemes. The ten snake_case types are the original, legacy scheme: email_sent, lead_replied, lead_interested, lead_unsubscribed, lead_clicked, reply_opened and the four workflow_* types. They keep working unchanged, and no new type uses that scheme. Every other type uses the current dotted scheme, resource.action, such as reply.received.

Build new integrations on a dotted type where one covers the event: reply.received instead of lead_replied (it also covers 1:1 replies), reply.classified filtered to interested instead of lead_interested, workflow_run.completed instead of workflow_run_failed. Legacy types with no dotted twin yet, such as email_sent and lead_clicked, are still the way to get those events.

Filters and batches

  • campaignIds sends only the events of those campaigns. An endpoint with a campaign filter never gets an event without a campaign, such as a 1:1 touch or a workflow event.
  • classifications sends only replies with those reply.classified labels (interested, not_interested, out_of_office, referral and others), and never an event without a classification.
  • With both set, an event must match both. A filter holds at most 10 campaigns, 10 classifications, or campaigns times classifications up to 10. An empty list means all.
  • isBatched: true, on an endpoint that lists its events, sends the high-volume types (the ones with a .batch type below, such as email_sent and touch.sent) only as <type>.batch: up to 100 events of one type per delivery, sent at least once a minute while events wait. Each item of its events is exactly what a non-batched endpoint gets. Other types still arrive one by one. Where batch delivery is not available to a workspace, isBatched: true answers 400 validation_failed.

Test, resend and recover

A test send checks your endpoint end to end. It delivers the example payload of one event type (the ones below) to this endpoint only, even a type it doesn't subscribe to, and waits up to 5 seconds to report how your endpoint answered. The Webhooks screen in the app has the same Send test button.

Request
curl -X POST "https://api.ken.so/v1/webhook-endpoints/$ENDPOINT_ID/test" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: 812" \
  -H "Content-Type: application/json" \
  -d '{"eventType": "reply.received"}'
  • GET /v1/webhook-endpoints/{webhookEndpointId}/deliveries lists each attempt with its result and the HTTP status your endpoint answered.
  • POST /v1/webhook-endpoints/{webhookEndpointId}/deliveries/{deliveryId}/resend sends one delivery again, by its id (atmpt_...) or its messageId (msg_...).
  • POST /v1/webhook-endpoints/{webhookEndpointId}/recover with since (at most 14 days ago) and an optional until resends every delivery that failed in that window and never succeeded. It answers 202 and runs in the background.
  • Resends share a workspace limit of 30 a minute and 1,000 a day. One recover counts as 10.

Every parameter is on the Webhook endpoints and Webhook deliveries reference pages.

Event types

All 116 event types, each with the example payload a test send delivers. Real deliveries have the same shape with your data. GET /v1/webhook-event-types returns the types your workspace can use, with the same samples.

account.created An account was created.
Example payload
{
  "eventType": "account.created",
  "eventId": "0:account.created:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "domains": [
    "example.com"
  ],
  "test": true
}
account.handed_off An account was handed to a teammate with Ken's brief.
Example payload
{
  "eventType": "account.handed_off",
  "eventId": "0:account.handed_off:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "handoff": {
    "toUserId": 9,
    "toName": "Grace Hopper",
    "channel": "email",
    "subject": "Example Co is ready for you",
    "brief": "Ada (Head of Sales) replied to step 2 and asked for pricing. They report by hand every Monday.",
    "truncated": false,
    "opportunityId": 14
  },
  "test": true
}
account.stage_changed An account moved stage.
Example payload
{
  "eventType": "account.stage_changed",
  "eventId": "0:account.stage_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "changes": {
    "stage": {
      "from": "engaged",
      "to": "network"
    },
    "networkLabel": {
      "from": null,
      "to": "partner"
    }
  },
  "test": true
}
account.tier_changed An account moved tier, by the tier ladder or by a person.
Example payload
{
  "eventType": "account.tier_changed",
  "eventId": "0:account.tier_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "tier": {
    "from": 2,
    "to": 1,
    "name": "Tier 1",
    "source": "score",
    "destination": "campaign",
    "routed": true,
    "auto": true,
    "campaignId": 3,
    "campaignName": "Example campaign",
    "enrolledCount": 2,
    "stoppedCount": 0
  },
  "test": true
}
ai_personalization.completed An AI personalization batch finished for a campaign.
Example payload
{
  "eventType": "ai_personalization.completed",
  "eventId": "0:ai_personalization.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "personalization": {
    "batchId": 13,
    "completed": 480,
    "failed": 20
  },
  "test": true
}
api_key.created An API key was created.
Example payload
{
  "eventType": "api_key.created",
  "eventId": "0:api_key.created:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "apiKey": {
    "id": "apk_0123456789abcdef0123456789abcdef",
    "name": "Zapier"
  },
  "test": true
}
api_key.revoked An API key was revoked.
Example payload
{
  "eventType": "api_key.revoked",
  "eventId": "0:api_key.revoked:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "apiKey": {
    "id": "apk_0123456789abcdef0123456789abcdef",
    "name": "Zapier"
  },
  "test": true
}
approval.approved An external reviewer approved an item.
Example payload
{
  "eventType": "approval.approved",
  "eventId": "0:approval.approved:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "reviewer"
  },
  "approval": {
    "id": 12,
    "kind": "copy",
    "title": "Copy for Example campaign",
    "status": "approved",
    "reviewer": {
      "name": "Jane Client"
    },
    "comment": "Looks good, go ahead."
  },
  "test": true
}
approval.changes_requested An external reviewer asked for changes to an item.
Example payload
{
  "eventType": "approval.changes_requested",
  "eventId": "0:approval.changes_requested:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "reviewer"
  },
  "approval": {
    "id": 12,
    "kind": "copy",
    "title": "Copy for Example campaign",
    "status": "changes_requested",
    "reviewer": {
      "name": "Jane Client"
    },
    "comment": "Please drop the second follow-up."
  },
  "test": true
}
approval.commented An external reviewer commented on an item waiting for approval.
Example payload
{
  "eventType": "approval.commented",
  "eventId": "0:approval.commented:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "reviewer"
  },
  "approval": {
    "id": 12,
    "kind": "copy",
    "title": "Copy for Example campaign",
    "status": "pending",
    "reviewer": {
      "name": "Jane Client"
    },
    "comment": "Can we mention the case study here?",
    "anchor": "step:2"
  },
  "test": true
}
approval.requested Campaign copy, a lead list or another item was sent for external approval.
Example payload
{
  "eventType": "approval.requested",
  "eventId": "0:approval.requested:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "approval": {
    "id": 12,
    "kind": "copy",
    "title": "Copy for Example campaign",
    "status": "pending"
  },
  "test": true
}
asset.viewed Someone viewed a Studio page.
Example payload
{
  "eventType": "asset.viewed",
  "eventId": "0:asset.viewed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "asset": {
    "id": 10,
    "linkId": 11,
    "viewId": 12,
    "templateId": 13
  },
  "test": true
}
call.logged A call with a person was logged.
Example payload
{
  "eventType": "call.logged",
  "eventId": "0:call.logged:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "touch": {
    "id": 6
  },
  "call": {
    "id": 17,
    "direction": "outbound",
    "source": "manual",
    "disposition": "connected",
    "durationSeconds": 125,
    "startedAt": "2026-10-21T09:00:00Z",
    "campaignId": 3,
    "userId": 8
  },
  "test": true
}
call.recording_ready A call's recording is stored in Kenso and can be played.
Example payload
{
  "eventType": "call.recording_ready",
  "eventId": "0:call.recording_ready:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "call": {
    "id": 17,
    "direction": "outbound",
    "source": "ken",
    "disposition": "connected",
    "durationSeconds": 125,
    "startedAt": "2026-10-21T09:00:00Z",
    "campaignId": 3,
    "userId": 8
  },
  "test": true
}
call.transcript_ready A call's transcript is ready in Kenso.
Example payload
{
  "eventType": "call.transcript_ready",
  "eventId": "0:call.transcript_ready:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "call": {
    "id": 17,
    "direction": "outbound",
    "source": "ken",
    "disposition": "connected",
    "durationSeconds": 125,
    "startedAt": "2026-10-21T09:00:00Z",
    "campaignId": 3,
    "userId": 8
  },
  "test": true
}
campaign.archived A campaign was archived or deleted.
Example payload
{
  "eventType": "campaign.archived",
  "eventId": "0:campaign.archived:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "status": {
    "from": "completed",
    "to": "archived"
  },
  "test": true
}
campaign.completed A campaign finished: every lead has been through its sequence.
Example payload
{
  "eventType": "campaign.completed",
  "eventId": "0:campaign.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "status": {
    "from": "sending",
    "to": "completed"
  },
  "totals": {
    "leads": 480,
    "sent": 1320,
    "replies": 41,
    "interested": 9
  },
  "test": true
}
campaign.launched A campaign started sending.
Example payload
{
  "eventType": "campaign.launched",
  "eventId": "0:campaign.launched:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "status": {
    "from": "launching",
    "to": "sending"
  },
  "launch": {
    "leadCount": 480,
    "stepCount": 3,
    "inboxCount": 6
  },
  "test": true
}
campaign.paused A campaign stopped sending, paused by a person or by Ken (bounce guard, sending errors, approval, billing).
Example payload
{
  "eventType": "campaign.paused",
  "eventId": "0:campaign.paused:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "status": {
    "from": "sending",
    "to": "paused"
  },
  "pause": {
    "reason": "user"
  },
  "test": true
}
campaign.resumed A paused campaign started sending again.
Example payload
{
  "eventType": "campaign.resumed",
  "eventId": "0:campaign.resumed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "status": {
    "from": "paused",
    "to": "sending"
  },
  "test": true
}
campaign.updated A campaign's schedule, sending volume, inboxes or email copy changed.
Example payload
{
  "eventType": "campaign.updated",
  "eventId": "0:campaign.updated:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "update": {
    "kind": "schedule",
    "fields": [
      "sendingDays"
    ],
    "changes": {
      "sendingDays": {
        "from": "1,2,3,4,5",
        "to": "1,2,3,4"
      }
    }
  },
  "test": true
}
contact.added A contact was added to a campaign.
Example payload
{
  "eventType": "contact.added",
  "eventId": "0:contact.added:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "source": {
    "kind": "csv",
    "listId": 12,
    "listName": "October conference list"
  },
  "test": true
}
contact.added.batch Up to 100 contact.added events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "contact.added.batch",
  "eventId": "bat_04ffe28760cbc5aed62cdd71fd0d1675",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "contact.added",
      "eventId": "0:contact.added:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/campaigns/3",
        "api": "https://api.ken.so/v1/campaigns/3"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "source": {
        "kind": "csv",
        "listId": 12,
        "listName": "October conference list"
      }
    }
  ],
  "test": true
}
contact.blocklisted A contact was put on do not contact by a reply, opt-out, meeting booked or other stop, so Ken stops reaching out to them.
Example payload
{
  "eventType": "contact.blocklisted",
  "eventId": "0:contact.blocklisted:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "test": true
}
contact.deleted A contact was deleted from a campaign.
Example payload
{
  "eventType": "contact.deleted",
  "eventId": "0:contact.deleted:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "test": true
}
contact.email_verified Enrichment found and verified an email address for a contact, with the verdict and the provider that gave it.
Example payload
{
  "eventType": "contact.email_verified",
  "eventId": "0:contact.email_verified:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "verification": {
    "email": "[email protected]",
    "validity": "safe",
    "verifier": "findymail",
    "verifiedAt": "2026-10-15T08:01:00Z"
  },
  "test": true
}
contact.email_verified.batch Up to 100 contact.email_verified events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "contact.email_verified.batch",
  "eventId": "bat_ec7721176e3e4734567b3f205982f27a",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "contact.email_verified",
      "eventId": "0:contact.email_verified:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/campaigns/3",
        "api": "https://api.ken.so/v1/campaigns/3"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "verification": {
        "email": "[email protected]",
        "validity": "safe",
        "verifier": "findymail",
        "verifiedAt": "2026-10-15T08:01:00Z"
      }
    }
  ],
  "test": true
}
credits.added Credits were added to the workspace: the plan's monthly credits, a purchase or a top-up.
Example payload
{
  "eventType": "credits.added",
  "eventId": "0:credits.added:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/settings/billing",
    "api": "https://api.ken.so/v1/credits"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "credits": {
    "state": "healthy",
    "available": 5420,
    "balance": 6420,
    "lowThreshold": 500,
    "added": 5000,
    "reason": "purchased"
  },
  "test": true
}
credits.depleted The workspace ran out of data and AI credits: enrichment and AI work wait until credits are added.
Example payload
{
  "eventType": "credits.depleted",
  "eventId": "0:credits.depleted:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/settings/billing",
    "api": "https://api.ken.so/v1/credits"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "credits": {
    "state": "out",
    "previousState": "low",
    "available": 0,
    "balance": 1000,
    "lowThreshold": 500
  },
  "test": true
}
credits.low The workspace's data and AI credits ran low.
Example payload
{
  "eventType": "credits.low",
  "eventId": "0:credits.low:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/settings/billing",
    "api": "https://api.ken.so/v1/credits"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "credits": {
    "state": "low",
    "previousState": "healthy",
    "available": 420,
    "balance": 1420,
    "lowThreshold": 500
  },
  "test": true
}
domain.health_changed A domain check (blocklist, SPF, DKIM, DMARC, MX, SSL or DNS) has a different result than the run before.
Example payload
{
  "eventType": "domain.health_changed",
  "eventId": "0:domain.health_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/delivery",
    "api": "https://api.ken.so/v1/domains/8/health"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "domain": {
    "id": 8,
    "name": "sending-example.com"
  },
  "check": {
    "name": "dmarc",
    "source": "dns_monitor",
    "from": "pass",
    "to": "fail",
    "detail": "missing_records"
  },
  "test": true
}
email_sent A sequence email was sent to a lead.
Example payload
{
  "eventType": "email_sent",
  "eventId": "0:email_sent:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "test": true
}
email_sent.batch Up to 100 email_sent events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "email_sent.batch",
  "eventId": "bat_652af2ee24766ac9f725794b2aa2f9ef",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "email_sent",
      "eventId": "0:email_sent:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
        "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
      },
      "sender": {
        "inboxId": 6,
        "email": "[email protected]",
        "name": "Grace Hopper"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": {
        "sequenceStep": 1,
        "subject": "Quick question",
        "bodySnippet": "Hi Ada, a quick question about Example Co.",
        "sentAt": "2026-10-15T08:00:00Z",
        "messageId": "example",
        "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
        "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
        "truncated": false,
        "stepId": 7,
        "variant": "A",
        "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
      },
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      }
    }
  ],
  "test": true
}
email.bounced A campaign email, or a 1:1 email from an agent inbox, bounced, hard or soft.
Example payload
{
  "eventType": "email.bounced",
  "eventId": "0:email.bounced:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "bounce": {
    "type": "hard",
    "reason": "invalid_recipient",
    "smtpCode": "5.1.1"
  },
  "test": true
}
email.complained A lead marked a campaign email as spam.
Example payload
{
  "eventType": "email.complained",
  "eventId": "0:email.complained:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "test": true
}
email.failed The sending provider rejected a campaign email for good.
Example payload
{
  "eventType": "email.failed",
  "eventId": "0:email.failed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "error": {
    "category": "permanent_reject"
  },
  "test": true
}
email.opened A lead opened a campaign email. Only on campaigns with open tracking on.
Example payload
{
  "eventType": "email.opened",
  "eventId": "0:email.opened:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "open": {
    "first": true
  },
  "test": true
}
email.opened.batch Up to 100 email.opened events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "email.opened.batch",
  "eventId": "bat_46eaadd3fce8c73eddf8cc552d879547",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "email.opened",
      "eventId": "0:email.opened:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
        "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
      },
      "sender": {
        "inboxId": 6,
        "email": "[email protected]",
        "name": "Grace Hopper"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": {
        "sequenceStep": 1,
        "subject": "Quick question",
        "bodySnippet": "Hi Ada, a quick question about Example Co.",
        "sentAt": "2026-10-15T08:00:00Z",
        "messageId": "example",
        "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
        "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
        "truncated": false,
        "stepId": 7,
        "variant": "A",
        "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
      },
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "open": {
        "first": true
      }
    }
  ],
  "test": true
}
email.suppressed Ken skipped a campaign email: the lead is blocklisted, unsubscribed, unverified or failed a send check.
Example payload
{
  "eventType": "email.suppressed",
  "eventId": "0:email.suppressed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": null,
    "subject": null,
    "bodySnippet": null,
    "sentAt": null,
    "messageId": null,
    "body": null,
    "bodyHtml": null,
    "truncated": null,
    "stepId": 7,
    "variant": null,
    "threadId": null
  },
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "reason": "blocklisted",
  "test": true
}
export.completed Someone exported leads, people, role candidates or the audit log.
Example payload
{
  "eventType": "export.completed",
  "eventId": "0:export.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "export": {
    "kind": "contacts",
    "rowCount": 420,
    "campaignId": 3
  },
  "test": true
}
import.completed An import into a campaign finished, with what it added and what it skipped.
Example payload
{
  "eventType": "import.completed",
  "eventId": "0:import.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": null,
  "company": null,
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "import": {
    "id": 11,
    "source": "csv",
    "status": "completed_with_errors",
    "target": 250,
    "attempted": 250,
    "imported": 231,
    "unfilled": 0,
    "skipped": {
      "failedValidation": 4,
      "alreadyContacted": 0,
      "duplicateInCampaign": 9,
      "duplicateInSource": 0,
      "duplicateInOtherCampaign": 0,
      "blocklist": 6,
      "salesNavigatorProfileUnresolved": 0,
      "countryExcluded": 0,
      "other": 0,
      "missingKey": 0,
      "invalidEmail": 0,
      "noMx": 0,
      "catchAll": 0,
      "personalEmail": 0,
      "roleAddress": 0,
      "companyContacted": 0,
      "companyCap": 0
    },
    "completedAt": "2026-10-15T08:01:30Z"
  },
  "test": true
}
inbox.disconnected A sending inbox lost its connection: its sign-in expired, it errored or its provider suspended it.
Example payload
{
  "eventType": "inbox.disconnected",
  "eventId": "0:inbox.disconnected:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/delivery",
    "api": "https://api.ken.so/v1/inboxes/6"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "inbox": {
    "id": 6,
    "email": "[email protected]",
    "providerKind": "google",
    "domainId": 8
  },
  "reason": "auth_expired",
  "campaigns": [
    {
      "id": 3,
      "name": "Example campaign"
    }
  ],
  "test": true
}
inbox.reconnected A sending inbox that had lost its connection, or was failing to connect, is connected again.
Example payload
{
  "eventType": "inbox.reconnected",
  "eventId": "0:inbox.reconnected:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/delivery",
    "api": "https://api.ken.so/v1/inboxes/6"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "inbox": {
    "id": 6,
    "email": "[email protected]",
    "providerKind": "google",
    "domainId": 8
  },
  "test": true
}
inbox.send_blocked Ken stopped a sending inbox from sending until a set time, to protect its reputation.
Example payload
{
  "eventType": "inbox.send_blocked",
  "eventId": "0:inbox.send_blocked:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/delivery",
    "api": "https://api.ken.so/v1/inboxes/6"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "inbox": {
    "id": 6,
    "email": "[email protected]",
    "providerKind": "google",
    "domainId": 8
  },
  "sendBlock": {
    "reason": "mailbox_hard_bounce_rate",
    "until": "2026-10-18T08:02:00Z",
    "scope": "inbox"
  },
  "test": true
}
inbox.status_changed A sending inbox was send-blocked, paused or resumed.
Example payload
{
  "eventType": "inbox.status_changed",
  "eventId": "0:inbox.status_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "inbox": {
    "id": 77,
    "email": "[email protected]",
    "providerKind": "google",
    "domainId": 8
  },
  "status": "send_blocked",
  "sendBlock": {
    "reason": "mailbox_hard_bounce_rate",
    "until": "2026-10-27T08:00:00Z",
    "scope": "inbox"
  },
  "test": true
}
inbox.warmup_changed A sending inbox's warmup changed state: started, paused, resumed or failed.
Example payload
{
  "eventType": "inbox.warmup_changed",
  "eventId": "0:inbox.warmup_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/delivery",
    "api": "https://api.ken.so/v1/inboxes/6"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "inbox": {
    "id": 6,
    "email": "[email protected]",
    "providerKind": "google",
    "domainId": 8
  },
  "warmup": {
    "from": "in_progress",
    "to": "paused"
  },
  "test": true
}
integration.connected A CRM, ATS, sending provider, Slack or provider key was connected.
Example payload
{
  "eventType": "integration.connected",
  "eventId": "0:integration.connected:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "integration": {
    "kind": "crm",
    "provider": "hubspot"
  },
  "test": true
}
integration.disconnected A CRM, ATS, sending provider, Slack or provider key was disconnected.
Example payload
{
  "eventType": "integration.disconnected",
  "eventId": "0:integration.disconnected:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "integration": {
    "kind": "crm",
    "provider": "hubspot"
  },
  "test": true
}
lead_clicked A lead clicked a tracked campaign link.
Example payload
{
  "eventType": "lead_clicked",
  "eventId": "0:lead_clicked:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": null,
    "bodySnippet": null,
    "sentAt": null,
    "messageId": "example",
    "body": null,
    "bodyHtml": null,
    "truncated": null,
    "stepId": 7,
    "variant": "A",
    "threadId": null
  },
  "reply": null,
  "click": {
    "originalUrl": "https://example.com/pricing",
    "destinationUrl": null,
    "userAgent": null,
    "ip": null,
    "country": null,
    "clickedAt": "2026-10-15T08:02:00Z"
  },
  "actor": {
    "kind": "system"
  },
  "test": true
}
lead_clicked.batch Up to 100 lead_clicked events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "lead_clicked.batch",
  "eventId": "bat_e5e83548c6c72306cbe1b2cdf241a183",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "lead_clicked",
      "eventId": "0:lead_clicked:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/campaigns/3",
        "api": "https://api.ken.so/v1/campaigns/3"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": {
        "sequenceStep": 1,
        "subject": null,
        "bodySnippet": null,
        "sentAt": null,
        "messageId": "example",
        "body": null,
        "bodyHtml": null,
        "truncated": null,
        "stepId": 7,
        "variant": "A",
        "threadId": null
      },
      "reply": null,
      "click": {
        "originalUrl": "https://example.com/pricing",
        "destinationUrl": null,
        "userAgent": null,
        "ip": null,
        "country": null,
        "clickedAt": "2026-10-15T08:02:00Z"
      },
      "actor": {
        "kind": "system"
      }
    }
  ],
  "test": true
}
lead_interested A reply was classified as interested.
Example payload
{
  "eventType": "lead_interested",
  "eventId": "0:lead_interested:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": {
    "subject": "Re: Quick question",
    "body": "Sounds good, send me more.",
    "classification": "Interested",
    "sentiment": "positive",
    "confidence": null,
    "bodyHtml": "<p>Sounds good, send me more.</p>",
    "truncated": false,
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ",
    "channel": "email",
    "classificationSource": "ai"
  },
  "click": null,
  "actor": {
    "kind": "system"
  },
  "test": true
}
lead_replied A lead replied to a campaign email.
Example payload
{
  "eventType": "lead_replied",
  "eventId": "0:lead_replied:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": {
    "subject": "Re: Quick question",
    "body": "Sounds good, send me more.",
    "classification": "Interested",
    "sentiment": "positive",
    "confidence": null,
    "bodyHtml": "<p>Sounds good, send me more.</p>",
    "truncated": false,
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ",
    "channel": "email"
  },
  "click": null,
  "actor": {
    "kind": "system"
  },
  "test": true
}
lead_unsubscribed A lead opted out of further emails.
Example payload
{
  "eventType": "lead_unsubscribed",
  "eventId": "0:lead_unsubscribed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "unsubscribe": {
    "source": "link"
  },
  "test": true
}
linkedin.invite_accepted A lead accepted a campaign connection request.
Example payload
{
  "eventType": "linkedin.invite_accepted",
  "eventId": "0:linkedin.invite_accepted:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "seat": {
    "id": 11,
    "name": "Grace Hopper",
    "profileUrl": "https://www.linkedin.com/in/grace-example"
  },
  "test": true
}
linkedin.invite_sent A LinkedIn seat sent a campaign connection request.
Example payload
{
  "eventType": "linkedin.invite_sent",
  "eventId": "0:linkedin.invite_sent:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "seat": {
    "id": 11,
    "name": "Grace Hopper",
    "profileUrl": "https://www.linkedin.com/in/grace-example"
  },
  "step": {
    "id": 12,
    "order": 1,
    "variant": "A"
  },
  "invite": {
    "note": "Hi Ada, I work with sales teams like yours. Happy to connect."
  },
  "test": true
}
linkedin.invite_sent.batch Up to 100 linkedin.invite_sent events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "linkedin.invite_sent.batch",
  "eventId": "bat_1e209f5b206e99e095da4ad102a94753",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "linkedin.invite_sent",
      "eventId": "0:linkedin.invite_sent:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/campaigns/3",
        "api": "https://api.ken.so/v1/campaigns/3"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "seat": {
        "id": 11,
        "name": "Grace Hopper",
        "profileUrl": "https://www.linkedin.com/in/grace-example"
      },
      "step": {
        "id": 12,
        "order": 1,
        "variant": "A"
      },
      "invite": {
        "note": "Hi Ada, I work with sales teams like yours. Happy to connect."
      }
    }
  ],
  "test": true
}
linkedin.message_received A LinkedIn seat received a message. Contact and campaign are set when Ken matched the sender to a lead.
Example payload
{
  "eventType": "linkedin.message_received",
  "eventId": "0:linkedin.message_received:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "seat": {
    "id": 11,
    "name": "Grace Hopper",
    "profileUrl": "https://www.linkedin.com/in/grace-example"
  },
  "message": {
    "inMail": false,
    "snippet": "Sounds good, send me more.",
    "text": "Sounds good, send me more.",
    "truncated": false,
    "threadId": "thr_bGlua2VkaW46ZXhhbXBsZQ",
    "messageId": "msg_bGlua2VkaW46ZXhhbXBsZQ",
    "senderName": "Ada Lovelace"
  },
  "test": true
}
linkedin.message_sent A LinkedIn seat sent a campaign message or InMail.
Example payload
{
  "eventType": "linkedin.message_sent",
  "eventId": "0:linkedin.message_sent:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "seat": {
    "id": 11,
    "name": "Grace Hopper",
    "profileUrl": "https://www.linkedin.com/in/grace-example"
  },
  "step": {
    "id": 12,
    "order": 2,
    "variant": "A"
  },
  "message": {
    "inMail": false,
    "snippet": "Thanks for connecting, Ada. A quick question about Example Co.",
    "text": "Thanks for connecting, Ada. A quick question about Example Co.",
    "truncated": false,
    "threadId": "thr_bGlua2VkaW46ZXhhbXBsZQ",
    "messageId": "msg_bGlua2VkaW46ZXhhbXBsZQ"
  },
  "test": true
}
linkedin.message_sent.batch Up to 100 linkedin.message_sent events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "linkedin.message_sent.batch",
  "eventId": "bat_63616692f20a6d12f7d94d40d31a7cbd",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "linkedin.message_sent",
      "eventId": "0:linkedin.message_sent:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/campaigns/3",
        "api": "https://api.ken.so/v1/campaigns/3"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "seat": {
        "id": 11,
        "name": "Grace Hopper",
        "profileUrl": "https://www.linkedin.com/in/grace-example"
      },
      "step": {
        "id": 12,
        "order": 2,
        "variant": "A"
      },
      "message": {
        "inMail": false,
        "snippet": "Thanks for connecting, Ada. A quick question about Example Co.",
        "text": "Thanks for connecting, Ada. A quick question about Example Co.",
        "truncated": false,
        "threadId": "thr_bGlua2VkaW46ZXhhbXBsZQ",
        "messageId": "msg_bGlua2VkaW46ZXhhbXBsZQ"
      }
    }
  ],
  "test": true
}
linkedin.profile_viewed A LinkedIn seat viewed a lead's profile as a campaign step.
Example payload
{
  "eventType": "linkedin.profile_viewed",
  "eventId": "0:linkedin.profile_viewed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "seat": {
    "id": 11,
    "name": "Grace Hopper",
    "profileUrl": "https://www.linkedin.com/in/grace-example"
  },
  "step": {
    "id": 12,
    "order": 1,
    "variant": "A"
  },
  "test": true
}
linkedin.profile_viewed.batch Up to 100 linkedin.profile_viewed events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "linkedin.profile_viewed.batch",
  "eventId": "bat_470b0293e7b97f736fde75ddeae4f8d5",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "linkedin.profile_viewed",
      "eventId": "0:linkedin.profile_viewed:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/campaigns/3",
        "api": "https://api.ken.so/v1/campaigns/3"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "seat": {
        "id": 11,
        "name": "Grace Hopper",
        "profileUrl": "https://www.linkedin.com/in/grace-example"
      },
      "step": {
        "id": 12,
        "order": 1,
        "variant": "A"
      }
    }
  ],
  "test": true
}
linkedin.seat_status_changed A LinkedIn seat's status changed: connecting, connected, needs a reconnect, restricted, disconnected or connect failed.
Example payload
{
  "eventType": "linkedin.seat_status_changed",
  "eventId": "0:linkedin.seat_status_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "seat": {
    "id": 11,
    "name": "Grace Hopper",
    "profileUrl": "https://www.linkedin.com/in/grace-example",
    "status": "credentials_error",
    "previousStatus": "connected"
  },
  "test": true
}
meeting.booked A meeting was booked with an account.
Example payload
{
  "eventType": "meeting.booked",
  "eventId": "0:meeting.booked:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/calendar?event=mtg_7"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "meeting": {
    "id": 7,
    "ownerUserId": 8,
    "startAt": "2026-10-20T15:00:00Z",
    "personIds": [
      5
    ],
    "firstMeeting": true
  },
  "test": true
}
meeting.cancelled A meeting was cancelled, by the guest, the host or the calendar.
Example payload
{
  "eventType": "meeting.cancelled",
  "eventId": "0:meeting.cancelled:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/calendar?event=mtg_7"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "meeting": {
    "id": 7,
    "ownerUserId": 8,
    "startAt": "2026-10-21T15:00:00Z",
    "personIds": [
      5
    ],
    "title": "Example Co / Kenso intro",
    "endAt": "2026-10-21T15:30:00Z",
    "source": "calendar",
    "status": "cancelled",
    "cancelReason": "booker_cancelled",
    "cancelledBy": "booker",
    "attendees": [
      {
        "name": "Grace Hopper",
        "email": "[email protected]",
        "internal": true
      },
      {
        "personId": 5,
        "name": "Ada Lovelace",
        "email": "[email protected]",
        "internal": false
      }
    ],
    "bookingId": 30,
    "campaignId": 3,
    "stepOrder": 2
  },
  "test": true
}
meeting.no_show The guest did not show up to a meeting.
Example payload
{
  "eventType": "meeting.no_show",
  "eventId": "0:meeting.no_show:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/calendar?event=mtg_7"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "meeting": {
    "id": 7,
    "ownerUserId": 8,
    "startAt": "2026-10-21T15:00:00Z",
    "personIds": [
      5
    ],
    "title": "Example Co / Kenso intro",
    "endAt": "2026-10-21T15:30:00Z",
    "source": "calendar",
    "status": "done",
    "attendees": [
      {
        "name": "Grace Hopper",
        "email": "[email protected]",
        "internal": true
      },
      {
        "personId": 5,
        "name": "Ada Lovelace",
        "email": "[email protected]",
        "internal": false
      }
    ],
    "bookingId": 30,
    "campaignId": 3,
    "stepOrder": 2
  },
  "test": true
}
meeting.notes_ready Ken's notes of a meeting are ready, or someone added notes to it.
Example payload
{
  "eventType": "meeting.notes_ready",
  "eventId": "0:meeting.notes_ready:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/calendar?event=mtg_7"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "meeting": {
    "id": 7,
    "ownerUserId": 8,
    "startAt": "2026-10-21T15:00:00Z",
    "personIds": [
      5
    ],
    "title": "Example Co / Kenso intro",
    "endAt": "2026-10-21T15:30:00Z",
    "source": "notetaker",
    "status": "done",
    "attendees": [
      {
        "name": "Grace Hopper",
        "email": "[email protected]",
        "internal": true
      },
      {
        "personId": 5,
        "name": "Ada Lovelace",
        "email": "[email protected]",
        "internal": false
      }
    ],
    "bookingId": 30,
    "campaignId": 3,
    "stepOrder": 2
  },
  "notes": {
    "id": 21,
    "kind": "enhanced",
    "version": 1,
    "templateKey": "discovery",
    "rewrite": false,
    "summary": "Ada runs a 12-person sales team and reports by hand every Monday.",
    "actionItems": [
      "Send the pricing sheet by Friday",
      "Book a demo with their RevOps lead"
    ],
    "truncated": false
  },
  "test": true
}
meeting.rescheduled A meeting moved to a new time.
Example payload
{
  "eventType": "meeting.rescheduled",
  "eventId": "0:meeting.rescheduled:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/calendar?event=mtg_7"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "meeting": {
    "id": 7,
    "ownerUserId": 8,
    "startAt": "2026-10-21T15:00:00Z",
    "personIds": [
      5
    ],
    "title": "Example Co / Kenso intro",
    "endAt": "2026-10-21T15:30:00Z",
    "source": "calendar",
    "status": "upcoming",
    "previousStartAt": "2026-10-20T15:00:00Z",
    "previousEndAt": "2026-10-20T15:30:00Z",
    "attendees": [
      {
        "name": "Grace Hopper",
        "email": "[email protected]",
        "internal": true
      },
      {
        "personId": 5,
        "name": "Ada Lovelace",
        "email": "[email protected]",
        "internal": false
      }
    ],
    "bookingId": 30,
    "campaignId": 3,
    "stepOrder": 2
  },
  "test": true
}
member.joined Someone accepted an invitation and joined the workspace.
Example payload
{
  "eventType": "member.joined",
  "eventId": "0:member.joined:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 9
  },
  "member": {
    "userId": 9,
    "firstName": "Grace",
    "lastName": "Hopper",
    "email": "[email protected]",
    "role": "Editor"
  },
  "test": true
}
member.removed A member was removed from the workspace.
Example payload
{
  "eventType": "member.removed",
  "eventId": "0:member.removed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "member": {
    "userId": 9,
    "firstName": "Grace",
    "lastName": "Hopper",
    "email": "[email protected]",
    "role": "Editor"
  },
  "test": true
}
member.role_changed A member's workspace role changed.
Example payload
{
  "eventType": "member.role_changed",
  "eventId": "0:member.role_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "member": {
    "userId": 9,
    "firstName": "Grace",
    "lastName": "Hopper",
    "email": "[email protected]",
    "role": "Admin",
    "previousRole": "Editor"
  },
  "test": true
}
opportunity.created A deal (opportunity) was created.
Example payload
{
  "eventType": "opportunity.created",
  "eventId": "0:opportunity.created:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "opportunity": {
    "id": 14,
    "name": "Example Co - platform",
    "stage": "meeting_booked",
    "stageLabel": "Meeting booked",
    "stageCategory": "open",
    "amount": 12500,
    "currency": "USD",
    "source": "ken",
    "sourceCampaignId": 3,
    "sourceStepOrder": 2
  },
  "test": true
}
opportunity.stage_changed A deal moved stage; stageCategory says whether it is open, won or lost.
Example payload
{
  "eventType": "opportunity.stage_changed",
  "eventId": "0:opportunity.stage_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "opportunity": {
    "id": 14,
    "name": "Example Co - platform",
    "stage": "won",
    "previousStage": "proposal",
    "stageLabel": "Won",
    "stageCategory": "won"
  },
  "test": true
}
person.created A person was created.
Example payload
{
  "eventType": "person.created",
  "eventId": "0:person.created:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "test": true
}
person.created.batch Up to 100 person.created events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "person.created.batch",
  "eventId": "bat_1f75b9391ac0f5e4dd24f7b027cc17eb",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "person.created",
      "eventId": "0:person.created:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/accounts/4",
        "api": "https://api.ken.so/v1/accounts/4"
      },
      "contact": null,
      "company": null,
      "campaign": null,
      "email": null,
      "reply": null,
      "click": null,
      "lane": "accounts",
      "activityEventId": 1,
      "account": {
        "name": "Example Co",
        "domain": "example.com",
        "id": 4
      },
      "person": {
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "title": "Head of Sales",
        "linkedinUrl": "linkedin.com/in/ada-example",
        "id": 5
      },
      "actor": {
        "kind": "user",
        "userId": 8
      }
    }
  ],
  "test": true
}
person.email_found Ken found a person's email address.
Example payload
{
  "eventType": "person.email_found",
  "eventId": "0:person.email_found:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "found": {
    "field": "email",
    "value": "[email protected]",
    "source": "example_provider",
    "trigger": "manual"
  },
  "test": true
}
person.lead_status_changed A person's lead status changed.
Example payload
{
  "eventType": "person.lead_status_changed",
  "eventId": "0:person.lead_status_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "changes": {
    "leadStatus": {
      "from": "new",
      "to": "qualified"
    }
  },
  "test": true
}
person.phone_found Ken found a person's phone number.
Example payload
{
  "eventType": "person.phone_found",
  "eventId": "0:person.phone_found:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "found": {
    "field": "phone",
    "value": "+15550100123",
    "source": "example_provider",
    "trigger": "manual"
  },
  "test": true
}
person.updated A person's fields changed.
Example payload
{
  "eventType": "person.updated",
  "eventId": "0:person.updated:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "changes": {
    "title": {
      "from": "Sales Manager",
      "to": "Head of Sales"
    }
  },
  "test": true
}
person.updated.batch Up to 100 person.updated events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "person.updated.batch",
  "eventId": "bat_59920ef5a83773bafa3854d97b2949cf",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "person.updated",
      "eventId": "0:person.updated:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/accounts/4",
        "api": "https://api.ken.so/v1/accounts/4"
      },
      "contact": null,
      "company": null,
      "campaign": null,
      "email": null,
      "reply": null,
      "click": null,
      "lane": "accounts",
      "activityEventId": 1,
      "account": {
        "name": "Example Co",
        "domain": "example.com",
        "id": 4
      },
      "person": {
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "title": "Head of Sales",
        "linkedinUrl": "linkedin.com/in/ada-example",
        "id": 5
      },
      "actor": {
        "kind": "user",
        "userId": 8
      },
      "changes": {
        "title": {
          "from": "Sales Manager",
          "to": "Head of Sales"
        }
      }
    }
  ],
  "test": true
}
placement_test.completed A placement test finished: where its seed emails landed, overall and per mailbox provider.
Example payload
{
  "eventType": "placement_test.completed",
  "eventId": "0:placement_test.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/delivery"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "placementTest": {
    "id": 9,
    "scope": "domain",
    "domainId": 8,
    "domain": "sending-example.com",
    "inboxShare": 82.5,
    "spamShare": 5,
    "categoryShare": 10,
    "missingShare": 2.5,
    "completedAt": "2026-10-15T08:02:00Z",
    "providers": [
      {
        "provider": "google_workspace",
        "inbox": 18,
        "spam": 1,
        "category": 2,
        "missing": 0
      },
      {
        "provider": "outlook_workspace",
        "inbox": 15,
        "spam": 1,
        "category": 2,
        "missing": 1
      }
    ]
  },
  "test": true
}
reply_opened A campaign reply was opened.
Example payload
{
  "eventType": "reply_opened",
  "eventId": "0:reply_opened:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "test": true
}
reply.classified A reply was classified or its classification changed, by the AI, a person or a rule.
Example payload
{
  "eventType": "reply.classified",
  "eventId": "0:reply.classified:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": 1,
    "subject": "Quick question",
    "bodySnippet": "Hi Ada, a quick question about Example Co.",
    "sentAt": "2026-10-15T08:00:00Z",
    "messageId": "example",
    "body": "Hi Ada, a quick question about Example Co.\n\nGrace",
    "bodyHtml": "<p>Hi Ada, a quick question about Example Co.</p><p>Grace</p>",
    "truncated": false,
    "stepId": 7,
    "variant": "A",
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": {
    "subject": "Re: Quick question",
    "body": "Sounds good, send me more.",
    "classification": "interested",
    "sentiment": null,
    "confidence": 0.94,
    "bodyHtml": "<p>Sounds good, send me more.</p>",
    "truncated": false,
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ",
    "channel": "email",
    "id": "msg_ZW1haWw6ZXhhbXBsZS1yZXBseQ",
    "classificationSource": "ai",
    "previousClassification": "unclassified"
  },
  "click": null,
  "actor": {
    "kind": "system"
  },
  "test": true
}
reply.received A reply arrived, from a campaign or a 1:1 account touch.
Example payload
{
  "eventType": "reply.received",
  "eventId": "0:reply.received:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "channel": "email",
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "touch": {
    "id": 6
  },
  "test": true
}
reply.reminder_set The AI or a person set a follow-up reminder on a reply.
Example payload
{
  "eventType": "reply.reminder_set",
  "eventId": "0:reply.reminder_set:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": {
    "subject": "Re: Quick question",
    "body": "Sounds good, send me more.",
    "classification": null,
    "sentiment": null,
    "confidence": null,
    "bodyHtml": "<p>Sounds good, send me more.</p>",
    "truncated": false,
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ",
    "channel": "email",
    "id": "msg_ZW1haWw6ZXhhbXBsZS1yZXBseQ"
  },
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "reminder": {
    "date": "2026-11-02T09:00:00Z",
    "source": "human"
  },
  "test": true
}
reply.sent A reply or forward from the Kenso inbox was sent.
Example payload
{
  "eventType": "reply.sent",
  "eventId": "0:reply.sent:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/inbox/thr_ZW1haWw6ZXhhbXBsZQ",
    "api": "https://api.ken.so/v1/threads/thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "sender": {
    "inboxId": 6,
    "email": "[email protected]",
    "name": "Grace Hopper"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": {
    "sequenceStep": null,
    "subject": "Re: Quick question",
    "bodySnippet": "Thanks Ada, here is the overview.",
    "sentAt": null,
    "messageId": "example-reply",
    "body": "Thanks Ada, here is the overview.\n\nGrace",
    "bodyHtml": "<p>Thanks Ada, here is the overview.</p><p>Grace</p>",
    "truncated": false,
    "stepId": null,
    "variant": null,
    "threadId": "thr_ZW1haWw6ZXhhbXBsZQ"
  },
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "author": {
    "kind": "user",
    "userId": 8
  },
  "test": true
}
research.completed Ken finished researching an account: fit score, why now, angle and summary.
Example payload
{
  "eventType": "research.completed",
  "eventId": "0:research.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "actor": {
    "kind": "system"
  },
  "research": {
    "id": 14,
    "fitScore": 82,
    "whyNow": "Example Co opened three SDR roles this month.",
    "angle": "Their reps report by hand every Monday.",
    "summary": "Example Co sells scheduling software to clinics in the US and Canada.",
    "completedAt": "2026-10-15T08:01:00Z"
  },
  "test": true
}
role_candidate.stage_changed A recruiting candidate moved pipeline stage on a role.
Example payload
{
  "eventType": "role_candidate.stage_changed",
  "eventId": "0:role_candidate.stage_changed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "roleCandidate": {
    "id": 21,
    "roleId": 22,
    "contactId": 1,
    "campaignId": 3,
    "fromStage": "replied",
    "toStage": "interested",
    "source": "campaign",
    "moveKind": "automatic",
    "changedAt": "2026-10-21T09:00:00Z"
  },
  "test": true
}
sequence.finished A lead left a campaign's sequence: it got the last step, bounced, unsubscribed or complained.
Example payload
{
  "eventType": "sequence.finished",
  "eventId": "0:sequence.finished:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/campaigns/3",
    "api": "https://api.ken.so/v1/campaigns/3"
  },
  "contact": {
    "id": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "phone": null,
    "linkedinUrl": null,
    "title": "Head of Sales",
    "seniority": null,
    "customVariables": {
      "pain_point": "manual reporting"
    },
    "aiFields": {
      "qualityScore": 8,
      "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
      "qualificationResponse": null,
      "segmentationReasoning": null,
      "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
      "personalization2": null,
      "personalization3": null
    }
  },
  "company": {
    "id": 2,
    "name": "Example Co",
    "domain": "example.com",
    "industry": null,
    "size": null,
    "linkedinUrl": null
  },
  "campaign": {
    "id": 3,
    "name": "Example campaign",
    "aiWorkflow": null
  },
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "sequence": {
    "reason": "completed"
  },
  "test": true
}
sequence.finished.batch Up to 100 sequence.finished events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "sequence.finished.batch",
  "eventId": "bat_d441ba016dccd42da7a7b12a28c620ec",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "sequence.finished",
      "eventId": "0:sequence.finished:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/campaigns/3",
        "api": "https://api.ken.so/v1/campaigns/3"
      },
      "contact": {
        "id": 1,
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "phone": null,
        "linkedinUrl": null,
        "title": "Head of Sales",
        "seniority": null,
        "customVariables": {
          "pain_point": "manual reporting"
        },
        "aiFields": {
          "qualityScore": 8,
          "qualityReasoning": "Head of Sales at a 120-person software company in the target market.",
          "qualificationResponse": null,
          "segmentationReasoning": null,
          "personalization1": "Saw Example Co is hiring three SDRs this quarter.",
          "personalization2": null,
          "personalization3": null
        }
      },
      "company": {
        "id": 2,
        "name": "Example Co",
        "domain": "example.com",
        "industry": null,
        "size": null,
        "linkedinUrl": null
      },
      "campaign": {
        "id": 3,
        "name": "Example campaign",
        "aiWorkflow": null
      },
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "sequence": {
        "reason": "completed"
      }
    }
  ],
  "test": true
}
signal.detected A new signal was found at an account.
Example payload
{
  "eventType": "signal.detected",
  "eventId": "0:signal.detected:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "signal": {
    "id": 9,
    "kind": "hiring"
  },
  "test": true
}
studio.cta_clicked Someone clicked a button on a Studio page.
Example payload
{
  "eventType": "studio.cta_clicked",
  "eventId": "0:studio.cta_clicked:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "asset": {
    "id": 10,
    "linkId": 11,
    "viewId": 12,
    "templateId": 13,
    "title": "Business case",
    "ref": "book-a-call"
  },
  "test": true
}
studio.form_submitted Someone submitted a form on a Studio page.
Example payload
{
  "eventType": "studio.form_submitted",
  "eventId": "0:studio.form_submitted:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "asset": {
    "id": 10,
    "linkId": 11,
    "viewId": 12,
    "templateId": 13,
    "title": "Business case",
    "formId": "contact"
  },
  "test": true
}
studio.forwarded A Studio page was opened by someone it was forwarded to.
Example payload
{
  "eventType": "studio.forwarded",
  "eventId": "0:studio.forwarded:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "asset": {
    "id": 10,
    "linkId": 11,
    "viewId": 12,
    "templateId": 13,
    "title": "Business case"
  },
  "test": true
}
studio.pdf_downloaded Someone downloaded the PDF of a Studio page.
Example payload
{
  "eventType": "studio.pdf_downloaded",
  "eventId": "0:studio.pdf_downloaded:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "asset": {
    "id": 10,
    "linkId": 11,
    "viewId": 12,
    "templateId": 13,
    "title": "Business case",
    "ref": "business-case.pdf"
  },
  "test": true
}
studio.return_visit Someone came back to a Studio page.
Example payload
{
  "eventType": "studio.return_visit",
  "eventId": "0:studio.return_visit:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "asset": {
    "id": 10,
    "linkId": 11,
    "viewId": 12,
    "templateId": 13,
    "title": "Business case"
  },
  "test": true
}
task.completed A call task was done: the call was made.
Example payload
{
  "eventType": "task.completed",
  "eventId": "0:task.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "task": {
    "id": 15,
    "kind": "call",
    "title": "Call Ada about pricing",
    "reason": "sequence",
    "status": "done",
    "dueAt": "2026-10-16T14:00:00Z",
    "ownerUserId": 8,
    "campaignId": 3,
    "callId": 17,
    "disposition": "connected"
  },
  "test": true
}
task.created A call task was created.
Example payload
{
  "eventType": "task.created",
  "eventId": "0:task.created:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "task": {
    "id": 15,
    "kind": "call",
    "title": "Call Ada about pricing",
    "reason": "sequence",
    "status": "open",
    "dueAt": "2026-10-16T14:00:00Z",
    "ownerUserId": 8,
    "campaignId": 3
  },
  "test": true
}
task.skipped A call task was skipped.
Example payload
{
  "eventType": "task.skipped",
  "eventId": "0:task.skipped:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "task": {
    "id": 15,
    "kind": "call",
    "title": "Call Ada about pricing",
    "reason": "sequence",
    "status": "skipped",
    "dueAt": "2026-10-16T14:00:00Z",
    "ownerUserId": 8,
    "campaignId": 3,
    "skipReason": "no_phone"
  },
  "test": true
}
touch.approved A 1:1 account touch was approved.
Example payload
{
  "eventType": "touch.approved",
  "eventId": "0:touch.approved:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "channel": "email",
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "user",
    "userId": 8
  },
  "touch": {
    "id": 6
  },
  "test": true
}
touch.failed A 1:1 account touch could not be sent.
Example payload
{
  "eventType": "touch.failed",
  "eventId": "0:touch.failed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "channel": "email",
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "touch": {
    "id": 6
  },
  "outcome": {
    "reason": "retry_exhausted",
    "attempt": 3
  },
  "test": true
}
touch.sent A 1:1 account touch was sent.
Example payload
{
  "eventType": "touch.sent",
  "eventId": "0:touch.sent:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "channel": "email",
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "touch": {
    "id": 6
  },
  "test": true
}
touch.sent.batch Up to 100 touch.sent events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "touch.sent.batch",
  "eventId": "bat_9a0d537c65a1fb6340daaf33d5ca92dd",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "touch.sent",
      "eventId": "0:touch.sent:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/accounts/4",
        "api": "https://api.ken.so/v1/accounts/4"
      },
      "contact": null,
      "company": null,
      "campaign": null,
      "email": null,
      "reply": null,
      "click": null,
      "lane": "accounts",
      "activityEventId": 1,
      "channel": "email",
      "account": {
        "name": "Example Co",
        "domain": "example.com",
        "id": 4
      },
      "person": {
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "title": "Head of Sales",
        "linkedinUrl": "linkedin.com/in/ada-example",
        "id": 5
      },
      "actor": {
        "kind": "system"
      },
      "touch": {
        "id": 6
      }
    }
  ],
  "test": true
}
touch.skipped A 1:1 account touch was skipped.
Example payload
{
  "eventType": "touch.skipped",
  "eventId": "0:touch.skipped:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "channel": "email",
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "touch": {
    "id": 6
  },
  "outcome": {
    "reason": "account_deleted",
    "fromStatus": "planned"
  },
  "test": true
}
website.visited A known person viewed a page of the workspace's website (once per page per day).
Example payload
{
  "eventType": "website.visited",
  "eventId": "0:website.visited:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/accounts/4",
    "api": "https://api.ken.so/v1/accounts/4"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "lane": "accounts",
  "activityEventId": 1,
  "account": {
    "name": "Example Co",
    "domain": "example.com",
    "id": 4
  },
  "person": {
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "[email protected]",
    "title": "Head of Sales",
    "linkedinUrl": "linkedin.com/in/ada-example",
    "id": 5
  },
  "actor": {
    "kind": "system"
  },
  "visit": {
    "id": 40,
    "path": "/pricing",
    "pageId": 41,
    "pageLabel": "Pricing"
  },
  "test": true
}
website.visited.batch Up to 100 website.visited events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "website.visited.batch",
  "eventId": "bat_59157539a52a443d6fc9bbe8155dce32",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "website.visited",
      "eventId": "0:website.visited:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/accounts/4",
        "api": "https://api.ken.so/v1/accounts/4"
      },
      "contact": null,
      "company": null,
      "campaign": null,
      "email": null,
      "reply": null,
      "click": null,
      "lane": "accounts",
      "activityEventId": 1,
      "account": {
        "name": "Example Co",
        "domain": "example.com",
        "id": 4
      },
      "person": {
        "firstName": "Ada",
        "lastName": "Lovelace",
        "email": "[email protected]",
        "title": "Head of Sales",
        "linkedinUrl": "linkedin.com/in/ada-example",
        "id": 5
      },
      "actor": {
        "kind": "system"
      },
      "visit": {
        "id": 40,
        "path": "/pricing",
        "pageId": 41,
        "pageLabel": "Pricing"
      }
    }
  ],
  "test": true
}
workflow_limit_reached A workflow hit one of its limits.
Example payload
{
  "eventType": "workflow_limit_reached",
  "eventId": "0:workflow_limit_reached:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflow-runs/15"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "workflowId": 14,
  "runId": 15,
  "count": 12,
  "limit": "event_runs_per_hour",
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "test": true
}
workflow_published A workflow was published.
Example payload
{
  "eventType": "workflow_published",
  "eventId": "0:workflow_published:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflows/14"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 9
  },
  "workflowId": 14,
  "versionId": 16,
  "versionNumber": 3,
  "name": "Inbound router",
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "test": true
}
workflow_run_failed A workflow run failed.
Example payload
{
  "eventType": "workflow_run_failed",
  "eventId": "0:workflow_run_failed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflow-runs/15"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "workflowId": 14,
  "runId": 15,
  "recordType": "account",
  "recordId": 4,
  "reason": "qualify failed",
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "test": true
}
workflow_run_needs_attention A workflow run needs a person to act.
Example payload
{
  "eventType": "workflow_run_needs_attention",
  "eventId": "0:workflow_run_needs_attention:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflow-runs/15"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "workflowId": 14,
  "runId": 15,
  "reason": "definition_invalid",
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "test": true
}
workflow_run.completed A workflow run finished, succeeded or failed, with its credits and each step's output.
Example payload
{
  "eventType": "workflow_run.completed",
  "eventId": "0:workflow_run.completed:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflow-runs/15"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "run": {
    "id": 15,
    "versionId": 16,
    "triggerType": "trigger.manual@1",
    "recordType": "account",
    "recordId": 4,
    "isTest": false,
    "status": "succeeded",
    "creditsUsed": 1.25,
    "startedAt": "2026-10-15T08:00:00Z",
    "endedAt": "2026-10-15T08:02:00Z"
  },
  "steps": [
    {
      "id": "qualify",
      "type": "ai.qualify@1",
      "status": "succeeded",
      "output": {
        "label": "good_fit",
        "confidence": 0.92
      }
    },
    {
      "id": "find_email",
      "type": "data.find_email@1",
      "status": "succeeded"
    }
  ],
  "stepsTruncated": false,
  "test": true
}
workflow_run.completed.batch Up to 100 workflow_run.completed events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "workflow_run.completed.batch",
  "eventId": "bat_1fd163a29d5c96fc2fca3424b938f70f",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "workflow_run.completed",
      "eventId": "0:workflow_run.completed:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/workflows/14",
        "api": "https://api.ken.so/v1/workflow-runs/15"
      },
      "contact": null,
      "company": null,
      "campaign": null,
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "workflow": {
        "id": 14,
        "name": "Inbound router"
      },
      "run": {
        "id": 15,
        "versionId": 16,
        "triggerType": "trigger.manual@1",
        "recordType": "account",
        "recordId": 4,
        "isTest": false,
        "status": "succeeded",
        "creditsUsed": 1.25,
        "startedAt": "2026-10-15T08:00:00Z",
        "endedAt": "2026-10-15T08:02:00Z"
      },
      "steps": [
        {
          "id": "qualify",
          "type": "ai.qualify@1",
          "status": "succeeded",
          "output": {
            "label": "good_fit",
            "confidence": 0.92
          }
        },
        {
          "id": "find_email",
          "type": "data.find_email@1",
          "status": "succeeded"
        }
      ],
      "stepsTruncated": false
    }
  ],
  "test": true
}
workflow_run.started A workflow run started.
Example payload
{
  "eventType": "workflow_run.started",
  "eventId": "0:workflow_run.started:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflow-runs/15"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "run": {
    "id": 15,
    "versionId": 16,
    "triggerType": "trigger.manual@1",
    "recordType": "account",
    "recordId": 4,
    "isTest": false
  },
  "test": true
}
workflow_run.started.batch Up to 100 workflow_run.started events in one delivery, for endpoints with batch on.
Example payload
{
  "eventType": "workflow_run.started.batch",
  "eventId": "bat_060d2a87e225c63ee7feb530fcd018ed",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "count": 1,
  "events": [
    {
      "eventType": "workflow_run.started",
      "eventId": "0:workflow_run.started:example",
      "timestamp": "2026-10-15T08:02:00Z",
      "clientId": 0,
      "schemaVersion": "2026-11",
      "links": {
        "app": "https://app.ken.so/0/workflows/14",
        "api": "https://api.ken.so/v1/workflow-runs/15"
      },
      "contact": null,
      "company": null,
      "campaign": null,
      "email": null,
      "reply": null,
      "click": null,
      "actor": {
        "kind": "system"
      },
      "workflow": {
        "id": 14,
        "name": "Inbound router"
      },
      "run": {
        "id": 15,
        "versionId": 16,
        "triggerType": "trigger.manual@1",
        "recordType": "account",
        "recordId": 4,
        "isTest": false
      }
    }
  ],
  "test": true
}
workflow.auto_paused Ken paused a workflow: it hit its spend limit or most of its recent runs failed.
Example payload
{
  "eventType": "workflow.auto_paused",
  "eventId": "0:workflow.auto_paused:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflows/14"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "workflow"
  },
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "reason": "auto_paused: 6/10 of the last runs failed",
  "test": true
}
workflow.spend_alert A workflow's credits this month reached 50, 80 or 90 percent of its monthly limit.
Example payload
{
  "eventType": "workflow.spend_alert",
  "eventId": "0:workflow.spend_alert:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflows/14"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "system"
  },
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "spend": {
    "month": "2026-10",
    "alertPercent": 80,
    "creditsSpent": 800,
    "monthlyLimit": 1000
  },
  "test": true
}
workflow.unpublished A workflow was unpublished, or published switched off, so it starts no new runs.
Example payload
{
  "eventType": "workflow.unpublished",
  "eventId": "0:workflow.unpublished:example",
  "timestamp": "2026-10-15T08:02:00Z",
  "clientId": 0,
  "schemaVersion": "2026-11",
  "links": {
    "app": "https://app.ken.so/0/workflows/14",
    "api": "https://api.ken.so/v1/workflows/14"
  },
  "contact": null,
  "company": null,
  "campaign": null,
  "email": null,
  "reply": null,
  "click": null,
  "actor": {
    "kind": "user",
    "userId": 9
  },
  "workflow": {
    "id": 14,
    "name": "Inbound router"
  },
  "test": true
}

More guides