UPTIME
Monitoramento de uptime
Cadastre uma URL, a gente checa ela periodicamente e guarda o histórico. Como o Cron, criar um monitor não checa nada na hora — a checagem acontece depois, num worker separado.
Uptime monitoring
Register a URL, we check it on a schedule and keep the history. Like Cron, creating a monitor doesn't check anything right away — the check happens later, in a separate worker.
ASYNC a resposta confirma, não checa the response confirms, it doesn't run the check
Endpoints
Endpoints
/api/v1/uptime/monitors
cria um monitorcreates a monitor
/api/v1/uptime/monitors
lista seus monitoreslists your monitors
/api/v1/uptime/monitors/{id}
detalhe de um monitora single monitor's detail
/api/v1/uptime/monitors/{id}
atualiza um monitorupdates a monitor
/api/v1/uptime/monitors/{id}
remove um monitordeletes a monitor
/api/v1/uptime/monitors/{id}/checks
histórico de checagenscheck history
/api/v1/uptime/worker/status
status do worker de checagemcheck worker's status
/api/v1/uptime/worker/stop
pausa o worker — adminpauses the worker — admin only
/api/v1/uptime/worker/start
retoma o worker — adminresumes the worker — admin only
Diferente do Cron (onde o histórico de execução é uso administrativo), aqui o histórico de checagens É o produto — você contratou a API pra ver o uptime do que está monitorando, então /checks é liberado pra qualquer cliente autenticado ver os próprios monitores.
Unlike Cron (where execution history is an administrative concern), here the check history IS the product — you're using the API to see the uptime of what you're monitoring, so /checks is open to any authenticated client for their own monitors.
Campos do monitor
Monitor fields
| Campo | Field | Descrição | Description |
|---|---|---|---|
name | nome do monitor | the monitor's name | |
url | URL a checar, com http:// ou https:// | the URL to check, with http:// or https:// | |
method | opcional, padrão "GET" — "GET", "HEAD" ou "POST" | optional, defaults to "GET" — "GET", "HEAD" or "POST" | |
expected_status | opcional, padrão 200 — o código HTTP que conta como "no ar"; qualquer outro (ou erro de conexão) conta como "fora do ar" | optional, defaults to 200 — the HTTP status that counts as "up"; anything else (or a connection error) counts as "down" | |
interval_sec | opcional, padrão 300 (5min) — intervalo entre checagens, com piso configurável pra evitar martelar um alvo | optional, defaults to 300 (5min) — interval between checks, with a configurable floor to avoid hammering a target | |
timeout_sec | opcional, padrão 10 — tempo máximo esperando resposta antes de contar como falha | optional, defaults to 10 — max time waiting for a response before counting it as a failure |
Exemplo
Example
# criar — devolve o monitor com id, não o resultado de checar nada# create — returns the monitor with an id, not the result of checking anything
curl -X POST https://api.alicercelabs.com.br/api/v1/uptime/monitors \
-H "Authorization: Bearer <token>" \
-d '{
"name": "meu site",
"url": "https://exemplo.com.br",
"interval_sec": 300,
"timeout_sec": 10
}'
{
"success": true,
"data": {
"id": "cde438c0-...",
"name": "meu site",
"url": "https://exemplo.com.br",
"method": "GET",
"expected_status": 200,
"interval_sec": 300,
"timeout_sec": 10,
"active": true,
"last_check_at": null,
"last_status": "unknown",
"created_at": "2026-08-22T11:38:41Z"
},
"meta": { "elapsed_ms": 4, "request_id": "..." }
}
Repare em last_status: "unknown" — o monitor existe, mas ainda não foi checado. Espere um pouco (o worker tickeia a cada 10s) e consulte GET /monitors/{id}/checks pra ver a primeira checagem.
Note last_status: "unknown" — the monitor exists, but hasn't been checked yet. Wait a bit (the worker ticks every 10s) and query GET /monitors/{id}/checks to see the first check.
Por que é assíncrona
Why it's async
Mesmo raciocínio do Cron: o worker de checagem não mantém uma agenda em memória — a cada 10 segundos, ele reconsulta o banco por monitores com interval_sec vencido e checa cada um. Um monitor criado ou editado é simplesmente pego na próxima checagem devida, sem sinal de "recarregar" entre a API e o worker. Sem o worker rodando (GET /worker/status), monitores ficam cadastrados mas nenhum é checado.
Same reasoning as Cron: the check worker doesn't keep a schedule in memory — every 10 seconds, it re-queries the database for monitors whose interval_sec has elapsed and checks each one. A monitor created or edited is simply picked up on its next due check, with no "reload" signal between the API and the worker. Without the worker running (GET /worker/status), monitors stay registered but none of them get checked.
Erros possíveis
Possible errors
| Status | Motivo | Reason |
|---|---|---|
| 400 | campos obrigatórios ausentes, url sem http(s)://, method não suportado, expected_status fora de 100-599, ou interval_sec/timeout_sec fora dos limites configurados | missing required fields, url without http(s)://, unsupported method, expected_status outside 100-599, or interval_sec/timeout_sec outside the configured bounds |
| 401 | token ausente ou inválido | missing or invalid token |
| 403 | worker/stop ou worker/start chamado por conta que não é admin | worker/stop or worker/start called by a non-admin account |
| 404 | monitor não encontrado, ou não pertence a você | monitor not found, or it isn't yours |
| 429 | limite de taxa excedido — cada operação tem cota própria | rate limit exceeded — each operation has its own quota |
Limites
Limits
10.000/dia · 416/hora por operação. Sem alertas por email/webhook nesta versão — o histórico de checagens fica registrado e disponível via /checks, mas não há notificação ativa quando um monitor cai.
10,000/day · 416/hour per operation. No email/webhook alerts in this version — check history is recorded and available via /checks, but there's no active notification when a monitor goes down.