Thread link
A thread link connects two threads and says how they relate. Links are directional and are always read from the perspective of the thread in the path: linking A to B as DISCUSSES means B shows the link as DISCUSSED_IN.
DISCUSSES
DISCUSSED_IN
RELATES_TO
RELATES_TO
DISCUSSES is not inert: when the target thread is a ticket's main thread, the ticket's assignee and agent are added to the source thread as CONTRIBUTOR — never the ticket's contact. This is retroactive (they see the source thread's full history) and add-only: reassigning the ticket adds the new holder but does not remove the previous ones, and unlinking removes the relation but not the participants it added.
RELATES_TO never touches participants and is the right choice for a hand-picked subordinate conversation that should not pull anyone in automatically.
Returns the threads linked to this one, each with the link type as seen from this thread. Links to a thread the caller cannot read are omitted entirely, not just their content — the list never reveals that such a link exists.
Filterable — id, sourceThreadId, targetThreadId, relationType, creatorId, createdAt.
Sortable — id, createdAt.
Searchable — nothing yet.
Token issued by the central equipme authentication, sent as Bearer <token>.
Thread id
8801JSON filter expression
Free-text term — no effect here
Comma-separated field:direction terms
Selection of fields and relations
type,relatedThread.subjectNumber of entries to skip
0Page size, 1 to 100
100OK
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
GET /api/v1/threads/{threadId}/links HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"count": 1,
"data": [
{
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"relatedThread": {
"attachments": [
{
"composing": true,
"contentId": "text",
"contentType": "text",
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"id": 1,
"inline": true,
"link": "text",
"messageId": 1,
"name": "text",
"size": 1,
"threadId": 1
}
],
"channel": {
"active": true,
"createdAt": "text",
"id": 1,
"kind": "",
"name": "text",
"purpose": "",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"updatedAt": "text"
},
"channelId": 1,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"externalId": "text",
"id": 8801,
"messages": [
{
"attachments": [
{
"composing": true,
"contentId": "text",
"contentType": "text",
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"id": 1,
"inline": true,
"link": "text",
"messageId": 1,
"name": "text",
"size": 1,
"threadId": 1
}
],
"author": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"authorId": 1,
"content": "text",
"contentPreview": "text",
"contentType": "text",
"createdAt": "text",
"direction": "INTERNAL",
"id": 1,
"originChannel": {
"active": true,
"createdAt": "text",
"id": 1,
"kind": "",
"name": "text",
"purpose": "",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"updatedAt": "text"
},
"originChannelId": 1,
"replyTo": "[Circular Reference]",
"replyToId": 1,
"threadId": 1,
"updatedAt": "text"
}
],
"participants": [
{
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"resourceLinks": [
{
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"deepLink": "text",
"displayName": "text",
"externalId": "text",
"id": 1,
"provider": {
"id": 1,
"key": "text"
},
"providerId": 1,
"resourceType": "text",
"source": "text",
"threadId": 1
}
],
"status": "",
"subject": "Printer on the 2nd floor is not printing",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"type": ""
}
]
}Links this thread to others. Each entry names the threadId to link and the type as seen from the thread in the path — the counterpart is recorded automatically for the other side. The type decides which of the two is the side conversation, and so which one gains the ticket's assignee and agent: with DISCUSSES it is the thread in the path, with DISCUSSED_IN the linked one.
A thread cannot be linked to itself; that is answered with 400, as is linking across tenants. Linking a pair that is already linked, in any type or direction, answers 409. Requires ManageAction on the thread in the path — a ticket's own ManageAction also satisfies this when the thread is that ticket's main thread.
Token issued by the central equipme authentication, sent as Bearer <token>.
Thread id
8801Created
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
POST /api/v1/threads/{threadId}/links HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}{
"data": [
{
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"relatedThread": {
"attachments": [
{
"composing": true,
"contentId": "text",
"contentType": "text",
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"id": 1,
"inline": true,
"link": "text",
"messageId": 1,
"name": "text",
"size": 1,
"threadId": 1
}
],
"channel": {
"active": true,
"createdAt": "text",
"id": 1,
"kind": "",
"name": "text",
"purpose": "",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"updatedAt": "text"
},
"channelId": 1,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"externalId": "text",
"id": 8801,
"messages": [
{
"attachments": [
{
"composing": true,
"contentId": "text",
"contentType": "text",
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"id": 1,
"inline": true,
"link": "text",
"messageId": 1,
"name": "text",
"size": 1,
"threadId": 1
}
],
"author": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"authorId": 1,
"content": "text",
"contentPreview": "text",
"contentType": "text",
"createdAt": "text",
"direction": "INTERNAL",
"id": 1,
"originChannel": {
"active": true,
"createdAt": "text",
"id": 1,
"kind": "",
"name": "text",
"purpose": "",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"updatedAt": "text"
},
"originChannelId": 1,
"replyTo": "[Circular Reference]",
"replyToId": 1,
"threadId": 1,
"updatedAt": "text"
}
],
"participants": [
{
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"resourceLinks": [
{
"createdAt": "text",
"creator": {
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"creatorId": 1,
"deepLink": "text",
"displayName": "text",
"externalId": "text",
"id": 1,
"provider": {
"id": 1,
"key": "text"
},
"providerId": 1,
"resourceType": "text",
"source": "text",
"threadId": 1
}
],
"status": "",
"subject": "Printer on the 2nd floor is not printing",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"type": ""
}
]
}Removes the links between this thread and the given ones, in whichever direction they were recorded. Answers with 204 and no body.
Topology only: unlinking does not remove participants a DISCUSSES link propagated, and does not revoke their access. Reconciling propagated participants is not supported yet.
Token issued by the central equipme authentication, sent as Bearer <token>.
Thread id
8801No Content
No content
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
DELETE /api/v1/threads/{threadId}/links HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}No content
Last updated
Was this helpful?