{
    "openapi": "3.0.0",
    "info": {
        "title": "PageCraft \u2014 Public API v1",
        "description": "REST API \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043c\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 PageCraft. \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Bearer API-\u043a\u043b\u044e\u0447.\n\n## \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u044b\n\n**\u0411\u043b\u043e\u043a** \u2014 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0441 JSON-\u0441\u0445\u0435\u043c\u043e\u0439 \u043f\u043e\u043b\u0435\u0439. \u0418\u043c\u0435\u0435\u0442 \u0440\u0435\u0432\u0438\u0437\u0438\u0438 \u0438 scope (global / user).\n\n**\u041f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440-\u0441\u0445\u0435\u043c\u0430** \u2014 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u043b\u043e\u043a\u0430. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 JSON Schema \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430: GET /api/v1/blocks/{id}/placeholder-schema.\n\n**\u0411\u0438\u043d\u0434\u0438\u043d\u0433** \u2014 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u043e\u0442\u043a\u0443\u0434\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 production. PageCraft \u043c\u043e\u043a\u0430\u0435\u0442 (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 `stub`), \u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 `params` \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435. \u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f: `GET /blocks/{id}/placeholder-schema` \u2192 `binding_slots` \u2192 `GET /data-sources/{source_id}` (params_schema) \u2192 `GET /data-result-types/{result_type_id}` (\u0444\u043e\u0440\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445). \u041d\u0435 \u0443\u0433\u0430\u0434\u044b\u0432\u0430\u0439 params.\n\n**\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430** \u2014 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432 \u0441\u0430\u0439\u0442\u0435. \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 site_id. \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 placeholder_values \u0438 bindings.\n\n**\u0421\u0430\u0439\u0442** \u2014 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.\n\n\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u2014 [\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432](/docs/start/glossary).\n\n## \u0413\u043b\u0430\u0432\u043d\u044b\u0439 workflow: \u043b\u0435\u043d\u0434\u0438\u043d\u0433 \u0438\u0437 \u0431\u0440\u0438\u0444\u0430\n\n**\u0428\u0430\u0433 1.** GET /api/v1/sites \u2014 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u0439\u0442.\n\n**\u0428\u0430\u0433 2.** GET /api/v1/blocks \u2014 \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0431\u043b\u043e\u043a\u0438.\n\n**\u0428\u0430\u0433 3.** GET /api/v1/blocks/{id}/placeholder-schema \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430.\n\n**\u0428\u0430\u0433 4.** POST /api/v1/pages \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432.\n\n**\u0428\u0430\u0433 5.** \u041f\u0440\u0438 400 \u0441 errors[] \u2014 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u043f\u043e path \u0438 \u0440\u0435\u0442\u0440\u0430\u0438\u0442\u044c.\n\n**\u0428\u0430\u0433 6.** GET /api/v1/pages/{id}?with_blocks=1 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.\n\n\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0446\u0435\u043f\u0442 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043e\u043a \u2014 [Playbook \u00ab\u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u00bb](/docs/api/page-factory).\n\n\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0441\u0430\u0439\u0442 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b: POST /pages/{id}/publish, POST /pages/{id}/publish-update, GET /pages/{id}/publication.\n\n## \u0424\u043e\u0440\u043c\u0430\u0442 \u043e\u0448\u0438\u0431\u043e\u043a\n\n\u0412\u0441\u0435 4xx-\u043e\u0442\u0432\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0444\u043e\u0440\u043c\u0443 { error, errors? }. \u041f\u043e\u043b\u0435 errors[] \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\u0445 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 { path, message }, \u0433\u0434\u0435 path \u2014 dot-path \u0432 payload (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, blocks[0].placeholder_values.title).\n\n## \u041f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044f\n\n\u0412\u0441\u0435 list-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 { data, total, limit, offset }. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e limit=50 (max 200), offset=0.\n\n## \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b\n\n[\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432](/docs/start/glossary) \u2014 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c.\n\n[Playbook \u00ab\u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u00bb](/docs/api/page-factory) \u2014 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0439 workflow.\n\n[llms.txt](/llms.txt) \u2014 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432.\n",
        "version": "1.0.0"
    },
    "servers": [
        {
            "url": "https://page-craft.4partners.io",
            "description": "\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 APP_URL)"
        }
    ],
    "paths": {
        "/api/v1/blocks": {
            "get": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 API-\u043a\u043b\u044e\u0447\u0430. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0438\u043c\u0435\u043d\u0438/\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0442\u0435\u0433\u0430\u043c \u0438 \u043f\u043e \u0440\u043e\u043b\u0438 \u0431\u043b\u043e\u043a\u0430 (`role=layout` \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u044d\u0439\u0430\u0443\u0442\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432-\u043c\u0430\u043a\u0435\u0442\u043e\u0432). \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listBlocks",
                "parameters": [
                    {
                        "name": "search",
                        "in": "query",
                        "description": "\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0431\u043b\u043e\u043a\u0430",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "example": "hero"
                        }
                    },
                    {
                        "name": "tags",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e ID \u0442\u0435\u0433\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "example": "1,3"
                        }
                    },
                    {
                        "name": "role",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0440\u043e\u043b\u0438 \u0431\u043b\u043e\u043a\u0430: `content` \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, `layout` \u2014 \u043b\u044d\u0439\u0430\u0443\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430-\u043c\u0430\u043a\u0435\u0442\u0430 (`kind = layout`). \u0411\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0435 \u0440\u043e\u043b\u0438. \u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u043e\u0448\u0438\u0431\u043a\u0430, \u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "content",
                                "layout"
                            ],
                            "example": "layout"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockPublicListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            },
            "post": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043b\u043e\u043a",
                "description": "\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043a\u043e\u043d\u0442\u0435\u043d\u0442 (template \u0438\u043b\u0438 schema_content) \u2014 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0432\u0438\u0437\u0438\u044f v1.0.",
                "operationId": "createBlock",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430",
                                        "type": "string",
                                        "example": "Hero Section"
                                    },
                                    "description": {
                                        "description": "\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
                                        "type": "string",
                                        "example": "\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0430\u043d\u043d\u0435\u0440 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439"
                                    },
                                    "docs": {
                                        "description": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0432 Markdown",
                                        "type": "string",
                                        "example": "## Hero\\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u043e\u043b\u0435 `title` \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430."
                                    },
                                    "block_type": {
                                        "type": "string",
                                        "enum": [
                                            "schema",
                                            "markdown",
                                            "null"
                                        ],
                                        "example": "schema"
                                    },
                                    "tags": {
                                        "description": "\u041c\u0430\u0441\u0441\u0438\u0432 ID \u0442\u0435\u0433\u043e\u0432",
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "example": [
                                            1,
                                            2
                                        ]
                                    },
                                    "template": {
                                        "description": "LiquidJS HTML-\u0448\u0430\u0431\u043b\u043e\u043d",
                                        "type": "string",
                                        "example": "<section>{{ title }}</section>"
                                    },
                                    "css": {
                                        "description": "CSS-\u0441\u0442\u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0430",
                                        "type": "string",
                                        "example": "section { padding: 64px; }"
                                    },
                                    "js": {
                                        "description": "JavaScript \u0431\u043b\u043e\u043a\u0430",
                                        "type": "string",
                                        "example": ""
                                    },
                                    "schema_content": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "additionalProperties": true
                                        }
                                    },
                                    "changelog": {
                                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438",
                                        "type": "string",
                                        "example": "\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "\u0411\u043b\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockPublicShowResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "422": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0445\u0435\u043c\u044b \u0431\u043b\u043e\u043a\u0430"
                    }
                }
            }
        },
        "/api/v1/blocks/{id}": {
            "get": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u043b\u043e\u043a \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0432\u0438\u0437\u0438\u0435\u0439. \u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u0438\u043b\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a.",
                "operationId": "getBlock",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0411\u043b\u043e\u043a",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockPublicShowResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0431\u043b\u043e\u043a\u0443"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            },
            "put": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a",
                "description": "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0431\u043b\u043e\u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041b\u043e\u0433\u0438\u043a\u0430 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:\n- \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 template/css/js/schema_content \u2192 \u043c\u0438\u043d\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f\n- \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 \u0432 schema_content \u2192 \u043c\u0430\u0436\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f (breaking change)\n- \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e name/description/docs/tags/block_type \u2192 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f\n\n\u041e\u0442\u0432\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u0435 version_bump \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c: major, minor \u0438\u043b\u0438 none.",
                "operationId": "updateBlock",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "example": "Hero Section"
                                    },
                                    "description": {
                                        "type": "string"
                                    },
                                    "docs": {
                                        "type": "string"
                                    },
                                    "block_type": {
                                        "type": "string",
                                        "enum": [
                                            "schema",
                                            "markdown",
                                            "null"
                                        ]
                                    },
                                    "tags": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        }
                                    },
                                    "template": {
                                        "type": "string"
                                    },
                                    "css": {
                                        "type": "string"
                                    },
                                    "js": {
                                        "type": "string"
                                    },
                                    "schema_content": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "additionalProperties": true
                                        }
                                    },
                                    "changelog": {
                                        "type": "string",
                                        "example": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u0435 subtitle"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0411\u043b\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "block": {
                                            "$ref": "#/components/schemas/BlockPublicDetailResponse"
                                        },
                                        "version_bump": {
                                            "$ref": "#/components/schemas/VersionBumpPublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u2014 \u0431\u043b\u043e\u043a \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    },
                    "422": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0445\u0435\u043c\u044b \u0431\u043b\u043e\u043a\u0430"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a",
                "description": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0431\u043b\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0440\u0435\u0432\u0438\u0437\u0438\u044f\u043c\u0438. \u0415\u0441\u043b\u0438 \u0431\u043b\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 409.",
                "operationId": "deleteBlock",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "\u0411\u043b\u043e\u043a \u0443\u0434\u0430\u043b\u0451\u043d"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u2014 \u0431\u043b\u043e\u043a \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    },
                    "409": {
                        "description": "\u0411\u043b\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u2014 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "properties": {
                                                "code": {
                                                    "type": "string",
                                                    "example": "conflict"
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "example": "\u0411\u043b\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u2014 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e"
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/blocks/{id}/fork": {
            "post": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u0424\u043e\u0440\u043a\u043d\u0443\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a",
                "description": "\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0432 \u043b\u0438\u0447\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0432\u0438\u0437\u0438\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0418\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 fork_count \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430.",
                "operationId": "forkBlock",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0434\u043b\u044f \u0444\u043e\u0440\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 42
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "name": {
                                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043a\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: \"{\u0438\u043c\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430} (fork)\")",
                                        "type": "string",
                                        "example": "\u041c\u043e\u0439 Hero Section",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "\u0424\u043e\u0440\u043a \u0441\u043e\u0437\u0434\u0430\u043d",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockPublicShowResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            }
        },
        "/api/v1/blocks/{id}/usages": {
            "get": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u0413\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a (pageBlock-\u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b)",
                "description": "\u0421\u043f\u0438\u0441\u043e\u043a pageBlock \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 pageBlock, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c bulk-upgrade per page. \u041f\u043e\u043b\u0435 `outdated_total` \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u0430\u0433\u0435\u043d\u0442 \u043c\u043e\u0433 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430.",
                "operationId": "listBlockUsages",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 3
                        }
                    },
                    {
                        "name": "outdated",
                        "in": "query",
                        "description": "1 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 usages (update_status != up_to_date)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ],
                            "example": 1
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1..200, default 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430, \u22650",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a usages",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockUsagesListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u0411\u043b\u043e\u043a \u0447\u0443\u0436\u043e\u0439 \u0438 \u043d\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            }
        },
        "/api/v1/blocks/favorites": {
            "get": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435. \u041f\u043e\u043b\u0435 is_favorite \u0432\u0441\u0435\u0433\u0434\u0430 true. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listFavoriteBlocks",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockPublicListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        },
        "/api/v1/blocks/{id}/placeholder-schema": {
            "get": {
                "tags": [
                    "Blocks"
                ],
                "summary": "JSON Schema \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 placeholder_values \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u044f `placeholder_values` \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430: JSON Schema (Draft-07), \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 example \u0438 \u0441\u043f\u0438\u0441\u043e\u043a SSR binding-\u0441\u043b\u043e\u0442\u043e\u0432. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0434 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u043b\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 `POST /api/v1/pages`, `PUT /api/v1/pages/{id}` \u0438\u043b\u0438 `POST /api/v1/pages/{id}/blocks` \u2014 \u044d\u0442\u043e \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c `current_revision.schema_content`. **\u041a\u043e\u0433\u0434\u0430 `binding_slots` \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u2014 \u0434\u043b\u044f \u041a\u0410\u0416\u0414\u041e\u0413\u041e \u0441\u043b\u043e\u0442\u0430 \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 `GET /api/v1/data-sources/{source_id}` (\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e `source` \u0438\u0437 `allowedSources`), \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c `params_schema` (JSON Schema \u0434\u043b\u044f `params`) \u0438 `result_type_id`. \u0417\u0430\u0442\u0435\u043c `GET /api/v1/data-result-types/{result_type_id}` \u2014 \u0444\u043e\u0440\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0432 Liquid-\u0448\u0430\u0431\u043b\u043e\u043d.** \u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 `params` \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 `params_schema` \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. PageCraft \u043c\u043e\u043a\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0440\u0435\u0432\u044c\u044e (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 `stub`), `params` \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 production-\u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.",
                "operationId": "getBlockPlaceholderSchema",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 3
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 placeholder_values \u0431\u043b\u043e\u043a\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockPlaceholderSchemaResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0431\u043b\u043e\u043a\u0443"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            }
        },
        "/api/v1/blocks/{id}/cover": {
            "post": {
                "tags": [
                    "Blocks"
                ],
                "summary": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0431\u043b\u043e\u0436\u043a\u0443 \u0431\u043b\u043e\u043a\u0430",
                "description": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u043e\u0431\u043b\u043e\u0436\u043a\u0438 (JPEG, PNG, GIF \u0438\u043b\u0438 WebP, \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 5 \u041c\u0411). \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d \u2014 16:9. \u0411\u043b\u043e\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 API-\u043a\u043b\u044e\u0447\u0430. \u041f\u0440\u0438\u043c\u0435\u0440: `curl -X POST -H \"Authorization: Bearer pb_...\" -F \"file=@/path/to/image.png\" https://YOUR-DOMAIN/api/v1/blocks/3/cover`",
                "operationId": "uploadBlockCover",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "required": [
                                    "file"
                                ],
                                "properties": {
                                    "file": {
                                        "description": "\u0424\u0430\u0439\u043b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f (JPEG, PNG, GIF, WebP). \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f 16:9, \u043c\u0430\u043a\u0441. 5 \u041c\u0411.",
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u041e\u0431\u043b\u043e\u0436\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "block": {
                                            "$ref": "#/components/schemas/BlockPublicDetailResponse"
                                        },
                                        "url": {
                                            "type": "string",
                                            "example": "/uploads/blocks/1/preview.webp"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0438\u043f \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u2014 \u0431\u043b\u043e\u043a \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            }
        },
        "/api/v1/collections/{id}/blocks": {
            "post": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e",
                "description": "\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e. \u0414\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0412 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438. \u0412 \u043b\u0438\u0447\u043d\u0443\u044e \u2014 \u0441\u0432\u043e\u0438 \u0438\u043b\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438.",
                "operationId": "addBlocksToCollection",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AddBlocksRequest"
                            },
                            "example": {
                                "block_ids": [
                                    12,
                                    34
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0411\u043b\u043e\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "collection": {
                                            "$ref": "#/components/schemas/BlockCollectionPublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 payload"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438"
                    },
                    "404": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e scope"
                    }
                }
            }
        },
        "/api/v1/collections": {
            "get": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0431\u043b\u043e\u043a\u043e\u0432",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e: \u0435\u0433\u043e \u043b\u0438\u0447\u043d\u044b\u0435 (scope=private) \u0438 \u0432\u0441\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 (scope=global). \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e scope \u0438 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e/\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e. \u041f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 limit/offset.",
                "operationId": "listBlockCollections",
                "parameters": [
                    {
                        "name": "scope",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438: private \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0438, global \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435, all \u2014 \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "private",
                                "global",
                                "all"
                            ],
                            "example": "private"
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "example": "\u043b\u0435\u043d\u0434\u0438\u043d\u0433"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockCollectionListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "422": {
                        "description": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430"
                    }
                }
            },
            "post": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0431\u043b\u043e\u043a\u043e\u0432",
                "description": "\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 (scope=global) \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440.",
                "operationId": "createBlockCollection",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateBlockCollectionRequest"
                            },
                            "example": {
                                "name": "\u041c\u043e\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438",
                                "description": "\u0411\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u043b\u0435\u043d\u0434\u0438\u043d\u0433\u043e\u0432",
                                "scope": "private"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "collection": {
                                            "$ref": "#/components/schemas/BlockCollectionPublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 payload"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043d\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c)"
                    },
                    "422": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438"
                    }
                }
            }
        },
        "/api/v1/collections/{id}": {
            "get": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u043e ID",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u044f \u0438\u043b\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f.",
                "operationId": "showBlockCollection",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0441 \u0431\u043b\u043e\u043a\u0430\u043c\u0438",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "collection": {
                                            "$ref": "#/components/schemas/BlockCollectionPublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            },
            "put": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0431\u043b\u043e\u043a\u043e\u0432",
                "description": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438. \u041f\u043e\u043b\u044f \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c null \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f. \u0418\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 (\u0438\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439).",
                "operationId": "updateBlockCollection",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateBlockCollectionRequest"
                            },
                            "example": {
                                "name": "\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
                                "description": null
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "collection": {
                                            "$ref": "#/components/schemas/BlockCollectionPublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 payload"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438"
                    },
                    "404": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    },
                    "422": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0431\u043b\u043e\u043a\u043e\u0432",
                "description": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0451 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u0423\u0434\u0430\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 (\u0438\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439).",
                "operationId": "deleteBlockCollection",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438"
                    },
                    "404": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            }
        },
        "/api/v1/collections/{id}/blocks/{block_id}": {
            "delete": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u0438\u0437 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                "description": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a \u0438\u0437 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u2014 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e.",
                "operationId": "removeBlockFromCollection",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    },
                    {
                        "name": "block_id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0411\u043b\u043e\u043a \u0443\u0434\u0430\u043b\u0451\u043d, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "collection": {
                                            "$ref": "#/components/schemas/BlockCollectionPublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438"
                    },
                    "404": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            }
        },
        "/api/v1/collections/{id}/blocks/order": {
            "put": {
                "tags": [
                    "Block Collections"
                ],
                "summary": "\u041f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                "description": "\u0417\u0430\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438. \u0411\u043b\u043e\u043a\u0438 \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0411\u043b\u043e\u043a\u0438, \u043d\u0435 \u0432\u043e\u0448\u0435\u0434\u0448\u0438\u0435 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0446.",
                "operationId": "reorderCollectionBlocks",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ReorderBlocksRequest"
                            },
                            "example": {
                                "block_ids": [
                                    34,
                                    12,
                                    56
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0441 \u043d\u043e\u0432\u044b\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "collection": {
                                            "$ref": "#/components/schemas/BlockCollectionPublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 payload"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438"
                    },
                    "404": {
                        "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    },
                    "422": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438"
                    }
                }
            }
        },
        "/api/v1/block-submissions": {
            "get": {
                "tags": [
                    "Block Submissions"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u043e\u0438 \u0437\u0430\u044f\u0432\u043a\u0438 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0438, \u043f\u043e\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c API-\u043a\u043b\u044e\u0447\u0430, \u0441 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443. \u0421\u0442\u0430\u0442\u0443\u0441\u044b: pending (\u043d\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438), approved (\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u2014 \u0441\u043c. target_global_block_id), rejected (\u043e\u0442\u043a\u043b\u043e\u043d\u0451\u043d \u2014 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 review_message), withdrawn (\u043e\u0442\u043e\u0437\u0432\u0430\u043d). \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listBlockSubmissions",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443 \u0437\u0430\u044f\u0432\u043a\u0438",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "pending",
                                "approved",
                                "rejected",
                                "withdrawn"
                            ],
                            "example": "pending"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u044f\u0432\u043e\u043a",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockSubmissionListPublicResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        },
        "/api/v1/blocks/{id}/submit": {
            "post": {
                "tags": [
                    "Block Submissions"
                ],
                "summary": "\u041f\u043e\u0434\u0430\u0442\u044c \u0431\u043b\u043e\u043a \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433",
                "description": "\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u0437\u0430\u044f\u0432\u043a\u0443 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0432\u0438\u0437\u0438\u0438 \u0431\u043b\u043e\u043a\u0430 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u0431\u043b\u043e\u043a\u0430. \u0415\u0441\u043b\u0438 \u0443 \u0431\u043b\u043e\u043a\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0437\u0430\u044f\u0432\u043a\u0430 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 pending \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 409. \u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u044f\u0432\u043a\u0438 \u0434\u0430\u043b\u0435\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 GET /api/v1/block-submissions.",
                "operationId": "submitBlock",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "\u0417\u0430\u044f\u0432\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/BlockSubmissionResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0432\u0438\u0437\u0438\u0439"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u2014 \u0431\u043b\u043e\u043a \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e"
                    },
                    "404": {
                        "description": "\u0411\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    },
                    "409": {
                        "description": "\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0437\u0430\u044f\u0432\u043a\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442"
                    }
                }
            }
        },
        "/api/v1/block-submissions/{id}": {
            "delete": {
                "tags": [
                    "Block Submissions"
                ],
                "summary": "\u041e\u0442\u043e\u0437\u0432\u0430\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443",
                "description": "\u041e\u0442\u0437\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 pending. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0432\u0442\u043e\u0440\u0443 \u0437\u0430\u044f\u0432\u043a\u0438 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430 \u043e\u043d\u0430 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 pending. \u0417\u0430\u044f\u0432\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441 withdrawn.",
                "operationId": "withdrawBlockSubmission",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0437\u0430\u044f\u0432\u043a\u0438",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "\u0417\u0430\u044f\u0432\u043a\u0430 \u043e\u0442\u043e\u0437\u0432\u0430\u043d\u0430"
                    },
                    "400": {
                        "description": "\u0417\u0430\u044f\u0432\u043a\u0430 \u043d\u0435 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 pending"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "403": {
                        "description": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u2014 \u0437\u0430\u044f\u0432\u043a\u0430 \u043f\u043e\u0434\u0430\u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c"
                    },
                    "404": {
                        "description": "\u0417\u0430\u044f\u0432\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            }
        },
        "/api/v1/data-result-types": {
            "get": {
                "tags": [
                    "Data Result Types"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0438\u043f\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438. \u041a\u0430\u0436\u0434\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 JSON-\u0441\u0445\u0435\u043c\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (schema_json) \u0438 \u043f\u0440\u0438\u043c\u0435\u0440-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443 (stub) \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listDataResultTypes",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DataResultTypePublicListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        },
        "/api/v1/data-result-types/{id}": {
            "get": {
                "tags": [
                    "Data Result Types"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e JSON-\u0441\u0445\u0435\u043c\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0431\u043b\u043e\u043a\u043e\u0432.",
                "operationId": "getDataResultType",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (\u0441\u0442\u0440\u043e\u043a\u0430)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "offer_list"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DataResultTypePublicShowResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0422\u0438\u043f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            }
        },
        "/api/v1/data-sources": {
            "get": {
                "tags": [
                    "Data Sources"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (result_type_id) \u0438 JSON-\u0441\u0445\u0435\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (params_schema). \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listDataSources",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DataSourcePublicListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        },
        "/api/v1/data-sources/{id}": {
            "get": {
                "tags": [
                    "Data Sources"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430: \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, JSON-\u0441\u0445\u0435\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.",
                "operationId": "getDataSource",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 (\u0441\u0442\u0440\u043e\u043a\u0430)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "example": "partner_offers"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DataSourcePublicShowResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            }
        },
        "/api/v1/pages": {
            "get": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 API-\u043a\u043b\u044e\u0447\u0430. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u0430\u0439\u0442\u0443, \u043f\u043e \u0432\u0438\u0434\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 (`kind` \u2014 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043c\u0430\u043a\u0435\u0442, \u0442\u0438\u043f \u0448\u0430\u0431\u043b\u043e\u043d\u0430), \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u0442\u043e\u0447\u043d\u044b\u0439 lookup \u043f\u043e `external_id`, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0433\u0440\u0430\u0444\u0443 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432 (`bindingSource`/`bindingValue`/`bindingParamName`) \u0447\u0435\u0440\u0435\u0437 JOIN \u043d\u0430 `page_block_refs`. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listPages",
                "parameters": [
                    {
                        "name": "site_id",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e ID \u0441\u0430\u0439\u0442\u0430",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "example": "\u0413\u043b\u0430\u0432\u043d\u0430\u044f"
                        }
                    },
                    {
                        "name": "external_id",
                        "in": "query",
                        "description": "\u0422\u043e\u0447\u043d\u044b\u0439 lookup \u043f\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u043f\u043e\u043b\u0435 `external_id`). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u043b\u044f O(1)-\u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 12345
                        }
                    },
                    {
                        "name": "bindingSource",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430 (`page_block_refs.source_id`), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 `rubric_by_slug`. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "maxLength": 255,
                            "example": "rubric_by_slug"
                        }
                    },
                    {
                        "name": "bindingValue",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430 (`page_block_refs.param_value`), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 `computers`. \u041e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 `bindingSource` \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0431\u043e\u0440\u0430.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "maxLength": 255,
                            "example": "computers"
                        }
                    },
                    {
                        "name": "bindingParamName",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430 (`page_block_refs.param_name`), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 `slug`. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 `bindingValue`, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "maxLength": 255,
                            "example": "slug"
                        }
                    },
                    {
                        "name": "has_outdated",
                        "in": "query",
                        "description": "1 \u2014 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 (\u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d pageBlock \u0442\u0438\u043f\u0430 schema/markdown \u043e\u0442\u0441\u0442\u0430\u0451\u0442 \u043e\u0442 current_revision \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u0442-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ],
                            "example": 1
                        }
                    },
                    {
                        "name": "kind",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e \u0432\u0438\u0434\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430: `article` \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, `layout` \u2014 \u043c\u0430\u043a\u0435\u0442 (\u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0442\u0440\u0430\u043d\u0438\u0446), \u043b\u0438\u0431\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0438\u043f\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 `GET /page-types` (`rubric`, `product`, \u2026). \u0411\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u0432\u0438\u0434\u044b. \u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0430 \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0443: \u043d\u0430\u0431\u043e\u0440 \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u0434\u0430\u0451\u0442 4CMS \u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "example": "layout"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            },
            "post": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
                "description": "\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043a \u0441\u0430\u0439\u0442\u0443 \u0438 \u043f\u0430\u043f\u043a\u0435. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d slug \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0430\u0439\u0442\u0430. \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 `blocks` \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u2014 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 `order_index`. \u0424\u043e\u0440\u043c\u0430\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f `placeholder_values`/`bindings` \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u0445\u0435\u043c\u0435 `PageBlockInput`. \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c `placeholder_values` \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 JSON Schema \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0431\u043b\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 `GET /api/v1/blocks/{block_id}/placeholder-schema`.",
                "operationId": "createPage",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "name",
                                    "site_id"
                                ],
                                "properties": {
                                    "name": {
                                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                                        "type": "string",
                                        "example": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438"
                                    },
                                    "site_id": {
                                        "description": "ID \u0441\u0430\u0439\u0442\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430. \u0411\u0435\u0437 \u0441\u0430\u0439\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 UI \u0438 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442\u0441\u044f.",
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "kind": {
                                        "description": "\u0412\u0438\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430: `article` \u2014 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 SEO, `layout` \u2014 \u043c\u0430\u043a\u0435\u0442, \u043b\u0438\u0431\u043e id \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 4CMS (`rubric`, `product`; \u0441\u043f\u0438\u0441\u043e\u043a \u2014 `GET /api/v1/page-types`, \u0442\u0430\u043c \u0436\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430). \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u043d\u0435-`article` \u043f\u043e\u043b\u044f `slug` \u0438 `meta_*` \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u2014 \u0430\u0434\u0440\u0435\u0441 \u0438 SEO \u0432\u0435\u0434\u0451\u0442 4CMS.",
                                        "type": "string",
                                        "default": "article",
                                        "example": "article"
                                    },
                                    "folder_id": {
                                        "description": "ID \u043f\u0430\u043f\u043a\u0438",
                                        "type": "integer",
                                        "example": 2,
                                        "nullable": true
                                    },
                                    "slug": {
                                        "description": "URL-slug (\u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0430\u0439\u0442\u0430). \u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f `kind=article`.",
                                        "type": "string",
                                        "example": "about",
                                        "nullable": true
                                    },
                                    "meta_title": {
                                        "type": "string",
                                        "example": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 | \u0421\u0430\u0439\u0442",
                                        "nullable": true
                                    },
                                    "meta_description": {
                                        "type": "string",
                                        "example": "\u041c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f...",
                                        "nullable": true
                                    },
                                    "meta_keywords": {
                                        "type": "string",
                                        "example": "\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u043e \u043d\u0430\u0441",
                                        "nullable": true
                                    },
                                    "meta_robots": {
                                        "type": "string",
                                        "example": "INDEX, FOLLOW",
                                        "nullable": true
                                    },
                                    "blocks": {
                                        "description": "\u0411\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 `order_index`. \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0441\u043c. \u0441\u0445\u0435\u043c\u0443 `PageBlockInput`.",
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/components/schemas/PageBlockInput"
                                        },
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            },
                            "example": {
                                "name": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438",
                                "site_id": 1,
                                "slug": "about",
                                "blocks": [
                                    {
                                        "block_id": 3,
                                        "placeholder_values": {
                                            "title": "\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c",
                                            "subtitle": "\u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0430\u0439\u0442\u044b",
                                            "items": [
                                                {
                                                    "title": "\u041a\u0430\u0442\u0430\u043b\u043e\u0433",
                                                    "url": "/catalog"
                                                },
                                                {
                                                    "title": "\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b",
                                                    "url": "/contacts"
                                                }
                                            ]
                                        },
                                        "bindings": {
                                            "products": {
                                                "source": "catalog.products",
                                                "params": {
                                                    "limit": 8,
                                                    "sort": "popular"
                                                }
                                            }
                                        }
                                    },
                                    {
                                        "block_id": 7,
                                        "placeholder_values": {
                                            "_markdown": "# \u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438\n\n\u041c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0430\u0439\u0442\u043e\u0432."
                                        }
                                    }
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430. \u041f\u043e\u043b\u0435 `blocks` \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u044f `page_block_id` \u043b\u044d\u0439\u0430\u0443\u0442\u0430, \u043d\u0443\u0436\u043d\u044b\u0439 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u0441\u043b\u043e\u0442\u044b.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 `placeholder_values` \u0438\u043b\u0438 `bindings` \u0431\u043b\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e `schema_content`, \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 `errors[]` \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 `{ path, message }` \u2014 \u043f\u0443\u0442\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 `blocks[0].placeholder_values.title` \u0438\u043b\u0438 `blocks[1].bindings.products.source`.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432"
                                        },
                                        "errors": {
                                            "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u041f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0431\u043b\u043e\u0447\u043d\u043e\u0433\u043e payload.",
                                            "type": "array",
                                            "items": {
                                                "properties": {
                                                    "path": {
                                                        "type": "string",
                                                        "example": "blocks[0].placeholder_values.title"
                                                    },
                                                    "message": {
                                                        "type": "string",
                                                        "example": "\u043f\u043e\u043b\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0421\u0430\u0439\u0442, \u043f\u0430\u043f\u043a\u0430 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "409": {
                        "description": "Slug \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0441\u0430\u0439\u0442\u0430. \u0422\u0435\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 `errors[]` \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e `{ path: \"slug\", message: \"...\" }`.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "Slug \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442"
                                        },
                                        "errors": {
                                            "type": "array",
                                            "items": {
                                                "properties": {
                                                    "path": {
                                                        "type": "string",
                                                        "example": "slug"
                                                    },
                                                    "message": {
                                                        "type": "string",
                                                        "example": "slug \u00ababout\u00bb \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/pages/{id}": {
            "get": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 `with_blocks=1` \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435.",
                "operationId": "getPage",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    },
                    {
                        "name": "with_blocks",
                        "in": "query",
                        "description": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442 (1 = \u0434\u0430). \u041f\u043e\u043b\u0435 `blocks` \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430: `null` \u0431\u0435\u0437 `with_blocks=1`, \u043c\u0430\u0441\u0441\u0438\u0432 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0443\u0441\u0442\u043e\u0439) \u0441 `with_blocks=1`.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ],
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430. \u041f\u043e\u043b\u0435 `blocks` \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430: `null` \u0431\u0435\u0437 `with_blocks=1`, \u043c\u0430\u0441\u0441\u0438\u0432 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0443\u0441\u0442\u043e\u0439) \u0441 `with_blocks=1`.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            },
            "put": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
                "description": "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, SEO-\u043f\u043e\u043b\u044f, \u043c\u0430\u043a\u0435\u0442 \u0438 \u043f\u0430\u043f\u043a\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u043f\u043e\u043b\u0435 `blocks` \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c.",
                "operationId": "updatePage",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "example": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438"
                                    },
                                    "slug": {
                                        "type": "string",
                                        "example": "about",
                                        "nullable": true
                                    },
                                    "meta_title": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "meta_description": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "meta_keywords": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "meta_robots": {
                                        "type": "string",
                                        "nullable": true
                                    },
                                    "folder_id": {
                                        "description": "ID \u043f\u0430\u043f\u043a\u0438 (null \u2014 \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043f\u0430\u043f\u043a\u0438)",
                                        "type": "integer",
                                        "example": 2,
                                        "nullable": true
                                    },
                                    "blocks": {
                                        "description": "\u041f\u043e\u043b\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u043b\u043e\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u2014 \u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0441\u043c. \u0441\u0445\u0435\u043c\u0443 `PageBlockInput`.",
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/components/schemas/PageBlockInput"
                                        },
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 `placeholder_values`/`bindings` \u0431\u043b\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 `errors[]` \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 `{ path, message }`.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432"
                                        },
                                        "errors": {
                                            "type": "array",
                                            "items": {
                                                "properties": {
                                                    "path": {
                                                        "type": "string",
                                                        "example": "blocks[0].placeholder_values.title"
                                                    },
                                                    "message": {
                                                        "type": "string",
                                                        "example": "\u043f\u043e\u043b\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043c\u0430\u043a\u0435\u0442, \u043f\u0430\u043f\u043a\u0430 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "409": {
                        "description": "Slug \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0441\u0430\u0439\u0442\u0430. \u0422\u0435\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 `errors[]` \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e `{ path: \"slug\", message: \"...\" }`.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "Slug \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442"
                                        },
                                        "errors": {
                                            "type": "array",
                                            "items": {
                                                "properties": {
                                                    "path": {
                                                        "type": "string",
                                                        "example": "slug"
                                                    },
                                                    "message": {
                                                        "type": "string",
                                                        "example": "slug \u00ababout\u00bb \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
                "description": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 (page_blocks).",
                "operationId": "deletePage",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            }
        },
        "/api/v1/pages/{id}/publication": {
            "get": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u0423\u0437\u043d\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 PageCraft. \u041d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443\n\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u2014 \u043e\u0442\u0434\u0430\u0451\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u044d\u0442\u043e\u0442 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043f\u0435\u0440\u0435\u0434 `publish` / `publish-update`, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c:\n- `is_published === false` \u2192 \u043d\u0443\u0436\u0435\u043d `POST /api/v1/pages/{id}/publish` \u0441 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c `rubric_ids`\n- `is_published === true`  \u2192 \u043d\u0443\u0436\u0435\u043d `POST /api/v1/pages/{id}/publish-update` (\u0442\u0435\u043b\u043e \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)",
                "operationId": "getPagePublicationStatus",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 PageCraft",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicationStatusResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e"
                    }
                }
            }
        },
        "/api/v1/pages/{id}/blocks": {
            "post": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
                "description": "\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438\u043b\u0438 \u0432 \u0441\u043b\u043e\u0442 \u0431\u043b\u043e\u043a\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (`parent_page_block_id` + `slot_name` \u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 `blocks[]`). \u0415\u0441\u043b\u0438 `position` \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u2014 \u0431\u043b\u043e\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u2014 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e (0-based) \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0441\u043e\u0441\u0435\u0434\u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u0432\u043f\u0440\u0430\u0432\u043e; \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u043e\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.",
                "operationId": "insertPageBlocks",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "blocks"
                                ],
                                "properties": {
                                    "blocks": {
                                        "description": "\u0411\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0441\u043c. \u0441\u0445\u0435\u043c\u0443 `PageBlockInput`.",
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/components/schemas/PageBlockInput"
                                        }
                                    },
                                    "position": {
                                        "description": "\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 (0-based). \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u2014 \u0431\u043b\u043e\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0446.",
                                        "type": "integer",
                                        "example": 2,
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            },
                            "example": {
                                "blocks": [
                                    {
                                        "block_id": 3,
                                        "placeholder_values": {
                                            "title": "Hello"
                                        }
                                    }
                                ],
                                "position": 2
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0411\u043b\u043e\u043a\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432 (\u043f\u043e\u043b\u0435 `blocks` \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e).",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u2014 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043c\u0430\u0441\u0441\u0438\u0432 blocks, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 block_id, \u043b\u0438\u0431\u043e `placeholder_values`/`bindings` \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e `schema_content`. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0432\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 `errors[]` \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 `{ path, message }`.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432"
                                        },
                                        "errors": {
                                            "type": "array",
                                            "items": {
                                                "properties": {
                                                    "path": {
                                                        "type": "string",
                                                        "example": "blocks[0].placeholder_values.title"
                                                    },
                                                    "message": {
                                                        "type": "string",
                                                        "example": "\u043f\u043e\u043b\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0431\u043b\u043e\u043a \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 \u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438"
                    }
                }
            }
        },
        "/api/v1/pages/{id}/publish": {
            "post": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (\u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f)",
                "description": "\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (4CMS) \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0443\u0434\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 HTML/CSS/JS \u0431\u043b\u043e\u043a\u043e\u0432\n\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0430\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u042d\u0442\u043e\u0442 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0422\u041e\u041b\u042c\u041a\u041e \u0434\u043b\u044f \u0435\u0449\u0451 \u043d\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\n(\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0443\u0441\u0442\u043e\u0439 `external_id`). \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0443\u0436\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 400, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435\n\u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c `POST /api/v1/pages/{id}/publish-update`.\n\n\u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c `GET /api/v1/pages/{id}/publication`, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u043e\u0439\n\u0438\u0437 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c (`is_published` \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0443\u043a\u0430\u0436\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e \u044f\u0432\u043d\u043e).\n\n`rubric_ids[]` \u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0443\u0431\u0440\u0438\u043a \u0432 4CMS, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430\n\u0441\u0442\u0430\u0442\u044c\u044f; **\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 `kind=article`**. ID \u0440\u0443\u0431\u0440\u0438\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 API\n4partners.io \u2014 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438\u0445 \u043d\u0435 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442.\n\n\u0414\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430-\u0448\u0430\u0431\u043b\u043e\u043d\u0430 (`kind` = `layout` \u0438\u043b\u0438 \u0442\u0438\u043f \u0438\u0437 `GET /api/v1/page-types`) \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0438\u0434\u0451\u0442\n\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c 4CMS `doc_template`: `rubric_ids`, `slug` \u0438 `meta_*` \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u2014\n\u0430\u0434\u0440\u0435\u0441, SEO \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043a \u0440\u0443\u0431\u0440\u0438\u043a\u0430\u043c \u0432\u0435\u0434\u0451\u0442 4CMS. \u0422\u0435\u043b\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c (`{}`).",
                "operationId": "publishPage",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 PageCraft",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "rubric_ids": {
                                        "description": "ID \u0440\u0443\u0431\u0440\u0438\u043a \u0432 4CMS, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f. \u041c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d; \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d \u0434\u043b\u044f `kind=article`, \u0434\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0437 API 4partners.io.",
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "example": [
                                            42,
                                            51
                                        ]
                                    },
                                    "name": {
                                        "description": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u0442\u044c\u0438 \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u2014 \u0431\u0435\u0440\u0451\u0442\u0441\u044f `name` \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b PageCraft.",
                                        "type": "string",
                                        "example": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438",
                                        "nullable": true
                                    },
                                    "meta_title": {
                                        "type": "string",
                                        "example": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 | \u041c\u043e\u0439 \u0441\u0430\u0439\u0442",
                                        "nullable": true
                                    },
                                    "meta_description": {
                                        "type": "string",
                                        "example": "\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u043e\u0432",
                                        "nullable": true
                                    },
                                    "meta_keywords": {
                                        "type": "string",
                                        "example": "\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0443\u0441\u043b\u0443\u0433\u0438",
                                        "nullable": true
                                    },
                                    "meta_robots": {
                                        "type": "string",
                                        "example": "INDEX, FOLLOW",
                                        "nullable": true
                                    },
                                    "slug": {
                                        "description": "URL-slug \u0441\u0442\u0430\u0442\u044c\u0438 \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430",
                                        "type": "string",
                                        "example": "about",
                                        "nullable": true
                                    },
                                    "preview_text": {
                                        "description": "\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0430\u043d\u043e\u043d\u0441/\u043f\u0440\u0435\u0432\u044c\u044e \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0430\u0442\u0435\u0439",
                                        "type": "string",
                                        "example": "\u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0430\u0439\u0442\u044b \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435.",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            },
                            "example": {
                                "rubric_ids": [
                                    42
                                ],
                                "meta_title": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 | \u041c\u043e\u0439 \u0441\u0430\u0439\u0442",
                                "meta_description": "\u041a\u043e\u043c\u0430\u043d\u0434\u0430, \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0438\u0441\u0442\u043e\u0440\u0438\u044f.",
                                "slug": "about"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430. \u0412 \u043e\u0442\u0432\u0435\u0442\u0435 \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 (`external_id` \u0443\u0436\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d).",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicationStatusResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0443\u0436\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 `publish-update`), \u043b\u0438\u0431\u043e \u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u0441\u0430\u0439\u0442, \u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0435\u043b\u0430.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "Page already published. Use publish-update instead."
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e"
                    },
                    "502": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (4CMS). \u0422\u0435\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "4CMS API error: invalid token"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/pages/{id}/publish-update": {
            "post": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0436\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443",
                "description": "\u041f\u0435\u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (4CMS) \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0443\u0434\u0430 \u0441\u0432\u0435\u0436\u0438\u0439 HTML/CSS/JS \u0438 SEO-\u043f\u043e\u043b\u044f,\n\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u043c\u0443 `external_id`. \u042d\u0442\u043e\u0442 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0422\u041e\u041b\u042c\u041a\u041e \u0434\u043b\u044f\n\u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 (\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d `external_id`). \u0415\u0441\u043b\u0438\n\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 400, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\n`POST /api/v1/pages/{id}/publish`.\n\n\u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c `GET /api/v1/pages/{id}/publication`, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u043e\u0439\n\u0438\u0437 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c.\n\n\u0422\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e: \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e HTML/CSS/JS\n\u0431\u043b\u043e\u043a\u043e\u0432, \u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0440\u0443\u0431\u0440\u0438\u043a\u0438 \u0438 SEO-\u043f\u043e\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442 \u043f\u0440\u0435\u0436\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044f\u0442\n\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 4CMS.",
                "operationId": "publishUpdatePage",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 PageCraft",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "rubric_ids": {
                                        "description": "\u041d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a ID \u0440\u0443\u0431\u0440\u0438\u043a \u0432 4CMS. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u2014 \u0440\u0443\u0431\u0440\u0438\u043a\u0438 \u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0437 API 4partners.io.",
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "example": [
                                            42,
                                            51
                                        ],
                                        "nullable": true
                                    },
                                    "name": {
                                        "description": "\u041d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u0430\u0442\u044c\u0438 \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430",
                                        "type": "string",
                                        "example": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 (\u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f)",
                                        "nullable": true
                                    },
                                    "meta_title": {
                                        "type": "string",
                                        "example": "\u041e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 | \u041c\u043e\u0439 \u0441\u0430\u0439\u0442",
                                        "nullable": true
                                    },
                                    "meta_description": {
                                        "type": "string",
                                        "example": "\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u043e\u0432",
                                        "nullable": true
                                    },
                                    "meta_keywords": {
                                        "type": "string",
                                        "example": "\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u0443\u0441\u043b\u0443\u0433\u0438",
                                        "nullable": true
                                    },
                                    "meta_robots": {
                                        "type": "string",
                                        "example": "INDEX, FOLLOW",
                                        "nullable": true
                                    },
                                    "slug": {
                                        "type": "string",
                                        "example": "about",
                                        "nullable": true
                                    },
                                    "preview_text": {
                                        "type": "string",
                                        "example": "\u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0430\u0439\u0442\u044b \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435.",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            },
                            "example": {}
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430. \u0412 \u043e\u0442\u0432\u0435\u0442\u0435 \u2014 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PagePublicationStatusResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430\u0441\u044c (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 `publish`), \u043b\u0438\u0431\u043e \u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u0441\u0430\u0439\u0442, \u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0435\u043b\u0430.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "Page not published yet. Use publish first."
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e"
                    },
                    "502": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (4CMS). \u0422\u0435\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "example": "4CMS API error: article not found"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/pages/{pageId}/blocks/upgrade-all": {
            "post": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c minor-\u0440\u0435\u0432\u0438\u0437\u0438\u0438 \u043a\u043e \u0432\u0441\u0435\u043c \u0431\u043b\u043e\u043a\u0430\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                "description": "\u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 minor-\u0433\u043e\u0442\u043e\u0432\u044b\u0435 pageBlock \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439. \u0411\u043b\u043e\u043a\u0438 \u0441 major-\u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 `skipped_major` \u0441 `removed_fields` \u2014 \u043f\u043b\u0430\u043d \u0434\u043b\u044f manual migration. \u041f\u0440\u0438 unhandled-\u043e\u0448\u0438\u0431\u043a\u0435 \u2014 \u043e\u0442\u043a\u0430\u0442 \u0432\u0441\u0435\u0433\u043e (HTTP 500). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u0442-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f: `GET /pages?has_outdated=1` + `POST /pages/{id}/blocks/upgrade-all` per page.",
                "operationId": "bulkUpgradePageBlocks",
                "parameters": [
                    {
                        "name": "pageId",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 42
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b + \u0441\u0432\u043e\u0434\u043a\u0430 \u043f\u043e \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0430\u043c",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PageBulkUpgradeResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            }
        },
        "/api/v1/pages/{pageId}/blocks/{pbId}": {
            "put": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c placeholder_values \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",
                "description": "\u0422\u043e\u0447\u0435\u0447\u043d\u0430\u044f \u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u0433\u043e pageBlock \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432. \u041f\u043e\u043b\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 `placeholder_values`. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u043e \u0441\u0432\u0435\u0436\u0438\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432 \u2014 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c follow-up GET. \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ page: ... }` \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 mutate-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u043c\u0438 pageBlock (upgrade-\u0440\u0443\u0447\u043a\u0438 \u043a\u043b\u0430\u0434\u0443\u0442 \u0440\u044f\u0434\u043e\u043c `from_version`/`to_version`).",
                "operationId": "updatePageBlock",
                "parameters": [
                    {
                        "name": "pageId",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 42
                        }
                    },
                    {
                        "name": "pbId",
                        "in": "path",
                        "description": "ID page_block \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdatePageBlockPublicRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e \u0441\u0432\u0435\u0436\u0438\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "page": {
                                            "$ref": "#/components/schemas/PagePublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "placeholder_values \u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                "description": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d pageBlock **\u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u0435\u0433\u043e \u0441\u043b\u043e\u0442\u044b**, \u0438 \u0441\u0436\u0438\u043c\u0430\u0435\u0442 `order_index` \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u043b\u043e\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 0..N-1. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0443\u0448\u043b\u043e \u2014 \u0432 `removed_count`; \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0434\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432 \u2014 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c follow-up GET, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. HTTP 200 (\u0430 \u043d\u0435 204), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0435\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.",
                "operationId": "deletePageBlock",
                "parameters": [
                    {
                        "name": "pageId",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 42
                        }
                    },
                    {
                        "name": "pbId",
                        "in": "path",
                        "description": "ID page_block \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "page": {
                                            "$ref": "#/components/schemas/PagePublicResponse"
                                        },
                                        "removed_count": {
                                            "description": "\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0443\u0434\u0430\u043b\u0435\u043d\u043e: \u0441\u0430\u043c \u0431\u043b\u043e\u043a \u043f\u043b\u044e\u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u0435\u0433\u043e \u0441\u043b\u043e\u0442\u044b",
                                            "type": "integer",
                                            "example": 3
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    }
                }
            }
        },
        "/api/v1/pages/{pageId}/blocks/{pbId}/move": {
            "put": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",
                "description": "\u041c\u0435\u043d\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e pageBlock: \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u0438, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b `parent_page_block_id`/`slot_name`, \u0441\u043b\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0421\u043e\u0441\u0435\u0434\u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u0442\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u0432 \u0441\u043b\u043e\u0442 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u043e \u0441\u0432\u0435\u0436\u0438\u043c\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u043c\u0438 \u0432\u0441\u0435\u0445 \u0431\u043b\u043e\u043a\u043e\u0432.",
                "operationId": "movePageBlock",
                "parameters": [
                    {
                        "name": "pageId",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 42
                        }
                    },
                    {
                        "name": "pbId",
                        "in": "path",
                        "description": "ID page_block",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MovePageBlockPublicRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u043c\u0438",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "page": {
                                            "$ref": "#/components/schemas/PagePublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "\u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 position, \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0442, \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0431\u043b\u043e\u043a\u0430 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e"
                    }
                }
            }
        },
        "/api/v1/pages/{pageId}/blocks/{pbId}/replace": {
            "put": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430",
                "description": "\u0417\u0430\u043c\u0435\u043d\u044f\u0435\u0442 `block_id` pageBlock \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u0412\u043d\u0443\u0442\u0440\u0438 \u2014 DELETE+INSERT, **\u043d\u043e\u0432\u044b\u0439 pageBlock \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 id**. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432 \u043d\u043e\u0432\u044b\u0435 \u2014 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0439 `placeholder_values` \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e; \u0441\u0435\u0440\u0432\u0435\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 major-\u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438: \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 `/upgrade` \u0441 major-\u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 422 \u2014 \u0442\u043e\u0433\u0434\u0430 insert \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0438 delete \u0441\u0442\u0430\u0440\u043e\u0433\u043e, \u043b\u0438\u0431\u043e replace \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c.",
                "operationId": "replacePageBlock",
                "parameters": [
                    {
                        "name": "pageId",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 42
                        }
                    },
                    {
                        "name": "pbId",
                        "in": "path",
                        "description": "ID page_block",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ReplacePageBlockPublicRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441 \u043d\u043e\u0432\u044b\u043c pageBlock \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u0443 \u043d\u0435\u0433\u043e \u043d\u043e\u0432\u044b\u0439 id)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "page": {
                                            "$ref": "#/components/schemas/PagePublicResponse"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "403": {
                        "description": "\u0426\u0435\u043b\u0435\u0432\u043e\u0439 \u0431\u043b\u043e\u043a \u0447\u0443\u0436\u043e\u0439 \u0438 \u043d\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 / pageBlock / \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "block_id \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u0435\u043d \u043b\u0438\u0431\u043e \u0432 \u0441\u043b\u043e\u0442\u0430\u0445 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438"
                    }
                }
            }
        },
        "/api/v1/pages/{pageId}/blocks/{pbId}/upgrade": {
            "post": {
                "tags": [
                    "Pages"
                ],
                "summary": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c minor-\u0440\u0435\u0432\u0438\u0437\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043a pageBlock",
                "description": "\u0414\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e minor (major \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442). \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0430 \u043f\u043e\u0432\u0435\u0440\u0445 major-\u0430\u043f\u0434\u0435\u0439\u0442\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 422 `major_upgrade_blocked` \u0441 `removed_fields` \u2014 \u0434\u043b\u044f major-\u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0441\u0430\u043c \u0434\u0435\u043b\u0430\u0439 `/replace` \u043b\u0438\u0431\u043e `/blocks` (insert \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438) + `DELETE /blocks/{pbId}` (\u0441\u0442\u0430\u0440\u044b\u0439).",
                "operationId": "upgradePageBlock",
                "parameters": [
                    {
                        "name": "pageId",
                        "in": "path",
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 42
                        }
                    },
                    {
                        "name": "pbId",
                        "in": "path",
                        "description": "ID page_block",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "pageBlock \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d \u0434\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 minor-\u0440\u0435\u0432\u0438\u0437\u0438\u0438 (\u0438\u043b\u0438 \u0443\u0436\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d; from == to)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PageWithUpgradeResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "Major-\u0430\u043f\u0434\u0435\u0439\u0442 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d \u2014 \u043d\u0443\u0436\u043d\u0430 manual migration",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MajorUpgradeBlockedError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/folders": {
            "get": {
                "tags": [
                    "Folders"
                ],
                "summary": "\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u043f\u043e\u043a \u0441\u0430\u0439\u0442\u0430",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 API-\u043a\u043b\u044e\u0447\u0430. \u041f\u043b\u043e\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e): \u043f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 { data, total, limit, offset }. Tree-\u0440\u0435\u0436\u0438\u043c (?as=tree): { data: PageFolderPublic[] } \u0431\u0435\u0437 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438, \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438.",
                "operationId": "listFolders",
                "parameters": [
                    {
                        "name": "site_id",
                        "in": "query",
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "example": 3
                        },
                        "example": 3
                    },
                    {
                        "name": "as",
                        "in": "query",
                        "description": "\u0424\u043e\u0440\u043c\u0430\u0442: \u043f\u0443\u0441\u0442\u043e = \u043f\u043b\u043e\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \"tree\" = \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "tree"
                            ],
                            "example": "tree"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1..200, default 50). \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 ?as=tree.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        },
                        "example": 50
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430, \u2265 0, default 0. \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 ?as=tree.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        },
                        "example": 0
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041f\u043b\u043e\u0441\u043a\u0438\u0439: { data, total, limit, offset }. Tree-\u0440\u0435\u0436\u0438\u043c (?as=tree): { data: PageFolderPublic[] } \u0431\u0435\u0437 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/PageFolderPublic"
                                            }
                                        },
                                        "total": {
                                            "description": "\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430",
                                            "type": "integer",
                                            "example": 23
                                        },
                                        "limit": {
                                            "description": "\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430",
                                            "type": "integer",
                                            "example": 50
                                        },
                                        "offset": {
                                            "description": "\u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430",
                                            "type": "integer",
                                            "example": 0
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "site_id \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0430\u0439\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            },
            "post": {
                "tags": [
                    "Folders"
                ],
                "summary": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443",
                "description": "\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430. parent_id \u2014 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0430\u0439\u0442\u0443.",
                "operationId": "createFolder",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreatePageFolderRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "\u041f\u0430\u043f\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "folder": {
                                            "$ref": "#/components/schemas/PageFolderPublic"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 payload"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u0421\u0430\u0439\u0442 \u0438\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "parent_id \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430"
                    }
                }
            }
        },
        "/api/v1/folders/{id}": {
            "get": {
                "tags": [
                    "Folders"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u043f\u0430\u043f\u043a\u0443",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0443 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 API-\u043a\u043b\u044e\u0447\u0430 \u0441\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c\u0438 pages_count / subfolders_count (\u043f\u0440\u044f\u043c\u044b\u0435 \u043f\u043e\u0442\u043e\u043c\u043a\u0438).",
                "operationId": "showFolder",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041f\u0430\u043f\u043a\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "folder": {
                                            "$ref": "#/components/schemas/PageFolderPublic"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u041f\u0430\u043f\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            },
            "put": {
                "tags": [
                    "Folders"
                ],
                "summary": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043f\u043a\u0443",
                "description": "\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 name \u0438/\u0438\u043b\u0438 parent_id. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430: \u00ab\u043f\u043e\u043b\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e\u00bb = \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c; \u00abparent_id: null\u00bb = \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c. \u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0446\u0438\u043a\u043b\u043e\u0432 \u0438 cross-site move.",
                "operationId": "updateFolder",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdatePageFolderRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u041f\u0430\u043f\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "folder": {
                                            "$ref": "#/components/schemas/PageFolderPublic"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u041f\u0430\u043f\u043a\u0430 \u0438\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b"
                    },
                    "422": {
                        "description": "\u0426\u0438\u043a\u043b \u0432 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438, cross-site parent, \u043f\u0443\u0441\u0442\u043e\u0435 \u0438\u043c\u044f"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Folders"
                ],
                "summary": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0430\u043f\u043a\u0443",
                "description": "\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u043f\u0430\u043f\u043a\u0443 \u0420\u0415\u041a\u0423\u0420\u0421\u0418\u0412\u041d\u041e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438 \u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u043e\u0431\u0440\u0430\u0442\u0438\u043c\u043e. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 counts \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438 GET /api/v1/folders/{id} \u0438 \u0443\u0431\u0435\u0434\u0438\u0441\u044c \u0432 pages_count/subfolders_count.",
                "operationId": "deleteFolder",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "pattern": "\\d+",
                            "example": 12
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041f\u0430\u043f\u043a\u0430 \u0438 \u0435\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u044b",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "deleted_pages": {
                                            "type": "integer",
                                            "example": 5
                                        },
                                        "deleted_subfolders": {
                                            "type": "integer",
                                            "example": 2
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d"
                    },
                    "404": {
                        "description": "\u041f\u0430\u043f\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430"
                    }
                }
            }
        },
        "/api/v1/page-types": {
            "get": {
                "tags": [
                    "PageTypes"
                ],
                "summary": "\u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 4CMS \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f `kind` \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430-\u0448\u0430\u0431\u043b\u043e\u043d\u0430 (POST /api/v1/pages). \u0421\u0432\u0435\u0440\u0445 \u043d\u0438\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b \u0437\u0430\u0448\u0438\u0442\u044b\u0435 \u0432\u0438\u0434\u044b `article` (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 SEO) \u0438 `layout` (\u043c\u0430\u043a\u0435\u0442): \u043e\u043d\u0438 \u0432 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b. \u041f\u043e\u043b\u0435 `contexts` \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0432 \u043a\u0430\u043a\u0438\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u0445 4CMS \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u0441\u0442 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0438\u043d\u043a\u0430 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 \u2014 \u0442\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e `article` \u0438 `layout`.",
                "operationId": "listPageTypes",
                "responses": {
                    "200": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0443\u0441\u0442\u043e\u0439)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/PageTypePublicResponse"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        },
        "/api/v1/search/blocks": {
            "get": {
                "tags": [
                    "Search (Public)"
                ],
                "summary": "\u041f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0431\u043b\u043e\u043a\u0430\u043c",
                "description": "\u0418\u0449\u0435\u0442 \u0431\u043b\u043e\u043a\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 + \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 FTS (`tsvector`) + pg_trgm \u0434\u043b\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0442\u0435\u0433\u0430\u043c (AND-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u2014 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435) \u0438 \u043f\u043e \u0441\u043a\u043e\u0443\u043f\u0443. \u0418\u043d\u0434\u0435\u043a\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u0430.",
                "operationId": "searchBlocks",
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 (2\u2013255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "maxLength": 255,
                            "minLength": 2,
                            "example": "hero"
                        }
                    },
                    {
                        "name": "tags",
                        "in": "query",
                        "description": "\u0424\u0438\u043b\u044c\u0442\u0440 \u043f\u043e ID \u0442\u0435\u0433\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 AND \u2014 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0431\u043b\u043e\u043a\u0438, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0412\u0421\u0415 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0433\u0438.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "example": "1,3"
                        }
                    },
                    {
                        "name": "scope",
                        "in": "query",
                        "description": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0441\u043a\u043e\u0443\u043f\u043e\u043c: `private` \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0438, `global` \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: \u0441\u0432\u043e\u0438 + \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "private",
                                "global"
                            ],
                            "example": "global"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013100, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 20)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "maximum": 100,
                            "minimum": 1,
                            "example": 20
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SearchBlocksPublicResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (q \u043a\u043e\u0440\u043e\u0447\u0435 2 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, scope \u043d\u0435 \u0438\u0437 enum)"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        },
        "/api/v1/search/pages": {
            "get": {
                "tags": [
                    "Search (Public)"
                ],
                "summary": "\u041f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c",
                "description": "\u0418\u0449\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 API-\u043a\u043b\u044e\u0447\u0430 \u0447\u0435\u0440\u0435\u0437 PostgreSQL FTS (`tsvector`) + pg_trgm \u0434\u043b\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u043c. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `score` \u0438 HTML-`snippet` \u0441 `<mark>\u2026</mark>`. \u0418\u043d\u0434\u0435\u043a\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e \u2014 \u043b\u0430\u0433 \u0434\u043e 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438.",
                "operationId": "searchPages",
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "description": "\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 (2\u2013255 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432)",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "maxLength": 255,
                            "minLength": 2,
                            "example": "\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013100, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 20)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "maximum": 100,
                            "minimum": 1,
                            "example": 20
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SearchPagesPublicResponse"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (q \u043a\u043e\u0440\u043e\u0447\u0435 2 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u0442.\u043f.)"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        },
        "/api/v1/sites/{id}/provider": {
            "get": {
                "tags": [
                    "Sites"
                ],
                "summary": "\u0423\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0430\u0439\u0442\u0430",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 slug \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043a \u0441\u0430\u0439\u0442\u0443, \u0438\u043b\u0438 null \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u2014 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u0444\u0430\u043a\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 (ping 4CMS), \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u2014 \u043e\u0442\u043a\u0440\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0443.",
                "operationId": "getSiteProvider",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Slug \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0438\u043b\u0438 null",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SiteProviderPublicResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0421\u0430\u0439\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0438\u043b\u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u043a\u043b\u044e\u0447\u0430"
                    }
                }
            }
        },
        "/api/v1/sites": {
            "get": {
                "tags": [
                    "Sites"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0430\u0439\u0442\u043e\u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0430\u0439\u0442\u044b, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 API-\u043a\u043b\u044e\u0447\u0430, \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f (provider_config, s3_settings) \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0442\u0432\u0435\u0442. \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listSites",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0430\u0439\u0442\u043e\u0432",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SitePublicListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "403": {
                        "description": "\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d"
                    }
                }
            }
        },
        "/api/v1/sites/{id}/provider/fourcms": {
            "put": {
                "tags": [
                    "Sites"
                ],
                "summary": "\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c / \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c 4CMS-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438",
                "description": "\u0418\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b\u0439 upsert: \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 provider_type \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 \"fourcms\" \u0438 \u043a\u043b\u0430\u0434\u0451\u0442 provider_config = { api_token }. \u0415\u0441\u043b\u0438 \u0443 \u0441\u0430\u0439\u0442\u0430 \u0441\u0442\u043e\u044f\u043b \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ftp) \u2014 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 4CMS, \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u0437\u0430\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u0412\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e 4CMS API \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f.",
                "operationId": "setSiteProviderFourCms",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "api_token"
                                ],
                                "properties": {
                                    "api_token": {
                                        "description": "API-\u0442\u043e\u043a\u0435\u043d 4CMS (\u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a X-Auth-Token \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446)",
                                        "type": "string",
                                        "example": "tk_xxxxxxxxxxxxxxxx"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SiteProviderPublicResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0421\u0430\u0439\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0438\u043b\u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u043a\u043b\u044e\u0447\u0430"
                    },
                    "422": {
                        "description": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "errors": {
                                            "type": "object",
                                            "example": {
                                                "api_token": "API \u0442\u043e\u043a\u0435\u043d \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d"
                                            },
                                            "additionalProperties": {
                                                "type": "string"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/sites/{id}/s3/status": {
            "get": {
                "tags": [
                    "Sites"
                ],
                "summary": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 S3 \u0441\u0430\u0439\u0442\u0430",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 S3-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c PUT+DELETE 1-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u044d\u0442\u043e\u0442 endpoint **\u043f\u0435\u0440\u0435\u0434** \u0437\u0430\u043b\u0438\u0432\u043a\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a. \u041e\u0442\u0432\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 HTTP 200, \u0441\u0442\u0430\u0442\u0443\u0441 \u0432 \u0442\u0435\u043b\u0435: `configured` \u2014 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435; `writable` \u2014 \u043f\u0440\u043e\u0448\u0451\u043b \u043b\u0438 \u0442\u0435\u0441\u0442 \u0437\u0430\u043f\u0438\u0441\u0438; `error` \u2014 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 S3 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0435. \u0415\u0441\u043b\u0438 `configured: false` \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439 S3 \u0432 UI PageCraft (\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0430\u0439\u0442\u0430 \u2192 S3).",
                "operationId": "getSiteS3Status",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u0421\u0442\u0430\u0442\u0443\u0441 S3. \u041f\u043e\u043b\u0435 `writable` \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "configured": {
                                            "description": "\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043b\u0438 \u043f\u043e\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a S3 \u0432 \u0441\u0430\u0439\u0442\u0435",
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "writable": {
                                            "description": "\u041f\u0440\u043e\u0448\u0451\u043b \u043b\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 PUT+DELETE",
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "error": {
                                            "description": "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 S3-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0435 \u0442\u0435\u0441\u0442\u0430",
                                            "type": "string",
                                            "example": null,
                                            "nullable": true
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0421\u0430\u0439\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    }
                }
            }
        },
        "/api/v1/sites/{id}/s3/upload": {
            "post": {
                "tags": [
                    "Sites"
                ],
                "summary": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0432 S3 \u0441\u0430\u0439\u0442\u0430",
                "description": "\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 multipart/form-data \u0441 \u043f\u043e\u043b\u0435\u043c `file`. \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 S3-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0430\u0439\u0442\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 URL \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 `placeholder_values` \u0431\u043b\u043e\u043a\u043e\u0432. MIME-\u0442\u0438\u043f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 (finfo). \u041b\u0438\u043c\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u2014 100 MB (nginx). \u041f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u043b\u0438\u0432\u043a\u043e\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c `GET /api/v1/sites/{id}/s3/status` \u2014 \u0435\u0441\u043b\u0438 `configured: false`, S3 \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0438 \u0437\u0430\u043b\u0438\u0432\u043a\u0430 \u0432\u0435\u0440\u043d\u0451\u0442 400.",
                "operationId": "uploadSiteMedia",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "example": 1
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "required": [
                                    "file"
                                ],
                                "properties": {
                                    "file": {
                                        "description": "\u0424\u0430\u0439\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0432\u0438\u0434\u0435\u043e, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0430\u0440\u0445\u0438\u0432 \u0438 \u0442.\u0434.)",
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "\u0424\u0430\u0439\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "url": {
                                            "type": "string",
                                            "example": "https://bucket.s3.amazonaws.com/uploads/20260605_a1b2c3d4e5f6g7h8.jpg"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "S3 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d"
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    },
                    "404": {
                        "description": "\u0421\u0430\u0439\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d"
                    },
                    "413": {
                        "description": "\u0424\u0430\u0439\u043b \u0431\u043e\u043b\u044c\u0448\u0435 100 MB (nginx)"
                    },
                    "502": {
                        "description": "S3 \u0432\u0435\u0440\u043d\u0443\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u2014 \u0441\u043c. \u043b\u043e\u0433\u0438"
                    }
                }
            }
        },
        "/api/v1/tags": {
            "get": {
                "tags": [
                    "Tags"
                ],
                "summary": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u0431\u043b\u043e\u043a\u043e\u0432",
                "description": "\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0442\u0435\u0433\u0438 \u0431\u043b\u043e\u043a\u043e\u0432, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043f\u043e \u0442\u0435\u0433\u0430\u043c. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044e \u0447\u0435\u0440\u0435\u0437 `limit` (default 50, max 200) \u0438 `offset` (default 0). \u041f\u043e\u043b\u0435 description \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0418\u0418-\u0441\u0438\u0441\u0442\u0435\u043c \u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0442\u0435\u0433\u0430. \u041e\u0442\u0432\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442 \u0432 `{ data, total, limit, offset }`.",
                "operationId": "listBlockTags",
                "parameters": [
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1\u2013200, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 50)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 50
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 (\u2265 0, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0)",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "example": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u0431\u043b\u043e\u043a\u043e\u0432",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/TagPublicListResponse"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 API-\u043a\u043b\u044e\u0447 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization: Bearer <key>"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "CreateBlockPublicRequest": {
                "required": [
                    "name"
                ],
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255,
                        "minLength": 1
                    },
                    "description": {
                        "type": "string",
                        "default": ""
                    },
                    "docs": {
                        "type": "string",
                        "default": ""
                    },
                    "block_type": {
                        "type": "string",
                        "default": "schema",
                        "enum": [
                            "schema",
                            "html",
                            "markdown",
                            "null"
                        ]
                    },
                    "role": {
                        "type": "string",
                        "default": "content",
                        "enum": [
                            "content",
                            "layout"
                        ]
                    },
                    "tags": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "default": []
                    },
                    "template": {
                        "type": "string",
                        "default": ""
                    },
                    "css": {
                        "type": "string",
                        "default": ""
                    },
                    "js": {
                        "type": "string",
                        "default": ""
                    },
                    "schema_content": {
                        "type": "object",
                        "default": [],
                        "additionalProperties": {
                            "nullable": true
                        }
                    },
                    "changelog": {
                        "type": "string",
                        "default": "\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f"
                    }
                },
                "type": "object"
            },
            "ListBlocksPublicQueryRequest": {
                "properties": {
                    "search": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "tags": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "role": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "content",
                            "layout"
                        ],
                        "nullable": true
                    },
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "ListFavoriteBlocksQueryRequest": {
                "properties": {
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "UpdateBlockPublicRequest": {
                "properties": {
                    "name": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "minLength": 1,
                        "nullable": true
                    },
                    "description": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "docs": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "block_type": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "schema",
                            "html",
                            "markdown",
                            "null"
                        ],
                        "nullable": true
                    },
                    "role": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "content",
                            "layout"
                        ],
                        "nullable": true
                    },
                    "tags": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "default": null,
                        "nullable": true
                    },
                    "template": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "css": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "js": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "schema_content": {
                        "type": "object",
                        "default": null,
                        "nullable": true,
                        "additionalProperties": {
                            "nullable": true
                        }
                    },
                    "changelog": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "AddBlocksRequest": {
                "description": "\u0421\u043f\u0438\u0441\u043e\u043a ID \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e",
                "properties": {
                    "block_ids": {
                        "description": "\u041c\u0430\u0441\u0441\u0438\u0432 ID \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f",
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "default": [],
                        "example": [
                            12,
                            34
                        ]
                    }
                },
                "type": "object"
            },
            "CreateBlockCollectionRequest": {
                "description": "\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432",
                "properties": {
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "string",
                        "default": "",
                        "maxLength": 255,
                        "example": "\u041c\u043e\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438"
                    },
                    "description": {
                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "string",
                        "default": null,
                        "example": "\u0411\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u043b\u0435\u043d\u0434\u0438\u043d\u0433\u043e\u0432",
                        "nullable": true
                    },
                    "scope": {
                        "description": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438: private \u2014 \u043b\u0438\u0447\u043d\u0430\u044f, global \u2014 \u0432\u0438\u0434\u043d\u0430 \u0432\u0441\u0435\u043c (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432)",
                        "type": "string",
                        "default": "private",
                        "enum": [
                            "private",
                            "global"
                        ],
                        "example": "private"
                    }
                },
                "type": "object"
            },
            "ListBlockCollectionsQueryRequest": {
                "properties": {
                    "scope": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "private",
                            "global",
                            "all"
                        ],
                        "nullable": true
                    },
                    "search": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "ReorderBlocksRequest": {
                "description": "\u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a ID \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                "properties": {
                    "block_ids": {
                        "description": "\u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 ID \u0431\u043b\u043e\u043a\u043e\u0432. \u0411\u043b\u043e\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.",
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "default": [],
                        "example": [
                            34,
                            12,
                            56
                        ]
                    }
                },
                "type": "object"
            },
            "UpdateBlockCollectionRequest": {
                "description": "\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0431\u043b\u043e\u043a\u043e\u0432. \u041f\u043e\u043b\u044f \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c null \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f.",
                "properties": {
                    "name": {
                        "description": "\u041d\u043e\u0432\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 (null \u2014 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c)",
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "example": "\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
                        "nullable": true
                    },
                    "description": {
                        "description": "\u041d\u043e\u0432\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 (null \u2014 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c)",
                        "type": "string",
                        "default": null,
                        "example": "\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "ListSubmissionsPublicQueryRequest": {
                "properties": {
                    "status": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "pending",
                            "approved",
                            "rejected",
                            "withdrawn"
                        ],
                        "nullable": true
                    },
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "ListDataResultTypesQueryRequest": {
                "properties": {
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "ListDataSourcesQueryRequest": {
                "properties": {
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "CreatePagePublicRequest": {
                "required": [
                    "name",
                    "site_id"
                ],
                "properties": {
                    "name": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "site_id": {
                        "type": "integer",
                        "minimum": 0,
                        "exclusiveMinimum": true
                    },
                    "kind": {
                        "type": "string",
                        "default": "article",
                        "maxLength": 32
                    },
                    "folder_id": {
                        "type": "integer",
                        "default": null,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "nullable": true
                    },
                    "slug": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "meta_title": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "meta_description": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "meta_keywords": {
                        "type": "string",
                        "default": null,
                        "maxLength": 512,
                        "nullable": true
                    },
                    "meta_robots": {
                        "type": "string",
                        "default": null,
                        "maxLength": 64,
                        "nullable": true
                    },
                    "blocks": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "additionalProperties": {
                                "nullable": true
                            }
                        },
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "ListPagesPublicQueryRequest": {
                "properties": {
                    "search": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "site_id": {
                        "type": "integer",
                        "default": null,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "nullable": true
                    },
                    "bindingSource": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "bindingValue": {
                        "type": "string",
                        "default": null,
                        "maxLength": 512,
                        "nullable": true
                    },
                    "bindingParamName": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "external_id": {
                        "type": "integer",
                        "default": null,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "nullable": true
                    },
                    "has_outdated": {
                        "type": "integer",
                        "enum": [
                            0,
                            1
                        ],
                        "nullable": true
                    },
                    "kind": {
                        "type": "string",
                        "default": null,
                        "maxLength": 50,
                        "nullable": true
                    },
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "PublishPagePublicRequest": {
                "properties": {
                    "rubric_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "default": null,
                        "minItems": 1,
                        "nullable": true
                    },
                    "name": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "meta_title": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "meta_description": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "meta_keywords": {
                        "type": "string",
                        "default": null,
                        "maxLength": 512,
                        "nullable": true
                    },
                    "meta_robots": {
                        "type": "string",
                        "default": null,
                        "maxLength": 64,
                        "nullable": true
                    },
                    "slug": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "preview_text": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "PublishUpdatePagePublicRequest": {
                "properties": {
                    "rubric_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "default": null,
                        "nullable": true
                    },
                    "name": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "meta_title": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "meta_description": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "meta_keywords": {
                        "type": "string",
                        "default": null,
                        "maxLength": 512,
                        "nullable": true
                    },
                    "meta_robots": {
                        "type": "string",
                        "default": null,
                        "maxLength": 64,
                        "nullable": true
                    },
                    "slug": {
                        "type": "string",
                        "default": null,
                        "maxLength": 255,
                        "nullable": true
                    },
                    "preview_text": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "MovePageBlockPublicRequest": {
                "description": "\u0418\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430: \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u043b\u044e\u0441 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f position >= count \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u00ab\u0432 \u043a\u043e\u043d\u0435\u0446\u00bb; \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u044e\u0442\u0441\u044f (422). parent_page_block_id = null \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0431\u0435\u0437 \u044d\u0442\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0432 \u043a\u043e\u0440\u0435\u043d\u044c.",
                "properties": {
                    "position": {
                        "description": "0-based \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f: \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0441\u043b\u043e\u0442\u0430 \u0434\u043b\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e. \u0421\u043e\u0441\u0435\u0434\u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f.",
                        "type": "integer",
                        "default": 0,
                        "minimum": 0,
                        "example": 2
                    },
                    "parent_page_block_id": {
                        "description": "ID \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0432 \u0441\u043b\u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0431\u043b\u043e\u043a. null \u2014 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.",
                        "type": "integer",
                        "default": null,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "example": 85,
                        "nullable": true
                    },
                    "slot_name": {
                        "description": "\u0418\u043c\u044f \u0441\u043b\u043e\u0442\u0430 \u0432 \u0441\u0445\u0435\u043c\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 parent_page_block_id.",
                        "type": "string",
                        "default": null,
                        "example": "left",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "ReplacePageBlockPublicRequest": {
                "description": "\u0417\u0430\u043c\u0435\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 pageBlock \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439. \u0421\u0442\u0430\u0440\u044b\u0439 pageBlock \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f, \u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441 \u043d\u043e\u0432\u044b\u043c id.",
                "required": [
                    "block_id"
                ],
                "properties": {
                    "block_id": {
                        "description": "ID \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "example": 17
                    },
                    "placeholder_values": {
                        "description": "\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430. \u0421\u0445\u0435\u043c\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u2014 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e.",
                        "type": "object",
                        "default": [],
                        "example": {
                            "title": "\u041f\u0440\u0438\u0432\u0435\u0442"
                        },
                        "additionalProperties": true
                    }
                },
                "type": "object"
            },
            "UpdatePageBlockPublicRequest": {
                "description": "\u041f\u043e\u043b\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 placeholder_values \u043e\u0434\u043d\u043e\u0433\u043e pageBlock. \u0412\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c.",
                "properties": {
                    "placeholder_values": {
                        "description": "\u041f\u043e\u043b\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432. \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c.",
                        "type": "object",
                        "default": [],
                        "example": {
                            "title": "\u041d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a"
                        },
                        "additionalProperties": true
                    }
                },
                "type": "object"
            },
            "CreatePageFolderRequest": {
                "description": "\u0422\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u043f\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
                "required": [
                    "name",
                    "site_id"
                ],
                "properties": {
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438",
                        "type": "string",
                        "maxLength": 255,
                        "minLength": 1,
                        "example": "\u0410\u043a\u0446\u0438\u0438"
                    },
                    "site_id": {
                        "description": "ID \u0441\u0430\u0439\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043f\u0430\u043f\u043a\u0430",
                        "type": "integer",
                        "default": 0,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "example": 3
                    },
                    "parent_id": {
                        "description": "ID \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 (null \u2014 \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f)",
                        "type": "integer",
                        "default": null,
                        "example": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "ListPageFoldersQueryRequest": {
                "description": "Query-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0430\u043f\u043e\u043a \u0441\u0430\u0439\u0442\u0430",
                "properties": {
                    "site_id": {
                        "description": "ID \u0441\u0430\u0439\u0442\u0430, \u043f\u0430\u043f\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f",
                        "type": "integer",
                        "default": null,
                        "minimum": 0,
                        "exclusiveMinimum": true,
                        "example": 3,
                        "nullable": true
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (1..200, default 50). \u041d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 ?as=tree.",
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1,
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430, \u2265 0, default 0. \u041d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 ?as=tree.",
                        "type": "integer",
                        "default": 0,
                        "minimum": 0,
                        "example": 0
                    }
                },
                "type": "object"
            },
            "SearchQueryRequest": {
                "properties": {
                    "q": {
                        "type": "string",
                        "default": "",
                        "maxLength": 255,
                        "minLength": 2
                    },
                    "limit": {
                        "type": "integer",
                        "default": 20,
                        "maximum": 100,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    },
                    "tags": {
                        "type": "string",
                        "default": null,
                        "nullable": true
                    },
                    "scope": {
                        "type": "string",
                        "default": null,
                        "enum": [
                            "private",
                            "global"
                        ],
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "SearchPagesQueryRequest": {
                "properties": {
                    "q": {
                        "type": "string",
                        "default": "",
                        "maxLength": 255,
                        "minLength": 2
                    },
                    "limit": {
                        "type": "integer",
                        "default": 20,
                        "maximum": 100,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "ListSitesPublicQueryRequest": {
                "properties": {
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "SetSiteProviderFourCmsRequest": {
                "properties": {
                    "api_token": {
                        "type": "string",
                        "default": ""
                    }
                },
                "type": "object"
            },
            "ListTagsPublicQueryRequest": {
                "properties": {
                    "limit": {
                        "type": "integer",
                        "default": 50,
                        "maximum": 200,
                        "minimum": 1
                    },
                    "offset": {
                        "type": "integer",
                        "default": 0,
                        "minimum": 0
                    }
                },
                "type": "object"
            },
            "BlockRevisionPublicResponse": {
                "required": [
                    "id",
                    "block_id",
                    "revision_number",
                    "version_major",
                    "version_minor",
                    "version",
                    "changelog",
                    "created_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "integer",
                        "example": 15
                    },
                    "block_id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 42
                    },
                    "revision_number": {
                        "description": "\u041f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "integer",
                        "example": 3
                    },
                    "version_major": {
                        "description": "\u041c\u0430\u0436\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f",
                        "type": "integer",
                        "example": 1
                    },
                    "version_minor": {
                        "description": "\u041c\u0438\u043d\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f",
                        "type": "integer",
                        "example": 2
                    },
                    "version": {
                        "description": "\u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 major.minor",
                        "type": "string",
                        "example": "1.2"
                    },
                    "changelog": {
                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "string",
                        "example": "\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0451\u0440\u0441\u0442\u043a\u0430"
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-04-10T09:00:00+00:00"
                    }
                },
                "type": "object"
            },
            "TagPublicResponse": {
                "description": "\u0422\u0435\u0433 \u0431\u043b\u043e\u043a\u0430",
                "required": [
                    "id",
                    "name",
                    "slug",
                    "created_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0442\u0435\u0433\u0430",
                        "type": "integer",
                        "example": 1
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0433\u0430",
                        "type": "string",
                        "example": "\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f"
                    },
                    "slug": {
                        "description": "Slug \u0442\u0435\u0433\u0430",
                        "type": "string",
                        "example": "navigation"
                    },
                    "description": {
                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0435\u0433\u0430 (\u0434\u043b\u044f \u0418\u0418-\u0441\u0438\u0441\u0442\u0435\u043c)",
                        "type": "string",
                        "example": "\u0411\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0430\u0439\u0442\u0443",
                        "nullable": true
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-01-01T00:00:00+00:00"
                    }
                },
                "type": "object"
            },
            "BlockPublicResponse": {
                "required": [
                    "id",
                    "name",
                    "description",
                    "block_type",
                    "role",
                    "scope",
                    "is_favorite",
                    "fork_count",
                    "current_revision",
                    "tags",
                    "created_at",
                    "updated_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 42
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "Hero Section"
                    },
                    "description": {
                        "description": "\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "\u0411\u043b\u043e\u043a-\u043e\u0431\u043b\u043e\u0436\u043a\u0430 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439"
                    },
                    "block_type": {
                        "description": "\u0422\u0438\u043f \u0431\u043b\u043e\u043a\u0430: html, liquid \u0438 \u0442.\u0434.",
                        "type": "string",
                        "example": "liquid"
                    },
                    "role": {
                        "description": "\u0420\u043e\u043b\u044c \u0431\u043b\u043e\u043a\u0430: content \u2014 \u0431\u043b\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, layout \u2014 \u043b\u044d\u0439\u0430\u0443\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430-\u043c\u0430\u043a\u0435\u0442\u0430",
                        "type": "string",
                        "enum": [
                            "content",
                            "layout"
                        ],
                        "example": "content"
                    },
                    "scope": {
                        "description": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u043b\u043e\u043a\u0430: public, private, unlisted",
                        "type": "string",
                        "example": "public"
                    },
                    "is_favorite": {
                        "description": "\u0411\u043b\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c",
                        "type": "boolean",
                        "example": false
                    },
                    "fork_count": {
                        "description": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u043e\u0440\u043a\u043e\u0432 \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 1
                    },
                    "preview_image": {
                        "description": "URL \u043f\u0440\u0435\u0432\u044c\u044e-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
                        "type": "string",
                        "example": "https://cdn.example.com/preview.png",
                        "nullable": true
                    },
                    "owner_user_id": {
                        "description": "ID \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0431\u043b\u043e\u043a\u0430 (\u0441\u0430\u0439\u0442\u0430)",
                        "type": "integer",
                        "example": 7,
                        "nullable": true
                    },
                    "author_user_id": {
                        "description": "ID \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 5,
                        "nullable": true
                    },
                    "author_name": {
                        "description": "\u0418\u043c\u044f \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "Ivan Petrov",
                        "nullable": true
                    },
                    "current_revision": {
                        "$ref": "#/components/schemas/BlockRevisionPublicResponse"
                    },
                    "tags": {
                        "description": "\u0422\u0435\u0433\u0438 \u0431\u043b\u043e\u043a\u0430",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/TagPublicResponse"
                        }
                    },
                    "forked_from_block_id": {
                        "description": "ID \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043a\u043e\u043c",
                        "type": "integer",
                        "example": 10,
                        "nullable": true
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-01-15T10:00:00+00:00"
                    },
                    "updated_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-04-20T14:30:00+00:00"
                    }
                },
                "type": "object"
            },
            "BlockPublicListResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BlockPublicResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u043b\u043e\u043a\u043e\u0432 (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 142
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "BlockRevisionPublicDetailResponse": {
                "required": [
                    "id",
                    "block_id",
                    "revision_number",
                    "version_major",
                    "version_minor",
                    "version",
                    "template",
                    "css",
                    "js",
                    "schema_content",
                    "changelog",
                    "created_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "integer",
                        "example": 15
                    },
                    "block_id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 42
                    },
                    "revision_number": {
                        "description": "\u041f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "integer",
                        "example": 3
                    },
                    "version_major": {
                        "description": "\u041c\u0430\u0436\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f",
                        "type": "integer",
                        "example": 1
                    },
                    "version_minor": {
                        "description": "\u041c\u0438\u043d\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f",
                        "type": "integer",
                        "example": 2
                    },
                    "version": {
                        "description": "\u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 major.minor",
                        "type": "string",
                        "example": "1.2"
                    },
                    "template": {
                        "description": "HTML-\u0448\u0430\u0431\u043b\u043e\u043d \u0431\u043b\u043e\u043a\u0430 (Liquid \u0438\u043b\u0438 HTML)",
                        "type": "string",
                        "example": "<section>{{ title }}</section>"
                    },
                    "css": {
                        "description": "CSS-\u0441\u0442\u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "section { padding: 2rem; }"
                    },
                    "js": {
                        "description": "JavaScript \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "console.log(\"ready\");"
                    },
                    "schema_content": {
                        "description": "JSON-\u0441\u0445\u0435\u043c\u0430 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0431\u043b\u043e\u043a\u0430",
                        "type": "object",
                        "example": {
                            "title": {
                                "type": "string",
                                "label": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a"
                            }
                        },
                        "additionalProperties": true
                    },
                    "changelog": {
                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "string",
                        "example": "\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0451\u0440\u0441\u0442\u043a\u0430"
                    },
                    "created_by_user_id": {
                        "description": "ID \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0441\u043e\u0437\u0434\u0430\u0432\u0448\u0435\u0433\u043e \u0440\u0435\u0432\u0438\u0437\u0438\u044e",
                        "type": "integer",
                        "example": 5,
                        "nullable": true
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-04-10T09:00:00+00:00"
                    }
                },
                "type": "object"
            },
            "BlockPublicDetailResponse": {
                "required": [
                    "id",
                    "name",
                    "description",
                    "docs",
                    "block_type",
                    "role",
                    "scope",
                    "is_favorite",
                    "fork_count",
                    "current_revision",
                    "tags",
                    "created_at",
                    "updated_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 42
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "Hero Section"
                    },
                    "description": {
                        "description": "\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "\u0411\u043b\u043e\u043a-\u043e\u0431\u043b\u043e\u0436\u043a\u0430 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439"
                    },
                    "docs": {
                        "description": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0431\u043b\u043e\u043a\u0430 (Markdown)",
                        "type": "string",
                        "example": "## \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\\n\u041f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 `title` \u0438 `subtitle`."
                    },
                    "block_type": {
                        "description": "\u0422\u0438\u043f \u0431\u043b\u043e\u043a\u0430: html, liquid \u0438 \u0442.\u0434.",
                        "type": "string",
                        "example": "liquid"
                    },
                    "role": {
                        "description": "\u0420\u043e\u043b\u044c \u0431\u043b\u043e\u043a\u0430: content \u2014 \u0431\u043b\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, layout \u2014 \u043b\u044d\u0439\u0430\u0443\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430-\u043c\u0430\u043a\u0435\u0442\u0430",
                        "type": "string",
                        "enum": [
                            "content",
                            "layout"
                        ],
                        "example": "content"
                    },
                    "scope": {
                        "description": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u043b\u043e\u043a\u0430: public, private, unlisted",
                        "type": "string",
                        "example": "public"
                    },
                    "is_favorite": {
                        "description": "\u0411\u043b\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c",
                        "type": "boolean",
                        "example": false
                    },
                    "fork_count": {
                        "description": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u043e\u0440\u043a\u043e\u0432 \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 1
                    },
                    "preview_image": {
                        "description": "URL \u043f\u0440\u0435\u0432\u044c\u044e-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
                        "type": "string",
                        "example": "https://cdn.example.com/preview.png",
                        "nullable": true
                    },
                    "owner_user_id": {
                        "description": "ID \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u0431\u043b\u043e\u043a\u0430 (\u0441\u0430\u0439\u0442\u0430)",
                        "type": "integer",
                        "example": 7,
                        "nullable": true
                    },
                    "author_user_id": {
                        "description": "ID \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 5,
                        "nullable": true
                    },
                    "author_name": {
                        "description": "\u0418\u043c\u044f \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "Ivan Petrov",
                        "nullable": true
                    },
                    "current_revision": {
                        "$ref": "#/components/schemas/BlockRevisionPublicDetailResponse"
                    },
                    "tags": {
                        "description": "\u0422\u0435\u0433\u0438 \u0431\u043b\u043e\u043a\u0430",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/TagPublicResponse"
                        }
                    },
                    "forked_from_block_id": {
                        "description": "ID \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043a\u043e\u043c",
                        "type": "integer",
                        "example": 10,
                        "nullable": true
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-01-15T10:00:00+00:00"
                    },
                    "updated_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-04-20T14:30:00+00:00"
                    }
                },
                "type": "object"
            },
            "BlockPublicShowResponse": {
                "description": "\u041e\u0442\u0432\u0435\u0442 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u043b\u043e\u043a\u0430 (v1)",
                "required": [
                    "block"
                ],
                "properties": {
                    "block": {
                        "$ref": "#/components/schemas/BlockPublicDetailResponse"
                    }
                },
                "type": "object"
            },
            "VersionBumpPublicResponse": {
                "required": [
                    "bump",
                    "is_breaking",
                    "removed_fields"
                ],
                "properties": {
                    "bump": {
                        "type": "string"
                    },
                    "is_breaking": {
                        "type": "boolean"
                    },
                    "removed_fields": {
                        "oneOf": [
                            {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            },
                            {
                                "type": "object",
                                "additionalProperties": {
                                    "type": "string"
                                }
                            }
                        ]
                    }
                },
                "type": "object"
            },
            "BlockUsageResponse": {
                "description": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",
                "required": [
                    "page_block_id",
                    "page_id",
                    "page_name",
                    "order_index",
                    "block_version_major",
                    "block_version_minor",
                    "library_version_major",
                    "library_version_minor",
                    "update_status"
                ],
                "properties": {
                    "page_block_id": {
                        "description": "ID pageBlock",
                        "type": "integer",
                        "example": 12
                    },
                    "page_id": {
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 42
                    },
                    "page_name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "string",
                        "example": "\u0413\u043b\u0430\u0432\u043d\u0430\u044f"
                    },
                    "site_id": {
                        "description": "ID \u0441\u0430\u0439\u0442\u0430 (\u0438\u043b\u0438 null)",
                        "type": "integer",
                        "example": 3,
                        "nullable": true
                    },
                    "order_index": {
                        "description": "\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 (order_index)",
                        "type": "integer",
                        "example": 0
                    },
                    "block_version_major": {
                        "description": "Pin major",
                        "type": "integer",
                        "example": 1
                    },
                    "block_version_minor": {
                        "description": "Pin minor",
                        "type": "integer",
                        "example": 2
                    },
                    "library_version_major": {
                        "description": "Library major (current_revision)",
                        "type": "integer",
                        "example": 1
                    },
                    "library_version_minor": {
                        "description": "Library minor (current_revision)",
                        "type": "integer",
                        "example": 4
                    },
                    "update_status": {
                        "type": "string",
                        "enum": [
                            "up_to_date",
                            "minor_available",
                            "major_blocked"
                        ],
                        "example": "minor_available"
                    }
                },
                "type": "object"
            },
            "BlockUsagesListResponse": {
                "description": "\u041f\u0430\u0433\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a usages \u0431\u043b\u043e\u043a\u0430 (\u0441 outdated_total).",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset",
                    "outdated_total"
                ],
                "properties": {
                    "data": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BlockUsageResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e usages \u0431\u043b\u043e\u043a\u0430 (\u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430 outdated)",
                        "type": "integer",
                        "example": 7
                    },
                    "limit": {
                        "description": "\u041f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 limit",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u041f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 offset",
                        "type": "integer",
                        "example": 0
                    },
                    "outdated_total": {
                        "description": "\u0418\u0437 \u043d\u0438\u0445 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 (update_status != up_to_date). \u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 outdated \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0441\u0440\u0435\u0434\u0438 \u0412\u0421\u0415\u0425 usages \u0431\u043b\u043e\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.",
                        "type": "integer",
                        "example": 3
                    }
                },
                "type": "object"
            },
            "BlockPlaceholderSchemaResponse": {
                "description": "\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 `placeholder_values` \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430: JSON Schema (Draft-07), \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 example \u0438 \u0441\u043f\u0438\u0441\u043e\u043a SSR binding-\u0441\u043b\u043e\u0442\u043e\u0432 \u0441 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0434 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u043b\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 POST /api/v1/pages, PUT /api/v1/pages/{id}, POST /api/v1/pages/{id}/blocks.",
                "required": [
                    "block_type",
                    "schema",
                    "example",
                    "binding_slots"
                ],
                "properties": {
                    "block_type": {
                        "description": "\u0422\u0438\u043f \u0431\u043b\u043e\u043a\u0430. `schema` \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u043b\u043e\u043a: \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0439 `placeholder_values` \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e `schema` \u043d\u0438\u0436\u0435. `markdown` \u2014 \u043e\u0441\u043e\u0431\u044b\u0439 \u0431\u043b\u043e\u043a, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 WYSIWYG-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 `_markdown` \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 Markdown \u0432 `placeholder_values` (\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f `schema` \u0442\u043e\u0436\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b).",
                        "type": "string",
                        "enum": [
                            "schema",
                            "markdown"
                        ],
                        "example": "schema"
                    },
                    "schema": {
                        "title": "JSON Schema (Draft-07) \u0434\u043b\u044f placeholder_values \u0431\u043b\u043e\u043a\u0430.",
                        "description": "JSON Schema (Draft-07) \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 placeholder_values \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430. additionalProperties=true, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Liquid-\u0448\u0430\u0431\u043b\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0435 fields.",
                        "type": "object",
                        "additionalProperties": true
                    },
                    "example": {
                        "title": "\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 example (\u0434\u0435\u0444\u043e\u043b\u0442\u044b \u0438\u0437 \u0441\u0445\u0435\u043c\u044b).",
                        "description": "\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 placeholder_values, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0438\u0437 default-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u0435\u0439. \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 payload.",
                        "type": "object",
                        "additionalProperties": true
                    },
                    "binding_slots": {
                        "title": "\u0421\u043f\u0438\u0441\u043e\u043a SSR-\u0441\u043b\u043e\u0442\u043e\u0432 \u0431\u043b\u043e\u043a\u0430.",
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a SSR binding-\u0441\u043b\u043e\u0442\u043e\u0432 (`schema_content.bindingSlots`). \u041f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u043d\u0435-SSR \u0431\u043b\u043e\u043a\u043e\u0432. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 `allowed_sources` \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f `bindings.{name}.source` \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.",
                        "type": "array",
                        "items": {
                            "properties": {
                                "name": {
                                    "type": "string",
                                    "example": "products"
                                },
                                "result_type": {
                                    "type": "string",
                                    "example": "product_list",
                                    "nullable": true
                                },
                                "default": {
                                    "type": "string",
                                    "example": "catalog.products",
                                    "nullable": true
                                },
                                "allowed_sources": {
                                    "type": "array",
                                    "items": {
                                        "type": "string"
                                    },
                                    "example": [
                                        "catalog.products",
                                        "catalog.recommended"
                                    ]
                                }
                            }
                        }
                    }
                },
                "type": "object"
            },
            "BlockCollectionPublicResponse": {
                "description": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 (\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 v1)",
                "required": [
                    "id",
                    "name",
                    "scope",
                    "owner_user_id",
                    "is_owner",
                    "blocks_count",
                    "created_at",
                    "updated_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "integer",
                        "example": 1
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "string",
                        "example": "\u041c\u043e\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438"
                    },
                    "description": {
                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "string",
                        "example": "\u0411\u043b\u043e\u043a\u0438 \u0434\u043b\u044f \u043b\u0435\u043d\u0434\u0438\u043d\u0433\u043e\u0432",
                        "nullable": true
                    },
                    "scope": {
                        "description": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438: private \u2014 \u043b\u0438\u0447\u043d\u0430\u044f, global \u2014 \u0432\u0438\u0434\u043d\u0430 \u0432\u0441\u0435\u043c",
                        "type": "string",
                        "enum": [
                            "private",
                            "global"
                        ],
                        "example": "private"
                    },
                    "owner_user_id": {
                        "description": "ID \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "integer",
                        "example": 42
                    },
                    "is_owner": {
                        "description": "\u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "boolean",
                        "example": true
                    },
                    "blocks_count": {
                        "description": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438",
                        "type": "integer",
                        "example": 5
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-06-11T12:00:00+00:00"
                    },
                    "updated_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-06-11T12:00:00+00:00"
                    },
                    "blocks": {
                        "description": "\u0411\u043b\u043e\u043a\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 (\u0442\u043e\u043b\u044c\u043a\u043e \u0432 detail-\u043e\u0442\u0432\u0435\u0442\u0435)",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BlockPublicResponse"
                        },
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "BlockCollectionListResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u0431\u043b\u043e\u043a\u043e\u0432",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BlockCollectionPublicResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 12
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "BlockSubmissionResponse": {
                "required": [
                    "id",
                    "source_revision_id",
                    "submitted_by_user_id",
                    "status",
                    "created_at",
                    "updated_at"
                ],
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "source_block_id": {
                        "type": "integer",
                        "nullable": true
                    },
                    "source_block_name": {
                        "type": "string",
                        "nullable": true
                    },
                    "source_revision_id": {
                        "type": "integer"
                    },
                    "submitted_by_user_id": {
                        "type": "integer"
                    },
                    "status": {
                        "type": "string"
                    },
                    "review_message": {
                        "type": "string",
                        "nullable": true
                    },
                    "reviewed_by_user_id": {
                        "type": "integer",
                        "nullable": true
                    },
                    "reviewed_at": {
                        "type": "string",
                        "nullable": true
                    },
                    "target_global_block_id": {
                        "type": "integer",
                        "nullable": true
                    },
                    "target_global_revision_id": {
                        "type": "integer",
                        "nullable": true
                    },
                    "created_at": {
                        "type": "string"
                    },
                    "updated_at": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "BlockSubmissionListPublicResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u044f\u0432\u043e\u043a \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u044f\u0432\u043e\u043a",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/BlockSubmissionResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u044f\u0432\u043e\u043a (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 3
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "DataResultTypePublicResponse": {
                "description": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445",
                "required": [
                    "id",
                    "schema_json",
                    "synced_at"
                ],
                "properties": {
                    "id": {
                        "description": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430",
                        "type": "string",
                        "example": "offer_list"
                    },
                    "schema_json": {
                        "description": "JSON-\u0441\u0445\u0435\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430",
                        "type": "object",
                        "example": {
                            "type": "array",
                            "items": {
                                "type": "object"
                            }
                        },
                        "additionalProperties": true
                    },
                    "stub": {
                        "description": "\u041f\u0440\u0438\u043c\u0435\u0440-\u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u044b",
                        "type": "object",
                        "example": [
                            {
                                "id": 1,
                                "title": "\u041f\u0440\u0438\u043c\u0435\u0440"
                            }
                        ],
                        "nullable": true,
                        "additionalProperties": true
                    },
                    "synced_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u043c",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-05-19T12:00:00+00:00"
                    }
                },
                "type": "object"
            },
            "DataResultTypePublicListResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DataResultTypePublicResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 5
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "DataResultTypePublicShowResponse": {
                "description": "\u041e\u0442\u0432\u0435\u0442 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430",
                "required": [
                    "result_type"
                ],
                "properties": {
                    "result_type": {
                        "$ref": "#/components/schemas/DataResultTypePublicResponse"
                    }
                },
                "type": "object"
            },
            "DataSourcePublicResponse": {
                "description": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0440\u0435\u0435\u0441\u0442\u0440\u0430",
                "required": [
                    "id",
                    "result_type_id",
                    "params_schema",
                    "context",
                    "synced_at"
                ],
                "properties": {
                    "id": {
                        "description": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430",
                        "type": "string",
                        "example": "partner_offers"
                    },
                    "result_type_id": {
                        "description": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430",
                        "type": "string",
                        "example": "offer_list"
                    },
                    "title": {
                        "description": "\u0427\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430",
                        "type": "string",
                        "example": "\u041e\u0444\u0444\u0435\u0440\u044b \u043f\u0430\u0440\u0442\u043d\u0451\u0440\u043e\u0432",
                        "nullable": true
                    },
                    "description": {
                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430",
                        "type": "string",
                        "example": "\u0421\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043e\u0444\u0444\u0435\u0440\u043e\u0432 \u0438\u0437 CRM",
                        "nullable": true
                    },
                    "params_schema": {
                        "description": "JSON Schema \u043e\u0431\u044a\u0435\u043a\u0442\u0430 `params` \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u043b\u044f `bindings[slot].params` \u0432 payload `POST /api/v1/pages`. \u0418\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 `properties` \u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0442\u0435\u043c\u0438, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 `params`; \u0442\u0438\u043f\u044b, \u0444\u043e\u0440\u043c\u0430\u0442\u044b, `enum`, `description` \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0442\u0441\u044e\u0434\u0430. \u041d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430. \u0421\u0432\u044f\u0437\u0430\u043d \u0441 `result_type_id` \u2014 \u0444\u043e\u0440\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0432\u0435\u0440\u043d\u0451\u0442 \u0432 Liquid-\u0448\u0430\u0431\u043b\u043e\u043d, \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432 `GET /api/v1/data-result-types/{result_type_id}` (`schema_json` + `stub`).",
                        "type": "object",
                        "example": {
                            "type": "object",
                            "properties": {
                                "limit": {
                                    "type": "integer"
                                }
                            }
                        },
                        "additionalProperties": true
                    },
                    "context": {
                        "description": "\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0431\u0435\u0440\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u041d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u2014 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0447\u0435\u0439 \u0442\u0438\u043f (`kind`) \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0432 `contexts`: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 `catalog.current_products` \u0441 `[\"rubric\",\"brand\",\"search\"]` \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0432\u0438\u0434\u0430 `rubric`, \u043d\u043e \u043d\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0432\u0438\u0434\u0430 `article`. \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u2014 \u0432 `GET /api/v1/page-types`. \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043d\u0430 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0441 400 (`errors[].message` \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d\u0443), \u0430 \u0435\u0441\u043b\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u0447\u0435\u0437\u043b\u043e \u0443 \u0442\u0438\u043f\u0430 \u043f\u043e\u0437\u0436\u0435 \u2014 \u0441\u043b\u043e\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d \u043a\u0430\u043a `null`.",
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "example": [
                            "rubric",
                            "brand"
                        ]
                    },
                    "synced_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u043c",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-05-19T12:00:00+00:00"
                    }
                },
                "type": "object"
            },
            "DataSourcePublicListResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DataSourcePublicResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 12
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "DataSourcePublicShowResponse": {
                "description": "\u041e\u0442\u0432\u0435\u0442 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445",
                "required": [
                    "source"
                ],
                "properties": {
                    "source": {
                        "$ref": "#/components/schemas/DataSourcePublicResponse"
                    }
                },
                "type": "object"
            },
            "PageBlockInlinePublicResponse": {
                "description": "\u0414\u0430\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0430 (\u0438\u043d\u043b\u0430\u0439\u043d, \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b)",
                "required": [
                    "id",
                    "name",
                    "description",
                    "content",
                    "css",
                    "js",
                    "schema_content",
                    "block_type",
                    "role",
                    "version_major",
                    "version_minor"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 42
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "Hero Section"
                    },
                    "description": {
                        "description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",
                        "type": "string",
                        "example": "\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0430\u043d\u043d\u0435\u0440"
                    },
                    "content": {
                        "description": "HTML/Liquid \u0448\u0430\u0431\u043b\u043e\u043d",
                        "type": "string",
                        "example": "<section>{{ title }}</section>"
                    },
                    "css": {
                        "description": "CSS \u0441\u0442\u0438\u043b\u0438",
                        "type": "string",
                        "example": "section { padding: 2rem; }"
                    },
                    "js": {
                        "description": "JavaScript",
                        "type": "string",
                        "example": ""
                    },
                    "schema_content": {
                        "description": "JSON-\u0441\u0445\u0435\u043c\u0430 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432",
                        "type": "object",
                        "additionalProperties": true
                    },
                    "block_type": {
                        "description": "\u0422\u0438\u043f \u0431\u043b\u043e\u043a\u0430",
                        "type": "string",
                        "example": "liquid"
                    },
                    "role": {
                        "description": "\u0420\u043e\u043b\u044c \u0431\u043b\u043e\u043a\u0430: content \u2014 \u0431\u043b\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, layout \u2014 \u043b\u044d\u0439\u0430\u0443\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430-\u043c\u0430\u043a\u0435\u0442\u0430",
                        "type": "string",
                        "enum": [
                            "content",
                            "layout"
                        ],
                        "example": "content"
                    },
                    "version_major": {
                        "description": "\u041c\u0430\u0436\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f",
                        "type": "integer",
                        "example": 1
                    },
                    "version_minor": {
                        "description": "\u041c\u0438\u043d\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "PageBlockPublicResponse": {
                "description": "\u0411\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",
                "required": [
                    "id",
                    "page_id",
                    "block_id",
                    "order_index",
                    "placeholder_values",
                    "block_version_major",
                    "block_version_minor",
                    "update_status",
                    "created_at",
                    "block"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",
                        "type": "integer",
                        "example": 10
                    },
                    "page_id": {
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 1
                    },
                    "block_id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 42
                    },
                    "parent_page_block_id": {
                        "description": "ID \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0432 \u0441\u043b\u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u043b\u043e\u0436\u0435\u043d \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a. null \u2014 \u0431\u043b\u043e\u043a \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.",
                        "type": "integer",
                        "example": 85,
                        "nullable": true
                    },
                    "slot_name": {
                        "description": "\u0418\u043c\u044f \u0441\u043b\u043e\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u0431\u043b\u043e\u043a. null \u2014 \u0431\u043b\u043e\u043a \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.",
                        "type": "string",
                        "example": "left",
                        "nullable": true
                    },
                    "order_index": {
                        "description": "\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u043b\u043e\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f: \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043b\u043e\u0442\u0430 \u0434\u043b\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e",
                        "type": "integer",
                        "example": 0
                    },
                    "placeholder_values": {
                        "title": "placeholder_values \u2014 } when empty",
                        "description": "\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432",
                        "type": "object",
                        "example": [],
                        "additionalProperties": true
                    },
                    "rendered_html": {
                        "description": "\u041f\u0440\u0435-\u0440\u0435\u043d\u0434\u0435\u0440\u0435\u043d\u043d\u044b\u0439 HTML",
                        "type": "string",
                        "example": null,
                        "nullable": true
                    },
                    "schema_snapshot": {
                        "description": "\u0421\u043d\u0438\u043c\u043e\u043a \u0441\u0445\u0435\u043c\u044b \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f",
                        "type": "object",
                        "example": null,
                        "nullable": true,
                        "additionalProperties": true
                    },
                    "block_version_major": {
                        "description": "\u041c\u0430\u0436\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 1
                    },
                    "block_version_minor": {
                        "description": "\u041c\u0438\u043d\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u043b\u043e\u043a\u0430",
                        "type": "integer",
                        "example": 0
                    },
                    "update_status": {
                        "description": "\u0421\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f pageBlock \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430: up_to_date | minor_available | major_blocked. minor_available \u2014 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c POST /upgrade. major_blocked \u2014 \u043d\u0443\u0436\u043d\u0430 manual migration (insert \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 + delete \u0441\u0442\u0430\u0440\u043e\u0439).",
                        "type": "string",
                        "enum": [
                            "up_to_date",
                            "minor_available",
                            "major_blocked"
                        ],
                        "example": "minor_available"
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-04-01T12:00:00+00:00"
                    },
                    "block": {
                        "$ref": "#/components/schemas/PageBlockInlinePublicResponse"
                    },
                    "bindings": {
                        "description": "\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 SSR bindings \u0431\u043b\u043e\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043c\u0435\u0440\u0436\u0430 \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u0430\u043c\u0438 \u0441\u043b\u043e\u0442\u043e\u0432. `null` \u2014 \u0443 \u0431\u043b\u043e\u043a\u0430 \u043d\u0435\u0442 `bindingSlots` (\u043d\u0435 SSR).",
                        "type": "object",
                        "default": null,
                        "example": {
                            "products": {
                                "source": "catalog.products",
                                "params": {
                                    "limit": 8
                                }
                            }
                        },
                        "nullable": true,
                        "additionalProperties": {
                            "properties": {
                                "source": {
                                    "type": "string",
                                    "example": "catalog.products"
                                },
                                "params": {
                                    "type": "object",
                                    "example": {
                                        "limit": 8
                                    },
                                    "additionalProperties": true
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "type": "object"
            },
            "PagePublicResponse": {
                "description": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 GET /pages/{id}, POST /pages, PATCH /pages/{id} \u0438 POST /pages/{id}/blocks. \u041f\u043e\u043b\u0435 `blocks`: `null` \u0435\u0441\u043b\u0438 \u0431\u043b\u043e\u043a\u0438 \u043d\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438\u0441\u044c, \u043c\u0430\u0441\u0441\u0438\u0432 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0443\u0441\u0442\u043e\u0439) \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438\u0441\u044c (Show \u0441 `with_blocks=1`, Insert \u2014 \u0432\u0441\u0435\u0433\u0434\u0430).",
                "required": [
                    "id",
                    "name",
                    "kind",
                    "slug",
                    "meta_title",
                    "meta_description",
                    "meta_keywords",
                    "meta_robots",
                    "site_id",
                    "folder_id",
                    "external_id",
                    "external_slug",
                    "published_at",
                    "created_at",
                    "updated_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 1
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "string",
                        "example": "\u0413\u043b\u0430\u0432\u043d\u0430\u044f"
                    },
                    "kind": {
                        "description": "\u0412\u0438\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430: `article`, `layout` \u043b\u0438\u0431\u043e id \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 4CMS (`rubric`, `product`). \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.",
                        "type": "string",
                        "example": "article"
                    },
                    "slug": {
                        "description": "URL-slug \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "string",
                        "example": "home",
                        "nullable": true
                    },
                    "meta_title": {
                        "description": "Meta title",
                        "type": "string",
                        "example": "\u0413\u043b\u0430\u0432\u043d\u0430\u044f | \u041c\u043e\u0439 \u0441\u0430\u0439\u0442",
                        "nullable": true
                    },
                    "meta_description": {
                        "description": "Meta description",
                        "type": "string",
                        "example": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "nullable": true
                    },
                    "meta_keywords": {
                        "description": "Meta keywords",
                        "type": "string",
                        "example": "\u043a\u043b\u044e\u0447, \u0441\u043b\u043e\u0432\u0430",
                        "nullable": true
                    },
                    "meta_robots": {
                        "description": "Meta robots",
                        "type": "string",
                        "example": "index,follow",
                        "nullable": true
                    },
                    "site_id": {
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "type": "integer",
                        "example": 1,
                        "nullable": true
                    },
                    "folder_id": {
                        "description": "ID \u043f\u0430\u043f\u043a\u0438",
                        "type": "integer",
                        "example": null,
                        "nullable": true
                    },
                    "external_id": {
                        "description": "ID \u043c\u0430\u043a\u0435\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 2,
                        "nullable": true
                    },
                    "external_slug": {
                        "description": "Slug \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (4CMS). null \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0431\u0435\u0437 slug.",
                        "type": "string",
                        "example": "about-the-company",
                        "nullable": true
                    },
                    "published_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438",
                        "type": "string",
                        "format": "date-time",
                        "example": null,
                        "nullable": true
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-01-15T10:00:00+00:00"
                    },
                    "updated_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-04-20T14:30:00+00:00"
                    },
                    "blocks": {
                        "description": "\u0411\u043b\u043e\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. `null` \u0435\u0441\u043b\u0438 \u043d\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438\u0441\u044c, \u043c\u0430\u0441\u0441\u0438\u0432 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0443\u0441\u0442\u043e\u0439) \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438\u0441\u044c.",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PageBlockPublicResponse"
                        },
                        "default": null,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "PagePublicListResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PagePublicResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 142
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "PageBlockInput": {
                "title": "\u0411\u043b\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u2014 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442",
                "description": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 `blocks[]` \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438/\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0431\u043b\u043e\u043a\u043e\u0432.\n\n\u041a\u0430\u043a \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c `placeholder_values`:\n1. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a \u0447\u0435\u0440\u0435\u0437 `GET /api/v1/blocks/{block_id}/placeholder-schema` \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u043f\u0443\u0442\u044c: endpoint \u0432\u0435\u0440\u043d\u0451\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 JSON Schema \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0434\u043b\u044f `placeholder_values` \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 example \u0438 \u0441\u043f\u0438\u0441\u043e\u043a binding-\u0441\u043b\u043e\u0442\u043e\u0432.\n2. \u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430: `GET /api/v1/blocks/{block_id}` \u2192 `current_revision.schema_content`. \u0418\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u2014 \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 `schema_content.fields`, \u0430 \u043d\u0435 `fields[].name`. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 `schema_content.fields.title.type === \"text\"` \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 `placeholder_values` \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c `\"title\": \"...\"`.\n\n\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043f\u043e\u043b\u044f \u2192 \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:\n- `text`, `textarea`, `url`, `email`, `image`, `icon`, `color`, `date`, `time`, `datetime` \u2192 \u0441\u0442\u0440\u043e\u043a\u0430\n- `select`, `radio` \u2192 \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0437 `options[].value`\n- `switch` \u2192 boolean\n- `object` \u2192 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e `fields`\n- `array` \u2192 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e `item.fields`\n- markdown-\u0431\u043b\u043e\u043a (`block_type === \"markdown\"`) \u2192 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 `_markdown` \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 Markdown \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 **GFM** (GitHub Flavored Markdown): \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b (`| col | col |\\n| --- | --- |\\n| ... | ... |`), \u0437\u0430\u0447\u0451\u0440\u043a\u043d\u0443\u0442\u044b\u0439 (`~~text~~`), autolinks. \u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 `![alt](url)`. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0441\u0445\u0435\u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\n\n\u041f\u043e\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 `schema_content.fields` (Liquid-\u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u044b \u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430), \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b \u2014 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0438\u0445 \u043d\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442.\n\n`parent_page_block_id` + `slot_name` \u043a\u043b\u0430\u0434\u0443\u0442 \u0431\u043b\u043e\u043a \u0432 \u0441\u043b\u043e\u0442 \u0431\u043b\u043e\u043a\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432 `schema_content` \u0435\u0441\u0442\u044c `slots`). \u041f\u043e\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (`POST /pages/{id}/blocks`): \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u043c\u0435\u043d\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0435\u0449\u0451 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0438 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0441 400. \u0412\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u043e\u0434\u043d\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u2014 \u0431\u043b\u043e\u043a, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u0441\u043b\u043e\u0442\u0435, \u0441\u0432\u043e\u0438\u0445 \u0434\u0435\u0442\u0435\u0439 \u0438\u043c\u0435\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442.\n\n`bindings` \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f SSR/data-driven \u0431\u043b\u043e\u043a\u043e\u0432 (\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0435\u0441\u0442\u044c `bindingSlots`). \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u2014 \u0431\u044d\u043a\u0435\u043d\u0434 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u044b \u0438\u0437 \u0441\u0445\u0435\u043c\u044b.",
                "required": [
                    "block_id"
                ],
                "properties": {
                    "block_id": {
                        "description": "ID \u0431\u043b\u043e\u043a\u0430. \u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e: \u043b\u0438\u0431\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 (`scope=global`), \u043b\u0438\u0431\u043e \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.",
                        "type": "integer",
                        "example": 3
                    },
                    "placeholder_values": {
                        "description": "\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0431\u043b\u043e\u043a\u0430. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 `schema_content` \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 `GET /api/v1/blocks/{block_id}/placeholder-schema` \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e JSON Schema. \u041e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0441\u0435\u0445 `required: true` \u043f\u043e\u043b\u0435\u0439 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0431\u043b\u043e\u043a\u0430 \u0437\u0430\u0434\u0430\u043d `default` (\u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u044f\u0442\u0441\u044f \u0434\u0435\u0444\u043e\u043b\u0442\u044b). \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e required-\u043f\u043e\u043b\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 default \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u043f\u0430\u0434\u0451\u0442 \u0441 400 \u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432 `errors[]`.",
                        "type": "object",
                        "example": {
                            "title": "\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c",
                            "subtitle": "\u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0430\u0439\u0442\u044b",
                            "items": [
                                {
                                    "title": "\u041a\u0430\u0442\u0430\u043b\u043e\u0433",
                                    "url": "/catalog"
                                },
                                {
                                    "title": "\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b",
                                    "url": "/contacts"
                                }
                            ]
                        },
                        "nullable": true,
                        "additionalProperties": true
                    },
                    "parent_page_block_id": {
                        "description": "ID \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0432 \u0441\u043b\u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043b\u0430\u0434\u0451\u043c \u0431\u043b\u043e\u043a. null \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u2014 \u0431\u043b\u043e\u043a \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.",
                        "type": "integer",
                        "example": 85,
                        "nullable": true
                    },
                    "slot_name": {
                        "description": "\u0418\u043c\u044f \u0441\u043b\u043e\u0442\u0430 \u0438\u0437 `schema_content.slots` \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 `parent_page_block_id`.",
                        "type": "string",
                        "example": "left",
                        "nullable": true
                    },
                    "bindings": {
                        "description": "\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f SSR-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f data-driven \u0431\u043b\u043e\u043a\u0430. \u041a\u043b\u044e\u0447 \u2014 \u0438\u043c\u044f \u0441\u043b\u043e\u0442\u0430 \u0438\u0437 `schema_content.bindingSlots`. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 `{ source, params }`. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u2014 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0435\u0444\u043e\u043b\u0442\u044b \u0441\u043b\u043e\u0442\u0430 (`default` \u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 `allowedSources`).",
                        "type": "object",
                        "example": {
                            "products": {
                                "source": "catalog.products",
                                "params": {
                                    "limit": 8,
                                    "sort": "popular"
                                }
                            }
                        },
                        "nullable": true,
                        "additionalProperties": {
                            "required": [
                                "source"
                            ],
                            "properties": {
                                "source": {
                                    "description": "ID \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0445\u043e\u0434\u0438\u0442\u044c \u0432 `allowedSources` \u0441\u043b\u043e\u0442\u0430).",
                                    "type": "string",
                                    "example": "catalog.products"
                                },
                                "params": {
                                    "description": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e source.",
                                    "type": "object",
                                    "example": {
                                        "limit": 8,
                                        "sort": "popular"
                                    },
                                    "additionalProperties": true
                                }
                            },
                            "type": "object"
                        }
                    }
                },
                "type": "object"
            },
            "PagePublicationStatusResponse": {
                "description": "\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u043e\u0432: GET /pages/{id}/publication, POST /pages/{id}/publish \u0438 POST /pages/{id}/publish-update.",
                "required": [
                    "is_published",
                    "external_id",
                    "external_slug",
                    "published_at",
                    "updated_at"
                ],
                "properties": {
                    "is_published": {
                        "description": "\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 (\u0435\u0441\u0442\u044c \u043b\u0438 external_id \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430)",
                        "type": "boolean",
                        "example": true
                    },
                    "external_id": {
                        "description": "ID \u0441\u0442\u0430\u0442\u044c\u0438 \u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (4CMS). null \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.",
                        "type": "integer",
                        "example": 12345,
                        "nullable": true
                    },
                    "external_slug": {
                        "description": "Slug \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (4CMS). null \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0431\u0435\u0437 slug.",
                        "type": "string",
                        "example": "about-the-company",
                        "nullable": true
                    },
                    "published_at": {
                        "description": "\u041c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 (\u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439). null \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-06-08T12:30:00+00:00",
                        "nullable": true
                    },
                    "updated_at": {
                        "description": "\u041c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-06-08T12:30:00+00:00"
                    }
                },
                "type": "object"
            },
            "PageBulkUpgradeResponse": {
                "description": "\u041e\u0442\u0432\u0435\u0442 POST /api/v1/pages/{pageId}/blocks/upgrade-all",
                "required": [
                    "page",
                    "upgraded",
                    "skipped_major",
                    "already_up_to_date"
                ],
                "properties": {
                    "page": {
                        "$ref": "#/components/schemas/PagePublicResponse"
                    },
                    "upgraded": {
                        "description": "\u0411\u043b\u043e\u043a\u0438, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0435 \u0434\u043e minor-\u0440\u0435\u0432\u0438\u0437\u0438\u0438",
                        "type": "array",
                        "items": {
                            "properties": {
                                "page_block_id": {
                                    "type": "integer",
                                    "example": 12
                                },
                                "from": {
                                    "properties": {
                                        "major": {
                                            "type": "integer"
                                        },
                                        "minor": {
                                            "type": "integer"
                                        }
                                    },
                                    "type": "object"
                                },
                                "to": {
                                    "properties": {
                                        "major": {
                                            "type": "integer"
                                        },
                                        "minor": {
                                            "type": "integer"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "skipped_major": {
                        "description": "\u0411\u043b\u043e\u043a\u0438, \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0438\u0437-\u0437\u0430 major-\u0430\u043f\u0434\u0435\u0439\u0442\u0430. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0434\u043b\u044f manual migration \u0447\u0435\u0440\u0435\u0437 /replace \u0438\u043b\u0438 insert+delete.",
                        "type": "array",
                        "items": {
                            "properties": {
                                "page_block_id": {
                                    "type": "integer",
                                    "example": 13
                                },
                                "block_id": {
                                    "type": "integer",
                                    "example": 7
                                },
                                "current_pin": {
                                    "properties": {
                                        "major": {
                                            "type": "integer"
                                        },
                                        "minor": {
                                            "type": "integer"
                                        }
                                    },
                                    "type": "object"
                                },
                                "library_version": {
                                    "properties": {
                                        "major": {
                                            "type": "integer"
                                        },
                                        "minor": {
                                            "type": "integer"
                                        }
                                    },
                                    "type": "object"
                                },
                                "removed_fields": {
                                    "type": "array",
                                    "items": {
                                        "type": "string"
                                    }
                                }
                            },
                            "type": "object"
                        }
                    },
                    "already_up_to_date": {
                        "description": "ID \u0431\u043b\u043e\u043a\u043e\u0432, \u0443\u0436\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439",
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "example": [
                            14,
                            15
                        ]
                    }
                },
                "type": "object"
            },
            "PageWithUpgradeResponse": {
                "description": "\u041e\u0442\u0432\u0435\u0442 POST /api/v1/pages/{pageId}/blocks/{pbId}/upgrade",
                "required": [
                    "page",
                    "from_version",
                    "to_version"
                ],
                "properties": {
                    "page": {
                        "$ref": "#/components/schemas/PagePublicResponse"
                    },
                    "from_version": {
                        "description": "\u0412\u0435\u0440\u0441\u0438\u044f pin \u0434\u043e \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0430",
                        "properties": {
                            "major": {
                                "type": "integer",
                                "example": 1
                            },
                            "minor": {
                                "type": "integer",
                                "example": 2
                            }
                        },
                        "type": "object"
                    },
                    "to_version": {
                        "description": "\u0412\u0435\u0440\u0441\u0438\u044f pin \u043f\u043e\u0441\u043b\u0435 \u0430\u043f\u0433\u0440\u0435\u0439\u0434\u0430 (current_revision \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438)",
                        "properties": {
                            "major": {
                                "type": "integer",
                                "example": 1
                            },
                            "minor": {
                                "type": "integer",
                                "example": 4
                            }
                        },
                        "type": "object"
                    }
                },
                "type": "object"
            },
            "MajorUpgradeBlockedError": {
                "description": "\u0422\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 422 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 upgrade pageBlock \u0441 breaking changes",
                "required": [
                    "error",
                    "message",
                    "current_pin",
                    "library_version",
                    "removed_fields"
                ],
                "properties": {
                    "error": {
                        "description": "\u041a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438",
                        "type": "string",
                        "example": "major_upgrade_blocked"
                    },
                    "message": {
                        "description": "\u0427\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435",
                        "type": "string",
                        "example": "Block has breaking changes (v1.2 \u2192 v2.0). Migrate manually: read new schema, insert new pageBlock at same position, transfer values, delete this pageBlock."
                    },
                    "current_pin": {
                        "properties": {
                            "major": {
                                "type": "integer",
                                "example": 1
                            },
                            "minor": {
                                "type": "integer",
                                "example": 2
                            }
                        },
                        "type": "object"
                    },
                    "library_version": {
                        "properties": {
                            "major": {
                                "type": "integer",
                                "example": 2
                            },
                            "minor": {
                                "type": "integer",
                                "example": 0
                            }
                        },
                        "type": "object"
                    },
                    "removed_fields": {
                        "description": "\u0418\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u0435\u0439 \u0441\u0445\u0435\u043c\u044b, \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0445 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438",
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "example": [
                            "subtitle",
                            "cta"
                        ]
                    }
                },
                "type": "object"
            },
            "PageFolderPublic": {
                "description": "\u041f\u0430\u043f\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 (V1 public). \u041f\u043e\u043b\u0435 children \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 ?as=tree.",
                "required": [
                    "id",
                    "name",
                    "site_id",
                    "parent_id",
                    "pages_count",
                    "subfolders_count",
                    "total_pages_count",
                    "total_subfolders_count",
                    "created_at",
                    "updated_at",
                    "children"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u043f\u0430\u043f\u043a\u0438",
                        "type": "integer",
                        "example": 12
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438",
                        "type": "string",
                        "example": "\u041b\u0435\u043d\u0434\u0438\u043d\u0433\u0438"
                    },
                    "site_id": {
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "type": "integer",
                        "example": 3
                    },
                    "parent_id": {
                        "description": "ID \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 (null \u2014 \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f)",
                        "type": "integer",
                        "example": null,
                        "nullable": true
                    },
                    "pages_count": {
                        "description": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0440\u044f\u043c\u043e \u0432 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 (\u0431\u0435\u0437 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438)",
                        "type": "integer",
                        "example": 5
                    },
                    "subfolders_count": {
                        "description": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u044f\u043c\u044b\u0445 \u043f\u043e\u0434\u043f\u0430\u043f\u043e\u043a (\u0431\u0435\u0437 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438)",
                        "type": "integer",
                        "example": 2
                    },
                    "total_pages_count": {
                        "description": "\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e). null \u0432 list, \u0447\u0438\u0441\u043b\u043e \u0432 show.",
                        "type": "integer",
                        "example": 42,
                        "nullable": true
                    },
                    "total_subfolders_count": {
                        "description": "\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u043f\u0430\u043f\u043e\u043a \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e, \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0441\u0430\u043c\u0443). null \u0432 list, \u0447\u0438\u0441\u043b\u043e \u0432 show.",
                        "type": "integer",
                        "example": 17,
                        "nullable": true
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-06-01T12:00:00+00:00"
                    },
                    "updated_at": {
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-06-05T08:00:00+00:00"
                    },
                    "children": {
                        "description": "\u0412\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438. \u041f\u043e\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 ?as=tree.",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PageFolderPublic"
                        }
                    }
                },
                "type": "object"
            },
            "UpdatePageFolderRequest": {
                "description": "\u0422\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043f\u043a\u0438. \u041f\u043e\u043b\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b: \u00ab\u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e\u00bb \u2014 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c; \u00abnull\u00bb \u0432 parent_id \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c. \u041a\u043b\u0430\u0441\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 OpenAPI-\u0441\u0445\u0435\u043c\u044b \u2014 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 json_decode + UpdatePageFolderInput::fromArray.",
                "properties": {
                    "name": {
                        "description": "\u041d\u043e\u0432\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438",
                        "type": "string",
                        "default": null,
                        "example": "\u041d\u043e\u0432\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
                        "nullable": true
                    },
                    "parent_id": {
                        "description": "ID \u043d\u043e\u0432\u043e\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043f\u0430\u043f\u043a\u0438. null = \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u043b\u044f = \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c.",
                        "type": "integer",
                        "default": null,
                        "example": 5,
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "PageTypePublicResponse": {
                "description": "\u0422\u0438\u043f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0437 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430 4CMS. Id \u0442\u0438\u043f\u0430 \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 `kind` \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430.",
                "required": [
                    "id",
                    "title",
                    "contexts"
                ],
                "properties": {
                    "id": {
                        "description": "Id \u0442\u0438\u043f\u0430 \u2014 \u043e\u043d \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 `kind` \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
                        "type": "string",
                        "example": "rubric"
                    },
                    "title": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430",
                        "type": "string",
                        "example": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430",
                        "nullable": true
                    },
                    "contexts": {
                        "description": "\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430",
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "example": [
                            "rubric",
                            "brand",
                            "search"
                        ]
                    }
                },
                "type": "object"
            },
            "SearchBlocksPublicResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0431\u043b\u043e\u043a\u0430\u043c",
                "required": [
                    "items",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "items": {
                        "description": "\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 (\u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u0438)",
                        "type": "array",
                        "items": {
                            "properties": {
                                "id": {
                                    "type": "integer",
                                    "example": 5
                                },
                                "name": {
                                    "type": "string",
                                    "example": "\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0440\u0443\u0431\u0440\u0438\u043a\u0438"
                                },
                                "description": {
                                    "type": "string",
                                    "example": "\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0434\u043b\u044f \u0440\u0443\u0431\u0440\u0438\u043a\u0438",
                                    "nullable": true
                                },
                                "score": {
                                    "type": "number",
                                    "format": "float",
                                    "example": 0.92
                                }
                            },
                            "type": "object"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432",
                        "type": "integer",
                        "example": 8
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 20
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "SearchPagesPublicResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c",
                "required": [
                    "items",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "items": {
                        "description": "\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u0438)",
                        "type": "array",
                        "items": {
                            "properties": {
                                "id": {
                                    "type": "integer",
                                    "example": 42
                                },
                                "name": {
                                    "type": "string",
                                    "example": "\u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432"
                                },
                                "slug": {
                                    "type": "string",
                                    "example": "computers",
                                    "nullable": true
                                },
                                "external_id": {
                                    "type": "integer",
                                    "example": 12345,
                                    "nullable": true
                                },
                                "score": {
                                    "type": "number",
                                    "format": "float",
                                    "example": 0.34
                                },
                                "snippet": {
                                    "description": "HTML-\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441 <mark>\u2026</mark>",
                                    "type": "string",
                                    "example": "...\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0442\u043e\u0432\u0430\u0440\u0430...",
                                    "nullable": true
                                }
                            },
                            "type": "object"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446",
                        "type": "integer",
                        "example": 17
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 20
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "SiteProviderPublicResponse": {
                "description": "\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0430\u0439\u0442\u0430",
                "properties": {
                    "provider_type": {
                        "description": "Slug \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"fourcms\" \u0438\u043b\u0438 \"ftp\"). null \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d.",
                        "type": "string",
                        "example": "fourcms",
                        "nullable": true
                    }
                },
                "type": "object"
            },
            "SitePublicResponse": {
                "description": "\u0421\u0430\u0439\u0442",
                "required": [
                    "id",
                    "name",
                    "variables",
                    "created_at",
                    "updated_at"
                ],
                "properties": {
                    "id": {
                        "description": "ID \u0441\u0430\u0439\u0442\u0430",
                        "type": "integer",
                        "example": 1
                    },
                    "name": {
                        "description": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u0439\u0442\u0430",
                        "type": "string",
                        "example": "\u041c\u043e\u0439 \u0441\u0430\u0439\u0442"
                    },
                    "variables": {
                        "description": "CSS/\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0430\u0439\u0442\u0430",
                        "type": "object",
                        "example": {
                            "primary_color": "#3B82F6"
                        },
                        "additionalProperties": true
                    },
                    "created_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-01-10T00:00:00+00:00"
                    },
                    "updated_at": {
                        "description": "\u0414\u0430\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f",
                        "type": "string",
                        "format": "date-time",
                        "example": "2026-04-20T12:00:00+00:00"
                    }
                },
                "type": "object"
            },
            "SitePublicListResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0430\u0439\u0442\u043e\u0432",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0430\u0439\u0442\u043e\u0432",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SitePublicResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0430\u0439\u0442\u043e\u0432 (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 2
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "TagPublicListResponse": {
                "description": "\u041f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432 \u0431\u043b\u043e\u043a\u043e\u0432",
                "required": [
                    "data",
                    "total",
                    "limit",
                    "offset"
                ],
                "properties": {
                    "data": {
                        "description": "\u0421\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/TagPublicResponse"
                        }
                    },
                    "total": {
                        "description": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0433\u043e\u0432 (\u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 limit/offset)",
                        "type": "integer",
                        "example": 8
                    },
                    "limit": {
                        "description": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b",
                        "type": "integer",
                        "example": 50
                    },
                    "offset": {
                        "description": "\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430",
                        "type": "integer",
                        "example": 0
                    }
                },
                "type": "object"
            }
        },
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "description": "API-\u043a\u043b\u044e\u0447 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 `pb_xxxx...` (`pb_` + 64 hex). \u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 UI PageCraft.\n\n**\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:** \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a `Authorization: Bearer pb_a1b2c3d4...`\n\n**\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430:** \u0441\u043c. [API-\u043a\u043b\u044e\u0447\u0438](/docs/api/api-keys) \u2014 \u0442\u0430\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 `POST /api/api-keys` \u043f\u043e\u0434 GitHub OAuth.\n\n**\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:** \u043a\u043b\u044e\u0447 stateless, \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430. \u041f\u0440\u0438 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b.\n",
                "bearerFormat": "pb_<64 hex symbols>",
                "scheme": "bearer"
            }
        }
    },
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Blocks"
        },
        {
            "name": "Block Collections"
        },
        {
            "name": "Block Submissions"
        },
        {
            "name": "Data Result Types"
        },
        {
            "name": "Data Sources"
        },
        {
            "name": "Pages"
        },
        {
            "name": "Folders"
        },
        {
            "name": "PageTypes"
        },
        {
            "name": "Search (Public)"
        },
        {
            "name": "Sites"
        },
        {
            "name": "Tags"
        }
    ]
}