curl --location --request POST 'https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": { "check_ids": ["liability-cap"] }
}
]
}'
const response = await fetch("https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": { "check_ids": ["liability-cap"] }
}
]
}),
});
const data = await response.json();
console.log(data);
import requests
url = "https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": {"check_ids": ["liability-cap"]}
}
]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
{
"id": "9f8e7d6c-5b4a-3210-9876-543210fedcba",
"display_id": "#12",
"task_number": 12,
"title": "Review the Acme NDA",
"description": "Check the indemnity and termination clauses.",
"additional_context": "Counterparty has pushed back twice on liability caps.",
"status": "in_progress",
"priority": "high",
"team": {
"id": "1a2b3c4d-5e6f-7081-9200-aabbccddeeff",
"name": "Legal"
},
"creator": {
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com"
},
"assigned_to": {
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com"
},
"assigned_agent": null,
"assigned_team": null,
"matter": null,
"complete_by": "2026-01-01T00:00:00Z",
"tags": [
"nda",
"urgent"
],
"source_channel": "web",
"visibility": "customer",
"archived": false,
"draft": false,
"involved_people": [
{
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com",
"role": "assignee",
"access_level": "write"
}
],
"shared_teams": [],
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012",
"display_name": "NDA negotiation notes",
"role": "reference",
"context": null,
"is_output": false
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"display_name": "Acme NDA",
"role": "subject",
"context": {
"check_ids": [
"liability-cap"
]
},
"is_output": false
}
],
"input_files": [],
"output_files": [],
"created_at": "2025-12-31T00:00:00Z",
"updated_at": "2025-12-31T01:00:00Z"
}
Tasks
Link Items
Link chats, reviews, reports or other tasks to a task.
POST
/
api
/
v1
/
tasks
/
{task_id}
/
links
curl --location --request POST 'https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": { "check_ids": ["liability-cap"] }
}
]
}'
const response = await fetch("https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": { "check_ids": ["liability-cap"] }
}
]
}),
});
const data = await response.json();
console.log(data);
import requests
url = "https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": {"check_ids": ["liability-cap"]}
}
]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
{
"id": "9f8e7d6c-5b4a-3210-9876-543210fedcba",
"display_id": "#12",
"task_number": 12,
"title": "Review the Acme NDA",
"description": "Check the indemnity and termination clauses.",
"additional_context": "Counterparty has pushed back twice on liability caps.",
"status": "in_progress",
"priority": "high",
"team": {
"id": "1a2b3c4d-5e6f-7081-9200-aabbccddeeff",
"name": "Legal"
},
"creator": {
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com"
},
"assigned_to": {
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com"
},
"assigned_agent": null,
"assigned_team": null,
"matter": null,
"complete_by": "2026-01-01T00:00:00Z",
"tags": [
"nda",
"urgent"
],
"source_channel": "web",
"visibility": "customer",
"archived": false,
"draft": false,
"involved_people": [
{
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com",
"role": "assignee",
"access_level": "write"
}
],
"shared_teams": [],
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012",
"display_name": "NDA negotiation notes",
"role": "reference",
"context": null,
"is_output": false
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"display_name": "Acme NDA",
"role": "subject",
"context": {
"check_ids": [
"liability-cap"
]
},
"is_output": false
}
],
"input_files": [],
"output_files": [],
"created_at": "2025-12-31T00:00:00Z",
"updated_at": "2025-12-31T01:00:00Z"
}
Links each item to the task. An item the task already links is left unchanged; use Update Link to change its role or context. Returns the updated task.
Each item takes these fields. Ids are prefixless, as everywhere in this API.
An item you cannot read is a
| Field | Required | Description |
|---|---|---|
type | yes | chat, review, report or task. |
id | yes | The linked item’s UUID. For type=task, a display id like #123 also works. |
role | no | Why the task links to it: reference (supporting context, the default), subject (what the task is about) or output (produced by the task). |
context | no | Fields specific to the link type. Only review links take one: {"check_ids": [...]} narrows the link to those checks of the review. |
400, the same as an item that does not exist. role and context added 2026-10-13.
Each item must exist and be one you can open. Everyone on the task sees a link’s title, so a missing or unreadable item is refused with a 400, and nothing is linked.
Body parameters
array
required
The items to link. At least one.
curl --location --request POST 'https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": { "check_ids": ["liability-cap"] }
}
]
}'
const response = await fetch("https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": { "check_ids": ["liability-cap"] }
}
]
}),
});
const data = await response.json();
console.log(data);
import requests
url = "https://api.wordsmith.ai/api/v1/tasks/9f8e7d6c-5b4a-3210-9876-543210fedcba/links"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012"
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"role": "subject",
"context": {"check_ids": ["liability-cap"]}
}
]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
{
"id": "9f8e7d6c-5b4a-3210-9876-543210fedcba",
"display_id": "#12",
"task_number": 12,
"title": "Review the Acme NDA",
"description": "Check the indemnity and termination clauses.",
"additional_context": "Counterparty has pushed back twice on liability caps.",
"status": "in_progress",
"priority": "high",
"team": {
"id": "1a2b3c4d-5e6f-7081-9200-aabbccddeeff",
"name": "Legal"
},
"creator": {
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com"
},
"assigned_to": {
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com"
},
"assigned_agent": null,
"assigned_team": null,
"matter": null,
"complete_by": "2026-01-01T00:00:00Z",
"tags": [
"nda",
"urgent"
],
"source_channel": "web",
"visibility": "customer",
"archived": false,
"draft": false,
"involved_people": [
{
"id": "11111111-2222-3333-4444-555555555555",
"name": "Jane Doe",
"email": "jane@example.com",
"role": "assignee",
"access_level": "write"
}
],
"shared_teams": [],
"linked_items": [
{
"type": "chat",
"id": "5f6a7b8c-9d0e-1f20-3a4b-5c6d7e8f9012",
"display_name": "NDA negotiation notes",
"role": "reference",
"context": null,
"is_output": false
},
{
"type": "review",
"id": "8e1d2c3b-4a59-4687-9a0b-1c2d3e4f5a6b",
"display_name": "Acme NDA",
"role": "subject",
"context": {
"check_ids": [
"liability-cap"
]
},
"is_output": false
}
],
"input_files": [],
"output_files": [],
"created_at": "2025-12-31T00:00:00Z",
"updated_at": "2025-12-31T01:00:00Z"
}
⌘I