Take a preview discussion off its work
Requires a user session with multiplayer_tasks.update or the existing application_themes.update permission, and application_themes.update for the discussion it hands back. Unlinks one pinned preview discussion in this company from the work that holds it. Both survive: the discussion goes back to being a comment of its own, keeping the status it had, and moving it to other work is an unlink and then a link. Takes no task version: the discussion is the only row that changes. Unlinking a discussion that belongs to no work answers the work as it is. A discussion that belongs to other work is refused as a conflict with the current task. A discussion the work’s current run answers on may still be unlinked: the run’s answer is then refused and the run finishes without one. An unknown id, another company’s discussion, a reply, and a deleted discussion, including one deleted while the unlink was waiting, all answer the same invalid payload. Work in another company, deleted work, and an unknown task id all answer the same not-found; work deleted after that read and before the unlink lands answers 410. A successful unlink announces a data-free invalidation on the discussion’s theme and on every theme the work’s remaining discussions sit on.
curl --request DELETE \
--url https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"task": {
"id": "9271f7b9-237c-5dbe-ab78-f866652d747a",
"agency": null,
"agency_join_request": null,
"agency_request": null,
"assignee": null,
"assigner": null,
"board_position": null,
"board_position_at_ms": null,
"category": null,
"client_id": "acme-videos",
"company_id": 96778814,
"created_at": "2026-11-12T17:50:31Z",
"creator_id": 433400890,
"description": "Use videos from the media library",
"due_on": null,
"kind": null,
"lock_version": 0,
"merged_from": [],
"merged_into": null,
"mist_confidence": {
"state": "not_assessed"
},
"plan": null,
"priority": null,
"run_id": null,
"run_thread_id": null,
"source_threads": [],
"status": "open",
"status_editable": true,
"tags": [],
"title": "Add customer videos",
"updated_at": "2026-11-12T17:50:31Z"
},
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-11-12T17:53:03Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {
"type": "conflict",
"merged_into": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
},
"task": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_id": "<string>",
"company_id": 123,
"creator_id": 123,
"title": "<string>",
"description": "<string>",
"status": "open",
"priority": "urgent",
"due_on": "2023-12-25",
"kind": "bug",
"category": "design",
"plan": [
{
"title": "<string>",
"outcome": "<string>"
}
],
"board_position": "<string>",
"board_position_at_ms": 123,
"lock_version": 1,
"run_id": "<string>",
"run_thread_id": 123,
"tags": [
"<string>"
],
"agency": {
"key": "example_agency",
"name": "Example agency"
},
"assignee": {
"id": "<string>",
"name": "<string>",
"kind": "user"
},
"assigner": {
"id": "<string>",
"name": "<string>",
"kind": "user"
},
"source_threads": [
{
"id": 123,
"theme_id": 123,
"client_id": "<string>",
"n": 123,
"page_url": "<string>",
"author_name": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"mist_confidence": {
"state": "current",
"score": 3,
"band": "red",
"summary": "<string>",
"concerns": [
"<string>"
],
"raise_by": [
"<string>"
],
"assessed_at": "2023-11-07T05:31:56Z",
"failure": "budget",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"suggested_kind": "bug",
"category": "design",
"difficulty": "easy",
"hours_low": 80,
"hours_high": 80,
"questions": [
{
"id": "q1",
"prompt": "<string>",
"options": [
"<string>"
]
}
],
"duplicate_of": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "open",
"reason": "<string>",
"merge_blocked": "agency"
}
},
"source": {
"provider": "linear",
"identifier": "<string>",
"url": "<string>"
},
"attachment_count": 1,
"agency_request": {
"agency": {
"key": "example_agency",
"name": "Example agency"
},
"owner": {
"id": "<string>",
"name": "<string>"
},
"access": [
{
"person": {
"id": "<string>",
"name": "<string>"
},
"role": {
"id": 123,
"name": "<string>"
}
}
],
"owner_has_access": true,
"state": "sent",
"stage": "requested",
"version": 1,
"sent_at": "2023-11-07T05:31:56Z",
"quote": {
"hours": 123,
"deliver_on": "2023-12-25",
"note": "<string>",
"quoted_at": "2023-11-07T05:31:56Z"
},
"revised_quote": {
"hours": 123,
"deliver_on": "2023-12-25",
"note": "<string>",
"quoted_at": "2023-11-07T05:31:56Z"
},
"changes_round": 1,
"reopenable_until": "2023-11-07T05:31:56Z",
"delivery_overdue": true,
"last_step": {
"kind": "<string>",
"at": "2023-11-07T05:31:56Z",
"note": "<string>"
}
},
"agency_join_request": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "pending",
"agency_name": "<string>",
"decline_reason": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"lock_version": 1
},
"merged_into": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"deleted": true
},
"merged_from": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"merged_at": "2023-11-07T05:31:56Z",
"version": 1
}
],
"conversation_id": 123,
"status_editable": true
}
}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The task UUID returned at creation or in a task page.
Row id of a pinned preview discussion in this company, as the preview comments read serves it in id.
1 <= x <= 9223372036854776000curl --request DELETE \
--url https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/source-threads/{thread_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"task": {
"id": "9271f7b9-237c-5dbe-ab78-f866652d747a",
"agency": null,
"agency_join_request": null,
"agency_request": null,
"assignee": null,
"assigner": null,
"board_position": null,
"board_position_at_ms": null,
"category": null,
"client_id": "acme-videos",
"company_id": 96778814,
"created_at": "2026-11-12T17:50:31Z",
"creator_id": 433400890,
"description": "Use videos from the media library",
"due_on": null,
"kind": null,
"lock_version": 0,
"merged_from": [],
"merged_into": null,
"mist_confidence": {
"state": "not_assessed"
},
"plan": null,
"priority": null,
"run_id": null,
"run_thread_id": null,
"source_threads": [],
"status": "open",
"status_editable": true,
"tags": [],
"title": "Add customer videos",
"updated_at": "2026-11-12T17:50:31Z"
},
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-11-12T17:53:03Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {
"type": "conflict",
"merged_into": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
},
"task": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_id": "<string>",
"company_id": 123,
"creator_id": 123,
"title": "<string>",
"description": "<string>",
"status": "open",
"priority": "urgent",
"due_on": "2023-12-25",
"kind": "bug",
"category": "design",
"plan": [
{
"title": "<string>",
"outcome": "<string>"
}
],
"board_position": "<string>",
"board_position_at_ms": 123,
"lock_version": 1,
"run_id": "<string>",
"run_thread_id": 123,
"tags": [
"<string>"
],
"agency": {
"key": "example_agency",
"name": "Example agency"
},
"assignee": {
"id": "<string>",
"name": "<string>",
"kind": "user"
},
"assigner": {
"id": "<string>",
"name": "<string>",
"kind": "user"
},
"source_threads": [
{
"id": 123,
"theme_id": 123,
"client_id": "<string>",
"n": 123,
"page_url": "<string>",
"author_name": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"mist_confidence": {
"state": "current",
"score": 3,
"band": "red",
"summary": "<string>",
"concerns": [
"<string>"
],
"raise_by": [
"<string>"
],
"assessed_at": "2023-11-07T05:31:56Z",
"failure": "budget",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"suggested_kind": "bug",
"category": "design",
"difficulty": "easy",
"hours_low": 80,
"hours_high": 80,
"questions": [
{
"id": "q1",
"prompt": "<string>",
"options": [
"<string>"
]
}
],
"duplicate_of": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "open",
"reason": "<string>",
"merge_blocked": "agency"
}
},
"source": {
"provider": "linear",
"identifier": "<string>",
"url": "<string>"
},
"attachment_count": 1,
"agency_request": {
"agency": {
"key": "example_agency",
"name": "Example agency"
},
"owner": {
"id": "<string>",
"name": "<string>"
},
"access": [
{
"person": {
"id": "<string>",
"name": "<string>"
},
"role": {
"id": 123,
"name": "<string>"
}
}
],
"owner_has_access": true,
"state": "sent",
"stage": "requested",
"version": 1,
"sent_at": "2023-11-07T05:31:56Z",
"quote": {
"hours": 123,
"deliver_on": "2023-12-25",
"note": "<string>",
"quoted_at": "2023-11-07T05:31:56Z"
},
"revised_quote": {
"hours": 123,
"deliver_on": "2023-12-25",
"note": "<string>",
"quoted_at": "2023-11-07T05:31:56Z"
},
"changes_round": 1,
"reopenable_until": "2023-11-07T05:31:56Z",
"delivery_overdue": true,
"last_step": {
"kind": "<string>",
"at": "2023-11-07T05:31:56Z",
"note": "<string>"
}
},
"agency_join_request": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "pending",
"agency_name": "<string>",
"decline_reason": "<string>",
"requested_at": "2023-11-07T05:31:56Z",
"lock_version": 1
},
"merged_into": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"deleted": true
},
"merged_from": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"merged_at": "2023-11-07T05:31:56Z",
"version": 1
}
],
"conversation_id": 123,
"status_editable": true
}
}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}