Say Mist's duplicate suggestion is not a duplicate
Requires a user session with multiplayer_tasks.update or the existing application_themes.update permission, and Cowork enabled for the company. Records for good that the pair is not a duplicate, so Mist does not suggest it again, whatever either ticket says later. Neither ticket changes and nothing is assessed. Asking again answers the same. It is recorded only while the suggestion stands as it is served: the work has not started and the older ticket is open; a dismissal is for good, so one made while the ticket is not offering the suggestion would silence it when it comes back. No body.
curl --request POST \
--url https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss', 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}/assessments/{assessment_id}/dismiss",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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}/assessments/{assessment_id}/dismiss"
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"task": {
"id": "01a1d0e2-a47d-77a7-95ce-326a9252cc14",
"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": "dup-3cecda9cf5c6",
"company_id": 96778814,
"conversation_id": null,
"created_at": "2026-11-12T16:51:16Z",
"creator_id": 433400890,
"description": "Tapping Place order on iOS Safari does nothing",
"due_on": null,
"kind": null,
"lock_version": 0,
"merged_from": [],
"merged_into": null,
"mist_confidence": {
"state": "current",
"assessment_id": "01a1d0e2-a47e-79b2-bf12-7e90a6064497",
"score": 4,
"band": "green",
"summary": "A clear change.",
"concerns": [
"Detail"
],
"raise_by": [],
"assessed_at": "2026-11-12T17:51:16.605Z",
"suggested_kind": "change",
"category": "eng",
"difficulty": "easy",
"hours_low": 1,
"hours_high": 2,
"questions": []
},
"plan": null,
"priority": null,
"run_id": null,
"run_thread_id": null,
"source": null,
"source_threads": [],
"status": "open",
"status_editable": true,
"tags": [],
"title": "Cannot tap pay on my phone",
"updated_at": "2026-11-12T16:51:16Z"
},
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-11-12T17:51:16Z"
}
}{
"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 the suggestion is on.
The read that named the older ticket, from mist_confidence.assessment_id.
curl --request POST \
--url https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss', 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}/assessments/{assessment_id}/dismiss",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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}/assessments/{assessment_id}/dismiss"
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/multiplayer/tasks/{id}/assessments/{assessment_id}/dismiss")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"task": {
"id": "01a1d0e2-a47d-77a7-95ce-326a9252cc14",
"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": "dup-3cecda9cf5c6",
"company_id": 96778814,
"conversation_id": null,
"created_at": "2026-11-12T16:51:16Z",
"creator_id": 433400890,
"description": "Tapping Place order on iOS Safari does nothing",
"due_on": null,
"kind": null,
"lock_version": 0,
"merged_from": [],
"merged_into": null,
"mist_confidence": {
"state": "current",
"assessment_id": "01a1d0e2-a47e-79b2-bf12-7e90a6064497",
"score": 4,
"band": "green",
"summary": "A clear change.",
"concerns": [
"Detail"
],
"raise_by": [],
"assessed_at": "2026-11-12T17:51:16.605Z",
"suggested_kind": "change",
"category": "eng",
"difficulty": "easy",
"hours_low": 1,
"hours_high": 2,
"questions": []
},
"plan": null,
"priority": null,
"run_id": null,
"run_thread_id": null,
"source": null,
"source_threads": [],
"status": "open",
"status_editable": true,
"tags": [],
"title": "Cannot tap pay on my phone",
"updated_at": "2026-11-12T16:51:16Z"
},
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-11-12T17:51:16Z"
}
}{
"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"
}
}