Kenso

Signals

Queue signals for the current workspace.

Search and data1 endpointKen-Version: 2026-11-02AuthenticationWorkspacesErrors

Requires Search edit access (owners, admins and editors by default). type and source are lowercase snake_case. Non-super-admins are forced to synthetic signals and send at most 100 signals a call, each counted against the workspace's signal quota. A contact, campaign, or segment outside the workspace is rejected before publish. duplicateCount counts signals skipped because their dedupKey was queued in the last 24 hours.

Parameters

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
isSynthetic
boolean
optional
signals
array of CreateSignalRequest
optional

Response 200

data is a SignalIntakeModel.

Field
Type
Description
acceptedCount
integer (int32)
Signals queued by this call.
duplicateCount
integer (int32)
Signals skipped because their dedupKey was already queued in the last 24 hours.
isSynthetic
boolean
Request
curl -X POST "https://api.ken.so/v1/signals" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "isSynthetic": true,
  "signals": [
    {
      "type": "string",
      "source": "string",
      "contactId": 812,
      "campaignId": 812,
      "campaignSegmentId": 812,
      "payload": null,
      "occurredAt": "2026-09-23T15:02:11Z",
      "dedupKey": "string"
    }
  ]
}'
Response 200
{
  "success": true,
  "data": {
    "acceptedCount": 1,
    "duplicateCount": 1,
    "isSynthetic": true
  }
}