Аккаунт и настройки
API только для чтения
В этой статье
API только для чтения
В Metricgram есть базовый API только для чтения, чтобы внешние инструменты могли получать данные группы без доступа к панели управления.
Бета: API сейчас находится в тестовом режиме и доступен начиная с тарифа Pro.
Создание токена
Откройте Настройки, перейдите в раздел API-токены, выберите группу и нажмите Создать токен. Скопируйте токен сразу: он показывается только один раз.
Каждый токен привязан к одной группе. Сейчас можно иметь один активный токен на группу и отозвать его в любой момент.
Аутентификация
curl -H "Authorization: Bearer ВАШ_API_ТОКЕН" \
"https://metricgram.com/api/v1/members"
Успешные ответы возвращаются в формате JSON.
Каждый токен ограничен 60 запросами в час.
GET /api/v1/members
Возвращает участников группы, связанной с токеном.
Доступные параметры:
status: all, active, inactive, left или unbanedadmin: true или falseis_bot: true или false. Этот параметр фильтрует только булевы значения; неизвестные значения (null) возвращаются только если фильтр не используется.query: поиск по Telegram ID, username или имениlimit: по умолчанию 100, максимум 500page: по умолчанию 1include_email: true или false. По умолчанию: false. Если true, Metricgram сначала использует email подписки, затем email, сохраненный в записи участника группы. Может бытьnull.
Пример:
curl -G "https://metricgram.com/api/v1/members" \
-H "Authorization: Bearer ВАШ_API_ТОКЕН" \
--data-urlencode "status=active" \
--data-urlencode "limit=100" \
--data-urlencode "include_email=true" \
--data-urlencode "page=1"
Пример ответа JSON:
{
"data": [
{
"telegram_id": "123456789",
"username": "ana",
"first_name": "Ana",
"language_code": "es",
"is_bot": false,
"status": "active",
"joined_at": "2026-04-10T12:30:00Z",
"admin": false,
"email": "ana@example.com"
}
],
"meta": {
"group_id": 42,
"group_title": "Моя группа",
"page": 1,
"limit": 100,
"count": 1,
"has_more": false,
"filters": {
"status": "active"
}
}
}
Основные поля ответа:
telegram_id: ID Telegram в виде строки. Может бытьnull, если Metricgram не сохранил это значение.username,first_nameиlanguage_code: публичные данные Telegram. Могут бытьnull.is_bot:true,falseилиnull, если Telegram не передал это значение.status:active,inactive,left,unbanedилиnull, если статус не сохранен.admin:trueилиfalse.joined_at: дата входа в формате ISO 8601 илиnull.email: возвращается только приinclude_email=true. Metricgram сначала использует email подписки, затем email, сохраненный в записи участника группы. Может бытьnull.meta: данные пагинации и фильтров запроса.
GET /api/v1/active_users
Возвращает неадминистраторов с сообщениями или реакциями за выбранный диапазон дат. Владелец группы исключается из этого списка. Результаты отсортированы по убыванию активности: сначала по activity_count, затем по last_activity_at.
Доступные параметры:
start_date: начальная дата в форматеYYYY-MM-DD. По умолчанию: 30 дней назад.end_date: конечная дата в форматеYYYY-MM-DD. По умолчанию: сегодня.limit: по умолчанию 100, максимум 500page: по умолчанию 1include_email: true или false. По умолчанию: false. Если true, Metricgram сначала использует email подписки, затем email, сохраненный в записи участника группы. Может бытьnull.
Пример:
curl -G "https://metricgram.com/api/v1/active_users" \
-H "Authorization: Bearer ВАШ_API_ТОКЕН" \
--data-urlencode "start_date=2026-04-01" \
--data-urlencode "end_date=2026-04-30" \
--data-urlencode "limit=100" \
--data-urlencode "include_email=true" \
--data-urlencode "page=1"
Пример ответа JSON:
{
"data": [
{
"telegram_id": "123456789",
"username": "ana",
"first_name": "Ana",
"language_code": "es",
"is_bot": null,
"member_status": "active",
"admin": false,
"joined_at": "2026-04-10T12:30:00Z",
"email": "ana@example.com",
"message_count": 18,
"reaction_count": 4,
"activity_count": 22,
"last_message_at": "2026-04-30T19:15:00Z",
"last_reaction_at": null,
"last_activity_at": "2026-04-30T19:15:00Z"
}
],
"meta": {
"group_id": 42,
"group_title": "Моя группа",
"start_date": "2026-04-01",
"end_date": "2026-04-30",
"page": 1,
"limit": 100,
"count": 1,
"has_more": false
}
}
Основные поля ответа:
telegram_id: ID Telegram в виде строки. Может бытьnull, если Metricgram не сохранил это значение.username,first_nameиlanguage_code: публичные данные Telegram. Могут бытьnull.is_bot:true,falseилиnull, если Telegram не передал это значение.member_status: те же текстовые значения, что иstatusв/api/v1/members; может бытьnull, если статус не сохранен.admin:trueилиfalse; в этом эндпоинте обычноfalse, потому что администраторы исключаются.joined_at: дата входа в формате ISO 8601 илиnull.email: возвращается только приinclude_email=true. Metricgram сначала использует email подписки, затем email, сохраненный в записи участника группы. Может бытьnull.message_count,reaction_countиactivity_count: целочисленные счетчики, рассчитанные только за выбранный диапазон дат, а не за всю историю пользователя.activity_countравенmessage_count + reaction_count.last_message_atиlast_reaction_at: дата в формате ISO 8601 илиnull, если активности этого типа не было.last_activity_at: дата последней зарегистрированной активности в формате ISO 8601.meta: данные группы, диапазона дат и пагинации запроса.
GET /api/v1/subscriber_health
Возвращает те же данные, что и панель здоровья подписчиков: активные привязанные подписчики, недавняя активность, сигналы риска, ближайшие продления и разбивка по планам.
По умолчанию используются те же окна, что и в панели: 30 дней для активности и 14 дней для ближайших продлений. Если изменить эти параметры, результаты могут не совпадать с панелью полностью.
Поддерживаемые параметры:
activity_days: количество дней для недавней активности. По умолчанию 30, максимум 365; значения выше 365 ограничиваются до 365.renewal_days: количество дней для ближайших продлений. По умолчанию 14, максимум 90; значения выше 90 ограничиваются до 90.include_email: true или false. По умолчанию: false. Если true, подписчики в зоне риска включают email из записи подписки. Может бытьnull.
Пример:
curl -G "https://metricgram.com/api/v1/subscriber_health" \
-H "Authorization: Bearer ВАШ_API_ТОКЕН" \
--data-urlencode "activity_days=30" \
--data-urlencode "renewal_days=14" \
--data-urlencode "include_email=true"
Пример ответа JSON:
{
"data": {
"total_subscribers": 24,
"activity_days": 30,
"renewal_days": 14,
"activity_range": { "start_date": "2026-04-01", "end_date": "2026-04-30" },
"previous_activity_range": { "start_date": "2026-03-02", "end_date": "2026-03-31" },
"compare_activity_drop": true,
"metrics": {
"engaged": { "count": 18, "percentage": 75 },
"at_risk": { "count": 3, "percentage": 13 },
"upcoming_renewals": { "count": 5, "percentage": 21 }
},
"at_risk_subscribers": [
{
"telegram_id": "123456789",
"username": "ana",
"first_name": "Ana",
"language_code": "es",
"is_bot": false,
"plan_lines": ["Pro ежемесячно", "29 EUR / месяц"],
"subscribed_until": "2026-05-08T10:00:00Z",
"subscription_attention": "renews_on",
"subscription_attention_days": 2,
"risk_indicators": ["activity_drop"],
"risk_score": 1,
"risk_level": "low",
"current_message_count": 2,
"current_reaction_count": 0,
"current_activity_count": 2,
"previous_message_count": 12,
"previous_reaction_count": 1,
"previous_activity_count": 13,
"email": "ana@example.com"
}
],
"plan_rows": [
{
"plan_lines": ["Pro ежемесячно", "29 EUR / месяц"],
"active_count": 12,
"engaged_count": 9,
"at_risk_count": 2,
"engaged_percentage": 75,
"at_risk_percentage": 17
}
]
},
"meta": {
"group_id": 42,
"group_title": "Моя группа"
}
}
Основные поля:
total_subscribers: активные привязанные подписчики, включенные в расчет.activity_range/previous_activity_range: текущий и предыдущий периоды активности.metrics: сводные счетчики и проценты.at_risk_subscribers: подписчики с сигналами риска;risk_indicatorsможет бытьno_activity,activity_dropилиcanceled;risk_levelможет бытьlow,mediumилиhigh.plan_rows: активные привязанные подписчики, сгруппированные по плану подписки.email: возвращается только внутриat_risk_subscribers, когдаinclude_email=true.
Возможные ошибки: 401 unauthorized, 403 forbidden, 400 invalid_date_range и 429 rate_limited.
Была ли эта статья полезной?
Спасибо за ваш отзыв!