API do Tá Rodando v1
Monitoramento de serviços HTTP via REST — feita pra agentes de IA e humanos. Base: https://tarodando.com.br/api/v1
Introdução
Monitoramento de serviços HTTP com status page em português. Esta referência é escrita pra um agente de IA (ou um humano com pressa) ler e agir.
Formato: JSON. Erros voltam { "error": "<codigo>", "message": "<o que houve e o que fazer>" }.
Autenticação
Toda chamada leva o header Authorization: Bearer trd_live_....
Como obter a chave: peça ao humano — painel em https://tarodando.com.br/app/plano, seção "Chaves de API". Sem conta? Login por email ou GitHub em https://tarodando.com.br/entrar (grátis, sem cartão).
Planos e limites
Grátis: 3 monitores ativos, checagem a cada 5 ou 15 min.
Pro (R$79/mês): 10 monitores, checagem a cada 1 min.
Criar monitor
POST/monitors
Cria um monitor HTTP e roda o primeiro check na hora — o corpo do 201 já reflete o resultado.
Corpo
urlstringobrigatórioendereço público a monitorar — IPs privados são recusados
namestringderivado da URL se omitido
intervalMinintpadrão 5; grátis aceita 5 ou 15, Pro também 1
sectionstringnome do agrupamento na página — casa com seção existente ou cria
URL fora do ar vem com lastStatus: "fail" (não null). lastStatus: null só acontece se o check não pôde nem rodar (erro interno raro) — nesse caso, consulte GET /monitors/{id}. A status page pública fica em statusPage.
/monitorscurl -X POST https://tarodando.com.br/api/v1/monitors \
-H "Authorization: Bearer trd_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://app.exemplo.com.br/healthcheck",
"name": "API",
"intervalMin": 5,
"section": "Backend"
}'const res = await fetch("https://tarodando.com.br/api/v1/monitors", {
method: "POST",
headers: {
Authorization: "Bearer trd_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
"url": "https://app.exemplo.com.br/healthcheck",
"name": "API",
"intervalMin": 5,
"section": "Backend"
}),
});
const data = await res.json();import requests
res = requests.post(
"https://tarodando.com.br/api/v1/monitors",
headers={"Authorization": "Bearer trd_live_..."},
json={"url": "https://app.exemplo.com.br/healthcheck", "name": "API", "intervalMin": 5, "section": "Backend"},
)
data = res.json(){
"monitor": {
"id": "cm9x1a2b3c4d5e6f7g8h9i0j1",
"name": "API",
"url": "https://app.exemplo.com.br/healthcheck",
"intervalMin": 5,
"status": "operational",
"lastStatus": "ok",
"lastCheckedAt": "2026-07-16T12:00:00.000Z",
"section": "Backend",
"paused": false,
"createdAt": "2026-07-16T12:00:00.000Z",
"statusPage": "https://exemplo.tarodando.com.br"
}
}Listar monitores
GET/monitors
Lista todos os monitores da conta, no mesmo shape do criar.
paused: true = monitor além do teto do plano, não está sendo checado. url pode ser null em componentes legados criados manualmente (sem monitoramento) — trate como opcional.
/monitorscurl -X GET https://tarodando.com.br/api/v1/monitors \
-H "Authorization: Bearer trd_live_..."const res = await fetch("https://tarodando.com.br/api/v1/monitors", {
method: "GET",
headers: {
Authorization: "Bearer trd_live_...",
},
});
const data = await res.json();import requests
res = requests.get(
"https://tarodando.com.br/api/v1/monitors",
headers={"Authorization": "Bearer trd_live_..."},
)
data = res.json(){
"monitors": [
{
"id": "cm9x1a2b3c4d5e6f7g8h9i0j1",
"name": "API",
"url": "https://app.exemplo.com.br/healthcheck",
"intervalMin": 5,
"status": "operational",
"lastStatus": "ok",
"lastCheckedAt": "2026-07-16T12:00:00.000Z",
"section": "Backend",
"paused": false,
"createdAt": "2026-07-16T12:00:00.000Z",
"statusPage": "https://exemplo.tarodando.com.br"
}
]
}Detalhe de um monitor
GET/monitors/{id}
Um monitor + resultado da última checagem.
Parâmetros
idstringobrigatórioid do monitor
lastCheck: null = nunca checado.
/monitors/{id}curl -X GET https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1 \
-H "Authorization: Bearer trd_live_..."const res = await fetch("https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1", {
method: "GET",
headers: {
Authorization: "Bearer trd_live_...",
},
});
const data = await res.json();import requests
res = requests.get(
"https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1",
headers={"Authorization": "Bearer trd_live_..."},
)
data = res.json(){
"monitor": {
"id": "cm9x1a2b3c4d5e6f7g8h9i0j1",
"name": "API",
"url": "https://app.exemplo.com.br/healthcheck",
"intervalMin": 5,
"status": "operational",
"lastStatus": "ok",
"lastCheckedAt": "2026-07-16T12:00:00.000Z",
"section": "Backend",
"paused": false,
"createdAt": "2026-07-16T12:00:00.000Z",
"statusPage": "https://exemplo.tarodando.com.br"
},
"lastCheck": {
"ok": true,
"latencyMs": 123,
"error": null,
"checkedAt": "2026-07-16T12:00:00.000Z"
}
}Atualizar monitor
PATCH/monitors/{id}
Corpo com qualquer subconjunto dos campos abaixo. Campos ausentes não mudam.
Parâmetros
idstringobrigatórioid do monitor
Corpo
namestringnovo nome
urlstringnova URL (mesma validação do criar)
intervalMinintnovo intervalo (limites do plano valem)
sectionstring | nullnull remove da seção
/monitors/{id}curl -X PATCH https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1 \
-H "Authorization: Bearer trd_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "API pública",
"intervalMin": 15
}'const res = await fetch("https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1", {
method: "PATCH",
headers: {
Authorization: "Bearer trd_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "API pública",
"intervalMin": 15
}),
});
const data = await res.json();import requests
res = requests.patch(
"https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1",
headers={"Authorization": "Bearer trd_live_..."},
json={"name": "API pública", "intervalMin": 15},
)
data = res.json(){
"monitor": {
"id": "cm9x1a2b3c4d5e6f7g8h9i0j1",
"name": "API",
"url": "https://app.exemplo.com.br/healthcheck",
"intervalMin": 5,
"status": "operational",
"lastStatus": "ok",
"lastCheckedAt": "2026-07-16T12:00:00.000Z",
"section": "Backend",
"paused": false,
"createdAt": "2026-07-16T12:00:00.000Z",
"statusPage": "https://exemplo.tarodando.com.br"
}
}Remover monitor
DELETE/monitors/{id}
Remove o monitor e o serviço correspondente da página.
Parâmetros
idstringobrigatórioid do monitor
/monitors/{id}curl -X DELETE https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1 \
-H "Authorization: Bearer trd_live_..."const res = await fetch("https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1", {
method: "DELETE",
headers: {
Authorization: "Bearer trd_live_...",
},
});
const data = await res.json();import requests
res = requests.delete(
"https://tarodando.com.br/api/v1/monitors/cm9x1a2b3c4d5e6f7g8h9i0j1",
headers={"Authorization": "Bearer trd_live_..."},
)
data = res.json(){ "ok": true }Erros
- 401
unauthorizedchave ausente, inválida ou revogada - 400
invalid_bodycorpo não é JSON - 422
invalid_url / invalid_name / invalid_intervalvalidação — a message diz o que corrigir - 403
plan_limitteto de monitores do plano atingido — upgrade ou remova um - 404
not_found / no_pageid inexistente nesta conta / conta sem página (onboarding pendente)
O que a API v1 NÃO faz
Incidentes, canais de aviso (WhatsApp/Telegram/Slack…) e assinantes são geridos no painel: https://tarodando.com.br/app.