Integrações
API de gestão
Crie projetos, monitores e chaves de ingestão sem abrir o painel. Base: https://nextfymonitor.nextfy.pro/api/v1
Duas chaves diferentes
O Nextfy Monitor usa duas credenciais com finalidades distintas. Trocar uma pela outra devolve 401 nas duas direções — se um 401 aparecer com a chave “certa”, confira primeiro se ela é do tipo certo para aquela rota.
nf_live_…
Chave de gestão — servidor
- Vai no header "Authorization: Bearer".
- Autentica esta API: projetos, monitores, incidentes, relatórios.
- É secreta. Nunca no navegador, nunca no bundle, nunca em repositório.
- Criada em Configurações → API de gestão, com escopos por recurso.
pk_nextfy_…
Chave de ingestão — navegador
- Vai no atributo data-key do SDK, ou no header X-Nextfy-Key.
- Só serve para enviar page views, eventos e erros.
- É pública por natureza: fica visível no HTML do seu site.
- Vale apenas para as origens declaradas — de outro domínio, é recusada.
Nenhuma das duas pode ser lida depois de criada: o banco guarda apenas o hash. Perdeu, rotaciona.
Conectar um site em um comando
O comando abaixo cria projeto, monitor e chave de ingestão, e grava as variáveis no .env do site. Conectar o próximo produto é a mesma linha trocando o domínio.
npx nextfy-monitor connect \
--url https://seusite.com \
--env-file /apps/seusite/.env.localDefina NEXTFY_API_URL e NEXTFY_API_TOKEN no ambiente. Passar a chave por argumento a deixa no histórico do shell e na lista de processos.
POST /provision
O mesmo que o comando faz, por HTTP. Idempotente pelo slug do domínio: repetir não duplica projeto nem monitor.
curl -X POST https://nextfymonitor.nextfy.pro/api/v1/provision \
-H "Authorization: Bearer nf_live_..." \
-H "Content-Type: application/json" \
-d '{ "url": "https://seusite.com" }'{
"data": {
"project": { "id": "...", "name": "seusite.com", "slug": "seusite-com" },
"monitor": { "id": "...", "url": "https://seusite.com" },
"ingest_key": { "id": "...", "key": "pk_nextfy_...", "created": true },
"snippet": "<script defer src=\"https://nextfymonitor.nextfy.pro/sdk/v1.js\" data-key=\"pk_nextfy_...\" data-endpoint=\"https://nextfymonitor.nextfy.pro/api/v1/analytics\"></script>",
"env": "NEXTFY_INGEST_KEY=pk_nextfy_...\nNEXTFY_INGEST_URL=https://nextfymonitor.nextfy.pro/api/v1/analytics",
"idempotent": { "project_created": true, "monitor_created": true, "key_created": true }
}
}Numa repetição, ingest_key.key volta null — o valor não é recuperável. Envie "rotate_key": true para gerar outro. Exige os escopos projects:write, monitors:write e analytics:write.
Recursos
| Rota | Métodos | Escopo |
|---|---|---|
| /provision | POST | projects + monitors + analytics :write |
| /projects | GET, POST, PATCH, DELETE | projects:* |
| /monitors | GET, POST, PATCH, DELETE | monitors:* |
| /ingest-keys | GET, POST | analytics:read / analytics:write |
| /ingest-keys/{id} | POST (rotacionar), DELETE (revogar) | analytics:write |
| /analytics/{projectId} | GET | analytics:read |
| /incidents, /alerts, /errors | GET, PATCH | incidents / alerts / errors |
| /status-pages | GET, POST, PATCH, DELETE | status-pages:* |
| /audit | GET | audit:read |
| /openapi | GET | público |
Criar um monitor
Só project_id, name e url são obrigatórios. O tipo do monitor é derivado do esquema da URL — não envie type.
curl -X POST https://nextfymonitor.nextfy.pro/api/v1/monitors \
-H "Authorization: Bearer nf_live_..." \
-H "Content-Type: application/json" \
-d '{
"project_id": "00000000-0000-0000-0000-000000000000",
"name": "Uptime",
"url": "https://seusite.com"
}'Opcionais e seus limites: method (GET ou HEAD), interval_seconds (30 a 86400), timeout_ms (1000 a 30000), expected_status_min e expected_status_max (100 a 599), expected_content (só com method GET), failure_threshold e recovery_threshold (1 a 10).
Erros
Toda recusa de escrita diz qual campo está errado e por quê, em vez de uma mensagem genérica.
{
"error": {
"code": "invalid_field",
"message": "O campo \"interval_seconds\" precisa ficar entre 30 e 86400."
}
}| Status | code | Significado |
|---|---|---|
| 401 | unauthorized | Chave ausente, inválida, expirada — ou do tipo errado para a rota. |
| 403 | forbidden | A chave existe mas não tem o escopo, ou o recurso é de outra organização. |
| 404 | not_found | Recurso inexistente nesta organização. |
| 409 | already_exists | Já existe registro com esse valor único. |
| 422 | missing_field | Campo obrigatório ausente — o nome vem na mensagem. |
| 422 | invalid_field | Valor fora do intervalo ou do formato aceito. |
| 422 | invalid_reference | Vínculo apontando para registro que não existe nesta organização. |
Limites
- Listagens devolvem no máximo 100 registros, do mais recente para o mais antigo.
- Uma chave de ingestão aceita até 20 origens.
- A ingestão aceita 60 requisições por minuto e 20 eventos por requisição.
- O contrato em
/api/v1/openapiacompanha estas rotas.
