parameter: { limit: 1000, page: 1 }.Overview
When you need to retrieve all records from list methods of REST API version 3 with maximum efficiency and are ready to store the complete dataset in memory, use CallListV3.make().
This method automatically handles pagination and returns all data in a single array.
FetchList - it returns an asynchronous generator for step-by-step processing of large lists.// Basic usage
const response = await $b24.actions.v3.callList.make({
method: 'main.eventlog.list',
params: {
filter: [
['userId', '=', 1]
],
select: ['id', 'userId']
},
idKey: 'id',
customKeyForResult: 'items',
requestId: 'unique-request-id',
limit: 600
})
When to Use CallListV3.make()
- Small to medium data volumes: When the total number of records does not exceed several thousand.
- Simple processing: When you need simple access to all data at once.
Method Signature
make<T = unknown>(
options: ActionCallListV3
): Promise<Result<T[]>>
Parameters
The options object contains the following properties:
Return Value
Promise<Result<T[]>> — a promise that resolves to a Result<T[]> object containing an array of all retrieved elements.
This object provides:
.getData(): T[]— returns an array of all retrieved elements..isSuccess: boolean— flag indicating successful execution of all requests..getErrorMessages(): string[]— array of error messages.
Key Concepts
Performance Optimization
The method implements the Bitrix24 recommended algorithm for efficient work with large data volumes:
- Filtering by increasing id: Each subsequent query uses a
>idfilter with the id of the last retrieved element. - Automatic data end detection: Requests stop when an empty array is received or the number of elements is less than the page size (
options.limit).
REST API v3 Response Structure
customKeyForResult parameter is retained for backward compatibility. In the future, after analyzing real usage, a decision will be made regarding its necessity.In REST API version 3, various methods return data in the same structures:
- Grouped array:
{ result: { items: [...] } }
The customKeyForResult parameter allows you to specify the key where the data is located in the response.
Limitations
- Page size: Bitrix24 REST API version 3 limitation — maximum
1000records per request. - Sorting: The method always adds sorting by
idKeyin ascending order for correct pagination. - Only for list methods: Intended only for methods that return data arrays.
Error Handling
Always check the result using isSuccess and handle errors:
const response = await $b24.actions.v3.callList.make({
method: 'some.method',
params: { /* some_params */ },
idKey: 'id',
customKeyForResult: 'items',
requestId: 'unique-request-id',
limit: 600
})
if (!response.isSuccess) {
// Handling error
console.error(new Error(`Error: ${response.getErrorMessages().join('; ')}`))
return
}
// Working with a successful result
const data = response.getData()
Examples
Getting all Event Log Items with filtering
import { B24Hook, LoggerFactory, Text, SdkError, AjaxError } from '@bitrix24/b24jssdk'
type MainEventLogItem = {
id: number
userId: number
}
const devMode = typeof import.meta !== 'undefined' && (import.meta.dev || import.meta.env?.DEV)
const $logger = LoggerFactory.createForBrowser('Example:AllMainEventLogItems', devMode)
const $b24 = B24Hook.fromWebhookUrl('https://your_domain.bitrix24.com/rest/1/webhook_code/')
async function getMainEventLogItemList(requestId: string): Promise<MainEventLogItem[]> {
const sixMonthAgo = new Date()
sixMonthAgo.setMonth((new Date()).getMonth() - 6)
sixMonthAgo.setHours(0, 0, 0)
const response = await $b24.actions.v3.callList.make<MainEventLogItem>({
method: 'main.eventlog.list',
params: {
filter: [
['timestampX', '>=', Text.toB24Format(sixMonthAgo)] // created at least 6 months ago
],
select: ['id', 'userId']
},
idKey: 'id',
customKeyForResult: 'items',
requestId,
limit: 60
})
if (!response.isSuccess) {
throw new SdkError({
code: 'MY_APP_GET_PROBLEM'
description: `Problem ${response.getErrorMessages().join('; ')}`,
status: 404
})
}
return response.getData()
}
// Usage
const requestId = 'some-main-event-log-item-list'
try {
const list = await getMainEventLogItemList(requestId)
$logger.info(`List [${list?.length}]`, { requestId, list })
} catch (error) {
if (error instanceof AjaxError) {
$logger.critical(error.message, { requestId, code: error.code })
} else {
$logger.alert('Problem', { requestId, error })
}
}