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.

Terminal
npx nextfy-monitor connect \
  --url https://seusite.com \
  --env-file /apps/seusite/.env.local

Defina 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.

Requisição
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" }'
Resposta 201
{
  "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

RotaMétodosEscopo
/provisionPOSTprojects + monitors + analytics :write
/projectsGET, POST, PATCH, DELETEprojects:*
/monitorsGET, POST, PATCH, DELETEmonitors:*
/ingest-keysGET, POSTanalytics:read / analytics:write
/ingest-keys/{id}POST (rotacionar), DELETE (revogar)analytics:write
/analytics/{projectId}GETanalytics:read
/incidents, /alerts, /errorsGET, PATCHincidents / alerts / errors
/status-pagesGET, POST, PATCH, DELETEstatus-pages:*
/auditGETaudit:read
/openapiGETpú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.

Requisição
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.

Resposta 422
{
  "error": {
    "code": "invalid_field",
    "message": "O campo \"interval_seconds\" precisa ficar entre 30 e 86400."
  }
}
StatuscodeSignificado
401unauthorizedChave ausente, inválida, expirada — ou do tipo errado para a rota.
403forbiddenA chave existe mas não tem o escopo, ou o recurso é de outra organização.
404not_foundRecurso inexistente nesta organização.
409already_existsJá existe registro com esse valor único.
422missing_fieldCampo obrigatório ausente — o nome vem na mensagem.
422invalid_fieldValor fora do intervalo ou do formato aceito.
422invalid_referenceVí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/openapi acompanha estas rotas.

Continue por aqui