Post a message
const url = 'https://desk.example.com/api/v1/channels/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/messages';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"body":"Deploy finished ✅","client_uuid":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","reply_to_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","thread_root_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","sent_to_channel":false}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://desk.example.com/api/v1/channels/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/messages \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "body": "Deploy finished ✅", "client_uuid": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "reply_to_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "thread_root_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "sent_to_channel": false }'Required scope: messages:write
Posts a message to the channel as the token’s subject. Supply
client_uuid to make the call idempotent: resending the same uuid
resolves to the message already created rather than a duplicate.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The channel’s id.
Request Bodyrequired
Section titled “Request Bodyrequired”object
The message text. Surrounding whitespace is trimmed.
An idempotency key you generate. One is generated for you when omitted.
The id of a live standard message in this channel to reply to inline.
The id of a live standard message in this channel to reply to in a thread. The target must not itself be a thread reply — threads are one level deep.
Whether a thread reply is also echoed into the channel.
Responses
Section titled “Responses”The message was posted.
object
object
standard is an authored message; member_joined and member_left are
system notices the app writes itself.
A workspace member, human or bot.
object
One emoji and how many members reacted with it.
object
Null until the message is edited.
Example
{ "data": { "type": "standard", "author": { "type": "human" } }}The token is missing, malformed, or revoked.
The shape every error response carries.
object
Examplegenerated
{ "message": "example"}The token lacks the scope this operation requires, or its subject may see the resource but not perform this action on it.
The shape every error response carries.
object
Examplegenerated
{ "message": "example"}The resource does not exist, is outside the token’s workspace, or the
integrations platform is disabled. A channel the subject cannot see is
reported here rather than as a 403, so the API never leaks its
existence.
The shape every error response carries.
object
Examplegenerated
{ "message": "example"}The request body failed validation.
object
The failing fields, each mapped to its messages.
object
Examplegenerated
{ "message": "example", "errors": { "additionalProperty": [ "example" ] }}The per-token rate limit (INTEGRATIONS_API_RATE_LIMIT requests per
minute) was exceeded. Retry after the Retry-After header.
The shape every error response carries.
object
Examplegenerated
{ "message": "example"}Headers
Section titled “Headers”Seconds to wait before retrying.