EndPoint de Sinais de Negócios
Seu site já sabe quantos usuários tem, quem se registrou hoje, quantos artigos ou perfis existem, quantos pagamentos foram processados e o que está aguardando moderação. Envie esses números para um EndPoint e veja todos os sites que você administra em um único painel — com alertas de anomalias, metas e um benchmark de portfólio. É um EndPoint, não um widget: servidor a servidor, sem dados pessoais, apenas contagens.
O que você pode enviar
Qualquer contador que você nomear. Agrupe-o em uma categoria e nós o mapeamos, o detalhamos e o monitoramos para você.
Usuários
total de usuários, registros por dia, assinantes, exclusões
Conteúdo
materiais de qualquer tipo — artigos, vídeos, perfis, listagens
Receita
tentativas de pagamento, pagamentos bem-sucedidos, reembolsos — além de conversão derivada
Moderação
perfis aguardando exclusão, itens reportados, filas de revisão
Feedback
mensagens de formulário de contato, tickets de suporte, NPS
Mais alguma coisa
nomeie uma métrica e ela aparece — sem configuração do nosso lado
O EndPoint
Exemplos
curl -X POST https://astrina.io/endpoint/ingest \
-H "X-Astrina-Key: YOUR_SITE_KEY" \
-H "Content-Type: application/json" \
-d '{
"signals": [
{ "metric": "users", "kind": "gauge", "value": 15230, "category": "users" },
{ "metric": "registrations", "value": 42, "category": "users" },
{ "metric": "materials", "kind": "gauge", "value": 842, "dim": "article", "category": "content" },
{ "metric": "materials", "kind": "gauge", "value": 301, "dim": "video", "category": "content" },
{ "metric": "payment_requests", "value": 18, "category": "revenue" },
{ "metric": "payment_success", "value": 11, "category": "revenue", "unit": "EUR" },
{ "metric": "feedback", "value": 3, "category": "feedback" },
{ "metric": "profiles_to_delete", "kind": "gauge", "value": 5, "category": "moderation",
"good_dir": "down", "attention": true }
]
}'<?php
// Run this daily (cron) on your own site. Sends only counts — never personal data.
$key = 'YOUR_SITE_KEY';
$payload = ['signals' => [
['metric' => 'users', 'kind' => 'gauge', 'value' => usersTotal(), 'category' => 'users'],
['metric' => 'registrations', 'value' => registrationsToday(), 'category' => 'users'],
['metric' => 'payment_requests', 'value' => paymentAttemptsToday(), 'category' => 'revenue'],
['metric' => 'payment_success', 'value' => paymentsPaidToday(), 'unit' => 'EUR', 'category' => 'revenue'],
['metric' => 'feedback', 'value' => feedbackToday(), 'category' => 'feedback'],
['metric' => 'profiles_to_delete', 'kind' => 'gauge', 'value' => deletionQueue(),
'category' => 'moderation', 'good_dir' => 'down', 'attention' => true],
]];
$ch = curl_init('https://astrina.io/endpoint/ingest');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['X-Astrina-Key: YOUR_SITE_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
]);
$resp = json_decode(curl_exec($ch), true);
// Two-way: act on anything Astrina asks for (e.g. a fresh full snapshot).
foreach ($resp['requests'] ?? [] as $cmd) {
if ($cmd['cmd'] === 'full_snapshot') { /* push your whole history, then: */ }
// acknowledge so it is not re-sent:
// curl https://astrina.io/endpoint/ack -d '{"id": ' . $cmd['id'] . '}'
}<?php
// One-off: backfill a year of daily registrations so the charts start full.
$signals = [];
foreach (registrationsByDay('-365 days') as $day => $n) { // 'YYYY-MM-DD' => int
$signals[] = ['metric' => 'registrations', 'value' => $n, 'day' => $day, 'category' => 'users'];
}
// up to 2000 points per request
foreach (array_chunk($signals, 2000) as $chunk) {
postJson('https://astrina.io/endpoint/ingest', ['signals' => $chunk], 'YOUR_SITE_KEY');
}# Pull this site's computed health BACK (current values, 30-day deltas, target
# progress, open alerts, and the median across YOUR OTHER sites) to show it in-app:
curl "https://astrina.io/endpoint/insights" -H "X-Astrina-Key: YOUR_SITE_KEY"Substitua YOUR_SITE_KEY pela chave do seu painel. Cada site tem sua própria chave; ela só autoriza o envio dos números daquele site.
Campos de sinal
| Campo | Significado | |
|---|---|---|
metric | obrigatório | Any key you choose — users, registrations, materials, payment_success… Stored under this key forever. |
value | obrigatório | The number. For a gauge it is the current total; for a count it is that period's amount. |
kind | opcional | "gauge" (a snapshot total, e.g. total users now) or "count" (per-day amount, the default). |
day | opcional | YYYY-MM-DD. Defaults to today. Send past days to backfill; re-sending a day overwrites it. |
dim | opcional | A breakdown value, e.g. the material type "article"/"video". One series per dimension. |
category | opcional | users · content · revenue · moderation · feedback · engagement · custom — groups the metric. |
unit | opcional | A short unit shown next to the number, e.g. "EUR", "GB". |
good_dir | opcional | "up" (default), "down" (lower is better, e.g. a deletion queue) or "none". |
attention | opcional | true pins the metric to the cross-site cockpit as a "needs clearing" number. |
event | opcional | true + a count with no day increments today instead of overwriting it. |
Bidirecional por design
Comandos de volta
Cada envio retorna quaisquer comandos que você enfileirou no painel — por exemplo, “envie uma captura completa”. Seu site os executa e confirma.
Insights de volta
Chame /endpoint/insights para mostrar seus próprios números ao vivo, metas e alertas dentro do seu painel de administração.
Referência de portfólio
Retornamos a mediana de cada métrica entre seus outros sites, para que um site possa mostrar como se compara ao restante.
Monitoramento de anomalias
Monitoramos quedas acentuadas, picos, uma integração silenciosa e um funil de pagamento que para de converter — e os sinalizamos.