События
Лента событий: первое сообщение лиду и ответ лида. Читайте ее по курсору, чтобы узнавать об изменениях без обхода всех лидов.
#Событие lead.first_message_sent
Лиду отправлено первое сообщение. data.first_message есть только при include_text=true.
Поля
objectstringТип объекта, всегдаevent.idstringИдентификатор события:evt_и 32 шестнадцатеричных знака. Ключ дедупликации. Формат^evt_[a-f0-9]{32}$.api_versionstringВерсия формата события. Всегда"2026-10-18".timestampstring (date-time)Когда произошел факт.testbooleanВсегдаfalse.typestringТип события. Всегда"lead.first_message_sent".dataobjectДанные события.Вложенные поля
organization_idstring (uuid)Организация, в которой произошло событие.workspaceobjectПространство на момент события.campaignobject или nullКампания на момент события. Может бытьnull.leadobjectСнимок лида.Вложенные поля
idstring (uuid)Идентификатор лида.usernamestring или nullНик Telegram без@. Может бытьnull.statusstringСтатус лида на момент события. Значения:newcontactedcompletedrepliedblockedfailedsuspendeddeletedopted_outunknownfieldsobjectПоля карточки на момент события.Вложенные поля
- Идентификатор записи во внешней CRM, переданный при загрузке контактов.
null, еслиrecord_id_statusнеvalid. До 128 знаков. - Имя. До 1024 знаков.
- Фамилия. До 1024 знаков.
- Компания. До 1024 знаков.
- Должность. До 1024 знаков.
- Сайт. До 1024 знаков.
- Источник контакта. До 1024 знаков.
- Метка
utm_source. До 1024 знаков. - Метка
utm_medium. До 1024 знаков. - Метка
utm_campaign. До 1024 знаков.
fields_truncatedbooleantrue, если часть значений сокращена.record_id_statusstringНадежностьfields.record_id. В v1 у событий приходитunknown, аfields.record_idравенnull: беритеrecord_idизGET /v1/leads/{id}поdata.lead.id. Значения:validmissingconflictunknown
accountobject или nullАккаунт, который вел переписку.null, если неизвестно.first_message_sent_atstring (date-time) или nullКогда отправлено первое сообщение.null, если отправка не подтверждена; у события ответа это частый случай.- Текст первого сообщения. Только при
include_text=true.Вложенные поля
textstring или nullСохраненный текст, до 4000 знаков.null, если текст недоступен. До 4000 знаков.text_truncatedboolean или nulltrue: текст сокращен;false: текст полный;null: полнота неизвестна.
{
"object": "event",
"id": "evt_3b9e2c7a1f4d4e8a9b6c0d2e5f7a8c91",
"type": "lead.first_message_sent",
"api_version": "2026-10-18",
"timestamp": "2026-10-26T07:30:00.000Z",
"test": false,
"data": {
"organization_id": "2c8f4a61-7d3e-4b9a-8f21-6a0d5e9c3b17",
"workspace": {
"id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Основное пространство"
},
"campaign": {
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"name": "Пример кампании"
},
"lead": {
"id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"username": "example_user",
"status": "contacted",
"fields": {
"record_id": null,
"first_name": "Анна",
"company": "ООО Пример"
},
"fields_truncated": false,
"record_id_status": "unknown"
},
"account": {
"id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"username": "example_sender",
"name": "Мария из Примера"
},
"first_message_sent_at": "2026-10-26T07:30:00.000Z"
}
}#Событие lead.replied
Лид ответил. Приходит на каждый засчитанный ответ, у одного лида их может быть несколько. Поля текста в data.reply есть только при include_text=true.
Поля
objectstringТип объекта, всегдаevent.idstringИдентификатор события:evt_и 32 шестнадцатеричных знака. Ключ дедупликации. Формат^evt_[a-f0-9]{32}$.api_versionstringВерсия формата события. Всегда"2026-10-18".timestampstring (date-time)Когда произошел факт.testbooleanВсегдаfalse.typestringТип события. Всегда"lead.replied".dataobjectДанные события.Вложенные поля
organization_idstring (uuid)Организация, в которой произошло событие.workspaceobjectПространство на момент события.campaignobject или nullКампания на момент события. Может бытьnull.leadobjectСнимок лида.Вложенные поля
idstring (uuid)Идентификатор лида.usernamestring или nullНик Telegram без@. Может бытьnull.statusstringСтатус лида на момент события. Значения:newcontactedcompletedrepliedblockedfailedsuspendeddeletedopted_outunknownfieldsobjectПоля карточки на момент события.Вложенные поля
- Идентификатор записи во внешней CRM, переданный при загрузке контактов.
null, еслиrecord_id_statusнеvalid. До 128 знаков. - Имя. До 1024 знаков.
- Фамилия. До 1024 знаков.
- Компания. До 1024 знаков.
- Должность. До 1024 знаков.
- Сайт. До 1024 знаков.
- Источник контакта. До 1024 знаков.
- Метка
utm_source. До 1024 знаков. - Метка
utm_medium. До 1024 знаков. - Метка
utm_campaign. До 1024 знаков.
fields_truncatedbooleantrue, если часть значений сокращена.record_id_statusstringНадежностьfields.record_id. В v1 у событий приходитunknown, аfields.record_idравенnull: беритеrecord_idизGET /v1/leads/{id}поdata.lead.id. Значения:validmissingconflictunknown
accountobject или nullАккаунт, который вел переписку.null, если неизвестно.first_message_sent_atstring (date-time) или nullКогда отправлено первое сообщение.null, если отправка не подтверждена; у события ответа это частый случай.replyobjectОтвет лида.Вложенные поля
idstring (uuid)Идентификатор ответа.replied_atstring (date-time)Когда пришел ответ.automation_stoppedboolean или nullОстановлена ли цепочка после ответа.null, если остановка не подтверждена. Сейчас всегдаnull.- Первый ли это ответ лида в кампании. Сейчас не передается.
- Текст ответа. Только при
include_text=true. До 4000 знаков. - Признак сокращения текста. Только при
include_text=true.
{
"object": "event",
"id": "evt_8d4f1a6c2e9b4c7d8a3e5f0b1c6d9e27",
"type": "lead.replied",
"api_version": "2026-10-18",
"timestamp": "2026-10-26T09:12:00.000Z",
"test": false,
"data": {
"organization_id": "2c8f4a61-7d3e-4b9a-8f21-6a0d5e9c3b17",
"workspace": {
"id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Основное пространство"
},
"campaign": {
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"name": "Пример кампании"
},
"lead": {
"id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"username": "example_user",
"status": "replied",
"fields": {
"record_id": null,
"first_name": "Анна",
"company": "ООО Пример"
},
"fields_truncated": false,
"record_id_status": "unknown"
},
"account": {
"id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"username": "example_sender",
"name": "Мария из Примера"
},
"first_message_sent_at": null,
"reply": {
"id": "e4b7a2d9-6c1f-4e38-9a5b-0d8c3f7e1a62",
"replied_at": "2026-10-26T09:12:00.000Z",
"automation_stopped": null
}
}
}#Лента событий
GET/v1/events
События в порядке появления: первое сообщение лиду и ответ лида. Опрашивайте ленту по курсору. next_cursor есть всегда, даже у пустой страницы. С include_text=true вес запроса 3.
Параметры
- Сколько объектов вернуть на странице. От 1 до 200. По умолчанию
50. - Значение
next_cursorиз предыдущего ответа. Остальные фильтры должны совпадать с первым запросом. - Только объекты этого пространства.
- Только объекты этой кампании.
- Только события этого типа. Значения:
lead.first_message_sentlead.replied - Добавить тексты сообщений в события. Нужны право
messages:readи включенный «Текст сообщений» у ключа. Значения:truefalseПо умолчаниюfalse. now: начать ленту с текущего момента. Возвращает пустую страницу и курсор. Нельзя вместе сcursor. Значения:now
Ответ
Список: object, data (массив объектов Event), has_more, next_cursor, meta. Подробнее в руководстве Пагинация.
Поле meta
available_fromstring (date-time) или nullС какого момента в ленте есть события.null, если неизвестно.retention_daysstringСколько суток лента хранит события. Всегда30.collectionobjectСостояние сбора сохраненной переписки для API.Вложенные поля
statestringrunning: сбор идет;paused: приостановлен в кабинете;preparing: готовится после включения;degraded: данные могут быть неполными. Значения:runningpausedpreparingdegradedenabled_atstring (date-time) или nullКогда сбор был включен.null, если еще не включен.pause_pendingbooleanПауза или возобновление запрошены в кабинете, но еще не применены.
coverageobjectПолнота ленты событий.Вложенные поля
statusstringcomplete,partialилиunknown. Значения:completepartialunknowngapsarray of objectДо 50 интервалов возможной неполноты. До 50 элементов.gaps_truncatedbooleantrue, если интервалов больше 50.incomplete_fromstring (date-time) или nullСамая ранняя граница скрытых неполных интервалов.null, если таких нет.
observed_atstring (date-time)Время чтения данных сервером.
Особые ошибки
cursor_mismatch: Курсор поврежден, выдан для другого маршрута или фильтров, либо права и охват ключа изменились.scope_required: Ключ не имеет права на это чтение. Для текстов нужен также включенный «Текст сообщений».not_found: Объект не найден или находится вне охвата ключа. Неизвестный путь тоже дает 404.cursor_expired: Срок курсора истек: 15 минут для списков, 30 суток для ленты событий.
Общие ошибки описаны в руководстве Ошибки.
curl -G https://api.melioralab.io/v1/events \
-H "Authorization: Bearer $MELIORA_API_KEY" \
-d limit=100const url = new URL('https://api.melioralab.io/v1/events');
url.searchParams.set('limit', '100');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.MELIORA_API_KEY}` },
});
if (!res.ok) throw new Error(`Meliora API: ${res.status}`);
const body = await res.json();import os
import requests
resp = requests.get(
"https://api.melioralab.io/v1/events",
headers={"Authorization": f"Bearer {os.environ['MELIORA_API_KEY']}"},
params={"limit": 100},
timeout=15,
)
resp.raise_for_status()
body = resp.json(){
"object": "list",
"data": [
{
"object": "event",
"id": "evt_3b9e2c7a1f4d4e8a9b6c0d2e5f7a8c91",
"type": "lead.first_message_sent",
"api_version": "2026-10-18",
"timestamp": "2026-10-26T07:30:00.000Z",
"test": false,
"data": {
"organization_id": "2c8f4a61-7d3e-4b9a-8f21-6a0d5e9c3b17",
"workspace": {
"id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Основное пространство"
},
"campaign": {
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"name": "Пример кампании"
},
"lead": {
"id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"username": "example_user",
"status": "contacted",
"fields": {
"record_id": null,
"first_name": "Анна",
"company": "ООО Пример"
},
"fields_truncated": false,
"record_id_status": "unknown"
},
"account": {
"id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"username": "example_sender",
"name": "Мария из Примера"
},
"first_message_sent_at": "2026-10-26T07:30:00.000Z"
}
},
{
"object": "event",
"id": "evt_8d4f1a6c2e9b4c7d8a3e5f0b1c6d9e27",
"type": "lead.replied",
"api_version": "2026-10-18",
"timestamp": "2026-10-26T09:12:00.000Z",
"test": false,
"data": {
"organization_id": "2c8f4a61-7d3e-4b9a-8f21-6a0d5e9c3b17",
"workspace": {
"id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Основное пространство"
},
"campaign": {
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"name": "Пример кампании"
},
"lead": {
"id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"username": "example_user",
"status": "replied",
"fields": {
"record_id": null,
"first_name": "Анна",
"company": "ООО Пример"
},
"fields_truncated": false,
"record_id_status": "unknown"
},
"account": {
"id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"username": "example_sender",
"name": "Мария из Примера"
},
"first_message_sent_at": null,
"reply": {
"id": "e4b7a2d9-6c1f-4e38-9a5b-0d8c3f7e1a62",
"replied_at": "2026-10-26T09:12:00.000Z",
"automation_stopped": null
}
}
}
],
"has_more": false,
"next_cursor": "v1.k1.Qm9hcmRfMWZ4.c3RyaWN0bHlfb3BhcXVl.dGFnX2V4YW1wbGU.bWFjX2V4YW1wbGVfdmFsdWU",
"meta": {
"available_from": "2026-10-20T08:00:00.000Z",
"retention_days": 30,
"collection": {
"state": "running",
"enabled_at": "2026-10-20T08:00:00.000Z",
"pause_pending": false
},
"coverage": {
"status": "unknown",
"gaps": [],
"gaps_truncated": false,
"incomplete_from": null
},
"observed_at": "2026-10-27T09:15:42.000Z"
}
}{
"object": "list",
"data": [
{
"object": "event",
"id": "evt_3b9e2c7a1f4d4e8a9b6c0d2e5f7a8c91",
"type": "lead.first_message_sent",
"api_version": "2026-10-18",
"timestamp": "2026-10-26T07:30:00.000Z",
"test": false,
"data": {
"organization_id": "2c8f4a61-7d3e-4b9a-8f21-6a0d5e9c3b17",
"workspace": {
"id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Основное пространство"
},
"campaign": {
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"name": "Пример кампании"
},
"lead": {
"id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"username": "example_user",
"status": "contacted",
"fields": {
"record_id": null,
"first_name": "Анна",
"company": "ООО Пример"
},
"fields_truncated": false,
"record_id_status": "unknown"
},
"account": {
"id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"username": "example_sender",
"name": "Мария из Примера"
},
"first_message_sent_at": "2026-10-26T07:30:00.000Z",
"first_message": {
"text": "Добрый день, Анна! Пишу из Примера: подскажите, кто у вас отвечает за аутрич?",
"text_truncated": false,
"text_unavailable": false,
"text_unavailable_reason": null
}
}
},
{
"object": "event",
"id": "evt_8d4f1a6c2e9b4c7d8a3e5f0b1c6d9e27",
"type": "lead.replied",
"api_version": "2026-10-18",
"timestamp": "2026-10-26T09:12:00.000Z",
"test": false,
"data": {
"organization_id": "2c8f4a61-7d3e-4b9a-8f21-6a0d5e9c3b17",
"workspace": {
"id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"name": "Основное пространство"
},
"campaign": {
"id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"name": "Пример кампании"
},
"lead": {
"id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"username": "example_user",
"status": "replied",
"fields": {
"record_id": null,
"first_name": "Анна",
"company": "ООО Пример"
},
"fields_truncated": false,
"record_id_status": "unknown"
},
"account": {
"id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"username": "example_sender",
"name": "Мария из Примера"
},
"first_message_sent_at": null,
"reply": {
"id": "e4b7a2d9-6c1f-4e38-9a5b-0d8c3f7e1a62",
"replied_at": "2026-10-26T09:12:00.000Z",
"automation_stopped": null,
"text": "Здравствуйте! Это я, давайте созвонимся завтра.",
"text_truncated": null,
"text_unavailable": false,
"text_unavailable_reason": null
}
}
}
],
"has_more": false,
"next_cursor": "v1.k1.Qm9hcmRfMWZ4.c3RyaWN0bHlfb3BhcXVl.dGFnX2V4YW1wbGU.bWFjX2V4YW1wbGVfdmFsdWU",
"meta": {
"available_from": "2026-10-20T08:00:00.000Z",
"retention_days": 30,
"collection": {
"state": "running",
"enabled_at": "2026-10-20T08:00:00.000Z",
"pause_pending": false
},
"coverage": {
"status": "unknown",
"gaps": [],
"gaps_truncated": false,
"incomplete_from": null
},
"observed_at": "2026-10-27T09:15:42.000Z"
}
}{
"object": "list",
"data": [],
"has_more": false,
"next_cursor": "v1.k1.Qm9hcmRfMWZ4.c3RyaWN0bHlfb3BhcXVl.dGFnX2V4YW1wbGU.bWFjX2V4YW1wbGVfdmFsdWU",
"meta": {
"available_from": "2026-10-20T08:00:00.000Z",
"retention_days": 30,
"collection": {
"state": "running",
"enabled_at": "2026-10-20T08:00:00.000Z",
"pause_pending": false
},
"coverage": {
"status": "unknown",
"gaps": [],
"gaps_truncated": false,
"incomplete_from": null
},
"observed_at": "2026-10-27T09:15:42.000Z"
}
}