Перейти к основному содержимому

HTTP API

Используйте HTTP API для отправки событий напрямую из Telegram Mini App или сервера.

Telegram WebApp / Mini App

Основной endpoint для приложений на базе Telegram Mini App. Аутентификация происходит через initData из Telegram WebApp SDK — Metriox верифицирует подпись с помощью алгоритма Ed25519.

Endpoint

POST https://ingest.metriox.com/telegram/webapp

Структура запроса

{
"projectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"botId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"auth": {
"initData": "<window.Telegram.WebApp.initData>"
},
"events": [
{
"eventId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"eventName": "button_click",
"eventDate": "2026-04-26T10:00:00Z",
"eventOrigin": "WebApp",
"eventType": "Custom",
"propsString": {
"button_name": "checkout",
"plan": "premium"
},
"propsLong": {
"price": 299
},
"propsFloat": {
"rating": 4.5
},
"propsBool": {
"is_trial": false
}
}
]
}

Поля запроса

ПолеТипОписание
projectIdUUIDID проекта из настроек Metriox
botIdUUIDID бота из настроек Metriox
auth.initDatastringСтрока initData из window.Telegram.WebApp.initData
eventsarrayСписок событий (максимум 1000 за запрос)

Поля события

ПолеОбязательноеТипОписание
eventIdUUIDУникальный ID события (для дедупликации)
eventNamestringНазвание события
eventDateISO 8601Дата и время события
eventOriginstringИсточник события (например, "WebApp")
eventTypestringТип события (например, "Custom")
textstringТекстовое содержимое (опционально)
platformUserIdstringTelegram ID пользователя (определяется автоматически из initData)
propsString{key: string}Строковые свойства события
propsLong{key: number}Целочисленные свойства
propsFloat{key: number}Числа с плавающей запятой
propsBool{key: boolean}Булевы свойства
Разделение props по типам

В отличие от flat props: {}, Metriox использует раздельные поля для каждого типа данных. Это позволяет использовать числовые операторы сравнения (>, <) в фильтрах.

SDK делает это автоматически.

Ответ

202 Accepted:

{
"notConsumedDuplicated": 0,
"moreEventPropertiesFilledThanAllowed": 0
}
ПолеОписание
notConsumedDuplicatedКоличество событий, отклонённых как дубликаты (по eventId)
moreEventPropertiesFilledThanAllowedКоличество событий, превысивших лимит свойств

Пример на JavaScript

async function trackEvent(eventName, props = {}) {
const initData = window.Telegram.WebApp.initData;

const propsString = {};
const propsLong = {};
const propsFloat = {};
const propsBool = {};

for (const [key, value] of Object.entries(props)) {
if (typeof value === "string") propsString[key] = value;
else if (typeof value === "boolean") propsBool[key] = value;
else if (Number.isInteger(value)) propsLong[key] = value;
else if (typeof value === "number") propsFloat[key] = value;
}

await fetch("https://ingest.metriox.com/telegram/webapp", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
projectId: "YOUR_PROJECT_ID",
botId: "YOUR_BOT_ID",
auth: { initData },
events: [
{
eventId: crypto.randomUUID(),
eventName,
eventDate: new Date().toISOString(),
eventOrigin: "WebApp",
eventType: "Custom",
propsString,
propsLong,
propsFloat,
propsBool,
},
],
}),
});
}

// Использование
trackEvent("button_click", {
button_name: "checkout",
price: 299,
is_trial: false,
});
SDK

Для удобства используйте JavaScript SDK — он автоматически разделяет свойства по типам и управляет очередью событий.


Коды ответов

КодОписание
202Accepted — события приняты
400Bad Request — ошибка в структуре запроса
401Unauthorized — невалидный initData
500Server Error — попробуйте позже

Что дальше?

  • SDK — рекомендуемый способ интеграции
  • События — структура событий
  • Типы данных — какие типы свойств поддерживаются