📋 API: События
Полное описание эндпоинтов для работы с событиями — отправка, получение, поиск и аналитика
Базовый URL
Заголовки
| Заголовок | Обязательный | Описание |
|---|---|---|
X-API-Key |
✅ Да | Ваш API-ключ (production или test) |
Content-Type |
✅ Да | application/json |
Структура события
Обязательные поля
| Поле | Тип | Описание | Пример |
|---|---|---|---|
event |
string | Название события. Используйте понятные имена в snake_case |
"purchase", "page_view" |
user_id или anonymous_id |
string | ID пользователя (авторизованного или анонимного). Должен быть передан хотя бы один | "user_12345", "abc123def" |
Опциональные поля
| Поле | Тип | Описание | Пример |
|---|---|---|---|
timestamp |
string (ISO 8601) | Время события. Если не указано, используется серверное | "2026-03-19T10:30:00Z" |
session_id |
string | ID сессии для группировки событий одного визита | "sess_abc123" |
properties |
object | Параметры события. Любые данные в формате JSON | {"page": "/home", "referrer": "google"} |
attributes |
object | Атрибуты пользователя, которые нужно сохранить в профиль | {"email": "user@example.com", "name": "Иван"} |
_metadata |
object | Метаданные для аналитики (см. раздел Метаданные) | {"is_order": true, "funnel_sales_step": 1} |
app_version |
string | Версия вашего приложения для отслеживания изменений | "2.1.0" |
Полный пример события
{
"event": "purchase",
"user_id": "user_12345",
"anonymous_id": "abc-123-def",
"timestamp": "2026-03-19T10:30:00Z",
"session_id": "sess_789xyz",
"app_version": "2.1.0",
"properties": {
"revenue": 1499.99,
"order_id": "ORD-2025-001",
"items": [
{
"id": "prod_1",
"name": "Футболка",
"price": 1999,
"quantity": 2
}
]
},
"attributes": {
"email": "user@example.com",
"name": "Иван Петров",
"phone": "+79001234567"
},
"_metadata": {
"is_order": true,
"funnel_sales_step": 4,
"funnel_sales_name": "Покупка"
}
}
Эндпоинты для событий
1. Отправка события
POST /v1/track — основной эндпоинт для отправки событий.
Пример с curl
curl -X POST https://api.instantbase.online/v1/track \
-H "X-API-Key: ваш_тестовый_ключ" \
-H "Content-Type: application/json" \
-d '{
"event": "test_event",
"user_id": "test_user_123",
"properties": {
"source": "curl",
"test_property": "Hello World!"
}
}'
Успешный ответ (200)
{
"status": "ok",
"message": "Event received",
"queued": true
}
2. Получение ленты событий
GET /api/events/live?limit=20&page=1&search=... — получение событий с пагинацией и поиском.
Параметры запроса
| Параметр | Описание | По умолчанию |
|---|---|---|
limit |
Количество событий на странице | 20 |
page |
Номер страницы | 1 |
search |
Поиск по UID или типу события | — |
Пример запроса
curl -X GET "https://api.instantbase.online/api/events/live?limit=10&search=user_123" \
-H "Cookie: session_id=ваша_сессия"
Пример ответа
{
"events": [
{
"id": 12345,
"occurred_at": "2026-03-19T10:30:00Z",
"event_name": "purchase",
"user_id": "user_123",
"parameters": {
"revenue": 1499.99,
"order_id": "ORD-001"
}
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 156,
"pages": 16
}
}
3. Получение списка событий
GET /api/events/list — список всех типов событий с количеством.
Пример ответа
{
"success": true,
"events": [
{
"id": 1,
"name": "page_view",
"display_name": "Просмотр страницы",
"total_events": 15420
},
{
"id": 2,
"name": "purchase",
"display_name": "Покупка",
"total_events": 2341
}
]
}
4. Топ событий за период
GET /api/events/top?from=...&to=...&limit=10 — самые частые события за период.
Параметры запроса
| Параметр | Описание | По умолчанию |
|---|---|---|
from |
Начальная дата (YYYY-MM-DD) | -7 дней |
to |
Конечная дата (YYYY-MM-DD) | сегодня |
limit |
Максимум событий | 10 |
Пример ответа
[
{
"name": "page_view",
"display_name": "Просмотр страницы",
"total_events": 15420,
"days_active": 7
},
{
"name": "purchase",
"display_name": "Покупка",
"total_events": 2341,
"days_active": 7
}
]
5. Получение сырого события
GET /api/raw-events?event_id=123 — получение исходных данных события (полезно для отладки).
Пример ответа
{
"success": true,
"event_id": 12345,
"raw_data": {
"event": "purchase",
"user_id": "user_123",
"properties": {
"revenue": 1499.99
},
"auth": {
"company_id": 42,
"app_id": 13
}
}
}
Идентификация пользователей
user_id vs anonymous_id
| Поле | Когда использовать | Пример |
|---|---|---|
user_id |
Пользователь авторизован в вашей системе | ID из вашей БД, email, username |
anonymous_id |
Пользователь не авторизован (гость) | Cookie, device ID, fingerprint |
anonymous_id, а потом пользователь авторизовался, отправляйте события с обоими полями — система автоматически свяжет анонимный профиль с авторизованным.
Пример склейки
// Анонимные действия
{
"event": "page_view",
"anonymous_id": "abc123",
"properties": {
"page": "/home"
}
}
// После авторизации
{
"event": "purchase",
"user_id": "user_123",
"anonymous_id": "abc123",
"properties": {
"revenue": 1499.99
}
}
Работа с сессиями
Поле session_id позволяет группировать события одного визита пользователя. Это полезно для анализа пути пользователя и воронок.
{
"event": "page_view",
"user_id": "user_123",
"session_id": "sess_abc123",
"timestamp": "2026-03-19T10:30:00Z"
}
Рекомендации по формированию session_id:
- Генерируйте новый session_id при каждом заходе пользователя на сайт
- Используйте один session_id для всех событий одного визита
- Длина сессии: обычно 30 минут неактивности
Свойства событий (properties)
Поле properties может содержать любые данные в формате JSON. Рекомендуется передавать все важные параметры события.
Рекомендованные свойства для стандартных событий
| Событие | Рекомендованные свойства |
|---|---|
page_view |
page, title, referrer, url |
purchase |
order_id, revenue, items, currency |
signup |
method, source |
add_to_cart |
product_id, price, quantity |
Атрибуты пользователя (attributes)
Поле attributes используется для сохранения или обновления профиля пользователя. Атрибуты сохраняются в профиле и доступны в разделе "Клиенты".
Примеры атрибутов
{
"event": "signup",
"user_id": "user_123",
"attributes": {
"email": "user@example.com",
"name": "Иван Петров",
"phone": "+79001234567",
"birth_date": "1990-01-01",
"city": "Москва",
"subscription_plan": "premium"
}
}
Метаданные (_metadata)
Метаданные используются для обогащения событий бизнес-логикой. Подробнее в разделе Метаданные.
Основные метаданные
| Акроним | Описание | Пример |
|---|---|---|
is_order |
Помечает событие как заказ | true |
is_activation |
Помечает событие как активацию | true |
funnel_sales_step |
Номер шага в воронке продаж | 1, 2, 3 |
funnel_sales_name |
Название шага в воронке | "Просмотр товара" |
event_display_name |
Отображаемое имя события | "Покупка" |
event_color |
Цвет события на графиках | "#FF5733" |
Коды ответов и ошибки
| Код | Описание | Решение |
|---|---|---|
| 200 | Успешно | Событие принято и поставлено в очередь |
| 400 | Неверный JSON | Проверьте синтаксис JSON |
| 400 | Missing required field: event | Добавьте поле event |
| 400 | Either user_id or anonymous_id is required | Добавьте user_id или anonymous_id |
| 401 | Invalid or missing API key | Проверьте ключ в заголовке X-API-Key |
| 429 | Too many requests | Превышен rate limit, подождите |
| 500 | Internal server error | Повторите запрос позже |
Лимиты и квоты
| Тип лимита | Production | Test |
|---|---|---|
| Событий в месяц | Зависит от тарифа | 50 000 |
| Rate limit (запросов/минуту) | 1000 | 200 |
| Размер события | 1 МБ | 1 МБ |
Рекомендации по использованию
- Именование событий: используйте
snake_case(например,page_view,add_to_cart) - Не передавайте чувствительные данные: пароли, номера карт, персональные данные
- Используйте тестовые ключи на этапе разработки
- Группируйте события сессией для анализа пути пользователя
- Передавайте все важные параметры — это поможет в будущем анализе
- Для покупок обязательно передавайте
revenueи метаданные"is_order": true
Примеры интеграции
JavaScript (браузер)
async function trackEvent(eventName, userId, properties = {}) {
try {
const response = await fetch('https://api.instantbase.online/v1/track', {
method: 'POST',
headers: {
'X-API-Key': 'ваш_тестовый_ключ',
'Content-Type': 'application/json'
},
body: JSON.stringify({
event: eventName,
user_id: userId,
properties: properties,
timestamp: new Date().toISOString()
})
});
return await response.json();
} catch (error) {
console.error('Failed to track event:', error);
}
}
Node.js
const axios = require('axios');
async function trackEvent(event, userId, properties = {}) {
try {
const response = await axios.post('https://api.instantbase.online/v1/track', {
event,
user_id: userId,
properties,
timestamp: new Date().toISOString()
}, {
headers: {
'X-API-Key': process.env.INSTANTBASE_API_KEY
}
});
return response.data;
} catch (error) {
console.error('Failed to track event:', error.response?.data || error.message);
}
}
Python
import requests
import os
from datetime import datetime
API_KEY = os.environ.get('INSTANTBASE_API_KEY')
def track_event(event, user_id, properties=None):
url = 'https://api.instantbase.online/v1/track'
headers = {
'X-API-Key': API_KEY,
'Content-Type': 'application/json'
}
data = {
'event': event,
'user_id': user_id,
'properties': properties or {},
'timestamp': datetime.now().isoformat()
}
response = requests.post(url, json=data, headers=headers)
return response.json()
Что дальше?
Остались вопросы по API?
Напишите нам, и мы поможем с интеграцией