{% 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:
userWho can execute the method: administrator
The user.update method updates user data. This is only possible on behalf of a user with user invitation rights.
{% include Note on required parameters %}
#|
|| Name
type | Description ||
|| ID*
integer | User identifier ||
|| ACTIVE
boolean | User activity flag. Possible values:
Y— employee is active,N— employee is dismissed || || EMAILstring| User E-mail || || NAMEstring| First name || || LAST_NAMEstring| Last name || || SECOND_NAMEstring| Middle name || || PERSONAL_GENDERstring| Gender || || PERSONAL_PROFESSIONstring| Profession || || PERSONAL_WWWstring| Homepage || || PERSONAL_BIRTHDAYstring| Date of birth || || PERSONAL_PHOTOarray| Photo, pass an array containing the file name and a Base64 string || || PERSONAL_ICQstring| ICQ || || PERSONAL_PHONEstring| Personal phone || || PERSONAL_FAXstring| Fax || || PERSONAL_MOBILEstring| Personal mobile || || PERSONAL_PAGERstring| Pager || || PERSONAL_STREETstring| Residential street || || PERSONAL_CITYstring| Residential city || || PERSONAL_STATEstring| Region / territory || || PERSONAL_ZIPstring| Postal code || || PERSONAL_COUNTRYstring| Country || || PERSONAL_MAILBOXstring| P.O. Box || || PERSONAL_NOTESstring| Additional notes || || WORK_PHONEstring| Company phone || || WORK_COMPANYstring| Company || || WORK_POSITIONstring| Job title || || WORK_DEPARTMENTstring| Department || || WORK_WWWstring| Company website || || WORK_FAXstring| WORK_FAX || || WORK_PAGERstring| WORK_PAGER || || WORK_STREETstring| WORK_STREET || || WORK_MAILBOXstring| WORK_MAILBOX || || WORK_CITYstring| Work city || || WORK_STATEstring| WORK_STATE || || WORK_ZIPstring| WORK_ZIP || || WORK_COUNTRYstring| WORK_COUNTRY || || WORK_PROFILEstring| WORK_PROFILE || || WORK_LOGOarray| WORK_LOGO || || WORK_NOTESstring| WORK_NOTES || || UF_SKYPE_LINKstring| Skype chat link || || UF_ZOOMstring| Zoom || || UF_DEPARTMENTstring| Department || || UF_INTERESTSstring| Interests || || UF_SKILLSstring| Skills || || UF_WEB_SITESstring| Other websites || || UF_XINGstring| Xing || || UF_LINKEDINstring| LinkedIn || || UF_FACEBOOKstring| Facebook || || UF_TWITTERstring| Twitter || || UF_SKYPEstring| Skype || || UF_DISTRICTstring| District || || UF_PHONE_INNERstring| Extension number || |#
{% include Note on examples %}
{% list tabs %}
-
cURL (Webhook)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "ID": 1, "NAME": "Administrator", "LAST_NAME": "SomeLastName" }' \ https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/user.update -
cURL (OAuth)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "ID": 1, "NAME": "Administrator", "LAST_NAME": "SomeLastName", "auth": "**put_access_token_here**" }' \ https://**put_your_bitrix24_address**/rest/user.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 // Shape of the payload returned in result (match the "response handling" section of the page) type UserUpdateResult = boolean try { const response = await $b24.actions.v2.call.make<UserUpdateResult>({ method: 'user.update', params: { ID: 1, NAME: 'Administrator', LAST_NAME: 'SomeLastName', }, 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('User updated successfully:', 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 updateUser() { try { // Initialize the SDK inside a Bitrix24 frame const $b24 = await B24Js.initializeB24Frame() const response = await $b24.actions.v2.call.make({ method: 'user.update', params: { ID: 1, NAME: 'Administrator', LAST_NAME: 'SomeLastName', }, 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('User updated successfully:', result) } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) } } document.addEventListener('DOMContentLoaded', updateUser) </script>
-
Python
from b24pysdk.errors import BitrixAPIError, BitrixSDKException try: bitrix_response = client.user.update( fields={ "ID": 1, "NAME": "Administrator", "LAST_NAME": "SomeLastName", }, ).response result = bitrix_response.result print(result) except BitrixAPIError as error: print( "Bitrix API error", f"error: {error.error}", f"error_description: {error.error_description}", sep="\n", ) except BitrixSDKException as error: print(f"Bitrix SDK error: {error.message}") except Exception as error: print(f"Unexpected error: {error}")
-
PHP
try { $response = $b24Service ->core ->call( 'user.update', [ 'ID' => 1, 'NAME' => 'Administrator', 'LAST_NAME' => 'SomeLastName', ] ); $result = $response ->getResponseData() ->getResult(); if ($result->error()) { error_log($result->error()); } else { echo 'Success: ' . print_r($result->data(), true); } } catch (Throwable $e) { error_log($e->getMessage()); echo 'Error updating user: ' . $e->getMessage(); }
-
BX24.js
BX24.callMethod( "user.update", { "ID": 1, "NAME": "Administrator", "LAST_NAME": "SomeLastName" }, function(result) { if(result.error()) console.error(result.error()); else console.dir(result.data()); } );
-
PHP CRest
require_once('crest.php'); $result = CRest::call( 'user.update', [ 'ID' => 1, 'NAME' => 'Administrator', 'LAST_NAME' => 'SomeLastName' ] ); 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, "user.update", b24.Params{ "ID": 1, "NAME": "Administrator", "LAST_NAME": "SomeLastName", }) if err != nil { return fmt.Errorf("user.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": 1721807581.02493,
"finish": 1721807581.20039,
"duration": 0.17546010017395,
"processing": 0.133708000183105,
"date_start": "2024-07-24T07:53:01+00:00",
"date_finish": "2024-07-24T07:53:01+00:00",
"operating": 0.133685827255249
}
}#|
|| Name
type | Description ||
|| result
boolean | Success status ||
|| time
time | Request execution time information ||
|#
HTTP status: 400
{
"error": "ERROR_CORE",
"error_description": "access_denied"
}{% include notitle Error handling %}
#|
|| Code | Error message | Description ||
|| ERROR_CORE | access_denied | Invalid user ID passed ||
|| ERROR_CORE | access_denied | User does not have permission to call the method ||
|| ERROR_CORE | | Invalid user ID passed||
|#
{% include System errors %}