For AI agents: markdown of this page — /docs-content-en/calls/sync-followup.md documentation index — /llms.txt
Calls meeting follow-ups
Read meeting follow-ups from Calls with the syncconnector scope. These read-only methods use Bitrix24 REST 3.0 and require syncconnector 26.100.0 and rest 26.1300.0 or later. The scope is available without a feature flag. Method availability depends on the Bitrix24 account update.
Cowork keys and automatically assembled scope sets do not include syncconnector. To read Calls follow-ups, explicitly select this scope for a personal key or an application.
Base URL: https://vibecode.bitrix24.com/v1 | Scope: syncconnector
Operations
| Method | Route | Bitrix24 method |
|---|---|---|
| MethodPOST | Route/v1/calls/sync-followups/list |
Bitrix24 methodsyncconnector.followup.list |
| MethodGET | Route/v1/calls/sync-followups/:followupId |
Bitrix24 methodsyncconnector.followup.get |
Access and identifiers
The response contains only meetings of the webhook owner or the user whose OAuth token is forwarded. This restriction applies to administrators too. filter.participantId cannot expand access: the platform refuses it with 400 INVALID_PARAMS because Calls only returns the key owner meetings. Optional filter.chatId narrows this set.
followupId is the number of a follow-up page: take it from the list item callId. It is not a call number and cannot be matched to classic follow-up ids from Call follow-up.
An application using a personal key shows the key owner meetings to all its users. A multiuser application needs an OAuth application key and the current user session. This determines which user meetings each request reads.
List parameters
Send a JSON body to POST /v1/calls/sync-followups/list.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
Parameterfilter |
Typeobject | RequiredYes | MeaningMeeting filter |
Parameterfilter.startDate |
Typeobject | RequiredYes | MeaningClosed date range |
Parameterfilter.startDate.from |
TypeISO 8601 string | RequiredYes | MeaningStart, including timezone |
Parameterfilter.startDate.to |
TypeISO 8601 string | RequiredYes | MeaningEnd, including timezone; no earlier than from |
Parameterfilter.chatId |
Typepositive integer | RequiredNo | MeaningRestrict to a chat |
Parameterselect |
Typestring array | RequiredNo | MeaningSupported fields below; omitted or [] selects base fields |
Parameterorder.startDate |
Typeasc or desc |
RequiredNo | MeaningThe only supported order field |
ParametermentionFormat |
Typebb, html or none |
RequiredNo | MeaningMention formatting |
Parameterpagination.limit |
Typeinteger | RequiredNo | MeaningWith any AI block or dotted AI field: default 20, max 20; otherwise default 50, max 200; minimum 1 |
Parameterpagination.afterCursor |
Typeobject | RequiredNo | MeaningPrevious response cursor, unchanged |
page, offset, start, unsupported fields, invalid dates and unsupported selection/order/format values return 400 INVALID_PARAMS before Bitrix24 is called. Request bodies and nested parameter objects accept only the fields listed above.
Example requests
Illustrative requests, using your own key and date window:
curl -X POST 'https://vibecode.bitrix24.com/v1/calls/sync-followups/list' \
-H "X-Api-Key: $VIBE_API_KEY" -H 'Content-Type: application/json' \
-d '{"filter":{"startDate":{"from":"2026-11-01T00:00:00Z","to":"2026-11-10T23:59:59Z"}},"select":["callId","chatId","overview"],"pagination":{"limit":20}}'
For an OAuth application key, add Authorization: Bearer <current-user-session-token> alongside X-Api-Key: <application-key>. Do not substitute a shared personal key.
const response = await fetch(`${baseUrl}/v1/calls/sync-followups/list`, {
method: 'POST',
headers: { 'X-Api-Key': apiKey, 'Content-Type': 'application/json' },
body: JSON.stringify({
filter: { startDate: { from: '2026-11-01T00:00:00Z', to: '2026-11-10T23:59:59Z' } },
select: ['callId', 'chatId', 'overview'], pagination: { limit: 20 },
}),
});
const page = (await response.json()).data;
Get parameters
GET /v1/calls/sync-followups/:followupId accepts a positive integer page number. Internally the same number is sent as callId.
| Query parameter | Type | Meaning |
|---|---|---|
Query parameterselect |
Typerepeated or comma-separated field names | MeaningOmit for the full form. ?select= or ?select=[] explicitly selects base fields. These are different requests |
Query parametermentionFormat |
Typebb, html or none |
MeaningMention formatting |
Example: GET /v1/calls/sync-followups/17?select=overview.actionItems&mentionFormat=none. Obtain 17 from your own list response.
Supported selection
Blocks and the listed dotted subfields are supported. Any unknown field returns 400 INVALID_PARAMS.
| Field or block | Supported dotted subfields |
|---|---|
Field or blockcallId, callType, initiatorId, startDate, endDate, durationSeconds, uuid, chatId, participants, tracks, outcomes, language, version, createdAt |
Supported dotted subfieldsMetadata |
Field or blocktranscription |
Supported dotted subfieldstranscription.language, transcription.segments |
Field or blockoverview |
Supported dotted subfieldsoverview.topic, overview.detailedTakeaways, overview.meetingType, overview.agenda, overview.agreements, overview.actionItems, overview.meetings |
Field or blocksummary |
Supported dotted subfieldsEntire block |
Field or blockinsights |
Supported dotted subfieldsinsights.speakerEvaluationAvailable, insights.speakerAnalysis, insights.meetingStrengths, insights.meetingWeaknesses, insights.speechStyleInfluence, insights.engagementLevel, insights.areasOfResponsibility, insights.finalRecommendations |
Field or blockevaluation |
Supported dotted subfieldsevaluation.efficiencyValue, evaluation.calendar, evaluation.criteria |
Selecting any of transcription, overview, summary, insights, evaluation or their supported dotted subfields reduces the list page limit to 20.
Response fields and pagination
The list response is { success: true, data: { items, hasMore, afterCursor } }; get returns { success: true, data: { item } }. Items contain metadata and the selected blocks listed above, as supplied by Bitrix24.
| Field | Meaning |
|---|---|
Fielddata.items |
MeaningArray of follow-up pages; it can be empty while hasMore is true |
Fielddata.hasMore |
MeaningWhether to continue paging |
Fielddata.afterCursor |
MeaningOpaque cursor: pass it unchanged in the next request pagination.afterCursor |
Fielddata.item |
MeaningOne follow-up page on get |
Fielditem.callId |
MeaningFollow-up page number to use as followupId |
| FieldAI blocks | MeaningMay be null while analysis is not ready; they can be filled later. Read again when needed |
Fieldtracks |
MeaningTrack links do not guarantee that a recording can be downloaded |
Stop only when hasMore is false. An empty items page with hasMore: true is not the end; continue with its afterCursor. Do not derive an offset or reinterpret the cursor.
Errors
| HTTP | Code | Condition |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
ConditionInvalid or unsupported parameters, including participantId, page, offset, start, or an AI limit over 20 |
| HTTP401 | CodeUNAUTHORIZED |
ConditionInvalid or missing API key |
| HTTP403 | CodeSCOPE_DENIED |
ConditionThe key has no syncconnector scope |
| HTTP403 | CodeBITRIX_ACCESS_DENIED |
ConditionBitrix24 refused access, including a webhook without the scope |
| HTTP422 | CodeMETHOD_NOT_YET_AVAILABLE |
ConditionRequired account update/module is unavailable; error.release names syncconnector 26.100.0; rest >= 26.1300.0 |
| HTTP422 | CodeBITRIX_ERROR |
ConditionOther Bitrix24 refusal |
See Errors for common authentication, credential and account refusals. Choosing syncconnector explicitly on a personal key fails if the account does not support that scope; it is never silently removed from a human selection.