Аналитика: представление
Аналитика: это чтение состояния пользователя. Воронки, удержание и когорты: это запросы к той же живой проекции, на которую действует остальная часть движка.
At a glance
- Host
https://eu.api.prodantix.com- Ingest
POST /v1/events,/v1/identify,/v1/group- Batch size
- 1 to 1000 events per batch
- Answers
202 Accepted: accepted for processing, not yet stored- Auth
projectKeyas a bearer token
- Воронки и удержание вычисляются на живом состоянии, а не ночной свёрткой хранилища
- Когорты определяются один раз и остаются актуальными по мере поступления событий
- Без обращения к SQL, состояние уже сформировано под вопрос
Как это работает
Events land on the EU ingestion host, are buffered through Redpanda and written to ClickHouse. Queries read from ClickHouse, so a funnel over thirty days answers in the same shape whether it spans a thousand events or a billion.
Ingestion answers
202. That is acceptance for processing, not proof of storage, a malformed event is still dropped further down the pipeline.Где обратиться
| Surface | Operation |
|---|---|
| REST | POST /v1/events · POST /v1/identify · POST /v1/group |
| GraphQL | analytics query · events query · dashboards, cohorts |
| MCP | prodantix.analytics.runQuery |
Пример
curl -X POST "https://eu.api.prodantix.com/v1/events" \
-H "Authorization: Bearer $PRODANTIX_KEY" \
-H "Content-Type: application/json" \
-d '{"batch":[{"distinct_id":"u_8f3a","name":"order.completed","properties":{"amount":4200}}]}'prodantix.capture('order.completed', {
properties: { amount: 4200 },
});await prodantix.capture(
'order.completed',
properties: {'amount': 4200},
);prodantix.capture(
"order.completed",
distinct_id="u_8f3a",
properties={"amount": 4200},
)Querying a funnel
GraphQL
query Funnel($projectId: String!) {
analytics {
funnel(
projectId: $projectId
steps: ["signup.started", "signup.completed", "order.completed"]
window: "P30D"
) {
step
users
conversion
}
}
}