[{"data":1,"prerenderedAt":3763},["ShallowReactive",2],{"navigation":3,"-docs-working-with-the-rest-api-call-tail-rest-api-ver3":523,"-docs-working-with-the-rest-api-call-tail-rest-api-ver3-description":3753},[4],{"title":5,"path":6,"stem":7,"children":8,"page":47},"Docs","\u002Fdocs","docs",[9,83,408,415],{"title":10,"path":11,"stem":12,"children":13,"restApiVersion":15,"category":15,"description":15,"badge":15},"Get Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,17,48,68],{"title":10,"path":11,"stem":12,"restApiVersion":15,"category":15,"description":16,"badge":15},null,"Quick start guide for working with the SDK for Bitrix24 REST API",{"title":18,"path":19,"stem":20,"children":21,"page":47},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[22,27,32,37,42],{"title":23,"path":24,"stem":25,"restApiVersion":15,"category":15,"description":26,"badge":15},"Vue","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F1.vue","Guide for installing Bitrix24 JS SDK in Vue applications.",{"title":28,"path":29,"stem":30,"restApiVersion":15,"category":15,"description":31,"badge":15},"Nuxt","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F2.nuxt","Guide for installing Bitrix24 JS SDK in Nuxt applications.",{"title":33,"path":34,"stem":35,"restApiVersion":15,"category":15,"description":36,"badge":15},"React","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Freact","docs\u002F1.getting-started\u002F2.installation\u002F3.react","Guide for installing Bitrix24 JS SDK in React applications.",{"title":38,"path":39,"stem":40,"restApiVersion":15,"category":15,"description":41,"badge":15},"Node.js","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnodejs","docs\u002F1.getting-started\u002F2.installation\u002F4.nodejs","Guide for installing Bitrix24 JS SDK in Node.js applications.",{"title":43,"path":44,"stem":45,"restApiVersion":15,"category":15,"description":46,"badge":15},"UMD","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fumd","docs\u002F1.getting-started\u002F2.installation\u002F5.umd","Guide for using UMD version Bitrix24 JS SDK in you applications.",false,{"title":49,"restApiVersion":15,"category":15,"description":15,"badge":15,"shadow":47,"path":50,"stem":51,"children":52,"page":47},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[53,58,63],{"title":54,"path":55,"stem":56,"restApiVersion":15,"category":15,"description":57,"badge":15},"v0 to v1","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv1","docs\u002F1.getting-started\u002F3.migration\u002F1.v1","A comprehensive guide to migrate your application from Bitrix24 JS SDK v0 to Bitrix24 JS SDK v1.",{"title":59,"path":60,"stem":61,"restApiVersion":15,"category":15,"description":62,"badge":15},"v2 to v3","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv3","docs\u002F1.getting-started\u002F3.migration\u002F2.v3","How to migrate off the deprecated REST surface that is removed in Bitrix24 JS SDK 3.0.0.",{"title":64,"path":65,"stem":66,"restApiVersion":15,"category":15,"description":67,"badge":15},"Inside 2.x","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fwithin-2x","docs\u002F1.getting-started\u002F3.migration\u002F3.within-2x","Changes within the 2.x line that need a change on your side even though no API was removed — what breaks, how to tell, and what to do.",{"title":69,"restApiVersion":15,"category":15,"description":15,"badge":15,"path":70,"stem":71,"children":72,"page":47},"AI Tools","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[73,78],{"title":74,"path":75,"stem":76,"restApiVersion":15,"category":15,"description":77,"badge":15},"Skills","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F1.skills","Task-focused skill files for AI coding agents working with @bitrix24\u002Fb24jssdk.",{"title":79,"path":80,"stem":81,"restApiVersion":15,"category":15,"description":82,"badge":15},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Bitrix24 JS SDK methods, tools, and best practices.",{"title":84,"path":85,"stem":86,"children":87,"restApiVersion":15,"category":15,"description":15,"badge":15},"Working with the REST API","\u002Fdocs\u002Fworking-with-the-rest-api","docs\u002F2.working-with-the-rest-api\u002F0.index",[88,91,98,103,108,112,117,122,126,131,136,141,145,150,155,160,165,170,175,180,185,190,194,199,204,209,214,220,225,230,235,240,245,250,255,260,265,271,276,281,287,292,297,302,307,313,319,324,329,335,340,345,350,355,360,366,373,378,383,388,393,398,403],{"title":89,"path":85,"stem":86,"restApiVersion":15,"category":15,"description":90,"badge":15},"Introduction","Overview of SDK capabilities for working with Bitrix24 REST API",{"title":92,"path":93,"stem":94,"restApiVersion":95,"category":96,"description":97,"badge":15},"Call","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver2","rest-api-ver2","actions","A method for making Bitrix24 REST API version 2 calls.",{"title":92,"path":99,"stem":100,"restApiVersion":101,"category":96,"description":102,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver3","rest-api-ver3","Method for making Bitrix24 REST API version 3 calls.",{"title":104,"path":105,"stem":106,"restApiVersion":95,"category":96,"description":107,"badge":15},"CallList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver2","Method for quickly retrieving all data from list methods of Bitrix24 REST API version 2.",{"title":104,"path":109,"stem":110,"restApiVersion":101,"category":96,"description":111,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver3","Method for quickly retrieving all data from list methods of Bitrix24 REST API version 3.",{"title":113,"path":114,"stem":115,"restApiVersion":101,"category":96,"description":116,"badge":15},"CallTail","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-tail-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.call-tail-rest-api-ver3","Method for retrieving all records of a REST API version 3 tail method through the server's native keyset cursor.",{"title":118,"path":119,"stem":120,"restApiVersion":95,"category":96,"description":121,"badge":15},"FetchList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver2","Returns an AsyncGenerator that allows processing data from list methods of Bitrix24 REST API version 2 as it is received without loading the entire array into memory at once. This is especially useful when working with very large volumes of data.",{"title":118,"path":123,"stem":124,"restApiVersion":101,"category":96,"description":125,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver3","Returns an AsyncGenerator that allows processing data from list methods of Bitrix24 REST API version 3 as it is received without loading the entire array into memory at once. This is especially useful when working with very large volumes of data.",{"title":127,"path":128,"stem":129,"restApiVersion":101,"category":96,"description":130,"badge":15},"FetchTail","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-tail-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.fetch-tail-rest-api-ver3","Async generator that streams all records of a REST API version 3 tail method through the server's native keyset cursor.",{"title":132,"path":133,"stem":134,"restApiVersion":15,"category":132,"description":135,"badge":15},"B24Hook","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhook","docs\u002F2.working-with-the-rest-api\u002F20.hook","Server-side entry point for talking to the Bitrix24 REST API through an inbound webhook (permanent token).",{"title":137,"path":138,"stem":139,"restApiVersion":95,"category":96,"description":140,"badge":15},"Batch","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver2","Method for executing batch requests to Bitrix24 REST API version 2. Allows executing up to 50 commands in a single API call.",{"title":137,"path":142,"stem":143,"restApiVersion":101,"category":96,"description":144,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver3","Method for executing batch requests to Bitrix24 REST API version 3. The SDK sends up to 50 commands in a single API call.",{"title":89,"path":146,"stem":147,"restApiVersion":15,"category":148,"description":149,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe","docs\u002F2.working-with-the-rest-api\u002F30.frame","B24Frame","Designed for managing Bitrix24 applications running inside a placement iframe. Inherits from AbstractB24 and exposes managers for authentication, parent-window messaging, sliders, dialogs, placements, and options.",{"title":151,"path":152,"stem":153,"restApiVersion":15,"category":148,"description":154,"badge":15},"Initialization","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-initialize-b24-frame","docs\u002F2.working-with-the-rest-api\u002F30.frame-initialize-b24-frame","Function is designed to initialize a B24Frame",{"title":156,"path":157,"stem":158,"restApiVersion":15,"category":148,"description":159,"badge":15},"Auth","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-auth","docs\u002F2.working-with-the-rest-api\u002F31.frame-auth","Designed for managing authentication in Bitrix24 applications. It handles authentication data received from the parent window and provides methods for updating and retrieving this data.",{"title":161,"path":162,"stem":163,"restApiVersion":15,"category":148,"description":164,"badge":15},"Dialog","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-dialog","docs\u002F2.working-with-the-rest-api\u002F31.frame-dialog","Wraps the BX24 system dialogs (user picker, access permission picker, CRM entity picker) so they can be opened from inside a Bitrix24 application iframe.",{"title":166,"path":167,"stem":168,"restApiVersion":15,"category":148,"description":169,"badge":15},"Options","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-options","docs\u002F2.working-with-the-rest-api\u002F31.frame-options","Used for managing application and user settings in the Bitrix24 application. It allows initializing data, getting, and setting options through messages to the parent window.",{"title":171,"path":172,"stem":173,"restApiVersion":15,"category":148,"description":174,"badge":15},"Parent","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-parent","docs\u002F2.working-with-the-rest-api\u002F31.frame-parent","Provides methods for managing the parent application window in Bitrix24, including resizing the window, managing scroll, initiating calls, and opening the messenger.",{"title":176,"path":177,"stem":178,"restApiVersion":15,"category":148,"description":179,"badge":15},"Placement","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-placement","docs\u002F2.working-with-the-rest-api\u002F31.frame-placement","Used for managing the placement of widgets in the Bitrix24 application.",{"title":181,"path":182,"stem":183,"restApiVersion":15,"category":148,"description":184,"badge":15},"Slider","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-slider","docs\u002F2.working-with-the-rest-api\u002F31.frame-slider","Provides methods for working with sliders in the Bitrix24 application. It allows opening and closing sliders, as well as managing their content.",{"title":186,"path":187,"stem":188,"restApiVersion":95,"category":96,"description":189,"badge":15},"BatchByChunk","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver2","Method for executing batch requests with automatic chunking for any number of commands. Automatically splits large command sets into batches of 50 and executes them sequentially. Use only arrays of tuples or arrays of objects.",{"title":186,"path":191,"stem":192,"restApiVersion":101,"category":96,"description":193,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver3","Method for executing batch requests to Bitrix24 REST API version 3 with automatic chunking for any number of commands. Automatically splits large command sets into batches of 50 and executes them sequentially. Use only arrays of tuples or arrays of objects.",{"title":195,"path":196,"stem":197,"restApiVersion":101,"category":96,"description":198,"badge":15},"DeferredBatch","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdeferred-batch-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F4.deferred-batch-rest-api-ver3","Deferred (background) batch for Bitrix24 REST API version 3: send thousands of commands in one call, follow the job status, and get the decoded rows — in one call with make(), or step by step.",{"title":200,"path":201,"stem":202,"restApiVersion":15,"category":200,"description":203,"badge":15},"B24OAuth","\u002Fdocs\u002Fworking-with-the-rest-api\u002Foauth","docs\u002F2.working-with-the-rest-api\u002F40.oauth","Server-side entry point for talking to the Bitrix24 REST API with an OAuth 2.0 access token (and automatic refresh).",{"title":205,"path":206,"stem":207,"restApiVersion":15,"category":15,"description":208,"badge":15},"Choosing the method","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fchoosing-the-right-method","docs\u002F2.working-with-the-rest-api\u002F5.choosing-the-right-method","Decision guide for picking between Call, CallList, FetchList, Batch, BatchByChunk and DeferredBatch in REST API v2 and v3.",{"title":210,"path":211,"stem":212,"restApiVersion":15,"category":15,"description":213,"badge":15},"Filtering","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffiltering","docs\u002F2.working-with-the-rest-api\u002F5.filtering","Reference for building filter parameters in Bitrix24 REST API v2 (prefix operators) and v3 (array-of-triples), including date formatting and the order-stripping rule.",{"title":215,"path":216,"stem":217,"restApiVersion":15,"category":218,"description":219,"badge":15},"B24HelperManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper","docs\u002F2.working-with-the-rest-api\u002F50.helper","Helper","Aggregate manager that loads profile, app, payment, license, currency, and options data with one batched REST call, plus wires the Pull client.",{"title":221,"path":222,"stem":223,"restApiVersion":15,"category":218,"description":224,"badge":15},"useB24Helper","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-use-b24-helper","docs\u002F2.working-with-the-rest-api\u002F51.helper-use-b24-helper","Closure-based composable that owns a single B24HelperManager instance and exposes lifecycle helpers (init \u002F destroy \u002F Pull client glue).",{"title":226,"path":227,"stem":228,"restApiVersion":15,"category":218,"description":229,"badge":15},"ProfileManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-profile-manager","docs\u002F2.working-with-the-rest-api\u002F52.helper-profile-manager","Parsed `profile` REST response: id, name, last name, gender, photo, time zone, admin flag.",{"title":231,"path":232,"stem":233,"restApiVersion":15,"category":218,"description":234,"badge":15},"AppManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-app-manager","docs\u002F2.working-with-the-rest-api\u002F53.helper-app-manager","Parsed `app.info` REST response: app id, code, version, status, install flag.",{"title":236,"path":237,"stem":238,"restApiVersion":15,"category":218,"description":239,"badge":15},"PaymentManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-payment-manager","docs\u002F2.working-with-the-rest-api\u002F54.helper-payment-manager","Payment status of a Bitrix24 application — extracted from `app.info`.",{"title":241,"path":242,"stem":243,"restApiVersion":15,"category":218,"description":244,"badge":15},"LicenseManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-license-manager","docs\u002F2.working-with-the-rest-api\u002F55.helper-license-manager","Bitrix24 license info from `app.info` — and an automatic restriction-manager retune for the matching tariff plan.",{"title":246,"path":247,"stem":248,"restApiVersion":15,"category":218,"description":249,"badge":15},"CurrencyManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-currency-manager","docs\u002F2.working-with-the-rest-api\u002F56.helper-currency-manager","Currency catalogue cached in memory — base currency, per-currency formatters, and number-to-string formatter.",{"title":251,"path":252,"stem":253,"restApiVersion":15,"category":218,"description":254,"badge":15},"OptionsManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-options-manager","docs\u002F2.working-with-the-rest-api\u002F57.helper-options-manager","Typed access to `app.option.get` \u002F `user.option.get`, plus a save() that batches `*.option.set` with an optional Pull notification.",{"title":256,"path":257,"stem":258,"restApiVersion":15,"category":15,"description":259,"badge":15},"Errors","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferrors","docs\u002F2.working-with-the-rest-api\u002F6.errors","Reference for SdkError and AjaxError codes raised by the SDK, plus the Bitrix24 REST error codes that surface through them.",{"title":261,"path":262,"stem":263,"restApiVersion":15,"category":261,"description":264,"badge":15},"Pull","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fpull","docs\u002F2.working-with-the-rest-api\u002F60.pull","Real-time message stream from Bitrix24 to your application — WebSocket primary, long-polling fallback. Frame-only.",{"title":266,"path":267,"stem":268,"restApiVersion":15,"category":269,"description":270,"badge":15},"Logger","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger","docs\u002F2.working-with-the-rest-api\u002F66.logger","logger","Logger inspired by PHP Monolog, provides a structured logging system with support for channels, handlers, processors, and formatters. Implementation follows PSR-3 principles and the chain of responsibility pattern.",{"title":272,"path":273,"stem":274,"restApiVersion":15,"category":269,"description":275,"badge":15},"Telegram","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger-telegram","docs\u002F2.working-with-the-rest-api\u002F66.logger-telegram","Sending logs to Telegram",{"title":277,"path":278,"stem":279,"restApiVersion":15,"category":15,"description":280,"badge":15},"Discovering v3 methods","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-v3-methods","docs\u002F2.working-with-the-rest-api\u002F7.discovering-v3-methods","Use rest.documentation.openapi to fetch the portal's own machine-readable list of every available REST API v3 method — the source of truth the SDK relies on instead of a hardcoded allowlist. Especially useful for AI agents and codegen.",{"title":282,"path":283,"stem":284,"restApiVersion":15,"category":285,"description":286,"badge":15},"AjaxResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-ajax-result","docs\u002F2.working-with-the-rest-api\u002F70.core-ajax-result","Core","Specialised Result returned by every REST helper. Provides `isMore() \u002F getNext() \u002F getTotal() \u002F getStatus()` for paged responses, and immutable data.",{"title":288,"path":289,"stem":290,"restApiVersion":15,"category":285,"description":291,"badge":15},"Http","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-http","docs\u002F2.working-with-the-rest-api\u002F70.core-http","Low-level transport interface returned by `b24.getHttpClient(version)`. Direct access to the axios-based clients, restriction params, statistics, and reset.",{"title":293,"path":294,"stem":295,"restApiVersion":15,"category":285,"description":296,"badge":15},"B24LangList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-lang-list","docs\u002F2.working-with-the-rest-api\u002F70.core-lang-list","Enum of Bitrix24 cloud interface languages plus the BCP-47 locale map.",{"title":298,"path":299,"stem":300,"restApiVersion":15,"category":285,"description":301,"badge":15},"RequestIdGenerator","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-request-id-generator","docs\u002F2.working-with-the-rest-api\u002F70.core-request-id-generator","Default `IRequestIdGenerator` implementation. Generates UUID v7 request ids and exposes the header \u002F query parameter names used by the SDK.",{"title":303,"path":304,"stem":305,"restApiVersion":15,"category":285,"description":306,"badge":15},"Result","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-result","docs\u002F2.working-with-the-rest-api\u002F70.core-result","Generic operation result with success flag, data, and an error map. Analogue of \\\\Bitrix\\\\Main\\\\Result from the Bitrix Framework.",{"title":308,"path":309,"stem":310,"restApiVersion":15,"category":311,"description":312,"badge":15},"Limiters","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flimiters","docs\u002F2.working-with-the-rest-api\u002F77.limiters","limiters","The restrictions system provides a comprehensive mechanism for managing request frequency, operation execution time, and adaptive delays.",{"title":314,"path":315,"stem":316,"restApiVersion":15,"category":317,"description":318,"badge":15},"Logging & Redaction","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogging","docs\u002F2.working-with-the-rest-api\u002F78.logging","logging","What the SDK redacts automatically before any request information enters the logger or an AjaxError, what it does not redact, and how to wire a custom logger via setLogger(...) without re-introducing credential leaks.",{"title":320,"path":321,"stem":322,"restApiVersion":15,"category":15,"description":323,"badge":15},"Security","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fsecurity","docs\u002F2.working-with-the-rest-api\u002F79.security","Two hardening patterns for any server that receives Bitrix24 outbound events or OAuth install\u002Funinstall callbacks: reply 200 before you verify, and compare application_token in constant time.",{"title":325,"path":326,"stem":327,"restApiVersion":15,"category":15,"description":328,"badge":15},"Discovering entity fields","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-entity-fields","docs\u002F2.working-with-the-rest-api\u002F8.discovering-entity-fields","Ask the portal which fields an entity has, what type each one is, and whether it can be filtered, sorted or written — instead of guessing them or downloading the whole OpenAPI document. Also states the v3 camelCase field-name rule.",{"title":330,"path":331,"stem":332,"restApiVersion":15,"category":333,"description":334,"badge":15},"Browser","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-browser","docs\u002F2.working-with-the-rest-api\u002F80.tools-browser","tools","Cheap user-agent \u002F platform \u002F capability detector. Useful for runtime branches in front-end code.",{"title":336,"path":337,"stem":338,"restApiVersion":15,"category":333,"description":339,"badge":15},"Environment","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-environment","docs\u002F2.working-with-the-rest-api\u002F80.tools-environment","Runtime environment detection — `getEnvironment()`, `isBrowserLikeRuntime()` and the `Environment` enum for branching between browser, worker and Node.js code paths.",{"title":341,"path":342,"stem":343,"restApiVersion":15,"category":333,"description":344,"badge":15},"Object helpers","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-object-helpers","docs\u002F2.working-with-the-rest-api\u002F80.tools-object-helpers","Tiny, dependency-free object and enum helpers — `pick`, `omit`, `getEnumValue`, and the `isArrayOfArray` type guard.",{"title":346,"path":347,"stem":348,"restApiVersion":15,"category":333,"description":349,"badge":15},"Text","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-text","docs\u002F2.working-with-the-rest-api\u002F80.tools-text","Text and date utilities — UUID v4 \u002F v7, encode \u002F decode HTML entities, type conversions, case helpers, Luxon-backed `toDateTime` \u002F `toB24Format`, number formatting, and query-string builder.",{"title":351,"path":352,"stem":353,"restApiVersion":15,"category":333,"description":354,"badge":15},"Type","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-type","docs\u002F2.working-with-the-rest-api\u002F80.tools-type","Runtime type guards — strings, numbers, plain objects, arrays, DOM nodes, Blobs, FormData, JSON-RPC message shapes.",{"title":356,"path":357,"stem":358,"restApiVersion":15,"category":333,"description":359,"badge":15},"useFormatter","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-use-formatters","docs\u002F2.working-with-the-rest-api\u002F80.tools-use-formatters","Composable that returns shared `FormatterNumbers` and `FormatterIban` instances pre-configured with country specifications.",{"title":361,"path":362,"stem":363,"restApiVersion":15,"category":364,"description":365,"badge":15},"Common","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-common","docs\u002F2.working-with-the-rest-api\u002F90.types-common","Types","Foundational building blocks used across the SDK — scalar string aliases, field-metadata shapes (Fields, MultiField, UserFieldType), and the DataType enum.",{"title":367,"path":368,"stem":369,"children":370,"restApiVersion":15,"category":364,"description":372,"badge":15},"Types overview","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-index","docs\u002F2.working-with-the-rest-api\u002F90.types-index",[371],{"title":367,"path":368,"stem":369,"restApiVersion":15,"category":364,"description":372,"badge":15},"Navigable map of every types\u002F* module in the SDK — which have a dedicated page, which are surfaced through another page, and which are follow-ups.",{"title":374,"path":375,"stem":376,"restApiVersion":15,"category":364,"description":377,"badge":15},"IResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-iresult","docs\u002F2.working-with-the-rest-api\u002F90.types-iresult","Generic operation-result interface. Implemented by `Result\u003CT>` and (transitively) by `AjaxResult\u003CT>`.",{"title":379,"path":380,"stem":381,"restApiVersion":15,"category":364,"description":382,"badge":15},"Payloads","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-payloads","docs\u002F2.working-with-the-rest-api\u002F90.types-payloads","The REST response envelope — PayloadTime, GetPayload, ListPayload, BatchPayload, SuccessPayload, and the Payload union, with a note on the v2 vs v3 envelope status.",{"title":384,"path":385,"stem":386,"restApiVersion":15,"category":364,"description":387,"badge":15},"TypeB24","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-type-b24","docs\u002F2.working-with-the-rest-api\u002F90.types-type-b24","Public contract implemented by every entry-point class (B24Frame, B24Hook, B24OAuth). Single source of truth for the SDK surface.",{"title":389,"path":390,"stem":391,"restApiVersion":15,"category":285,"description":392,"badge":15},"Telemetry","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftelemetry","docs\u002F2.working-with-the-rest-api\u002F95.telemetry","Request id, SDK version, and SDK type query parameters added to every Bitrix24 REST call.",{"title":394,"path":395,"stem":396,"restApiVersion":15,"category":285,"description":397,"badge":15},"Error Codes","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferror-codes","docs\u002F2.working-with-the-rest-api\u002F96.error-codes","Codes with a pinned classification — \"hard\" (thrown) and \"soft\" (returned as AjaxError inside AjaxResult) — and the category rule that covers everything else on restApi:v3.",{"title":399,"path":400,"stem":401,"restApiVersion":15,"category":333,"description":402,"badge":15},"HealthCheck","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-health-check","docs\u002F2.working-with-the-rest-api\u002Ftools-health-check","Method for checking the availability of Bitrix24 REST API. Performs a simple request to the REST API to verify service health.",{"title":404,"path":405,"stem":406,"restApiVersion":15,"category":333,"description":407,"badge":15},"Ping","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-ping","docs\u002F2.working-with-the-rest-api\u002Ftools-ping","Method for measuring Bitrix24 REST API response speed. Performs a test request and returns response time in milliseconds.",{"title":409,"path":410,"stem":411,"children":412,"restApiVersion":15,"category":15,"description":15,"badge":15},"API Reference","\u002Fdocs\u002Fapi-reference","docs\u002F3.api-reference\u002F1.index",[413],{"title":409,"path":410,"stem":411,"restApiVersion":15,"category":15,"description":414,"badge":15},"Index of the public @bitrix24\u002Fb24jssdk surface, grouped by domain — every value export, what it is, and where its guide and source live.",{"title":416,"path":417,"stem":418,"children":419,"restApiVersion":15,"category":15,"description":15,"badge":15},"Examples","\u002Fdocs\u002Fexamples","docs\u002F99.examples\u002F0.index",[420,422,428,433,438,443,448,453,458,463,468,473,478,483,488,493,498,503,508,513,518],{"title":89,"path":417,"stem":418,"restApiVersion":15,"category":15,"description":421,"badge":15},"Recipes that pair the SDK with realistic scenarios — CRM analytics, mass messaging, AI assistants, OAuth installs, and more. Each recipe is a single, copy-paste-friendly file.",{"title":423,"path":424,"stem":425,"restApiVersion":15,"category":426,"description":427,"badge":15},"CRM analytics","\u002Fdocs\u002Fexamples\u002Fcrm-analytics","docs\u002F99.examples\u002F1.crm-analytics","examples","Stream all deals via actions.v2.fetchList.make, group by stage, print a funnel report (counts, conversion %, avg ticket, win rate).",{"title":429,"path":430,"stem":431,"restApiVersion":15,"category":426,"description":432,"badge":15},"Deals → CSV","\u002Fdocs\u002Fexamples\u002Fdashboard-deals-csv","docs\u002F99.examples\u002F1.dashboard-deals-csv","Stream every CRM deal that matches a date filter into a CSV file using a webhook and FetchListV2.",{"title":434,"path":435,"stem":436,"restApiVersion":15,"category":15,"description":437,"badge":15},"Entity List","\u002Fdocs\u002Fexamples\u002Fentity-list","docs\u002F99.examples\u002F10.entity-list","Render a paged Bitrix24 entity list with B24UI components and the SDK callList action.",{"title":439,"path":440,"stem":441,"restApiVersion":15,"category":426,"description":442,"badge":15},"Error handling","\u002Fdocs\u002Fexamples\u002Ferror-handling","docs\u002F99.examples\u002F10.error-handling","Demonstrates the four error layers (SdkError \u002F AjaxError \u002F network \u002F soft) and the hardErrorCodes \u002F softErrorCodes \u002F retryOnNetworkError knobs on the restriction manager.",{"title":444,"path":445,"stem":446,"restApiVersion":15,"category":426,"description":447,"badge":15},"Event registration","\u002Fdocs\u002Fexamples\u002Fevent-registration","docs\u002F99.examples\u002F11.event-registration","CLI tool — list, bind, and unbind Bitrix24 outbound webhook events via event.get \u002F event.bind \u002F event.unbind. Pairs with the webhook handler recipe.",{"title":449,"path":450,"stem":451,"restApiVersion":15,"category":426,"description":452,"badge":15},"OAuth install","\u002Fdocs\u002Fexamples\u002Foauth-install","docs\u002F99.examples\u002F12.oauth-install","Express server that handles ONAPPINSTALL \u002F ONAPPUPDATE \u002F ONAPPUNINSTALL events for a Bitrix24 marketplace app, persists tokens per portal, and builds a B24OAuth client on demand with a refresh callback wired to storage.",{"title":454,"path":455,"stem":456,"restApiVersion":15,"category":426,"description":457,"badge":15},"Frame app skeleton","\u002Fdocs\u002Fexamples\u002Fframe-app-skeleton","docs\u002F99.examples\u002F2.frame-app-skeleton","Minimum viable Bitrix24 iframe app: init handshake, set title, persist app state, open a slider, close cleanly.",{"title":459,"path":460,"stem":461,"restApiVersion":15,"category":426,"description":462,"badge":15},"Mass messaging","\u002Fdocs\u002Fexamples\u002Fmass-messaging","docs\u002F99.examples\u002F2.mass-messaging","Filter contacts in CRM, personalise a template, send IM notifications to assigned managers.",{"title":464,"path":465,"stem":466,"restApiVersion":15,"category":15,"description":467,"badge":15},"Installation Wizard","\u002Fdocs\u002Fexamples\u002Fapp-installation-wizard","docs\u002F99.examples\u002F20.app-installation-wizard","Multi-step install flow that creates user fields, registers placements, celebrates with confetti, and finalises the installation last — because the portal reloads the page in response.",{"title":469,"path":470,"stem":471,"restApiVersion":15,"category":426,"description":472,"badge":15},"Task automation","\u002Fdocs\u002Fexamples\u002Ftask-automation","docs\u002F99.examples\u002F3.task-automation","Poll deal stages every 60 s. When a watched transition fires, create a task with description, deadline and priority.",{"title":474,"path":475,"stem":476,"restApiVersion":15,"category":426,"description":477,"badge":15},"Webhook CLI","\u002Fdocs\u002Fexamples\u002Fwebhook-cli-node","docs\u002F99.examples\u002F3.webhook-cli-node","A 30-line Node script that authenticates against a Bitrix24 portal via inbound webhook and prints the calling user — useful as the first thing you run after creating a webhook.",{"title":479,"path":480,"stem":481,"restApiVersion":15,"category":15,"description":482,"badge":15},"Node + Hook Export","\u002Fdocs\u002Fexamples\u002Fnode-hook-company-export","docs\u002F99.examples\u002F30.node-hook-company-export","Export Bitrix24 companies into a CSV file from a pure Node.js script using B24Hook.",{"title":484,"path":485,"stem":486,"restApiVersion":15,"category":426,"description":487,"badge":15},"Bulk update","\u002Fdocs\u002Fexamples\u002Fbulk-update-deals","docs\u002F99.examples\u002F4.bulk-update-deals","Migrate thousands of CRM deals to a new stage using BatchByChunkV2 — automatic chunking, partial-error handling, and a single progress line.",{"title":489,"path":490,"stem":491,"restApiVersion":15,"category":426,"description":492,"badge":15},"ERP sync","\u002Fdocs\u002Fexamples\u002Ferp-sync","docs\u002F99.examples\u002F4.erp-sync","Two-way contact sync between Bitrix24 and an external ERP. Match by INN (primary) or email (fallback). Cron every hour.",{"title":494,"path":495,"stem":496,"restApiVersion":15,"category":426,"description":497,"badge":15},"Disk files","\u002Fdocs\u002Fexamples\u002Fdisk-files","docs\u002F99.examples\u002F5.disk-files","List storages and folder children, create subfolders, inspect files. File upload (multipart) is intentionally out of scope.",{"title":499,"path":500,"stem":501,"restApiVersion":15,"category":426,"description":502,"badge":15},"Pull subscribe","\u002Fdocs\u002Fexamples\u002Fpull-subscribe-frame","docs\u002F99.examples\u002F5.pull-subscribe-frame","Open a live channel from a Bitrix24 frame app and react to push events using useB24Helper + the Pull client.",{"title":504,"path":505,"stem":506,"restApiVersion":15,"category":426,"description":507,"badge":15},"Telegram bot","\u002Fdocs\u002Fexamples\u002Ftelegram-bot","docs\u002F99.examples\u002F6.telegram-bot","Poll new CRM deals every two minutes; notify a Telegram chat with an HTML-formatted card.",{"title":509,"path":510,"stem":511,"restApiVersion":15,"category":426,"description":512,"badge":15},"Webhook handler","\u002Fdocs\u002Fexamples\u002Fwebhook-handler","docs\u002F99.examples\u002F7.webhook-handler","Express server that receives Bitrix24 outbound events, fetches details via REST, dispatches by event name. Always returns 200.",{"title":514,"path":515,"stem":516,"restApiVersion":15,"category":426,"description":517,"badge":15},"AI assistant","\u002Fdocs\u002Fexamples\u002Fai-assistant","docs\u002F99.examples\u002F8.ai-assistant","Load a deal and its activities, ask GPT-4o for the next-best action, create a task bound to the deal with priority and deadline.",{"title":519,"path":520,"stem":521,"restApiVersion":15,"category":426,"description":522,"badge":15},"Web search + LLM","\u002Fdocs\u002Fexamples\u002Fweb-search-llm","docs\u002F99.examples\u002F9.web-search-llm","Two-step RAG: ask any web-search provider, run the result through your LLM with [N] citations, post the answer as a CRM timeline comment on a deal.",{"id":524,"title":525,"audited":526,"badge":15,"body":527,"category":96,"cookbookOrder":15,"description":116,"extension":3725,"featured":47,"links":3726,"meta":3749,"navigation":3750,"path":114,"restApiVersion":101,"scopes":15,"seo":3751,"stack":15,"stem":115,"__hash__":3752},"docs\u002Fdocs\u002F2.working-with-the-rest-api\u002F2.call-tail-rest-api-ver3.md","CallTailV3.make","2026-09-16",{"type":528,"value":529,"toc":3697},"minimark",[530,535,569,829,970,975,981,1158,1179,1183,1210,1214,1272,1276,1745,1749,1788,1858,1862,1865,1868,1897,1923,1932,1938,1943,2009,2012,2020,2038,2044,2059,2067,2077,2175,2182,2296,2299,2450,2462,2691,2700,2707,2710,2724,2727,2809,2818,2820,2824,3057,3061,3064,3292,3296,3650,3663,3667,3693],[531,532,534],"h2",{"id":533},"overview","Overview",[536,537,538,559,560,563,564,568],"p",{},[539,540,544,549,553,556],"code",{"className":541,"language":542,"style":543},"language-ts-type shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ts-type","",[545,546,548],"span",{"class":547},"sBMFI","CallTailV3",[545,550,552],{"class":551},"sMK4o",".",[545,554,555],{"class":547},"make",[545,557,558],{"class":551},"()"," walks a ",[539,561,562],{},"restApi:v3"," ",[565,566,567],"strong",{},"tail"," method — a method that pages by the server's own keyset cursor — and returns every record as one array.",[570,571,572,585,592,810,818],"caution",{},[536,573,574,577,578,581,582,552],{},[565,575,576],{},"Check that your method publishes a tail endpoint before you reach for this."," It is a separate method from its list counterpart, and few modules have one — sampling ten plausible candidates on a cloud portal in September 2026, only ",[539,579,580],{},"main.eventlog.tail"," answered; the rest returned ",[539,583,584],{},"METHODNOTFOUNDEXCEPTION",[536,586,587,588,591],{},"Ask the portal rather than trusting that sample. ",[539,589,590],{},"rest.documentation.openapi"," returns every v3 method it publishes, keyed by path:",[593,594,598],"pre",{"className":595,"code":596,"language":597,"meta":543,"style":543},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const doc = await $b24.actions.v2.call.make\u003C{ paths: Record\u003Cstring, unknown> }>({\n  method: 'rest.documentation.openapi',\n  params: {}\n})\n\nconst tails = Object.keys(doc.getData()?.result?.paths ?? {})\n  .filter(path => path.endsWith('.tail'))\n","ts",[539,599,600,678,698,709,718,725,772],{"__ignoreMap":543},[545,601,604,608,612,615,619,622,624,626,628,631,633,636,638,641,644,648,651,654,657,660,663,666,669,672,675],{"class":602,"line":603},"line",1,[545,605,607],{"class":606},"spNyl","const",[545,609,611],{"class":610},"sTEyZ"," doc ",[545,613,614],{"class":551},"=",[545,616,618],{"class":617},"s7zQu"," await",[545,620,621],{"class":610}," $b24",[545,623,552],{"class":551},[545,625,96],{"class":610},[545,627,552],{"class":551},[545,629,630],{"class":610},"v2",[545,632,552],{"class":551},[545,634,635],{"class":610},"call",[545,637,552],{"class":551},[545,639,555],{"class":640},"s2Zo4",[545,642,643],{"class":551},"\u003C{",[545,645,647],{"class":646},"swJcz"," paths",[545,649,650],{"class":551},":",[545,652,653],{"class":547}," Record",[545,655,656],{"class":551},"\u003C",[545,658,659],{"class":547},"string",[545,661,662],{"class":551},",",[545,664,665],{"class":547}," unknown",[545,667,668],{"class":551},">",[545,670,671],{"class":551}," }>",[545,673,674],{"class":610},"(",[545,676,677],{"class":551},"{\n",[545,679,681,684,686,689,692,695],{"class":602,"line":680},2,[545,682,683],{"class":646},"  method",[545,685,650],{"class":551},[545,687,688],{"class":551}," '",[545,690,590],{"class":691},"sfazB",[545,693,694],{"class":551},"'",[545,696,697],{"class":551},",\n",[545,699,701,704,706],{"class":602,"line":700},3,[545,702,703],{"class":646},"  params",[545,705,650],{"class":551},[545,707,708],{"class":551}," {}\n",[545,710,712,715],{"class":602,"line":711},4,[545,713,714],{"class":551},"}",[545,716,717],{"class":610},")\n",[545,719,721],{"class":602,"line":720},5,[545,722,724],{"emptyLinePlaceholder":723},true,"\n",[545,726,728,730,733,735,738,740,743,746,748,751,753,756,759,761,764,767,770],{"class":602,"line":727},6,[545,729,607],{"class":606},[545,731,732],{"class":610}," tails ",[545,734,614],{"class":551},[545,736,737],{"class":610}," Object",[545,739,552],{"class":551},[545,741,742],{"class":640},"keys",[545,744,745],{"class":610},"(doc",[545,747,552],{"class":551},[545,749,750],{"class":640},"getData",[545,752,558],{"class":610},[545,754,755],{"class":551},"?.",[545,757,758],{"class":610},"result",[545,760,755],{"class":551},[545,762,763],{"class":610},"paths ",[545,765,766],{"class":551},"??",[545,768,769],{"class":551}," {}",[545,771,717],{"class":610},[545,773,775,778,781,783,787,790,793,795,798,800,802,805,807],{"class":602,"line":774},7,[545,776,777],{"class":551},"  .",[545,779,780],{"class":640},"filter",[545,782,674],{"class":610},[545,784,786],{"class":785},"sHdIc","path",[545,788,789],{"class":606}," =>",[545,791,792],{"class":610}," path",[545,794,552],{"class":551},[545,796,797],{"class":640},"endsWith",[545,799,674],{"class":610},[545,801,694],{"class":551},[545,803,804],{"class":691},".tail",[545,806,694],{"class":551},[545,808,809],{"class":610},"))\n",[536,811,812,813,817],{},"See ",[814,815,277],"a",{"href":816},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-v3-methods\u002F"," for what else that document carries.",[536,819,820,821,828],{},"For everything else use ",[814,822,824],{"href":823},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver3\u002F",[539,825,826],{"className":541,"language":542,"style":543},[545,827,104],{"class":547},", which reaches the same result by emulating a cursor on an ordinary list method.",[593,830,832],{"className":595,"code":831,"language":597,"meta":543,"style":543},"\u002F\u002F Basic usage\nconst response = await $b24.actions.v3.callTail.make({\n  method: 'main.eventlog.tail',\n  params: {\n    select: ['id', 'auditTypeId']\n  },\n  cursorField: 'id',\n  customKeyForResult: 'items'\n})\n",[539,833,834,840,875,889,898,927,932,947,963],{"__ignoreMap":543},[545,835,836],{"class":602,"line":603},[545,837,839],{"class":838},"sHwdD","\u002F\u002F Basic usage\n",[545,841,842,844,847,849,851,853,855,857,859,862,864,867,869,871,873],{"class":602,"line":680},[545,843,607],{"class":606},[545,845,846],{"class":610}," response ",[545,848,614],{"class":551},[545,850,618],{"class":617},[545,852,621],{"class":610},[545,854,552],{"class":551},[545,856,96],{"class":610},[545,858,552],{"class":551},[545,860,861],{"class":610},"v3",[545,863,552],{"class":551},[545,865,866],{"class":610},"callTail",[545,868,552],{"class":551},[545,870,555],{"class":640},[545,872,674],{"class":610},[545,874,677],{"class":551},[545,876,877,879,881,883,885,887],{"class":602,"line":700},[545,878,683],{"class":646},[545,880,650],{"class":551},[545,882,688],{"class":551},[545,884,580],{"class":691},[545,886,694],{"class":551},[545,888,697],{"class":551},[545,890,891,893,895],{"class":602,"line":711},[545,892,703],{"class":646},[545,894,650],{"class":551},[545,896,897],{"class":551}," {\n",[545,899,900,903,905,908,910,913,915,917,919,922,924],{"class":602,"line":720},[545,901,902],{"class":646},"    select",[545,904,650],{"class":551},[545,906,907],{"class":610}," [",[545,909,694],{"class":551},[545,911,912],{"class":691},"id",[545,914,694],{"class":551},[545,916,662],{"class":551},[545,918,688],{"class":551},[545,920,921],{"class":691},"auditTypeId",[545,923,694],{"class":551},[545,925,926],{"class":610},"]\n",[545,928,929],{"class":602,"line":727},[545,930,931],{"class":551},"  },\n",[545,933,934,937,939,941,943,945],{"class":602,"line":774},[545,935,936],{"class":646},"  cursorField",[545,938,650],{"class":551},[545,940,688],{"class":551},[545,942,912],{"class":691},[545,944,694],{"class":551},[545,946,697],{"class":551},[545,948,950,953,955,957,960],{"class":602,"line":949},8,[545,951,952],{"class":646},"  customKeyForResult",[545,954,650],{"class":551},[545,956,688],{"class":551},[545,958,959],{"class":691},"items",[545,961,962],{"class":551},"'\n",[545,964,966,968],{"class":602,"line":965},9,[545,967,714],{"class":551},[545,969,717],{"class":610},[971,972,974],"h3",{"id":973},"how-it-differs-from-calllist","How it differs from CallList",[536,976,977,978,980],{},"The two walkers reach the same place by different roads, and the difference decides what ",[539,979,780],{}," may contain.",[982,983,984,1009],"table",{},[985,986,987],"thead",{},[988,989,990,993,1002],"tr",{},[991,992],"th",{},[991,994,995,998,999],{},[539,996,997],{},"callList"," \u002F ",[539,1000,1001],{},"fetchList",[991,1003,1004,998,1006],{},[539,1005,866],{},[539,1007,1008],{},"fetchTail",[1010,1011,1012,1092,1128,1145],"tbody",{},[988,1013,1014,1018,1051],{},[1015,1016,1017],"td",{},"Pagination",[1015,1019,1020,1023,1024,1048,1049],{},[565,1021,1022],{},"Emulated"," — appends ",[539,1025,1026,1029,1032,1034,1036,1038,1040,1042,1045],{"className":541,"language":542,"style":543},[545,1027,1028],{"class":610},"[",[545,1030,1031],{"class":547},"cursorIdKey",[545,1033,662],{"class":551},[545,1035,688],{"class":551},[545,1037,668],{"class":691},[545,1039,694],{"class":551},[545,1041,662],{"class":551},[545,1043,1044],{"class":547}," cursor",[545,1046,1047],{"class":610},"]"," to your ",[539,1050,780],{},[1015,1052,1053,1056,1057,1088,1089,1091],{},[565,1054,1055],{},"Native"," — sends ",[539,1058,1059,1062,1064,1067,1070,1072,1075,1077,1080,1082,1085],{"className":541,"language":542,"style":543},[545,1060,1061],{"class":547},"cursor",[545,1063,650],{"class":551},[545,1065,1066],{"class":551}," {",[545,1068,1069],{"class":646}," field",[545,1071,662],{"class":551},[545,1073,1074],{"class":646}," value",[545,1076,662],{"class":551},[545,1078,1079],{"class":646}," order",[545,1081,662],{"class":551},[545,1083,1084],{"class":646}," limit",[545,1086,1087],{"class":551}," }",", ",[539,1090,780],{}," forwarded untouched",[988,1093,1094,1099,1102],{},[1015,1095,1096],{},[539,1097,1098],{},"order",[1015,1100,1101],{},"Reserved by the walker",[1015,1103,1104,1105],{},"Yours, through ",[539,1106,1107,1109,1111,1113,1116,1118,1121,1123,1126],{"className":541,"language":542,"style":543},[545,1108,1098],{"class":547},[545,1110,650],{"class":551},[545,1112,688],{"class":551},[545,1114,1115],{"class":691},"ASC",[545,1117,694],{"class":551},[545,1119,1120],{"class":551}," |",[545,1122,688],{"class":551},[545,1124,1125],{"class":691},"DESC",[545,1127,694],{"class":551},[988,1129,1130,1135,1138],{},[1015,1131,1132,1134],{},[539,1133,780],{}," shape",[1015,1136,1137],{},"The array form only, because the walker has to extend it",[1015,1139,1140,1141,1144],{},"The array form ",[565,1142,1143],{},"or"," a bare logic group",[988,1146,1147,1150,1153],{},[1015,1148,1149],{},"Works on",[1015,1151,1152],{},"Any list method",[1015,1154,1155,1156],{},"Only a method that implements ",[539,1157,567],{},[536,1159,1160,1161,1178],{},"Because the list walkers have to append a condition to your filter, they can only accept the array form. The tail walkers add nothing, so a bare ",[539,1162,1163,1166,1168,1170,1172,1175],{"className":541,"language":542,"style":543},[545,1164,1165],{"class":547},"FilterV3",[545,1167,552],{"class":551},[545,1169,1143],{"class":547},[545,1171,674],{"class":551},[545,1173,1174],{"class":610},"...",[545,1176,1177],{"class":551},")"," group is a legal whole filter here.",[971,1180,1182],{"id":1181},"when-to-use-calltailv3make","When to Use CallTailV3.make()",[1184,1185,1186,1196],"ol",{},[1187,1188,1189,1195],"li",{},[565,1190,1191,1192,1194],{},"The method publishes a ",[539,1193,567],{}," endpoint"," and you want the server's own cursor rather than an emulated one.",[1187,1197,1198,1201,1202,1209],{},[565,1199,1200],{},"Small to medium data volumes",", held in memory at once. For a large export use ",[814,1203,1205],{"href":1204},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-tail-rest-api-ver3\u002F",[539,1206,1207],{"className":541,"language":542,"style":543},[545,1208,127],{"class":547},", which yields page by page.",[531,1211,1213],{"id":1212},"method-signature","Method Signature",[593,1215,1217],{"className":541,"code":1216,"language":542,"meta":543,"style":543},"make\u003CT = unknown>(\n  options: ActionCallTailV3\n): Promise\u003CResult\u003CT[]>>\n",[539,1218,1219,1239,1249],{"__ignoreMap":543},[545,1220,1221,1223,1225,1228,1231,1234,1236],{"class":602,"line":603},[545,1222,555],{"class":547},[545,1224,656],{"class":551},[545,1226,1227],{"class":547},"T",[545,1229,1230],{"class":610}," = ",[545,1232,1233],{"class":547},"unknown",[545,1235,668],{"class":551},[545,1237,1238],{"class":610},"(\n",[545,1240,1241,1244,1246],{"class":602,"line":680},[545,1242,1243],{"class":785},"  options",[545,1245,650],{"class":551},[545,1247,1248],{"class":547}," ActionCallTailV3\n",[545,1250,1251,1253,1255,1258,1260,1262,1264,1266,1269],{"class":602,"line":700},[545,1252,1177],{"class":610},[545,1254,650],{"class":551},[545,1256,1257],{"class":547}," Promise",[545,1259,656],{"class":551},[545,1261,303],{"class":547},[545,1263,656],{"class":551},[545,1265,1227],{"class":547},[545,1267,1268],{"class":610},"[]",[545,1270,1271],{"class":551},">>\n",[971,1273,1275],{"id":1274},"parameters","Parameters",[982,1277,1278,1293],{},[985,1279,1280],{},[988,1281,1282,1285,1287,1290],{},[991,1283,1284],{},"Parameter",[991,1286,351],{},[991,1288,1289],{},"Required",[991,1291,1292],{},"Description",[1010,1294,1295,1330,1430,1473,1516,1559,1582,1606,1634,1669,1694],{},[988,1296,1297,1304,1310,1313],{},[1015,1298,1299],{},[565,1300,1301],{},[539,1302,1303],{},"method",[1015,1305,1306],{},[539,1307,1308],{"className":541,"language":542,"style":543},[545,1309,659],{"class":547},[1015,1311,1312],{},"Yes",[1015,1314,1315,1316,1318,1319,1321,1322,1325,1326,552],{},"A ",[539,1317,562],{}," tail method, e.g. ",[539,1320,580],{},". Pointing this at a ",[539,1323,1324],{},".list"," method does not work — see ",[814,1327,1329],{"href":1328},"#pointing-it-at-a-list-method","Pointing it at a list method",[988,1331,1332,1339,1407,1410],{},[1015,1333,1334],{},[565,1335,1336],{},[539,1337,1338],{},"params",[1015,1340,1341],{},[539,1342,1343,1346,1348,1351,1353,1355,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1389,1391,1394,1397,1400,1402,1405],{"className":541,"language":542,"style":543},[545,1344,1345],{"class":547},"Omit",[545,1347,656],{"class":551},[545,1349,1350],{"class":547},"TypeCallParamsV3",[545,1352,662],{"class":551},[545,1354,688],{"class":551},[545,1356,1357],{"class":691},"pagination",[545,1359,694],{"class":551},[545,1361,1120],{"class":551},[545,1363,688],{"class":551},[545,1365,1098],{"class":691},[545,1367,694],{"class":551},[545,1369,1120],{"class":551},[545,1371,688],{"class":551},[545,1373,1061],{"class":691},[545,1375,694],{"class":551},[545,1377,1120],{"class":551},[545,1379,688],{"class":551},[545,1381,780],{"class":691},[545,1383,694],{"class":551},[545,1385,668],{"class":551},[545,1387,1388],{"class":551}," &",[545,1390,1066],{"class":551},[545,1392,1393],{"class":646}," filter",[545,1395,1396],{"class":551},"?:",[545,1398,1399],{"class":547}," TypeFilterV3",[545,1401,1120],{"class":551},[545,1403,1404],{"class":547}," FilterV3Group",[545,1406,1087],{"class":551},[1015,1408,1409],{},"No",[1015,1411,1412,1413,1088,1415,1417,1418,1420,1421,1423,1424,1426,1427,1429],{},"Request parameters. ",[539,1414,1357],{},[539,1416,1098],{}," and ",[539,1419,1061],{}," are reserved — the walker drives the cursor and takes the direction from ",[539,1422,1098],{}," below. ",[539,1425,780],{}," accepts the ",[539,1428,562],{}," array form or a bare logic group.",[988,1431,1432,1439,1445,1447],{},[1015,1433,1434],{},[565,1435,1436],{},[539,1437,1438],{},"cursorField",[1015,1440,1441],{},[539,1442,1443],{"className":541,"language":542,"style":543},[545,1444,659],{"class":547},[1015,1446,1409],{},[1015,1448,1449,1450,1453,1454,1457,1458,1462,1463,1466,1467,1469,1470,1472],{},"The field the server pages by. Default ",[539,1451,1452],{},"'id'",". It must be ",[565,1455,1456],{},"unique, totally ordered and scalar"," — see ",[814,1459,1461],{"href":1460},"#choosing-a-cursor-field","Choosing a cursor field",". It must also be readable in the response: an explicit ",[539,1464,1465],{},"select"," gets it appended automatically, and omitting ",[539,1468,1465],{}," with a non-default ",[539,1471,1438],{}," earns a warning.",[988,1474,1475,1481,1499,1501],{},[1015,1476,1477],{},[565,1478,1479],{},[539,1480,1098],{},[1015,1482,1483],{},[539,1484,1485,1487,1489,1491,1493,1495,1497],{"className":541,"language":542,"style":543},[545,1486,694],{"class":551},[545,1488,1115],{"class":691},[545,1490,694],{"class":551},[545,1492,1120],{"class":551},[545,1494,688],{"class":551},[545,1496,1125],{"class":691},[545,1498,694],{"class":551},[1015,1500,1409],{},[1015,1502,1503,1504,1507,1508,1511,1512,1515],{},"Direction of the walk. Default ",[539,1505,1506],{},"'ASC'","; lowercase is accepted too. ",[539,1509,1510],{},"'DESC'"," requires ",[539,1513,1514],{},"initialValue"," — see below.",[988,1517,1518,1524,1536,1538],{},[1015,1519,1520],{},[565,1521,1522],{},[539,1523,1514],{},[1015,1525,1526],{},[539,1527,1528,1531,1533],{"className":541,"language":542,"style":543},[545,1529,1530],{"class":547},"number",[545,1532,1120],{"class":551},[545,1534,1535],{"class":547}," string",[1015,1537,1409],{},[1015,1539,1540,1541,1544,1545,1550,1551,1555,1556,1558],{},"The cursor value the first page starts from. Default ",[539,1542,1543],{},"0",", which suits an ascending numeric field. ",[565,1546,1547,1548],{},"Required for ",[539,1549,1510],{}," — that one the SDK enforces. You also need it for any non-numeric field, and there the SDK does ",[1552,1553,1554],"em",{},"not"," check: the default ",[539,1557,1543],{}," is a number and would be sent as-is.",[988,1560,1561,1568,1574,1576],{},[1015,1562,1563],{},[565,1564,1565],{},[539,1566,1567],{},"customKeyForResult",[1015,1569,1570],{},[539,1571,1572],{"className":541,"language":542,"style":543},[545,1573,659],{"class":547},[1015,1575,1409],{},[1015,1577,1578,1579,552],{},"The key the rows live under in the response envelope. Default ",[539,1580,1581],{},"'items'",[988,1583,1584,1591,1597,1599],{},[1015,1585,1586],{},[565,1587,1588],{},[539,1589,1590],{},"requestId",[1015,1592,1593],{},[539,1594,1595],{"className":541,"language":542,"style":543},[545,1596,659],{"class":547},[1015,1598,1409],{},[1015,1600,1601,1602,1605],{},"Identifier for tracing, sent as ",[539,1603,1604],{},"bx24_request_id",". It deduplicates nothing.",[988,1607,1608,1615,1621,1623],{},[1015,1609,1610],{},[565,1611,1612],{},[539,1613,1614],{},"limit",[1015,1616,1617],{},[539,1618,1619],{"className":541,"language":542,"style":543},[545,1620,1530],{"class":547},[1015,1622,1409],{},[1015,1624,1625,1626,1629,1630,1633],{},"Rows per page. Default ",[539,1627,1628],{},"50",". ",[565,1631,1632],{},"A request, not a guarantee"," — each method applies its own maximum, and a short page is not the end of the data.",[988,1635,1636,1643,1649,1651],{},[1015,1637,1638],{},[565,1639,1640],{},[539,1641,1642],{},"maxPages",[1015,1644,1645],{},[539,1646,1647],{"className":541,"language":542,"style":543},[545,1648,1530],{"class":547},[1015,1650,1409],{},[1015,1652,1653,1654,1657,1658,1661,1662,1665,1666,552],{},"Ceiling on pages read. Default ",[539,1655,1656],{},"10000","; must be a positive integer, or ",[539,1659,1660],{},"JSSDK_ACTION_INVALID_MAX_PAGES"," is raised at call time. Reaching it does not discard what was read: the rows come back with ",[539,1663,1664],{},"JSSDK_ACTION_MAX_PAGES_EXCEEDED"," attached, so check ",[539,1667,1668],{},"isSuccess",[988,1670,1671,1678,1685,1687],{},[1015,1672,1673],{},[565,1674,1675],{},[539,1676,1677],{},"signal",[1015,1679,1680],{},[539,1681,1682],{"className":541,"language":542,"style":543},[545,1683,1684],{"class":547},"AbortSignal",[1015,1686,1409],{},[1015,1688,1689,1690,1693],{},"Cancels the walk, checked before each request. The pages already read come back with ",[539,1691,1692],{},"JSSDK_ACTION_ABORTED"," attached.",[988,1695,1696,1703,1740,1742],{},[1015,1697,1698],{},[565,1699,1700],{},[539,1701,1702],{},"progress",[1015,1704,1705],{},[539,1706,1707,1709,1711,1713,1715,1718,1720,1723,1725,1728,1730,1732,1735,1737],{"className":541,"language":542,"style":543},[545,1708,674],{"class":551},[545,1710,536],{"class":785},[545,1712,650],{"class":551},[545,1714,1066],{"class":551},[545,1716,1717],{"class":646}," pages",[545,1719,650],{"class":551},[545,1721,1722],{"class":547}," number",[545,1724,662],{"class":551},[545,1726,1727],{"class":646}," rows",[545,1729,650],{"class":551},[545,1731,1722],{"class":547},[545,1733,1734],{"class":551}," })",[545,1736,789],{"class":606},[545,1738,1739],{"class":547}," void",[1015,1741,1409],{},[1015,1743,1744],{},"Called after each page with cumulative counts. Counts rather than a percentage: keyset paging never asks for a total.",[971,1746,1748],{"id":1747},"return-value","Return Value",[536,1750,1751,1769,1770,1787],{},[539,1752,1753,1756,1758,1760,1762,1764,1766],{"className":541,"language":542,"style":543},[545,1754,1755],{"class":547},"Promise",[545,1757,656],{"class":551},[545,1759,303],{"class":547},[545,1761,656],{"class":551},[545,1763,1227],{"class":547},[545,1765,1268],{"class":610},[545,1767,1768],{"class":551},">>"," — resolves to a ",[814,1771,1775],{"href":1772,"rel":1773},"https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fcore\u002Fresult.ts",[1774],"nofollow",[539,1776,1777,1779,1781,1783,1785],{"className":541,"language":542,"style":543},[545,1778,303],{"class":547},[545,1780,656],{"class":551},[545,1782,1227],{"class":547},[545,1784,1268],{"class":610},[545,1786,668],{"class":551}," holding every row read.",[1789,1790,1791,1824,1842],"ul",{},[1187,1792,1793,1819,1820,1823],{},[539,1794,1795,1797,1799,1802,1805,1808,1811,1814,1816],{"className":541,"language":542,"style":543},[545,1796,552],{"class":610},[545,1798,750],{"class":547},[545,1800,1801],{"class":551},"():",[545,1803,1804],{"class":547}," T",[545,1806,1807],{"class":610},"[] ",[545,1809,1810],{"class":551},"|",[545,1812,1813],{"class":547}," null",[545,1815,1120],{"class":551},[545,1817,1818],{"class":547}," undefined"," — the rows. Nullable by type, which is why the examples below reach for ",[539,1821,1822],{},"?.length ?? 0","; a completed walk always sets an array, even an empty one.",[1187,1825,1826,1837,1838,552],{},[539,1827,1828,1830,1832,1834],{"className":541,"language":542,"style":543},[545,1829,552],{"class":610},[545,1831,1668],{"class":547},[545,1833,650],{"class":551},[545,1835,1836],{"class":547}," boolean"," — false when a bound was hit or the portal returned a soft error mid-walk; the rows already read are still there. Not every failure arrives this way — see ",[814,1839,1841],{"href":1840},"#error-handling","Error Handling",[1187,1843,1844,1857],{},[539,1845,1846,1848,1851,1853,1855],{"className":541,"language":542,"style":543},[545,1847,552],{"class":610},[545,1849,1850],{"class":547},"getErrorMessages",[545,1852,1801],{"class":551},[545,1854,1535],{"class":547},[545,1856,1268],{"class":610}," — the messages.",[531,1859,1861],{"id":1860},"key-concepts","Key Concepts",[971,1863,1461],{"id":1864},"choosing-a-cursor-field",[536,1866,1867],{},"The walk asks for rows strictly past the last value it saw, so the field has to carry the whole ordering by itself. Three requirements:",[1789,1869,1870,1879,1885],{},[1187,1871,1872,1875,1876,1878],{},[565,1873,1874],{},"Unique."," The condition is strictly greater, so rows sharing the last row's value across a page boundary are never asked for — this follows from the condition rather than from a measurement. ",[539,1877,912],{}," is the safe default for a reason.",[1187,1880,1881,1884],{},[565,1882,1883],{},"Scalar."," A number or a string. The walk reads the value straight off the response, so an object- or array-valued field cannot serve as a cursor.",[1187,1886,1887,1890,1891,1893,1894,1896],{},[565,1888,1889],{},"Readable."," The value has to come back, or there is nothing to advance by. The SDK appends the field to an explicit ",[539,1892,1465],{}," for you; with no ",[539,1895,1465],{}," and a non-default field it warns instead, because it cannot know the server's default field set.",[570,1898,1899,1913],{},[536,1900,1901,1904,1905,1908,1909,1912],{},[565,1902,1903],{},"Getting this wrong truncates the result silently."," None of the three raises an error. A cursor field that is missing from the response, or is not a scalar, is treated as ",[1552,1906,1907],{},"no cursor",": the walk stops there and resolves ",[565,1910,1911],{},"successfully"," with the pages it already had. A non-unique field is worse still — it loses individual rows at page boundaries and nothing marks the gap.",[536,1914,1915,1916,1919,1920,1922],{},"The only signal is a ",[539,1917,1918],{},"warning","-level log line, and only when the page was full. So if a walk returns a suspiciously round number of rows — exactly one page, say — check ",[539,1921,1438],{}," before you believe it.",[536,1924,1925,1926,1928,1929,1931],{},"For a non-numeric field, pass ",[539,1927,1514],{}," as well: the default is the number ",[539,1930,1543],{},", and the SDK does not check this.",[971,1933,1935,1936],{"id":1934},"the-cursor-field-must-not-appear-in-filter","The cursor field must not appear in ",[539,1937,780],{},[536,1939,1940,1941,650],{},"The server orders and pages by that field, and refuses a filter on it. Measured on ",[539,1942,580],{},[593,1944,1948],{"className":1945,"code":1946,"language":1947,"meta":543,"style":543},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ \"error\": { \"code\": \"BITRIX_REST_V3_EXCEPTION_INVALIDFILTEREXCEPTION\",\n             \"message\": \"Cursor field id cannot be used…\" } }\n","json",[539,1949,1950,1985],{"__ignoreMap":543},[545,1951,1952,1955,1958,1961,1964,1966,1968,1970,1972,1974,1976,1978,1981,1983],{"class":602,"line":603},[545,1953,1954],{"class":551},"{",[545,1956,1957],{"class":551}," \"",[545,1959,1960],{"class":606},"error",[545,1962,1963],{"class":551},"\"",[545,1965,650],{"class":551},[545,1967,1066],{"class":551},[545,1969,1957],{"class":551},[545,1971,539],{"class":547},[545,1973,1963],{"class":551},[545,1975,650],{"class":551},[545,1977,1957],{"class":551},[545,1979,1980],{"class":691},"BITRIX_REST_V3_EXCEPTION_INVALIDFILTEREXCEPTION",[545,1982,1963],{"class":551},[545,1984,697],{"class":551},[545,1986,1987,1990,1993,1995,1997,1999,2002,2004,2006],{"class":602,"line":680},[545,1988,1989],{"class":551},"             \"",[545,1991,1992],{"class":547},"message",[545,1994,1963],{"class":551},[545,1996,650],{"class":551},[545,1998,1957],{"class":551},[545,2000,2001],{"class":691},"Cursor field id cannot be used…",[545,2003,1963],{"class":551},[545,2005,1087],{"class":551},[545,2007,2008],{"class":551}," }\n",[536,2010,2011],{},"The SDK warns before the request rather than letting you find out from the portal:",[593,2013,2018],{"className":2014,"code":2016,"language":2017,"meta":543},[2015],"language-text","callTail.make: the cursor field \"id\" must not appear in `filter` — the server\norders and pages by it and will reject a filter on the same field\n(INVALIDFILTEREXCEPTION). Remove it from `filter`.\n","text",[539,2019,2016],{"__ignoreMap":543},[536,2021,2022,2023,2037],{},"The check descends into logic groups, so a field buried inside ",[539,2024,2025,2027,2029,2031,2033,2035],{"className":541,"language":542,"style":543},[545,2026,1165],{"class":547},[545,2028,552],{"class":551},[545,2030,1143],{"class":547},[545,2032,674],{"class":551},[545,2034,1174],{"class":610},[545,2036,1177],{"class":551}," is found too.",[971,2039,2041,2042],{"id":2040},"the-cursor-field-is-added-to-select","The cursor field is added to ",[539,2043,1465],{},[536,2045,2046,2047,2049,2050,2052,2053,2055,2056,2058],{},"The walk advances by reading ",[539,2048,1438],{}," off the last row, so the field has to come back. If you pass ",[539,2051,1465],{},", the SDK appends the cursor field when it is missing. If you pass no ",[539,2054,1465],{}," at all and the cursor field is not the default ",[539,2057,912],{},", it warns instead — it cannot know the server's default field set.",[971,2060,2062,1511,2065],{"id":2061},"order-desc-requires-initialvalue",[539,2063,2064],{},"order: 'DESC'",[539,2066,1514],{},[536,2068,2069,2070,2073,2074,2076],{},"A descending walk pages by ",[539,2071,2072],{},"field \u003C value",", so the default first value of ",[539,2075,1543],{}," would match nothing. The SDK refuses it at call time rather than returning a silently empty result:",[593,2078,2080],{"className":595,"code":2079,"language":597,"meta":543,"style":543},"\u002F\u002F Throws JSSDK_CORE_B24_CALL_TAIL_DESC_REQUIRES_INITIAL_VALUE\nawait $b24.actions.v3.callTail.make({\n  method: 'main.eventlog.tail',\n  cursorField: 'id',\n  order: 'DESC',\n  customKeyForResult: 'items'\n})\n",[539,2081,2082,2087,2114,2128,2142,2157,2169],{"__ignoreMap":543},[545,2083,2084],{"class":602,"line":603},[545,2085,2086],{"class":838},"\u002F\u002F Throws JSSDK_CORE_B24_CALL_TAIL_DESC_REQUIRES_INITIAL_VALUE\n",[545,2088,2089,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112],{"class":602,"line":680},[545,2090,2091],{"class":617},"await",[545,2093,621],{"class":610},[545,2095,552],{"class":551},[545,2097,96],{"class":610},[545,2099,552],{"class":551},[545,2101,861],{"class":610},[545,2103,552],{"class":551},[545,2105,866],{"class":610},[545,2107,552],{"class":551},[545,2109,555],{"class":640},[545,2111,674],{"class":610},[545,2113,677],{"class":551},[545,2115,2116,2118,2120,2122,2124,2126],{"class":602,"line":700},[545,2117,683],{"class":646},[545,2119,650],{"class":551},[545,2121,688],{"class":551},[545,2123,580],{"class":691},[545,2125,694],{"class":551},[545,2127,697],{"class":551},[545,2129,2130,2132,2134,2136,2138,2140],{"class":602,"line":711},[545,2131,936],{"class":646},[545,2133,650],{"class":551},[545,2135,688],{"class":551},[545,2137,912],{"class":691},[545,2139,694],{"class":551},[545,2141,697],{"class":551},[545,2143,2144,2147,2149,2151,2153,2155],{"class":602,"line":720},[545,2145,2146],{"class":646},"  order",[545,2148,650],{"class":551},[545,2150,688],{"class":551},[545,2152,1125],{"class":691},[545,2154,694],{"class":551},[545,2156,697],{"class":551},[545,2158,2159,2161,2163,2165,2167],{"class":602,"line":727},[545,2160,952],{"class":646},[545,2162,650],{"class":551},[545,2164,688],{"class":551},[545,2166,959],{"class":691},[545,2168,962],{"class":551},[545,2170,2171,2173],{"class":602,"line":774},[545,2172,714],{"class":551},[545,2174,717],{"class":610},[536,2176,2177,2178,2181],{},"Pass a value that sorts after every row. For a numeric field that is the type maximum; for a datetime field, a far-future ISO-8601 timestamp ",[565,2179,2180],{},"stating a zone"," (the backwards-cursor guard only compares datetimes that state the same zone, so a mismatch quietly turns the guard off); for any other string, a value that sorts last.",[593,2183,2185],{"className":595,"code":2184,"language":597,"meta":543,"style":543},"const response = await $b24.actions.v3.callTail.make({\n  method: 'main.eventlog.tail',\n  cursorField: 'id',\n  order: 'DESC',\n  initialValue: Number.MAX_SAFE_INTEGER,\n  customKeyForResult: 'items'\n})\n",[539,2186,2187,2219,2233,2247,2261,2278,2290],{"__ignoreMap":543},[545,2188,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217],{"class":602,"line":603},[545,2190,607],{"class":606},[545,2192,846],{"class":610},[545,2194,614],{"class":551},[545,2196,618],{"class":617},[545,2198,621],{"class":610},[545,2200,552],{"class":551},[545,2202,96],{"class":610},[545,2204,552],{"class":551},[545,2206,861],{"class":610},[545,2208,552],{"class":551},[545,2210,866],{"class":610},[545,2212,552],{"class":551},[545,2214,555],{"class":640},[545,2216,674],{"class":610},[545,2218,677],{"class":551},[545,2220,2221,2223,2225,2227,2229,2231],{"class":602,"line":680},[545,2222,683],{"class":646},[545,2224,650],{"class":551},[545,2226,688],{"class":551},[545,2228,580],{"class":691},[545,2230,694],{"class":551},[545,2232,697],{"class":551},[545,2234,2235,2237,2239,2241,2243,2245],{"class":602,"line":700},[545,2236,936],{"class":646},[545,2238,650],{"class":551},[545,2240,688],{"class":551},[545,2242,912],{"class":691},[545,2244,694],{"class":551},[545,2246,697],{"class":551},[545,2248,2249,2251,2253,2255,2257,2259],{"class":602,"line":711},[545,2250,2146],{"class":646},[545,2252,650],{"class":551},[545,2254,688],{"class":551},[545,2256,1125],{"class":691},[545,2258,694],{"class":551},[545,2260,697],{"class":551},[545,2262,2263,2266,2268,2271,2273,2276],{"class":602,"line":720},[545,2264,2265],{"class":646},"  initialValue",[545,2267,650],{"class":551},[545,2269,2270],{"class":610}," Number",[545,2272,552],{"class":551},[545,2274,2275],{"class":610},"MAX_SAFE_INTEGER",[545,2277,697],{"class":551},[545,2279,2280,2282,2284,2286,2288],{"class":602,"line":727},[545,2281,952],{"class":646},[545,2283,650],{"class":551},[545,2285,688],{"class":551},[545,2287,959],{"class":691},[545,2289,962],{"class":551},[545,2291,2292,2294],{"class":602,"line":774},[545,2293,714],{"class":551},[545,2295,717],{"class":610},[531,2297,1841],{"id":2298},"error-handling",[982,2300,2301,2311],{},[985,2302,2303],{},[988,2304,2305,2308],{},[991,2306,2307],{},"Code",[991,2309,2310],{},"When",[1010,2312,2313,2349,2373,2389,2415,2427,2438],{},[988,2314,2315,2320],{},[1015,2316,2317],{},[539,2318,2319],{},"JSSDK_ACTION_V3_TAIL_FILTER_INVALID",[1015,2321,2322,2324,2325,2328,2329,2348],{},[539,2323,780],{}," was the ",[539,2326,2327],{},"restApi:v2"," object dialect, e.g. ",[539,2330,2331,2333,2335,2338,2340,2342,2346],{"className":541,"language":542,"style":543},[545,2332,1954],{"class":551},[545,2334,688],{"class":551},[545,2336,2337],{"class":691},">id",[545,2339,694],{"class":551},[545,2341,650],{"class":551},[545,2343,2345],{"class":2344},"sbssI"," 100",[545,2347,1087],{"class":551},". Refused here rather than one round trip later, where the portal reports it in wording that never names the dialect.",[988,2350,2351,2356],{},[1015,2352,2353],{},[539,2354,2355],{},"JSSDK_CORE_B24_CALL_TAIL_DESC_REQUIRES_INITIAL_VALUE",[1015,2357,2358,2370,2371,552],{},[539,2359,2360,2362,2364,2366,2368],{"className":541,"language":542,"style":543},[545,2361,1098],{"class":547},[545,2363,650],{"class":551},[545,2365,688],{"class":551},[545,2367,1125],{"class":691},[545,2369,694],{"class":551}," without ",[539,2372,1514],{},[988,2374,2375,2380],{},[1015,2376,2377],{},[539,2378,2379],{},"JSSDK_ACTION_CURSOR_STALLED",[1015,2381,2382,2383,2385,2386,2388],{},"The cursor came back equal to the one just sent — the server is answering with the same page. On a tail walk the usual causes are a ",[539,2384,1438],{}," that is not the field the server pages by or whose values are not unique, and a method that does not implement ",[539,2387,567],{}," at all.",[988,2390,2391,2396],{},[1015,2392,2393],{},[539,2394,2395],{},"JSSDK_ACTION_CURSOR_WENT_BACKWARDS",[1015,2397,2398,2399,2411,2412,2414],{},"The cursor moved into a value the walk had already passed. With ",[539,2400,2401,2403,2405,2407,2409],{"className":541,"language":542,"style":543},[545,2402,1098],{"class":547},[545,2404,650],{"class":551},[545,2406,688],{"class":551},[545,2408,1125],{"class":691},[545,2410,694],{"class":551},", check that ",[539,2413,1514],{}," is the newest value rather than the oldest.",[988,2416,2417,2421],{},[1015,2418,2419],{},[539,2420,1664],{},[1015,2422,2423,2424,2426],{},"The page ceiling was reached. The rows read are returned with the error attached — check ",[539,2425,1668],{},", do not assume a returned list is whole.",[988,2428,2429,2433],{},[1015,2430,2431],{},[539,2432,1660],{},[1015,2434,2435,2437],{},[539,2436,1642],{}," was not a positive integer. Raised before any request.",[988,2439,2440,2444],{},[1015,2441,2442],{},[539,2443,1692],{},[1015,2445,2446,2447,2449],{},"The ",[539,2448,1677],{}," fired. Handled like the ceiling: what was read comes back with the error attached.",[536,2451,2452,2455,2456,2458,2459,2461],{},[565,2453,2454],{},"Two of these come back, five reject."," Only the last two are bounds you set, so the rows already collected are correct and are handed back with the error attached. The other four — a refused filter, a missing ",[539,2457,1514],{},", a stalled or backwards cursor — reject the promise, because there is no result worth keeping. So ",[539,2460,1668],{}," alone is not enough:",[593,2463,2465],{"className":595,"code":2464,"language":597,"meta":543,"style":543},"try {\n  const response = await $b24.actions.v3.callTail.make({\n    method: 'main.eventlog.tail',\n    cursorField: 'id',\n    customKeyForResult: 'items'\n  })\n\n  \u002F\u002F Reached the ceiling or was aborted: the rows are here and are correct.\n  if (!response.isSuccess) {\n    console.warn(response.getErrorMessages(), response.getData()?.length ?? 0)\n  }\n}\ncatch (error) {\n  \u002F\u002F Filter refused, a bad `maxPages`, DESC without `initialValue`, or the\n  \u002F\u002F cursor stopped advancing.\n  console.error(error)\n}\n",[539,2466,2467,2474,2509,2524,2539,2552,2559,2563,2568,2591,2635,2641,2647,2658,2664,2670,2686],{"__ignoreMap":543},[545,2468,2469,2472],{"class":602,"line":603},[545,2470,2471],{"class":617},"try",[545,2473,897],{"class":551},[545,2475,2476,2479,2482,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507],{"class":602,"line":680},[545,2477,2478],{"class":606},"  const",[545,2480,2481],{"class":610}," response",[545,2483,2484],{"class":551}," =",[545,2486,618],{"class":617},[545,2488,621],{"class":610},[545,2490,552],{"class":551},[545,2492,96],{"class":610},[545,2494,552],{"class":551},[545,2496,861],{"class":610},[545,2498,552],{"class":551},[545,2500,866],{"class":610},[545,2502,552],{"class":551},[545,2504,555],{"class":640},[545,2506,674],{"class":646},[545,2508,677],{"class":551},[545,2510,2511,2514,2516,2518,2520,2522],{"class":602,"line":700},[545,2512,2513],{"class":646},"    method",[545,2515,650],{"class":551},[545,2517,688],{"class":551},[545,2519,580],{"class":691},[545,2521,694],{"class":551},[545,2523,697],{"class":551},[545,2525,2526,2529,2531,2533,2535,2537],{"class":602,"line":711},[545,2527,2528],{"class":646},"    cursorField",[545,2530,650],{"class":551},[545,2532,688],{"class":551},[545,2534,912],{"class":691},[545,2536,694],{"class":551},[545,2538,697],{"class":551},[545,2540,2541,2544,2546,2548,2550],{"class":602,"line":720},[545,2542,2543],{"class":646},"    customKeyForResult",[545,2545,650],{"class":551},[545,2547,688],{"class":551},[545,2549,959],{"class":691},[545,2551,962],{"class":551},[545,2553,2554,2557],{"class":602,"line":727},[545,2555,2556],{"class":551},"  }",[545,2558,717],{"class":646},[545,2560,2561],{"class":602,"line":774},[545,2562,724],{"emptyLinePlaceholder":723},[545,2564,2565],{"class":602,"line":949},[545,2566,2567],{"class":838},"  \u002F\u002F Reached the ceiling or was aborted: the rows are here and are correct.\n",[545,2569,2570,2573,2576,2579,2582,2584,2586,2589],{"class":602,"line":965},[545,2571,2572],{"class":617},"  if",[545,2574,2575],{"class":646}," (",[545,2577,2578],{"class":551},"!",[545,2580,2581],{"class":610},"response",[545,2583,552],{"class":551},[545,2585,1668],{"class":610},[545,2587,2588],{"class":646},") ",[545,2590,677],{"class":551},[545,2592,2594,2597,2599,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2627,2630,2633],{"class":602,"line":2593},10,[545,2595,2596],{"class":610},"    console",[545,2598,552],{"class":551},[545,2600,2601],{"class":640},"warn",[545,2603,674],{"class":646},[545,2605,2581],{"class":610},[545,2607,552],{"class":551},[545,2609,1850],{"class":640},[545,2611,558],{"class":646},[545,2613,662],{"class":551},[545,2615,2481],{"class":610},[545,2617,552],{"class":551},[545,2619,750],{"class":640},[545,2621,558],{"class":646},[545,2623,755],{"class":551},[545,2625,2626],{"class":610},"length",[545,2628,2629],{"class":551}," ??",[545,2631,2632],{"class":2344}," 0",[545,2634,717],{"class":646},[545,2636,2638],{"class":602,"line":2637},11,[545,2639,2640],{"class":551},"  }\n",[545,2642,2644],{"class":602,"line":2643},12,[545,2645,2646],{"class":551},"}\n",[545,2648,2650,2653,2656],{"class":602,"line":2649},13,[545,2651,2652],{"class":617},"catch",[545,2654,2655],{"class":610}," (error) ",[545,2657,677],{"class":551},[545,2659,2661],{"class":602,"line":2660},14,[545,2662,2663],{"class":838},"  \u002F\u002F Filter refused, a bad `maxPages`, DESC without `initialValue`, or the\n",[545,2665,2667],{"class":602,"line":2666},15,[545,2668,2669],{"class":838},"  \u002F\u002F cursor stopped advancing.\n",[545,2671,2673,2676,2678,2680,2682,2684],{"class":602,"line":2672},16,[545,2674,2675],{"class":610},"  console",[545,2677,552],{"class":551},[545,2679,1960],{"class":640},[545,2681,674],{"class":646},[545,2683,1960],{"class":610},[545,2685,717],{"class":646},[545,2687,2689],{"class":602,"line":2688},17,[545,2690,2646],{"class":551},[536,2692,2693,2694,2696,2697,2699],{},"A soft error from the portal mid-walk also lands on the ",[539,2695,303],{}," rather than throwing, so ",[539,2698,1668],{}," covers that case too.",[536,2701,812,2702,2706],{},[814,2703,2705],{"href":2704},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferrors\u002F","Error codes and handling"," for the full table.",[971,2708,1329],{"id":2709},"pointing-it-at-a-list-method",[536,2711,2712,2713,2716,2717,2723],{},"A list method does not implement the cursor, and — measured on ",[539,2714,2715],{},"main.eventlog.list"," — the portal ",[565,2718,2719,2720,2722],{},"ignores the ",[539,2721,1061],{}," parameter silently"," rather than refusing it. On that method an unknown top-level key was ignored the same way, so nothing in the response says the walk is not paging. Whether every v3 list method behaves like that was not measured; one that does is enough to matter, because the symptom is indistinguishable from a working walk until the pages start repeating.",[536,2725,2726],{},"Before the cursor guards existed, that walk repeated its first page for ever. Now it stops:",[593,2728,2730],{"className":595,"code":2729,"language":597,"meta":543,"style":543},"\u002F\u002F Throws JSSDK_ACTION_CURSOR_STALLED — main.eventlog.list has no tail\nawait $b24.actions.v3.callTail.make({\n  method: 'main.eventlog.list',\n  cursorField: 'id',\n  customKeyForResult: 'items'\n})\n",[539,2731,2732,2737,2763,2777,2791,2803],{"__ignoreMap":543},[545,2733,2734],{"class":602,"line":603},[545,2735,2736],{"class":838},"\u002F\u002F Throws JSSDK_ACTION_CURSOR_STALLED — main.eventlog.list has no tail\n",[545,2738,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761],{"class":602,"line":680},[545,2740,2091],{"class":617},[545,2742,621],{"class":610},[545,2744,552],{"class":551},[545,2746,96],{"class":610},[545,2748,552],{"class":551},[545,2750,861],{"class":610},[545,2752,552],{"class":551},[545,2754,866],{"class":610},[545,2756,552],{"class":551},[545,2758,555],{"class":640},[545,2760,674],{"class":610},[545,2762,677],{"class":551},[545,2764,2765,2767,2769,2771,2773,2775],{"class":602,"line":700},[545,2766,683],{"class":646},[545,2768,650],{"class":551},[545,2770,688],{"class":551},[545,2772,2715],{"class":691},[545,2774,694],{"class":551},[545,2776,697],{"class":551},[545,2778,2779,2781,2783,2785,2787,2789],{"class":602,"line":711},[545,2780,936],{"class":646},[545,2782,650],{"class":551},[545,2784,688],{"class":551},[545,2786,912],{"class":691},[545,2788,694],{"class":551},[545,2790,697],{"class":551},[545,2792,2793,2795,2797,2799,2801],{"class":602,"line":720},[545,2794,952],{"class":646},[545,2796,650],{"class":551},[545,2798,688],{"class":551},[545,2800,959],{"class":691},[545,2802,962],{"class":551},[545,2804,2805,2807],{"class":602,"line":727},[545,2806,714],{"class":551},[545,2808,717],{"class":610},[536,2810,2811,2812,552],{},"If you meant to walk a list method, use ",[814,2813,2814],{"href":823},[539,2815,2816],{"className":541,"language":542,"style":543},[545,2817,104],{"class":547},[531,2819,416],{"id":426},[971,2821,2823],{"id":2822},"reading-an-event-log-oldest-first","Reading an event log, oldest first",[593,2825,2827],{"className":595,"code":2826,"language":597,"meta":543,"style":543},"const response = await $b24.actions.v3.callTail.make\u003C{ id: number }>({\n  method: 'main.eventlog.tail',\n  params: { select: ['id', 'auditTypeId'] },\n  cursorField: 'id',\n  customKeyForResult: 'items',\n  limit: 100\n})\n\nif (!response.isSuccess) {\n  console.warn(response.getErrorMessages())\n}\n\nconsole.log(`rows: ${response.getData()?.length ?? 0}`)\n",[539,2828,2829,2872,2886,2921,2935,2949,2959,2965,2969,2987,3006,3010,3014],{"__ignoreMap":543},[545,2830,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2862,2864,2866,2868,2870],{"class":602,"line":603},[545,2832,607],{"class":606},[545,2834,846],{"class":610},[545,2836,614],{"class":551},[545,2838,618],{"class":617},[545,2840,621],{"class":610},[545,2842,552],{"class":551},[545,2844,96],{"class":610},[545,2846,552],{"class":551},[545,2848,861],{"class":610},[545,2850,552],{"class":551},[545,2852,866],{"class":610},[545,2854,552],{"class":551},[545,2856,555],{"class":640},[545,2858,643],{"class":551},[545,2860,2861],{"class":646}," id",[545,2863,650],{"class":551},[545,2865,1722],{"class":547},[545,2867,671],{"class":551},[545,2869,674],{"class":610},[545,2871,677],{"class":551},[545,2873,2874,2876,2878,2880,2882,2884],{"class":602,"line":680},[545,2875,683],{"class":646},[545,2877,650],{"class":551},[545,2879,688],{"class":551},[545,2881,580],{"class":691},[545,2883,694],{"class":551},[545,2885,697],{"class":551},[545,2887,2888,2890,2892,2894,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2918],{"class":602,"line":700},[545,2889,703],{"class":646},[545,2891,650],{"class":551},[545,2893,1066],{"class":551},[545,2895,2896],{"class":646}," select",[545,2898,650],{"class":551},[545,2900,907],{"class":610},[545,2902,694],{"class":551},[545,2904,912],{"class":691},[545,2906,694],{"class":551},[545,2908,662],{"class":551},[545,2910,688],{"class":551},[545,2912,921],{"class":691},[545,2914,694],{"class":551},[545,2916,2917],{"class":610},"] ",[545,2919,2920],{"class":551},"},\n",[545,2922,2923,2925,2927,2929,2931,2933],{"class":602,"line":711},[545,2924,936],{"class":646},[545,2926,650],{"class":551},[545,2928,688],{"class":551},[545,2930,912],{"class":691},[545,2932,694],{"class":551},[545,2934,697],{"class":551},[545,2936,2937,2939,2941,2943,2945,2947],{"class":602,"line":720},[545,2938,952],{"class":646},[545,2940,650],{"class":551},[545,2942,688],{"class":551},[545,2944,959],{"class":691},[545,2946,694],{"class":551},[545,2948,697],{"class":551},[545,2950,2951,2954,2956],{"class":602,"line":727},[545,2952,2953],{"class":646},"  limit",[545,2955,650],{"class":551},[545,2957,2958],{"class":2344}," 100\n",[545,2960,2961,2963],{"class":602,"line":774},[545,2962,714],{"class":551},[545,2964,717],{"class":610},[545,2966,2967],{"class":602,"line":949},[545,2968,724],{"emptyLinePlaceholder":723},[545,2970,2971,2974,2976,2978,2980,2982,2985],{"class":602,"line":965},[545,2972,2973],{"class":617},"if",[545,2975,2575],{"class":610},[545,2977,2578],{"class":551},[545,2979,2581],{"class":610},[545,2981,552],{"class":551},[545,2983,2984],{"class":610},"isSuccess) ",[545,2986,677],{"class":551},[545,2988,2989,2991,2993,2995,2997,2999,3001,3003],{"class":602,"line":2593},[545,2990,2675],{"class":610},[545,2992,552],{"class":551},[545,2994,2601],{"class":640},[545,2996,674],{"class":646},[545,2998,2581],{"class":610},[545,3000,552],{"class":551},[545,3002,1850],{"class":640},[545,3004,3005],{"class":646},"())\n",[545,3007,3008],{"class":602,"line":2637},[545,3009,2646],{"class":551},[545,3011,3012],{"class":602,"line":2643},[545,3013,724],{"emptyLinePlaceholder":723},[545,3015,3016,3019,3021,3024,3026,3029,3032,3035,3037,3039,3041,3043,3045,3048,3050,3052,3055],{"class":602,"line":2649},[545,3017,3018],{"class":610},"console",[545,3020,552],{"class":551},[545,3022,3023],{"class":640},"log",[545,3025,674],{"class":610},[545,3027,3028],{"class":551},"`",[545,3030,3031],{"class":691},"rows: ",[545,3033,3034],{"class":551},"${",[545,3036,2581],{"class":610},[545,3038,552],{"class":551},[545,3040,750],{"class":640},[545,3042,558],{"class":610},[545,3044,755],{"class":551},[545,3046,3047],{"class":610},"length ",[545,3049,766],{"class":551},[545,3051,2632],{"class":2344},[545,3053,3054],{"class":551},"}`",[545,3056,717],{"class":610},[971,3058,3060],{"id":3059},"filtering-with-a-bare-logic-group","Filtering with a bare logic group",[536,3062,3063],{},"The list walkers require the array form because they extend it. Tail forwards the filter untouched, so a group on its own is accepted:",[593,3065,3067],{"className":595,"code":3066,"language":597,"meta":543,"style":543},"import { FilterV3 } from '@bitrix24\u002Fb24jssdk'\n\nconst response = await $b24.actions.v3.callTail.make({\n  method: 'main.eventlog.tail',\n  params: {\n    filter: FilterV3.or(\n      ['auditTypeId', '=', 'MAIN_EVENTLOG'],\n      ['auditTypeId', '=', 'MAIN_LOGIN']\n    ),\n    select: ['id', 'auditTypeId']\n  },\n  cursorField: 'id',\n  customKeyForResult: 'items'\n})\n",[539,3068,3069,3091,3095,3127,3141,3149,3164,3196,3225,3232,3256,3260,3274,3286],{"__ignoreMap":543},[545,3070,3071,3074,3076,3079,3081,3084,3086,3089],{"class":602,"line":603},[545,3072,3073],{"class":617},"import",[545,3075,1066],{"class":551},[545,3077,3078],{"class":610}," FilterV3",[545,3080,1087],{"class":551},[545,3082,3083],{"class":617}," from",[545,3085,688],{"class":551},[545,3087,3088],{"class":691},"@bitrix24\u002Fb24jssdk",[545,3090,962],{"class":551},[545,3092,3093],{"class":602,"line":680},[545,3094,724],{"emptyLinePlaceholder":723},[545,3096,3097,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125],{"class":602,"line":700},[545,3098,607],{"class":606},[545,3100,846],{"class":610},[545,3102,614],{"class":551},[545,3104,618],{"class":617},[545,3106,621],{"class":610},[545,3108,552],{"class":551},[545,3110,96],{"class":610},[545,3112,552],{"class":551},[545,3114,861],{"class":610},[545,3116,552],{"class":551},[545,3118,866],{"class":610},[545,3120,552],{"class":551},[545,3122,555],{"class":640},[545,3124,674],{"class":610},[545,3126,677],{"class":551},[545,3128,3129,3131,3133,3135,3137,3139],{"class":602,"line":711},[545,3130,683],{"class":646},[545,3132,650],{"class":551},[545,3134,688],{"class":551},[545,3136,580],{"class":691},[545,3138,694],{"class":551},[545,3140,697],{"class":551},[545,3142,3143,3145,3147],{"class":602,"line":720},[545,3144,703],{"class":646},[545,3146,650],{"class":551},[545,3148,897],{"class":551},[545,3150,3151,3154,3156,3158,3160,3162],{"class":602,"line":727},[545,3152,3153],{"class":646},"    filter",[545,3155,650],{"class":551},[545,3157,3078],{"class":610},[545,3159,552],{"class":551},[545,3161,1143],{"class":640},[545,3163,1238],{"class":610},[545,3165,3166,3169,3171,3173,3175,3177,3179,3181,3183,3185,3187,3190,3192,3194],{"class":602,"line":774},[545,3167,3168],{"class":610},"      [",[545,3170,694],{"class":551},[545,3172,921],{"class":691},[545,3174,694],{"class":551},[545,3176,662],{"class":551},[545,3178,688],{"class":551},[545,3180,614],{"class":691},[545,3182,694],{"class":551},[545,3184,662],{"class":551},[545,3186,688],{"class":551},[545,3188,3189],{"class":691},"MAIN_EVENTLOG",[545,3191,694],{"class":551},[545,3193,1047],{"class":610},[545,3195,697],{"class":551},[545,3197,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3221,3223],{"class":602,"line":949},[545,3199,3168],{"class":610},[545,3201,694],{"class":551},[545,3203,921],{"class":691},[545,3205,694],{"class":551},[545,3207,662],{"class":551},[545,3209,688],{"class":551},[545,3211,614],{"class":691},[545,3213,694],{"class":551},[545,3215,662],{"class":551},[545,3217,688],{"class":551},[545,3219,3220],{"class":691},"MAIN_LOGIN",[545,3222,694],{"class":551},[545,3224,926],{"class":610},[545,3226,3227,3230],{"class":602,"line":965},[545,3228,3229],{"class":610},"    )",[545,3231,697],{"class":551},[545,3233,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254],{"class":602,"line":2593},[545,3235,902],{"class":646},[545,3237,650],{"class":551},[545,3239,907],{"class":610},[545,3241,694],{"class":551},[545,3243,912],{"class":691},[545,3245,694],{"class":551},[545,3247,662],{"class":551},[545,3249,688],{"class":551},[545,3251,921],{"class":691},[545,3253,694],{"class":551},[545,3255,926],{"class":610},[545,3257,3258],{"class":602,"line":2637},[545,3259,931],{"class":551},[545,3261,3262,3264,3266,3268,3270,3272],{"class":602,"line":2643},[545,3263,936],{"class":646},[545,3265,650],{"class":551},[545,3267,688],{"class":551},[545,3269,912],{"class":691},[545,3271,694],{"class":551},[545,3273,697],{"class":551},[545,3275,3276,3278,3280,3282,3284],{"class":602,"line":2649},[545,3277,952],{"class":646},[545,3279,650],{"class":551},[545,3281,688],{"class":551},[545,3283,959],{"class":691},[545,3285,962],{"class":551},[545,3287,3288,3290],{"class":602,"line":2660},[545,3289,714],{"class":551},[545,3291,717],{"class":610},[971,3293,3295],{"id":3294},"a-complete-script","A complete script",[593,3297,3299],{"className":595,"code":3298,"language":597,"meta":543,"style":543},"import { B24Hook, SdkError } from '@bitrix24\u002Fb24jssdk'\n\nconst $b24 = B24Hook.fromWebhookUrl('https:\u002F\u002Fyour-portal.bitrix24.com\u002Frest\u002F1\u002FSECRET')\n\ntry {\n  const response = await $b24.actions.v3.callTail.make\u003C{ id: number }>({\n    method: 'main.eventlog.tail',\n    params: { select: ['id', 'auditTypeId'] },\n    cursorField: 'id',\n    customKeyForResult: 'items'\n  })\n\n  if (!response.isSuccess) {\n    console.warn(response.getErrorMessages())\n  }\n\n  console.log(`rows: ${response.getData()?.length ?? 0}`)\n}\ncatch (error) {\n  if (error instanceof SdkError) {\n    console.error(`the walk could not run: ${error.code}`)\n  }\n  throw error\n}\n",[539,3300,3301,3325,3329,3356,3360,3366,3408,3422,3455,3469,3481,3487,3491,3509,3527,3531,3535,3571,3576,3585,3603,3631,3636,3645],{"__ignoreMap":543},[545,3302,3303,3305,3307,3310,3312,3315,3317,3319,3321,3323],{"class":602,"line":603},[545,3304,3073],{"class":617},[545,3306,1066],{"class":551},[545,3308,3309],{"class":610}," B24Hook",[545,3311,662],{"class":551},[545,3313,3314],{"class":610}," SdkError",[545,3316,1087],{"class":551},[545,3318,3083],{"class":617},[545,3320,688],{"class":551},[545,3322,3088],{"class":691},[545,3324,962],{"class":551},[545,3326,3327],{"class":602,"line":680},[545,3328,724],{"emptyLinePlaceholder":723},[545,3330,3331,3333,3336,3338,3340,3342,3345,3347,3349,3352,3354],{"class":602,"line":700},[545,3332,607],{"class":606},[545,3334,3335],{"class":610}," $b24 ",[545,3337,614],{"class":551},[545,3339,3309],{"class":610},[545,3341,552],{"class":551},[545,3343,3344],{"class":640},"fromWebhookUrl",[545,3346,674],{"class":610},[545,3348,694],{"class":551},[545,3350,3351],{"class":691},"https:\u002F\u002Fyour-portal.bitrix24.com\u002Frest\u002F1\u002FSECRET",[545,3353,694],{"class":551},[545,3355,717],{"class":610},[545,3357,3358],{"class":602,"line":711},[545,3359,724],{"emptyLinePlaceholder":723},[545,3361,3362,3364],{"class":602,"line":720},[545,3363,2471],{"class":617},[545,3365,897],{"class":551},[545,3367,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406],{"class":602,"line":727},[545,3369,2478],{"class":606},[545,3371,2481],{"class":610},[545,3373,2484],{"class":551},[545,3375,618],{"class":617},[545,3377,621],{"class":610},[545,3379,552],{"class":551},[545,3381,96],{"class":610},[545,3383,552],{"class":551},[545,3385,861],{"class":610},[545,3387,552],{"class":551},[545,3389,866],{"class":610},[545,3391,552],{"class":551},[545,3393,555],{"class":640},[545,3395,643],{"class":551},[545,3397,2861],{"class":646},[545,3399,650],{"class":551},[545,3401,1722],{"class":547},[545,3403,671],{"class":551},[545,3405,674],{"class":646},[545,3407,677],{"class":551},[545,3409,3410,3412,3414,3416,3418,3420],{"class":602,"line":774},[545,3411,2513],{"class":646},[545,3413,650],{"class":551},[545,3415,688],{"class":551},[545,3417,580],{"class":691},[545,3419,694],{"class":551},[545,3421,697],{"class":551},[545,3423,3424,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3449,3451,3453],{"class":602,"line":949},[545,3425,3426],{"class":646},"    params",[545,3428,650],{"class":551},[545,3430,1066],{"class":551},[545,3432,2896],{"class":646},[545,3434,650],{"class":551},[545,3436,907],{"class":646},[545,3438,694],{"class":551},[545,3440,912],{"class":691},[545,3442,694],{"class":551},[545,3444,662],{"class":551},[545,3446,688],{"class":551},[545,3448,921],{"class":691},[545,3450,694],{"class":551},[545,3452,2917],{"class":646},[545,3454,2920],{"class":551},[545,3456,3457,3459,3461,3463,3465,3467],{"class":602,"line":965},[545,3458,2528],{"class":646},[545,3460,650],{"class":551},[545,3462,688],{"class":551},[545,3464,912],{"class":691},[545,3466,694],{"class":551},[545,3468,697],{"class":551},[545,3470,3471,3473,3475,3477,3479],{"class":602,"line":2593},[545,3472,2543],{"class":646},[545,3474,650],{"class":551},[545,3476,688],{"class":551},[545,3478,959],{"class":691},[545,3480,962],{"class":551},[545,3482,3483,3485],{"class":602,"line":2637},[545,3484,2556],{"class":551},[545,3486,717],{"class":646},[545,3488,3489],{"class":602,"line":2643},[545,3490,724],{"emptyLinePlaceholder":723},[545,3492,3493,3495,3497,3499,3501,3503,3505,3507],{"class":602,"line":2649},[545,3494,2572],{"class":617},[545,3496,2575],{"class":646},[545,3498,2578],{"class":551},[545,3500,2581],{"class":610},[545,3502,552],{"class":551},[545,3504,1668],{"class":610},[545,3506,2588],{"class":646},[545,3508,677],{"class":551},[545,3510,3511,3513,3515,3517,3519,3521,3523,3525],{"class":602,"line":2660},[545,3512,2596],{"class":610},[545,3514,552],{"class":551},[545,3516,2601],{"class":640},[545,3518,674],{"class":646},[545,3520,2581],{"class":610},[545,3522,552],{"class":551},[545,3524,1850],{"class":640},[545,3526,3005],{"class":646},[545,3528,3529],{"class":602,"line":2666},[545,3530,2640],{"class":551},[545,3532,3533],{"class":602,"line":2672},[545,3534,724],{"emptyLinePlaceholder":723},[545,3536,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569],{"class":602,"line":2688},[545,3538,2675],{"class":610},[545,3540,552],{"class":551},[545,3542,3023],{"class":640},[545,3544,674],{"class":646},[545,3546,3028],{"class":551},[545,3548,3031],{"class":691},[545,3550,3034],{"class":551},[545,3552,2581],{"class":610},[545,3554,552],{"class":551},[545,3556,750],{"class":640},[545,3558,558],{"class":610},[545,3560,755],{"class":551},[545,3562,3047],{"class":610},[545,3564,766],{"class":551},[545,3566,2632],{"class":2344},[545,3568,3054],{"class":551},[545,3570,717],{"class":646},[545,3572,3574],{"class":602,"line":3573},18,[545,3575,2646],{"class":551},[545,3577,3579,3581,3583],{"class":602,"line":3578},19,[545,3580,2652],{"class":617},[545,3582,2655],{"class":610},[545,3584,677],{"class":551},[545,3586,3588,3590,3592,3594,3597,3599,3601],{"class":602,"line":3587},20,[545,3589,2572],{"class":617},[545,3591,2575],{"class":646},[545,3593,1960],{"class":610},[545,3595,3596],{"class":551}," instanceof",[545,3598,3314],{"class":547},[545,3600,2588],{"class":646},[545,3602,677],{"class":551},[545,3604,3606,3608,3610,3612,3614,3616,3619,3621,3623,3625,3627,3629],{"class":602,"line":3605},21,[545,3607,2596],{"class":610},[545,3609,552],{"class":551},[545,3611,1960],{"class":640},[545,3613,674],{"class":646},[545,3615,3028],{"class":551},[545,3617,3618],{"class":691},"the walk could not run: ",[545,3620,3034],{"class":551},[545,3622,1960],{"class":610},[545,3624,552],{"class":551},[545,3626,539],{"class":610},[545,3628,3054],{"class":551},[545,3630,717],{"class":646},[545,3632,3634],{"class":602,"line":3633},22,[545,3635,2640],{"class":551},[545,3637,3639,3642],{"class":602,"line":3638},23,[545,3640,3641],{"class":617},"  throw",[545,3643,3644],{"class":610}," error\n",[545,3646,3648],{"class":602,"line":3647},24,[545,3649,2646],{"class":551},[536,3651,3652,3653,3655,3656,3659,3660,3662],{},"An empty result is an ordinary answer, not a failure: ",[539,3654,1668],{}," is ",[539,3657,3658],{},"true"," and the array is empty. Note that a wrong ",[539,3661,1567],{}," looks exactly the same — the walker treats a key it cannot find as \"no data\" — so a silently empty walk is worth checking the key for first.",[531,3664,3666],{"id":3665},"alternatives-and-recommendations","Alternatives and Recommendations",[1789,3668,3669,3678,3687],{},[1187,3670,3671,3677],{},[814,3672,3673],{"href":1204},[539,3674,3675],{"className":541,"language":542,"style":543},[545,3676,127],{"class":547}," — the same walk as an async generator, for datasets too large to hold at once.",[1187,3679,3680,3686],{},[814,3681,3682],{"href":823},[539,3683,3684],{"className":541,"language":542,"style":543},[545,3685,104],{"class":547}," — for the ordinary list methods, which is nearly all of them.",[1187,3688,3689,3692],{},[814,3690,210],{"href":3691},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffiltering\u002F"," — the filter dialects and which walker accepts which.",[3694,3695,3696],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":543,"searchDepth":680,"depth":680,"links":3698},[3699,3703,3707,3716,3719,3724],{"id":533,"depth":680,"text":534,"children":3700},[3701,3702],{"id":973,"depth":700,"text":974},{"id":1181,"depth":700,"text":1182},{"id":1212,"depth":680,"text":1213,"children":3704},[3705,3706],{"id":1274,"depth":700,"text":1275},{"id":1747,"depth":700,"text":1748},{"id":1860,"depth":680,"text":1861,"children":3708},[3709,3710,3712,3714],{"id":1864,"depth":700,"text":1461},{"id":1934,"depth":700,"text":3711},"The cursor field must not appear in filter",{"id":2040,"depth":700,"text":3713},"The cursor field is added to select",{"id":2061,"depth":700,"text":3715},"order: 'DESC' requires initialValue",{"id":2298,"depth":680,"text":1841,"children":3717},[3718],{"id":2709,"depth":700,"text":1329},{"id":426,"depth":680,"text":416,"children":3720},[3721,3722,3723],{"id":2822,"depth":700,"text":2823},{"id":3059,"depth":700,"text":3060},{"id":3294,"depth":700,"text":3295},{"id":3665,"depth":680,"text":3666},"md",[3727,3730,3733,3736,3739,3742,3745,3746],{"label":548,"iconName":3728,"to":3729},"GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fcore\u002Factions\u002Fv3\u002Fcall-tail.ts",{"label":3731,"iconName":3728,"to":3732},"Keyset driver","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fcore\u002Factions\u002Fv3\u002F_keyset-paginate.ts",{"label":3734,"iconName":3728,"to":3735},"Walk bounds","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fcore\u002Factions\u002F_walk-bounds.ts",{"label":3737,"iconName":3728,"to":3738},"Cursor-stall guard","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fcore\u002Factions\u002F_cursor-stalled.ts",{"label":3740,"iconName":3728,"to":3741},"Cursor-direction check","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fcore\u002Factions\u002F_cursor-progress.ts",{"label":3743,"iconName":3728,"to":3744},"Skill — b24jssdk-rest","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fskills\u002Fb24jssdk-rest\u002FSKILL.md",{"label":303,"iconName":3728,"to":1772},{"label":3747,"iconName":3728,"to":3748},"SdkError","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Fcore\u002Fsdk-error.ts",{},{"title":113},{"title":525,"description":116},"Ice6aMXLdWtse55RNdrkQtEXYKl96t2QjmB8ZpK2Lak",{"data":3754,"body":3755},{},{"type":3756,"children":3757},"root",[3758],{"type":3759,"tag":536,"props":3760,"children":3761},"element",{},[3762],{"type":2017,"value":116},1790836211876]