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.
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:
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
urlmust usehttpsand resolve to a public address. A workspace holds at most 25 endpoints. eventslists the event types the endpoint receives.campaignIdsandclassificationsnarrow them further (Filters and batches).- Every webhook endpoint call needs the
integrationspermission 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:
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.
svix-idmsg_...). The same on every retry and resend of one message, so dedupe on it.svix-timestampsvix-signaturev1, followed by a base64 HMAC-SHA256.content-typeapplication/jsonuser-agentSvix-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-timestampmore 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
v1signature in the header matches.
In Node.js, with no dependencies:
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:
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:
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:
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 "", 200Svix'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:
- 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. ARetry-Afterheader 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
campaignIdssends 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.classificationssends only replies with thosereply.classifiedlabels (interested,not_interested,out_of_office,referraland 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 itsevents, sends the high-volume types (the ones with a.batchtype below, such asemail_sentandtouch.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 itseventsis exactly what a non-batched endpoint gets. Other types still arrive one by one. Where batch delivery is not available to a workspace,isBatched: trueanswers400 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.
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}/deliverieslists each attempt with its result and the HTTP status your endpoint answered.POST /v1/webhook-endpoints/{webhookEndpointId}/deliveries/{deliveryId}/resendsends one delivery again, by itsid(atmpt_...) or itsmessageId(msg_...).POST /v1/webhook-endpoints/{webhookEndpointId}/recoverwithsince(at most 14 days ago) and an optionaluntilresends every delivery that failed in that window and never succeeded. It answers202and 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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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).
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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).
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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.
{
"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
}