История статусов
Изменения статусов лидов, кампаний и аккаунтов, начальный снимок и полнота доступной истории.
#Объект LeadStatusTransition
Фактическое изменение статуса. Набор статусов зависит от entity_kind.
Поля
objectstringТип объекта, всегдаmessage.idstring (uuid)Непрозрачный устойчивый идентификатор сообщения. Не разбирайте его формат.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"lead".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.from_statusstringПредыдущий публичный статус. Неизвестное значение передается какunknown. Значения:newcontactedcompletedrepliedblockedfailedsuspendeddeletedopted_outunknownto_statusstringНовый публичный статус. Неизвестное значение передается какunknown. Значения:newcontactedcompletedrepliedblockedfailedsuspendeddeletedopted_outunknownreason_codestringПричина изменения статуса.unspecified, если причина неизвестна. Значения:operator_actionschedulequeue_exhaustedrecipient_not_foundtelegram_authsubscriptionrecoveryunspecifiedsourcestringИсточник записи.unknown, если он неизвестен. У статистики всегдаtask_states. Значения:usersystemsupportunknownoccurred_atstring (date-time)Когда произошло изменение.recorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.
{
"object": "status_transition",
"id": "00000000-0000-4000-8000-000000000001",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_kind": "lead",
"entity_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_revision": 1,
"from_status": "new",
"to_status": "contacted",
"reason_code": "operator_action",
"source": "user",
"occurred_at": "2026-10-27T09:15:42.000Z",
"recorded_at": "2026-10-27T09:15:42.000Z"
}#Объект CampaignStatusTransition
Фактическое изменение статуса. Набор статусов зависит от entity_kind.
Поля
objectstringТип объекта, всегдаmessage.idstring (uuid)Непрозрачный устойчивый идентификатор сообщения. Не разбирайте его формат.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"campaign".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.from_statusstringПредыдущий публичный статус. Неизвестное значение передается какunknown. Значения:draftscheduledactivepausedstoppedcompletedarchivedlaunchingfailedpaused_no_creditsunknownto_statusstringНовый публичный статус. Неизвестное значение передается какunknown. Значения:draftscheduledactivepausedstoppedcompletedarchivedlaunchingfailedpaused_no_creditsunknownreason_codestringПричина изменения статуса.unspecified, если причина неизвестна. Значения:operator_actionschedulequeue_exhaustedrecipient_not_foundtelegram_authsubscriptionrecoveryunspecifiedsourcestringИсточник записи.unknown, если он неизвестен. У статистики всегдаtask_states. Значения:usersystemsupportunknownoccurred_atstring (date-time)Когда произошло изменение.recorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.
{
"object": "status_transition",
"id": "00000000-0000-4000-8000-000000000002",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": null,
"entity_kind": "campaign",
"entity_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"entity_revision": 1,
"from_status": "draft",
"to_status": "active",
"reason_code": "operator_action",
"source": "user",
"occurred_at": "2026-10-27T09:15:42.000Z",
"recorded_at": "2026-10-27T09:15:42.000Z"
}#Объект AccountStatusTransition
Фактическое изменение статуса. Набор статусов зависит от entity_kind.
Поля
objectstringТип объекта, всегдаmessage.idstring (uuid)Непрозрачный устойчивый идентификатор сообщения. Не разбирайте его формат.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"account".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.from_statusstringПредыдущий публичный статус. Неизвестное значение передается какunknown. Значения:onlineofflinelimitedbanneddeletedlockedunauthorizedpausedunknownto_statusstringНовый публичный статус. Неизвестное значение передается какunknown. Значения:onlineofflinelimitedbanneddeletedlockedunauthorizedpausedunknownreason_codestringПричина изменения статуса.unspecified, если причина неизвестна. Значения:operator_actionschedulequeue_exhaustedrecipient_not_foundtelegram_authsubscriptionrecoveryunspecifiedsourcestringИсточник записи.unknown, если он неизвестен. У статистики всегдаtask_states. Значения:usersystemsupportunknownoccurred_atstring (date-time)Когда произошло изменение.recorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.
{
"object": "status_transition",
"id": "00000000-0000-4000-8000-000000000003",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": null,
"entity_kind": "account",
"entity_id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"entity_revision": 1,
"from_status": "online",
"to_status": "paused",
"reason_code": "operator_action",
"source": "user",
"occurred_at": "2026-10-27T09:15:42.000Z",
"recorded_at": "2026-10-27T09:15:42.000Z"
}#Объект StatusBaseline
Начальный снимок статуса. Не является переходом и не создает событие смены статуса.
Поля
Вариант 1
objectstringТип объекта, всегдаmessage.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"lead".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.statusstringПубличный статус или состояние полноты. Неизвестное значение передается какunknown. Значения:newcontactedcompletedrepliedblockedfailedsuspendeddeletedopted_outunknownrecorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.provenancestringВсегдаbaseline: начальный снимок, а не изменение статуса.
Вариант 2
objectstringТип объекта, всегдаmessage.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"campaign".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.statusstringПубличный статус или состояние полноты. Неизвестное значение передается какunknown. Значения:draftscheduledactivepausedstoppedcompletedarchivedlaunchingfailedpaused_no_creditsunknownrecorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.provenancestringВсегдаbaseline: начальный снимок, а не изменение статуса.
Вариант 3
objectstringТип объекта, всегдаmessage.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"account".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.statusstringПубличный статус или состояние полноты. Неизвестное значение передается какunknown. Значения:onlineofflinelimitedbanneddeletedlockedunauthorizedpausedunknownrecorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.provenancestringВсегдаbaseline: начальный снимок, а не изменение статуса.
{
"object": "status_baseline",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_kind": "lead",
"entity_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_revision": 0,
"status": "new",
"recorded_at": "2026-10-26T07:30:00.000Z",
"provenance": "baseline"
}#История статусов лида
GET/v1/leads/{id}/status-history
Фактические изменения статуса лида по возрастанию entity_revision. Начальный снимок находится отдельно в meta.baseline. Новые возможности включаются для кабинета по запросу.
Параметры
- Идентификатор лида.
- Сколько объектов вернуть на странице. От 1 до 100. По умолчанию
50. - Значение
next_cursorиз предыдущего ответа. Остальные фильтры должны совпадать с первым запросом.
Ответ
Список: object, data (массив объектов LeadStatusTransition), has_more, next_cursor, meta. Подробнее в руководстве Пагинация.
Поле meta
baselineobject или nullНачальный снимок статуса илиnull. Это не переход и не доказательство более ранней истории.Вложенные поля
objectstringТип объекта, всегдаmessage.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"lead".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.statusstringПубличный статус или состояние полноты. Неизвестное значение передается какunknown. Значения:newcontactedcompletedrepliedblockedfailedsuspendeddeletedopted_outunknownrecorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.provenancestringВсегдаbaseline: начальный снимок, а не изменение статуса.
available_fromstring (date-time) или nullНачало периода, за который есть данные.null, если неизвестно.history_started_atstring (date-time) или nullКогда началось ведение истории. Более ранние изменения не восстанавливаются.retained_fromstring (date-time) или nullНачало сохраненного периода истории илиnull, если неизвестно.completenessobjectПолнота данных.has_more=falseозначает конец страниц, а не полноту истории.Вложенные поля
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 https://api.melioralab.io/v1/leads/5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31/status-history \
-H "Authorization: Bearer $MELIORA_API_KEY"const res = await fetch('https://api.melioralab.io/v1/leads/5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31/status-history', {
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/leads/5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31/status-history",
headers={"Authorization": f"Bearer {os.environ['MELIORA_API_KEY']}"},
timeout=15,
)
resp.raise_for_status()
body = resp.json(){
"object": "list",
"data": [
{
"object": "status_transition",
"id": "00000000-0000-4000-8000-000000000001",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_kind": "lead",
"entity_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_revision": 1,
"from_status": "new",
"to_status": "contacted",
"reason_code": "operator_action",
"source": "user",
"occurred_at": "2026-10-27T09:15:42.000Z",
"recorded_at": "2026-10-27T09:15:42.000Z"
}
],
"has_more": false,
"next_cursor": null,
"meta": {
"baseline": {
"object": "status_baseline",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_kind": "lead",
"entity_id": "5a7c3e92-1f4b-4d68-9c2e-7b0a6d4f8e31",
"entity_revision": 0,
"status": "new",
"recorded_at": "2026-10-26T07:30:00.000Z",
"provenance": "baseline"
},
"available_from": "2026-10-26T07:30:00.000Z",
"history_started_at": "2026-10-26T07:30:00.000Z",
"retained_from": "2026-10-26T07:30:00.000Z",
"completeness": {
"status": "complete",
"gaps": [],
"gaps_truncated": false,
"incomplete_from": null
},
"observed_at": "2026-10-27T09:15:42.000Z"
}
}#История статусов кампании
GET/v1/campaigns/{id}/status-history
Фактические изменения статуса кампании по возрастанию entity_revision. Новые возможности включаются для кабинета по запросу.
Параметры
- Идентификатор кампании.
- Сколько объектов вернуть на странице. От 1 до 100. По умолчанию
50. - Значение
next_cursorиз предыдущего ответа. Остальные фильтры должны совпадать с первым запросом.
Ответ
Список: object, data (массив объектов CampaignStatusTransition), has_more, next_cursor, meta. Подробнее в руководстве Пагинация.
Поле meta
baselineobject или nullНачальный снимок статуса илиnull. Это не переход и не доказательство более ранней истории.Вложенные поля
objectstringТип объекта, всегдаmessage.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"campaign".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.statusstringПубличный статус или состояние полноты. Неизвестное значение передается какunknown. Значения:draftscheduledactivepausedstoppedcompletedarchivedlaunchingfailedpaused_no_creditsunknownrecorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.provenancestringВсегдаbaseline: начальный снимок, а не изменение статуса.
available_fromstring (date-time) или nullНачало периода, за который есть данные.null, если неизвестно.history_started_atstring (date-time) или nullКогда началось ведение истории. Более ранние изменения не восстанавливаются.retained_fromstring (date-time) или nullНачало сохраненного периода истории илиnull, если неизвестно.completenessobjectПолнота данных.has_more=falseозначает конец страниц, а не полноту истории.Вложенные поля
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 https://api.melioralab.io/v1/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14/status-history \
-H "Authorization: Bearer $MELIORA_API_KEY"const res = await fetch('https://api.melioralab.io/v1/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14/status-history', {
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/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14/status-history",
headers={"Authorization": f"Bearer {os.environ['MELIORA_API_KEY']}"},
timeout=15,
)
resp.raise_for_status()
body = resp.json(){
"object": "list",
"data": [
{
"object": "status_transition",
"id": "00000000-0000-4000-8000-000000000002",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": null,
"entity_kind": "campaign",
"entity_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"entity_revision": 1,
"from_status": "draft",
"to_status": "active",
"reason_code": "operator_action",
"source": "user",
"occurred_at": "2026-10-27T09:15:42.000Z",
"recorded_at": "2026-10-27T09:15:42.000Z"
}
],
"has_more": false,
"next_cursor": null,
"meta": {
"baseline": {
"object": "status_baseline",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": null,
"entity_kind": "campaign",
"entity_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"entity_revision": 0,
"status": "draft",
"recorded_at": "2026-10-26T07:30:00.000Z",
"provenance": "baseline"
},
"available_from": "2026-10-26T07:30:00.000Z",
"history_started_at": "2026-10-26T07:30:00.000Z",
"retained_from": "2026-10-26T07:30:00.000Z",
"completeness": {
"status": "complete",
"gaps": [],
"gaps_truncated": false,
"incomplete_from": null
},
"observed_at": "2026-10-27T09:15:42.000Z"
}
}#История статусов аккаунта кампании
GET/v1/campaigns/{id}/accounts/{account_id}/status-history
История аккаунта в контексте выбранной кампании, без раскрытия других кампаний. Новые возможности включаются для кабинета по запросу.
Параметры
- Идентификатор кампании.
- Идентификатор аккаунта.
- Сколько объектов вернуть на странице. От 1 до 100. По умолчанию
50. - Значение
next_cursorиз предыдущего ответа. Остальные фильтры должны совпадать с первым запросом.
Ответ
Список: object, data (массив объектов AccountStatusTransition), has_more, next_cursor, meta. Подробнее в руководстве Пагинация.
Поле meta
baselineobject или nullНачальный снимок статуса илиnull. Это не переход и не доказательство более ранней истории.Вложенные поля
objectstringТип объекта, всегдаmessage.workspace_idstring (uuid)Идентификатор пространства.campaign_idstring (uuid)Идентификатор кампании.lead_idstring (uuid) или nullИдентификатор участия лида в кампании. В истории кампании или аккаунта может бытьnull.entity_kindstringВид объекта: лид, кампания или аккаунт. Всегда"account".entity_idstring (uuid)Идентификатор объекта, статус которого изменился.entity_revisionintegerПорядковый номер записи для объекта. Переходы начинаются с 1, начальный снимок может иметь номер 0.statusstringПубличный статус или состояние полноты. Неизвестное значение передается какunknown. Значения:onlineofflinelimitedbanneddeletedlockedunauthorizedpausedunknownrecorded_atstring (date-time)Когда изменение или начальный снимок были сохранены.provenancestringВсегдаbaseline: начальный снимок, а не изменение статуса.
available_fromstring (date-time) или nullНачало периода, за который есть данные.null, если неизвестно.history_started_atstring (date-time) или nullКогда началось ведение истории. Более ранние изменения не восстанавливаются.retained_fromstring (date-time) или nullНачало сохраненного периода истории илиnull, если неизвестно.completenessobjectПолнота данных.has_more=falseозначает конец страниц, а не полноту истории.Вложенные поля
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 https://api.melioralab.io/v1/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14/accounts/1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83/status-history \
-H "Authorization: Bearer $MELIORA_API_KEY"const res = await fetch('https://api.melioralab.io/v1/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14/accounts/1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83/status-history', {
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/campaigns/4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14/accounts/1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83/status-history",
headers={"Authorization": f"Bearer {os.environ['MELIORA_API_KEY']}"},
timeout=15,
)
resp.raise_for_status()
body = resp.json(){
"object": "list",
"data": [
{
"object": "status_transition",
"id": "00000000-0000-4000-8000-000000000003",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": null,
"entity_kind": "account",
"entity_id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"entity_revision": 1,
"from_status": "online",
"to_status": "paused",
"reason_code": "operator_action",
"source": "user",
"occurred_at": "2026-10-27T09:15:42.000Z",
"recorded_at": "2026-10-27T09:15:42.000Z"
}
],
"has_more": false,
"next_cursor": null,
"meta": {
"baseline": {
"object": "status_baseline",
"workspace_id": "3f6a9d21-8b4c-4e7f-a102-5c9e8d7b6a43",
"campaign_id": "4d8b2f73-6e1a-4c95-b7d0-8a3f5e2c9b14",
"lead_id": null,
"entity_kind": "account",
"entity_id": "1d9f6b28-4c3e-4a75-8b19-5e7a2c0f6d83",
"entity_revision": 0,
"status": "online",
"recorded_at": "2026-10-26T07:30:00.000Z",
"provenance": "baseline"
},
"available_from": "2026-10-26T07:30:00.000Z",
"history_started_at": "2026-10-26T07:30:00.000Z",
"retained_from": "2026-10-26T07:30:00.000Z",
"completeness": {
"status": "complete",
"gaps": [],
"gaps_truncated": false,
"incomplete_from": null
},
"observed_at": "2026-10-27T09:15:42.000Z"
}
}