{% note tip "" %}
If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect to the MCP server so that the assistant can utilize the official REST documentation.
{% endnote %}
Scope:
imWho can execute the method: message author
The method im.message.update modifies the text and parameters of an already sent message.
{% include Note on required parameters %}
#|
|| Name
type | Description ||
|| MESSAGE_ID*
integer | Identifier of the message.
The identifier is returned by the method im.message.add ||
|| MESSAGE
string | New text of the message. If an empty value is provided, the message will be deleted.
If the parameter is not provided, the message text will remain unchanged ||
|| ATTACH
object
string | Attachment with content blocks: images, links, files. To remove the attachment, pass N or an empty value.
Read more in the Attachments section ||
|| KEYBOARD
object
string | Buttons below the message that the user can interact with. To disable button display, pass N or an empty value.
Read more in the Working with Keyboards article ||
|| MENU
object
string | Additional items in the chat's context menu. To disable the display of additional menu items, pass N or an empty value.
Read more in the Context Menu article ||
|| URL_PREVIEW
string | Conversion of links into rich links.
Allowed values:
Y— enabledN— disabled || || IS_EDITEDstring| Flag for marking "edited":Y— markN— do not mark
Default is Y
{% note info "" %}
The parameter is applied when updating ATTACH. When changing MESSAGE, the "edited" label may appear even if IS_EDITED = 'N' is provided.
{% endnote %} || |#
{% include Note on examples %}
{% list tabs %}
-
cURL (Webhook)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"MESSAGE_ID":34239,"MESSAGE":"Updated text","KEYBOARD":"N"}' \ https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/im.message.update
-
cURL (OAuth)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"MESSAGE_ID":34239,"MESSAGE":"Updated text","KEYBOARD":"N","auth":"**put_access_token_here**"}' \ https://**put_your_bitrix24_address**/rest/im.message.update
-
JS (TS)
// This snippet is an ES module: top-level await requires type="module" or a bundler. // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide). import { Text } from '@bitrix24/b24jssdk' import type { B24Frame } from '@bitrix24/b24jssdk' declare const $b24: B24Frame try { const response = await $b24.actions.v2.call.make<boolean>({ method: 'im.message.update', params: { MESSAGE_ID: 34239, MESSAGE: 'Updated text', KEYBOARD: 'N', }, requestId: Text.getUuidRfc4122() }) // The payload is available only on a successful response if (!response.isSuccess) { console.error(response.getErrorMessages().join('; ')) } else { const result = response.getData()!.result console.info('Message updated:', result) } } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) }
-
JS (UMD)
<!-- Load the SDK (UMD build); it is exposed as the global B24Js --> <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script> <script> async function updateMessage() { try { // Initialize the SDK inside a Bitrix24 frame const $b24 = await B24Js.initializeB24Frame() const response = await $b24.actions.v2.call.make({ method: 'im.message.update', params: { MESSAGE_ID: 34239, MESSAGE: 'Updated text', KEYBOARD: 'N', }, requestId: B24Js.Text.getUuidRfc4122() }) // The payload is available only on a successful response if (!response.isSuccess) { console.error(response.getErrorMessages().join('; ')) return } const result = response.getData().result console.info('Message updated:', result) } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) } } document.addEventListener('DOMContentLoaded', updateMessage) </script>
-
PHP
try { $response = $b24Service ->core ->call( 'im.message.update', [ 'MESSAGE_ID' => 34239, 'MESSAGE' => 'Updated text', 'KEYBOARD' => 'N' ] ); $result = $response ->getResponseData() ->getResult(); echo 'Success: ' . print_r($result, true); processData($result); } catch (Throwable $e) { error_log($e->getMessage()); echo 'Error updating message: ' . $e->getMessage(); }
-
BX24.js
BX24.callMethod( 'im.message.update', { MESSAGE_ID: 34239, MESSAGE: 'Updated text', KEYBOARD: 'N' }, function(result) { if (result.error()) console.error(result.error()); else console.log(result.data()); } );
-
PHP CRest
require_once('crest.php'); $result = CRest::call( 'im.message.update', [ 'MESSAGE_ID' => 34239, 'MESSAGE' => 'Updated text', 'KEYBOARD' => 'N' ] ); echo '<PRE>'; print_r($result); echo '</PRE>';
-
Go
// client and ctx are already created — see the Go SDK section res, err := client.Core().Call(ctx, "im.message.update", b24.Params{ "MESSAGE_ID": 34239, "MESSAGE": "Updated text", "KEYBOARD": "N", }) if err != nil { return fmt.Errorf("im.message.update: %w", err) } var ok bool if err := json.Unmarshal(res.Result, &ok); err != nil { return fmt.Errorf("parse response: %w", err) } fmt.Println("done:", ok)
{% endlist %}
HTTP Status: 200
{
"result": true,
"time": {
"start": 1772623160,
"finish": 1772623160.616113,
"duration": 0.6161129474639893,
"processing": 0,
"date_start": "2026-03-04T14:19:20+01:00",
"date_finish": "2026-03-04T14:19:20+01:00",
"operating_reset_at": 1772623760,
"operating": 0
}
}#|
|| Name
type | Description ||
|| result
boolean | true if the message was updated ||
|| time
time | Information about the request execution time ||
|#
HTTP Status: 400, 403
{
"error": "MESSAGE_ID_ERROR",
"error_description": "Message ID can't be empty"
}{% include notitle error handling %}
#|
|| Code | Description | Value ||
|| MESSAGE_ID_ERROR | Message ID can't be empty | MESSAGE_ID is missing or invalid ||
|| CANT_EDIT_MESSAGE | Time has expired for modification or you don't have access | No permission to edit the message or the modification period has expired ||
|| ATTACH_ERROR | Incorrect attach params | Invalid ATTACH object ||
|| ATTACH_OVERSIZE | You have exceeded the maximum allowable size of attach | The size of ATTACH exceeds the allowable limit ||
|| KEYBOARD_ERROR | Incorrect keyboard params | Invalid KEYBOARD object ||
|| KEYBOARD_OVERSIZE | You have exceeded the maximum allowable size of keyboard | The size of KEYBOARD exceeds the allowable limit ||
|| menu_ERROR | Incorrect menu params | Invalid MENU object ||
|| MENU_OVERSIZE | You have exceeded the maximum allowable size of menu | The size of MENU exceeds the allowable limit ||
|#
{% include system errors %}