{% 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:
diskWho can execute the method: a user with "Add" or "Edit" access permission for the required folder
The method disk.folder.addSubFolder creates a subfolder.
{% include Note on required parameters %}
#|
|| Name
type | Description ||
|| id*
integer | Identifier of the parent folder.
The identifier can be obtained using the method disk.storage.getChildren if the folder is in the root of the storage, and using the method disk.folder.getChildren if the folder is in another folder
||
|| data*
array | An array with the field NAME, where NAME is the name of the subfolder ||
|#
{% note info "" %}
To manage access to the created folder, use the method disk.folder.shareToUser
{% endnote %}
{% include Note on examples %}
{% list tabs %}
-
cURL (Webhook)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"id":8907,"data":{"NAME":"Folder in Folder"}}' \ https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/disk.folder.addSubFolder
-
cURL (OAuth)
curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"id":8907,"data":{"NAME":"Folder in Folder"},"auth":"**put_access_token_here**"}' \ https://**put_your_bitrix24_address**/rest/disk.folder.addSubFolder
-
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, ISODate } from '@bitrix24/b24jssdk' declare const $b24: B24Frame // Shape of the payload returned in result (match the "response handling" section of the page) type AddSubfolderResult = { ID: number NAME: string CODE: string | null STORAGE_ID: string TYPE: string REAL_OBJECT_ID: number PARENT_ID: string DELETED_TYPE: number CREATE_TIME: ISODate UPDATE_TIME: ISODate DELETE_TIME: ISODate | null CREATED_BY: string UPDATED_BY: string DELETED_BY: string | null DETAIL_URL: string } try { const response = await $b24.actions.v2.call.make<AddSubfolderResult>({ method: 'disk.folder.addSubFolder', params: { id: 8907, data: { NAME: 'Subfolder name', }, }, 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('Created subfolder:', result.ID, result.NAME) } } 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 addSubfolder() { try { // Initialize the SDK inside a Bitrix24 frame const $b24 = await B24Js.initializeB24Frame() const response = await $b24.actions.v2.call.make({ method: 'disk.folder.addSubFolder', params: { id: 8907, data: { NAME: 'Subfolder name', }, }, 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('Created subfolder:', result.ID, result.NAME) } catch (error) { // Thrown on transport or SDK failures (AjaxError, SdkError, etc.) console.error(error) } } document.addEventListener('DOMContentLoaded', addSubfolder) </script>
-
PHP
try { $response = $b24Service ->core ->call( 'disk.folder.addSubFolder', [ 'id' => 8907, 'data' => [ 'NAME' => 'Folder in Folder' ] ] ); $result = $response ->getResponseData() ->getResult(); echo 'Success: ' . print_r($result, true); processData($result); } catch (Throwable $e) { error_log($e->getMessage()); echo 'Error adding subfolder: ' . $e->getMessage(); }
-
BX24.js
BX24.callMethod( "disk.folder.addSubFolder", { id: 8907, data: { NAME: 'Folder in Folder' }, }, function (result) { if (result.error()) console.error(result.error()); else console.dir(result.data()); } );
-
PHP CRest
require_once('crest.php'); $result = CRest::call( 'disk.folder.addSubFolder', [ 'id' => 8907, 'data' => [ 'NAME' => 'Folder in Folder' ] ] ); 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, "disk.folder.addSubFolder", b24.Params{ "id": 8907, "data": b24.Params{ "NAME": "Folder in Folder", }, }) if err != nil { return fmt.Errorf("disk.folder.addSubFolder: %w", err) } var item struct { ID b24.ID `json:"ID"` Name string `json:"NAME"` StorageID b24.ID `json:"STORAGE_ID"` Type string `json:"TYPE"` RealObjectID b24.ID `json:"REAL_OBJECT_ID"` ParentID b24.ID `json:"PARENT_ID"` } if err := json.Unmarshal(res.Result, &item); err != nil { return fmt.Errorf("parse response: %w", err) } fmt.Println(item.ID, item.Name)
{% endlist %}
HTTP Status: 200
{
"result": {
"ID": 8930,
"NAME": "Folder in Folder",
"CODE": null,
"STORAGE_ID": "1357",
"TYPE": "folder",
"REAL_OBJECT_ID": 8930,
"PARENT_ID": "8907",
"DELETED_TYPE": 0,
"CREATE_TIME": "2026-01-13T11:20:40+01:00",
"UPDATE_TIME": "2026-01-13T11:20:40+01:00",
"DELETE_TIME": null,
"CREATED_BY": "1269",
"UPDATED_BY": "1269",
"DELETED_BY": null,
"DETAIL_URL": "https://test.bitrix24.com/company/personal/user/1269/disk/path/Folder/Folder in Folder"
},
"time": {
"start": 1768292440,
"finish": 1768292440.894889,
"duration": 0.8948891162872314,
"processing": 0,
"date_start": "2026-01-13T11:20:40+01:00",
"date_finish": "2026-01-13T11:20:40+01:00",
"operating_reset_at": 1768293040,
"operating": 0
}
}#|
|| Name
type | Description ||
|| result
array | An array with data about the created folder ||
|| ID
integer | Identifier of the folder ||
|| NAME
string | Name of the folder ||
|| CODE
string | Symbolic code of the folder ||
|| STORAGE_ID
integer | Identifier of the storage where the folder is located ||
|| TYPE
enum | Type of the object ||
|| REAL_OBJECT_ID
integer | Identifier of the object ||
|| PARENT_ID
integer | Identifier of the parent folder ||
|| DELETED_TYPE
enum | Deletion status of the object. Possible values:
0— not deleted3— in the trash4— deleted along with the parent folder || || CREATE_TIMEdatetime| Date and time of folder creation || || UPDATE_TIMEdatetime| Date and time of the last update of the folder || || DELETE_TIMEdatetime| Date and time of moving the folder to the trash || || CREATED_BYinteger| Identifier of the user who created the folder || || UPDATED_BYinteger| Identifier of the user who made the last change || || DELETED_BYinteger| Identifier of the user who deleted the folder || || DETAIL_URLstring| Link to open the folder in the interface || || timetime| Information about the execution time of the request || |#
HTTP Status: 400
{
"error":"ERROR_ARGUMENT",
"error_description":"Invalid value of parameter {Parameter #1}"
}{% include notitle error handling %}
#|
|| Code | Description | Value ||
|| ERROR_ARGUMENT | Invalid value of parameter {Parameter #1} | The required field NAME is missing in the data array ||
|| DISK_OBJ_22000 | A folder with this name already exists | A folder with this name already exists ||
|| ERROR_NOT_FOUND | Could not find entity with id X | The folder with the specified id was not found ||
|| ACCESS_DENIED | Access denied | Insufficient rights to create the folder ||
|#
{% include system errors %}