Updates a message.
POSThttps://slack.com/api/chat.update
application/x-www-form-urlencoded
application/json
token
Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.
xxxx-xxxxxxxxx-xxxx
blocks
text
One of these arguments is required to describe the content of the message. If attachments
or blocks
are included, text
will be used as fallback text for notifications only.
A JSON-based array of structured attachments, presented as a URL-encoded string.
[{"pretext": "pre-hello", "text": "text-world"}]
blocks
A JSON-based array of structured blocks, presented as a URL-encoded string.
[{"type": "section", "text": {"type": "plain_text", "text": "Hello world"}}]
How this field works and whether it is required depends on other fields you use in your API call. See below for more detail.
Hello world
Pass true to update the message as the authed user. Bot users in this context are considered authed users.
true
Array of new file ids that will be sent with this message.
F013GKY52QK,F013GL22D0T or ["F013GKY52QK","F013GL22D0T"]
Find and link channel names and usernames. Defaults to none
. If you do not specify a value for this field, the original value set for the message will be overwritten with the default, none
.
true
JSON object with event_type and event_payload fields, presented as a URL-encoded string. If you don't include this field, the message's previous metadata
will be retained. To remove previous metadata
, include an empty object for this field. Metadata you post to Slack is accessible to any app or user who is a member of that workspace.
{"event_type": "task_created", "event_payload": { "id": "11223", "title": "Redesign Homepage"}}
Change how messages are treated. Defaults to client
, unlike chat.postMessage
. Accepts either none
or full
. If you do not specify a value for this field, the original value set for the message will be overwritten with the default, client
.
none
This method updates a message in a channel. Though related to chat.postMessage
, some parameters of chat.update
are handled differently.
Ephemeral messages created by chat.postEphemeral
or otherwise cannot be updated with this method.
New Slack apps may use this method with the chat:write
scope and either a bot or user token.
To define your message, refer to our formatting spec and our guide to composing messages.
text
, blocks
or attachments
This method will behave differently depending on whether blocks
or text
is supplied. Slack will always try to render the message using blocks
, and use text
only for notifications. If you don't include blocks
, the message's previous blocks
will only be retained if the text
argument is not provided. If the text
argument is provided and blocks
are not provided, the blocks
will be removed, and the provided text
will be used for message rendering. To remove previous blocks
, include an empty array for the blocks
field.
Similarly, the attachments
field is required when not presenting text
. If you don't include attachments
, the message's previous attachments
will be retained. To remove previous attachments
, include an empty array for this field.
Only messages posted by the authenticated user are able to be updated using this method. This includes regular chat messages, as well as messages containing the me_message
subtype. Bot users may also update the messages they post.
Attempting to update other message types will return a cant_update_message
error.
To use chat.update
with a bot user token, you'll need to think of your bot user as a user, and pass as_user
set to true
while editing a message created by that same bot user.
The response includes the text
, channel
and timestamp
properties of the
updated message so clients can keep their local copies of the message in sync.
If you're posting an interactive message, you may use chat.update
to continue updating ongoing state changes around a message. Provide the ts
field the message you're updating and follow the bot user instructions above to update message text, and remove or add blocks.
Typical success response
{
"ok": true,
"channel": "C123ABC456",
"ts": "1401383885.000061",
"text": "Updated text you carefully authored",
"message": {
"text": "Updated text you carefully authored",
"user": "U34567890"
}
}
Typical error response
{
"ok": false,
"error": "cant_update_message"
}
This table lists the expected errors that this method could return. However, other errors can be returned in the case where the service is down or other unexpected factors affect processing. Callers should always check the value of the ok
params in the response.
Error | Description |
---|---|
as_user_not_supported | The |
block_mismatch | Rich-text blocks cannot be replaced with non-rich-text blocks |
cant_broadcast_message | Unable to broadcast this message. |
cant_update_message | Authenticated user does not have permission to update this message. |
channel_not_found | Value passed for |
edit_window_closed | The message cannot be edited due to the team message edit settings |
external_channel_migrating | The channel is in the process of migrating and so the message cannot be updated at this time. |
invalid_attachments | The attachments were invalid. |
invalid_blocks | The blocks were invalid for the requesting user. |
invalid_metadata_format | Invalid metadata format provided |
invalid_metadata_schema | Invalid metadata schema provided |
is_inactive | The message cannot be edited within a frozen, archived or deleted channel. |
message_not_found | No message exists with the requested timestamp. |
metadata_must_be_sent_from_app | Message metadata can only be posted or updated using an app-level token |
metadata_too_large | Metadata exceeds size limit |
msg_too_long | Message text is too long |
no_dual_broadcast_content_update | Can't broadcast an old reply and update the content at the same time. |
no_text | No message text provided |
slack_connect_file_link_sharing_blocked | Admin has disabled Slack File sharing in all Slack Connect communications |
team_not_found | Team associated with the message and channel could not be found. |
too_many_attachments | Too many attachments were provided with this message. A maximum of 100 attachments are allowed on a message. |
update_failed | Internal update failure. |
access_denied | Access to a resource specified in the request is denied. |
account_inactive | Authentication token is for a deleted user or workspace when using a |
deprecated_endpoint | The endpoint has been deprecated. |
ekm_access_denied | Administrators have suspended the ability to post a message. |
enterprise_is_restricted | The method cannot be called from an Enterprise. |
invalid_auth | Some aspect of authentication cannot be validated. Either the provided token is invalid or the request originates from an IP address disallowed from making the request. |
method_deprecated | The method has been deprecated. |
missing_scope | The token used is not granted the specific scope permissions required to complete this request. |
not_allowed_token_type | The token type used in this request is not allowed. |
not_authed | No authentication token provided. |
no_permission | The workspace token used in this request does not have the permissions necessary to complete the request. Make sure your app is a member of the conversation it's attempting to post a message to. |
org_login_required | The workspace is undergoing an enterprise migration and will not be available until migration is complete. |
token_expired | Authentication token has expired |
token_revoked | Authentication token is for a deleted user or workspace or the app has been removed when using a |
two_factor_setup_required | Two factor setup is required. |
team_access_not_granted | The token used is not granted the specific workspace access required to complete this request. |
accesslimited | Access to this method is limited on the current network |
fatal_error | The server could not complete your operation(s) without encountering a catastrophic error. It's possible some aspect of the operation succeeded before the error was raised. |
internal_error | The server could not complete your operation(s) without encountering an error, likely due to a transient issue on our end. It's possible some aspect of the operation succeeded before the error was raised. |
invalid_arg_name | The method was passed an argument whose name falls outside the bounds of accepted or expected values. This includes very long names and names with non-alphanumeric characters other than |
invalid_arguments | The method was either called with invalid arguments or some detail about the arguments passed is invalid, which is more likely when using complex arguments like blocks or attachments. |
invalid_array_arg | The method was passed an array as an argument. Please only input valid strings. |
invalid_charset | The method was called via a |
invalid_form_data | The method was called via a |
invalid_post_type | The method was called via a |
missing_post_type | The method was called via a |
ratelimited | The request has been ratelimited. Refer to the |
request_timeout | The method was called via a |
service_unavailable | The service is temporarily unavailable |
team_added_to_org | The workspace associated with your request is currently undergoing migration to an Enterprise Organization. Web API and other platform operations will be intermittently unavailable until the transition is complete. |
This table lists the expected warnings that this method will return. However, other warnings can be returned in the case where the service is experiencing unexpected trouble.
Warning | Description |
---|---|
message_truncated | The |
missing_charset | The method was called via a |
superfluous_charset | The method was called via a |