curl --request POST \
--url https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "This is my message",
"mentions": [
{
"configurationId": "7f3a9c2b1e"
}
]
}
'import requests
url = "https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages"
payload = {
"content": "This is my message",
"mentions": [{ "configurationId": "7f3a9c2b1e" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({content: 'This is my message', mentions: [{configurationId: '7f3a9c2b1e'}]})
};
fetch('https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages', 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://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content' => 'This is my message',
'mentions' => [
[
'configurationId' => '7f3a9c2b1e'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages"
payload := strings.NewReader("{\n \"content\": \"This is my message\",\n \"mentions\": [\n {\n \"configurationId\": \"7f3a9c2b1e\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"This is my message\",\n \"mentions\": [\n {\n \"configurationId\": \"7f3a9c2b1e\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"This is my message\",\n \"mentions\": [\n {\n \"configurationId\": \"7f3a9c2b1e\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"content": "This is my message",
"mentions": [
{
"configurationId": "7f3a9c2b1e"
}
],
"context": {
"username": "johndoe123",
"timezone": "America/New_York",
"fullName": "John Doe",
"email": "john.doe@example.com",
"profilePictureUrl": "https://example.com/profiles/johndoe123.jpg",
"selectedSpaceIds": [
"<string>"
],
"agenticMessageData": {
"type": "run_agent",
"originMessageId": "2b8e4f6a0c"
}
},
"modelSelection": {
"providerId": "anthropic",
"modelId": "claude-sonnet-4-20250514",
"reasoningEffort": "medium"
}
}Create a message
Create a message in the workspace identified by in the conversation identified by .
curl --request POST \
--url https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "This is my message",
"mentions": [
{
"configurationId": "7f3a9c2b1e"
}
]
}
'import requests
url = "https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages"
payload = {
"content": "This is my message",
"mentions": [{ "configurationId": "7f3a9c2b1e" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({content: 'This is my message', mentions: [{configurationId: '7f3a9c2b1e'}]})
};
fetch('https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages', 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://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content' => 'This is my message',
'mentions' => [
[
'configurationId' => '7f3a9c2b1e'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages"
payload := strings.NewReader("{\n \"content\": \"This is my message\",\n \"mentions\": [\n {\n \"configurationId\": \"7f3a9c2b1e\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"This is my message\",\n \"mentions\": [\n {\n \"configurationId\": \"7f3a9c2b1e\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dust.tt/api/v1/w/{wId}/assistant/conversations/{cId}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"This is my message\",\n \"mentions\": [\n {\n \"configurationId\": \"7f3a9c2b1e\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"content": "This is my message",
"mentions": [
{
"configurationId": "7f3a9c2b1e"
}
],
"context": {
"username": "johndoe123",
"timezone": "America/New_York",
"fullName": "John Doe",
"email": "john.doe@example.com",
"profilePictureUrl": "https://example.com/profiles/johndoe123.jpg",
"selectedSpaceIds": [
"<string>"
],
"agenticMessageData": {
"type": "run_agent",
"originMessageId": "2b8e4f6a0c"
}
},
"modelSelection": {
"providerId": "anthropic",
"modelId": "claude-sonnet-4-20250514",
"reasoningEffort": "medium"
}
}Authorizations
Your DUST API key is a Bearer token.
Body
The content of the message. Should not be empty.
"This is my message"
Empty array is accepted but won't trigger any agent.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Optional per-message model and reasoning-effort override applied to the
mentioned agent(s). When omitted, each agent runs its configured model.
A provider/model pair that is not authorized for the workspace is
rejected with a 400 (model_disabled), it does not fall back to the
agent's configured model. A malformed object, or an unknown reasoning
effort, also results in a 400.
Show child attributes
Show child attributes
Response
Message created successfully.
The content of the message. Should not be empty.
"This is my message"
Empty array is accepted but won't trigger any agent.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Optional per-message model and reasoning-effort override applied to the
mentioned agent(s). When omitted, each agent runs its configured model.
A provider/model pair that is not authorized for the workspace is
rejected with a 400 (model_disabled), it does not fall back to the
agent's configured model. A malformed object, or an unknown reasoning
effort, also results in a 400.
Show child attributes
Show child attributes