Зарегистрировать шаблон в мастере создания сайта landing.demos.register

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Scope: landing

Кто может выполнять метод: пользователь с правом Просмотр в разделе Сайты

Метод landing.demos.register регистрирует пользовательский шаблон в мастере создания сайта и страниц.

Метод обновляет шаблон, если он уже существует с этим же кодом для текущего приложения. Если не существует — создает новый.

Параметры метода

Обязательные параметры отмечены *

Название
тип

Описание

data*
object | array

Данные шаблона.

Обычно передается результат метода landing.site.fullExport.

Метод принимает как экспорт сайта с items, так и массив отдельных элементов шаблона подробнее

params
object

Дополнительные параметры регистрации подробнее

Тип data

Обязательные параметры отмечены *

Название
тип

Описание

charset
string

Кодировка экспортируемого шаблона

code*
string

Внешний код шаблона

site_code
string

Код сайта (путь)

name
string

Название шаблона

description
string | null

Описание шаблона

type
string

Тип шаблона.

Возможные значения:

  • page — шаблоны для страниц
  • store — шаблоны для магазинов
  • knowledge — шаблоны для баз знаний
  • group — шаблоны для групп
  • mainpage — шаблоны для главных страниц

tpl_type
string

Тип использования шаблона в мастере.

Возможные значения:

  • S — шаблон сайта
  • P — шаблон страницы

fields
object

Поля сайта из экспорта подробнее

folders
array | object

Папки из экспорта подробнее

items
object

Карта страниц шаблона в формате { "код_страницы": items } подробнее

layout
array | object

Данные layout из экспорта подробнее

preview
string

Ссылка на preview 1x

preview2x
string

Ссылка на preview 2x

preview3x
string

Ссылка на preview 3x

preview_url
string

Ссылка на предпросмотр

show_in_list
string

Признак показа в списке (Y/N)

syspages
array | object

Системные страницы из экспорта подробнее

version
integer

Версия формата экспорта

Тип элемента data.items

Обязательные параметры отмечены *

Название
тип

Описание

old_id
string | integer

Исходный идентификатор страницы

code*
string

Внешний код страницы

name
string

Название страницы

description
string | null

Описание страницы

type
string

Тип страницы.

Возможные значения:

  • page — шаблоны для страниц
  • store — шаблоны для магазинов
  • knowledge — шаблоны для баз знаний
  • group — шаблоны для групп
  • mainpage — шаблоны для главных страниц

tpl_type
string

Тип использования шаблона в мастере.

Возможные значения:

  • S — шаблон сайта
  • P — шаблон страницы

version
integer

Версия формата страницы

fields
object

Поля страницы из экспорта подробнее.

Коды fields.ADDITIONAL_FIELDS смотрите в разделе Дополнительные поля страницы

layout
array | object

Layout страницы из экспорта подробнее

items
object | array

Блоки страницы подробнее

preview
string

Ссылка на preview 1x

preview2x
string

Ссылка на preview 2x

preview3x
string

Ссылка на preview 3x

preview_url
string

Ссылка на предпросмотр

show_in_list
string

Признак показа в списке (Y/N)

Тип элемента data.items.items

Название
тип

Описание

code
string

Код блока

access
string

Уровень доступа к блоку

anchor
string

Якорь блока

old_id
integer

Исходный идентификатор блока

cards
object

Карточки блока

nodes
object

Узлы блока

style
object

Стили блока

attrs
object

Атрибуты блока

Параметр params

Название
тип

Описание

site_template_id
string

Идентификатор шаблона сайта главного модуля.

Используется в коробочных версиях

lang
object

Локализация основных фраз шаблона.

Подробности в статье Локализация шаблона

lang_original
string

Код исходного языка для массива lang

Примеры кода

Как использовать примеры в документации

Пример регистрации шаблона, где:

  • data — структура шаблона для регистрации
  • data в примерах предварительно получен методом landing.site.fullExport
curl -X POST \
          -H "Content-Type: application/json" \
          -d '{
            "data": {
              "charset": "UTF-8",
              "code": "ftmlt",
              "site_code": "/ftmlt/",
              "name": "Бизнес",
              "description": null,
              "type": "page",
              "fields": {
                "TITLE": "Бизнес",
                "LANDING_ID_INDEX": "0",
                "LANDING_ID_404": "0",
                "ADDITIONAL_FIELDS": {}
              },
              "folders": [],
              "items": {
                "ftmlt": {
                  "old_id": "16",
                  "code": "ftmlt",
                  "name": "Бизнес",
                  "description": null,
                  "preview": "",
                  "preview2x": "",
                  "preview3x": "",
                  "preview_url": "",
                  "show_in_list": "Y",
                  "type": "page",
                  "version": 3,
                  "fields": {
                    "TITLE": "Бизнес"
                  },
                  "layout": [],
                  "items": {}
                }
              },
              "layout": [],
              "preview": "",
              "preview2x": "",
              "preview3x": "",
              "preview_url": "",
              "show_in_list": "Y",
              "syspages": [],
              "version": 3
            }
          }' \
          "https://**put.your-domain-here**/rest/**user_id**/**webhook_code**/landing.demos.register.json"
        
curl -X POST \
          -H "Content-Type: application/json" \
          -d '{
            "data": {
              "charset": "UTF-8",
              "code": "ftmlt",
              "site_code": "/ftmlt/",
              "name": "Бизнес",
              "description": null,
              "type": "page",
              "fields": {
                "TITLE": "Бизнес",
                "LANDING_ID_INDEX": "0",
                "LANDING_ID_404": "0",
                "ADDITIONAL_FIELDS": {}
              },
              "folders": [],
              "items": {
                "ftmlt": {
                  "old_id": "16",
                  "code": "ftmlt",
                  "name": "Бизнес",
                  "description": null,
                  "preview": "",
                  "preview2x": "",
                  "preview3x": "",
                  "preview_url": "",
                  "show_in_list": "Y",
                  "type": "page",
                  "version": 3,
                  "fields": {
                    "TITLE": "Бизнес"
                  },
                  "layout": [],
                  "items": {}
                }
              },
              "layout": [],
              "preview": "",
              "preview2x": "",
              "preview3x": "",
              "preview_url": "",
              "show_in_list": "Y",
              "syspages": [],
              "version": 3
            },
            "auth": "**put_access_token_here**"
          }' \
          "https://**put.your-domain-here**/rest/landing.demos.register.json"
        
// 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<number[]>({
            method: 'landing.demos.register',
            params: {
              data: {
                charset: 'UTF-8',
                code: 'ftmlt',
                site_code: '/ftmlt/',
                name: 'Business',
                description: null,
                type: 'page',
                fields: {
                  TITLE: 'Business',
                  LANDING_ID_INDEX: '0',
                  LANDING_ID_404: '0',
                  ADDITIONAL_FIELDS: {},
                },
                folders: [],
                items: {
                  ftmlt: {
                    old_id: '16',
                    code: 'ftmlt',
                    name: 'Business',
                    description: null,
                    preview: '',
                    preview2x: '',
                    preview3x: '',
                    preview_url: '',
                    show_in_list: 'Y',
                    type: 'page',
                    version: 3,
                    fields: {
                      TITLE: 'Business',
                    },
                    layout: [],
                    items: {},
                  },
                },
                layout: [],
                preview: '',
                preview2x: '',
                preview3x: '',
                preview_url: '',
                show_in_list: 'Y',
                syspages: [],
                version: 3,
              },
            },
            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('Registered template IDs:', result)
          }
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
        
<!-- 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 registerDemo() {
            try {
              // Initialize the SDK inside a Bitrix24 frame
              const $b24 = await B24Js.initializeB24Frame()
        
              const response = await $b24.actions.v2.call.make({
                method: 'landing.demos.register',
                params: {
                  data: {
                    charset: 'UTF-8',
                    code: 'ftmlt',
                    site_code: '/ftmlt/',
                    name: 'Business',
                    description: null,
                    type: 'page',
                    fields: {
                      TITLE: 'Business',
                      LANDING_ID_INDEX: '0',
                      LANDING_ID_404: '0',
                      ADDITIONAL_FIELDS: {},
                    },
                    folders: [],
                    items: {
                      ftmlt: {
                        old_id: '16',
                        code: 'ftmlt',
                        name: 'Business',
                        description: null,
                        preview: '',
                        preview2x: '',
                        preview3x: '',
                        preview_url: '',
                        show_in_list: 'Y',
                        type: 'page',
                        version: 3,
                        fields: {
                          TITLE: 'Business',
                        },
                        layout: [],
                        items: {},
                      },
                    },
                    layout: [],
                    preview: '',
                    preview2x: '',
                    preview3x: '',
                    preview_url: '',
                    show_in_list: 'Y',
                    syspages: [],
                    version: 3,
                  },
                },
                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('Registered template IDs:', result)
            } catch (error) {
              // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
              console.error(error)
            }
          }
        
          document.addEventListener('DOMContentLoaded', registerDemo)
        </script>
        
try {
            $data = [
                'charset' => 'UTF-8',
                'code' => 'ftmlt',
                'site_code' => '/ftmlt/',
                'name' => 'Бизнес',
                'description' => null,
                'type' => 'page',
                'fields' => [
                    'TITLE' => 'Бизнес',
                    'LANDING_ID_INDEX' => '0',
                    'LANDING_ID_404' => '0',
                    'ADDITIONAL_FIELDS' => [],
                ],
                'folders' => [],
                'items' => [
                    'ftmlt' => [
                        'old_id' => '16',
                        'code' => 'ftmlt',
                        'name' => 'Бизнес',
                        'description' => null,
                        'preview' => '',
                        'preview2x' => '',
                        'preview3x' => '',
                        'preview_url' => '',
                        'show_in_list' => 'Y',
                        'type' => 'page',
                        'version' => 3,
                        'fields' => [
                            'TITLE' => 'Бизнес',
                        ],
                        'layout' => [],
                        'items' => [],
                    ],
                ],
                'layout' => [],
                'preview' => '',
                'preview2x' => '',
                'preview3x' => '',
                'preview_url' => '',
                'show_in_list' => 'Y',
                'syspages' => [],
                'version' => 3,
            ];
        
            $response = $b24Service
                ->core
                ->call(
                    'landing.demos.register',
                    [
                        'data' => $data,
                    ]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            echo 'Success: ' . print_r($result, true);
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error registering demo: ' . $e->getMessage();
        }
        
BX24.callMethod(
            'landing.demos.register',
            {
                data: {
                    charset: 'UTF-8',
                    code: 'ftmlt',
                    site_code: '/ftmlt/',
                    name: 'Бизнес',
                    description: null,
                    type: 'page',
                    fields: {
                        TITLE: 'Бизнес',
                        LANDING_ID_INDEX: '0',
                        LANDING_ID_404: '0',
                        ADDITIONAL_FIELDS: {}
                    },
                    folders: [],
                    items: {
                        ftmlt: {
                            old_id: '16',
                            code: 'ftmlt',
                            name: 'Бизнес',
                            description: null,
                            preview: '',
                            preview2x: '',
                            preview3x: '',
                            preview_url: '',
                            show_in_list: 'Y',
                            type: 'page',
                            version: 3,
                            fields: {
                                TITLE: 'Бизнес'
                            },
                            layout: [],
                            items: {}
                        }
                    },
                    layout: [],
                    preview: '',
                    preview2x: '',
                    preview3x: '',
                    preview_url: '',
                    show_in_list: 'Y',
                    syspages: [],
                    version: 3
                }
            },
            function(result)
            {
                if (result.error())
                {
                    console.error(result.error());
                }
                else
                {
                    console.info(result.data());
                }
            }
        );
        
require_once('crest.php');
        
        $data = [
            'charset' => 'UTF-8',
            'code' => 'ftmlt',
            'site_code' => '/ftmlt/',
            'name' => 'Бизнес',
            'description' => null,
            'type' => 'page',
            'fields' => [
                'TITLE' => 'Бизнес',
                'LANDING_ID_INDEX' => '0',
                'LANDING_ID_404' => '0',
                'ADDITIONAL_FIELDS' => [],
            ],
            'folders' => [],
            'items' => [
                'ftmlt' => [
                    'old_id' => '16',
                    'code' => 'ftmlt',
                    'name' => 'Бизнес',
                    'description' => null,
                    'preview' => '',
                    'preview2x' => '',
                    'preview3x' => '',
                    'preview_url' => '',
                    'show_in_list' => 'Y',
                    'type' => 'page',
                    'version' => 3,
                    'fields' => [
                        'TITLE' => 'Бизнес',
                    ],
                    'layout' => [],
                    'items' => [],
                ],
            ],
            'layout' => [],
            'preview' => '',
            'preview2x' => '',
            'preview3x' => '',
            'preview_url' => '',
            'show_in_list' => 'Y',
            'syspages' => [],
            'version' => 3,
        ];
        
        $result = CRest::call(
            'landing.demos.register',
            [
                'data' => $data,
            ]
        );
        
        if (isset($result['error']))
        {
            echo 'Ошибка: ' . $result['error_description'];
        }
        else
        {
            echo '<pre>';
            print_r($result['result']);
            echo '</pre>';
        }
        
// client и ctx уже созданы — см. раздел «SDK для Go»
        res, err := client.Core().Call(ctx, "landing.demos.register", b24.Params{
        	"data": b24.Params{
        		"charset":     "UTF-8",
        		"code":        "ftmlt",
        		"site_code":   "/ftmlt/",
        		"name":        "Бизнес",
        		"description": nil,
        		"type":        "page",
        		"fields": b24.Params{
        			"TITLE":             "Бизнес",
        			"LANDING_ID_INDEX":  "0",
        			"LANDING_ID_404":    "0",
        			"ADDITIONAL_FIELDS": b24.Params{},
        		},
        		"folders": []any{},
        		"items": b24.Params{
        			"ftmlt": b24.Params{
        				"old_id":       "16",
        				"code":         "ftmlt",
        				"name":         "Бизнес",
        				"description":  nil,
        				"preview":      "",
        				"preview2x":    "",
        				"preview3x":    "",
        				"preview_url":  "",
        				"show_in_list": "Y",
        				"type":         "page",
        				"version":      3,
        				"fields": b24.Params{
        					"TITLE": "Бизнес",
        				},
        				"layout": []any{},
        				"items":  b24.Params{},
        			},
        		},
        		"layout":       []any{},
        		"preview":      "",
        		"preview2x":    "",
        		"preview3x":    "",
        		"preview_url":  "",
        		"show_in_list": "Y",
        		"syspages":     []any{},
        		"version":      3,
        	},
        })
        if err != nil {
        	return fmt.Errorf("landing.demos.register: %w", err)
        }
        
        var items []b24.ID
        if err := json.Unmarshal(res.Result, &items); err != nil {
        	return fmt.Errorf("разбор ответа: %w", err)
        }
        fmt.Println("получено:", len(items))
        

Обработка ответа

HTTP-статус: 200

{
            "result": [5, 7],
            "time": {
                "start": 1774611129,
                "finish": 1774611129.843163,
                "duration": 0.843163013458252,
                "processing": 0,
                "date_start": "2026-03-27T14:32:09+03:00",
                "date_finish": "2026-03-27T14:32:09+03:00",
                "operating_reset_at": 1774611729,
                "operating": 0
            }
        }
        

Возвращаемые данные

Название
тип

Описание

result
integer[]

Массив идентификаторов шаблонов, которые были созданы или обновлены

time
time

Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400

{
            "error": "ERROR_ARGUMENT",
            "error_description": "The value of an argument 'data' has an invalid type",
            "argument": "data"
        }
        
{
            "error": "REGISTER_ERROR_DATA",
            "error_description": "Данные пусты или некорректны"
        }
        

Название
тип

Описание

error
string

Строковый код ошибки. Может состоять из цифр, латинских букв и знака подчеркивания

error_description
error_description

Текстовое описание ошибки. Описание не предназначено для показа конечному пользователю в необработанном виде

Возможные коды ошибок

Код

Описание

Значение

ERROR_ARGUMENT

The value of an argument 'data' has an invalid type

Параметр data передан в неверном типе

REGISTER_ERROR_DATA

Данные пусты или некорректны

Параметр data пустой или невалидный

CONTENT_IS_BAD

Содержимое определено как небезопасное. Определить небезопасные части можно через метод landing.repo.checkcontent

В переданном шаблоне найден небезопасный контент

BX_EMPTY_REQUIRED

Не заполнено обязательное поле "Внешний код"

В data не заполнен code (внешний код) у шаблона/элемента

ACCESS_DENIED

Access denied!

Недостаточно прав для вызова метода

Статусы и коды системных ошибок

HTTP-статус: 20x, 40x, 50x

Описанные ниже ошибки могут возникнуть при вызове любого метода

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически через 10 минут

405

ERROR_BATCH_METHOD_NOT_ALLOWED
Method is not allowed for batch usage

Текущий метод не разрешен для вызова с помощью batch

400

ERROR_BATCH_LENGTH_EXCEEDED
Max batch length exceeded

Превышена максимальная длина параметров, переданных в метод batch

401

NO_AUTH_FOUND
Wrong authorization data

Неверный access-токен или код вебхука

400

INVALID_REQUEST
Https required

Для вызовов методов требуется использовать протокол HTTPS

503

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24

403

ACCESS_DENIED
REST API is available only on commercial plans

REST API доступен только на коммерческих планах

403

INVALID_CREDENTIALS
Invalid request credentials

У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав

404

ERROR_MANIFEST_IS_NOT_AVAILABLE
Manifest is not available

Манифест недоступен

403

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более высоких привилегий, чем предоставляет токен вебхука

401

expired_token
The access token provided has expired

Предоставленный access-токен доступа истек

403

user_access_error
The user does not have access to the application

Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям

500

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение