Kenso

Tracking links

The tracked links of a campaign's emails.

Campaigns and sequences5 endpointsKen-Version: 2026-11-02AuthenticationWorkspacesErrors

List a campaign's tracking links in the current workspace

GET/v1/campaigns/{campaignId}/tracking-linkstracking-links.list

Try it on developer.ken.so

Ordered by id. Read-only. Requires ReadAccess.

Parameters

Name
In
Type
Required
Description
campaignId
In: path
integer (int64)
required
limit
In: query
integer (int32)
optional
cursor
In: query
string
optional
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).

Response 200

data is a list of TrackingLinkModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
id
integer (int64)
campaignId
integer (int64)
name
string
domainName
string
textValue
string
createdAt
string (date-time)
createdBy
integer (int64)
modifiedAt
string (date-time)
modifiedBy
integer (int64)
Request
curl -X GET "https://api.ken.so/v1/campaigns/812/tracking-links?limit=1" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": [
    {
      "id": 812,
      "campaignId": 812,
      "name": "string",
      "domainName": "string",
      "textValue": "string",
      "createdAt": "2026-09-23T15:02:11Z",
      "createdBy": 1,
      "modifiedAt": "2026-09-23T15:02:11Z",
      "modifiedBy": 1
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Create a tracking link on a campaign in the current workspace

POST/v1/campaigns/{campaignId}/tracking-linkstracking-links.create

Try it on developer.ken.so

Returns 201 and Location. Requires WriteAccess.

Parameters

Name
In
Type
Required
Description
campaignId
In: path
integer (int64)
required
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
name
string
optional
domainName
string
optional
textValue
string
optional

Response 201

data is a TrackingLinkModel.

Field
Type
Description
id
integer (int64)
campaignId
integer (int64)
name
string
domainName
string
textValue
string
createdAt
string (date-time)
createdBy
integer (int64)
modifiedAt
string (date-time)
modifiedBy
integer (int64)
Request
curl -X POST "https://api.ken.so/v1/campaigns/812/tracking-links" \
  -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 '{
  "name": "string",
  "domainName": "string",
  "textValue": "string"
}'
Response 201
{
  "success": true,
  "data": {
    "id": 812,
    "campaignId": 812,
    "name": "string",
    "domainName": "string",
    "textValue": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "createdBy": 1,
    "modifiedAt": "2026-09-23T15:02:11Z",
    "modifiedBy": 1
  }
}

Return one tracking link in the current workspace

GET/v1/tracking-links/{trackingLinkId}tracking-links.get

Try it on developer.ken.so

A missing or cross-workspace id is not_found. Requires ReadAccess.

Parameters

Name
In
Type
Required
Description
trackingLinkId
In: path
integer (int64)
required
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).

Response 200

data is a TrackingLinkModel.

Field
Type
Description
id
integer (int64)
campaignId
integer (int64)
name
string
domainName
string
textValue
string
createdAt
string (date-time)
createdBy
integer (int64)
modifiedAt
string (date-time)
modifiedBy
integer (int64)
Request
curl -X GET "https://api.ken.so/v1/tracking-links/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "campaignId": 812,
    "name": "string",
    "domainName": "string",
    "textValue": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "createdBy": 1,
    "modifiedAt": "2026-09-23T15:02:11Z",
    "modifiedBy": 1
  }
}

Update a tracking link

PATCH/v1/tracking-links/{trackingLinkId}tracking-links.update

Try it on developer.ken.so

Absent fields stay unchanged. JSON null clears textValue. Requires WriteAccess. A new domainName goes through the URL reputation check, and changing it after mail with the link went out counts against a daily cap (429 rate_limited with Retry-After once UrlReputation:Mode is Enforce). A new domainName on a link served from a Kenso shared tracking host is 409 shared_host_link_frozen, and off a paid plan 402 plan_limit_reached (refusal.codelink_edit_requires_paid_plan), when Redirects:LinkEdits:Mode is Enforce.

Parameters

Name
In
Type
Required
Description
trackingLinkId
In: path
integer (int64)
required
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
name
string
optional
domainName
string
optional
textValue
string
optional

Response 200

data is a TrackingLinkModel.

Field
Type
Description
id
integer (int64)
campaignId
integer (int64)
name
string
domainName
string
textValue
string
createdAt
string (date-time)
createdBy
integer (int64)
modifiedAt
string (date-time)
modifiedBy
integer (int64)
Request
curl -X PATCH "https://api.ken.so/v1/tracking-links/812" \
  -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 '{
  "name": "string",
  "domainName": "string",
  "textValue": "string"
}'
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "campaignId": 812,
    "name": "string",
    "domainName": "string",
    "textValue": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "createdBy": 1,
    "modifiedAt": "2026-09-23T15:02:11Z",
    "modifiedBy": 1
  }
}

Requires Delivery edit access (owners, admins and editors by default). Returns 204.

Parameters

Name
In
Type
Required
Description
trackingLinkId
In: path
integer (int64)
required
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).

Response 204

Request
curl -X DELETE "https://api.ken.so/v1/tracking-links/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 204
HTTP/1.1 204 No Content