Pular para o conteúdo principal
14 min de leitura

Endpoints da API

Zenovay oferece vários grupos de endpoints de API para acessar seus dados de análise programaticamente.

Autenticação

Todas as solicitações de API requerem autenticação. O método depende de qual API você usa:

APIMétodo de AuthHeaderCaso de Uso
External APIAPI KeyX-API-Key: YOUR_API_KEYIntegrações do lado do servidor, incorporação de análises
Dashboard APIs (Conversations, Settings, Onboarding, Teams, Users)Bearer JWTAuthorization: Bearer <token>Operações de dashboard e serviço interno
WidgetsNenhum (público)N/AWidgets incorporáveis usando código de rastreamento
Real-Time DataNenhum (público)N/AContagens de visitantes ao vivo usando código de rastreamento

Mantenha sua chave de API segura. Nunca a exponha em código do lado do cliente ou a registre no controle de versão. Obtenha sua chave de API em Configurações → Segurança → Chaves de API no painel.

Consulte Autenticação para detalhes sobre gerenciamento de chaves de API.

API Externa

URL base: https://api.zenovay.com/api/external/v1

API do lado do servidor para acessar dados de análise com autenticação de chave de API (header X-API-Key).

Endpoints Disponíveis

MétodoCaminhoDescrição
GET/usageEstatísticas de uso da API
GET/websitesListar todos os sites
GET/websites/:idObter detalhes do site
GET/analytics/:websiteIdResumo completo de análises
GET/analytics/:websiteId/visitorsDados de visitantes
GET/analytics/:websiteId/pagesEstatísticas de páginas
GET/analytics/:websiteId/countriesDados geográficos
GET/analytics/:websiteId/technologyDetalhamento de tecnologia
GET/heatmaps/:websiteId/pagesDados de página de mapa de calor
GET/replays/:websiteId/sessionsDados de reprodução de sessão
GET/errors/:websiteId/groupsGrupos de rastreamento de erros

Cada endpoint tem uma página de referência dedicada com parâmetros, esquemas de resposta, interfaces TypeScript e exemplos de código em cURL, JavaScript, Python e TypeScript.

Consulte também a visão geral da API Externa para uma introdução de alto nível.

Widgets Incorporáveis

URL base: https://api.zenovay.com/widgets

Widgets prontos para usar que não requerem autenticação. Use seu código de rastreamento para identificar o site.

MétodoCaminhoDescrição
GET/:trackingCode/realtimeWidget de contagem de visitantes ao vivo
GET/:trackingCode/previewWidget de linha do tempo de 24 horas
GET/:trackingCode/recentWidget de detalhamento por país

Consulte Widgets para exemplos de incorporação.

Dados em Tempo Real

URL base: https://api.zenovay.com/e

Endpoints JSON públicos para estatísticas ao vivo. Nenhuma autenticação necessária.

MétodoCaminhoDescrição
GET/live/:trackingCodeContagem atual de visitantes ao vivo
GET/realtime/:websiteIdDados de análise em tempo real
GET/stats/:trackingCodeResumo de estatísticas de visitantes
GET/:trackingCode/statusVerificação de status de rastreamento

Consulte Dados em Tempo Real para guias de integração.

Limites de Taxa

Os limites de taxa da API variam por plano:

PlanoSolicitações por MinutoLimite Mensal
Free101.000
Pro3010.000
Scale60100.000
Enterprise1201.000.000

Os headers de limite de taxa são incluídos em todas as respostas:

X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1642771200

O valor X-RateLimit-Limit reflete o limite por minuto do seu plano (por exemplo, 10 para Free, 30 para Pro, 60 para Scale, 120 para Enterprise).

Consulte Limites de Taxa para detalhes sobre como lidar com erros de limite de taxa.

Códigos de Erro

Código de StatusDescrição
200Sucesso
400Requisição Inválida
401Não Autorizado
403Proibido
404Não Encontrado
429Muitas Requisições
500Erro Interno do Servidor
Envelope de Resposta de SucessoJSON
{
"success": true,
"data": { ... },
"timestamp": "2026-02-07T12:00:00.000Z"
}
Envelope de Resposta de ErroJSON
{
"success": false,
"error": {
  "message": "The provided API key is missing or invalid",
  "code": "UNAUTHORIZED",
  "timestamp": "2026-02-07T12:00:00.000Z"
}
}

Webhooks

Configure webhooks para receber notificações em tempo real:

Eventos Disponíveis

  • visitor.identified - Quando um visitante é identificado
  • visitor.high_value - Quando a pontuação de visitante atinge 80+
  • event.tracked - Quando qualquer evento é rastreado
  • goal.completed - Quando uma meta é concluída
  • visitor.converted - Quando um visitante se converte

Payload do Webhook

Payload do WebhookJSON
{
"event": "visitor.high_value",
"timestamp": "2025-01-20T15:30:00Z",
"data": {
  "visitor_id": "vis_abc123",
  "score": 92,
  "current_page": "/pricing",
  "time_on_site": 420
}
}

Visão Geral da Dashboard API

Os seguintes grupos de API alimentam o painel Zenovay. Todos os endpoints requerem um token JWT Bearer no header Authorization. As respostas usam um envelope padrão:

{ "success": true, "data": { ... }, "timestamp": "..." }

Permissões Baseadas em Função

Os endpoints da API de Configurações do Site aplicam acesso baseado em função. Funções em ordem de privilégio:

FunçãoNívelPode fazer
owner4Acesso total, incluindo cobrança e exclusão
admin3Gerenciar configurações, integrações, membros da equipe
editor2Editar conteúdo e configurações básicas
viewer1Acesso somente leitura

API de Conversas

URL base: https://api.zenovay.com/api/conversations

Autenticação: Bearer JWT obrigatório. Associação à equipe verificada para todas as solicitações.

Operações CRUD para conversas alimentadas por IA dentro de equipes. O parâmetro de consulta team_id padrão para a organização do usuário autenticado, se não fornecido.

Endpoints

MétodoCaminhoDescrição
GET/conversations?team_id=:teamIdListar conversas de uma equipe
GET/conversations/:idObter conversa com mensagens
POST/conversationsCriar uma nova conversa
PUT/conversations/:idAtualizar uma conversa
DELETE/conversations/:idExcluir uma conversa
POST/conversations/:id/messagesAnexar uma mensagem

GET /conversations

Retorna conversas sem conteúdo de mensagem para desempenho.

Parâmetros de consulta:

  • team_id (opcional) — padrão para a organização do usuário
Resposta 200JSON
{
"success": true,
"data": [
  {
    "id": "uuid",
    "team_id": "uuid",
    "title": "Analytics Q3 review",
    "created_at": "2026-02-01T10:00:00Z",
    "updated_at": "2026-02-07T14:30:00Z"
  }
]
}

GET /conversations/:id

Retorna a conversa completa incluindo o array de mensagens.

Resposta 200JSON
{
"success": true,
"data": {
  "id": "uuid",
  "team_id": "uuid",
  "title": "Analytics Q3 review",
  "messages": [
    { "role": "user", "content": "Show top pages", "timestamp": "2026-02-07T14:30:00Z" },
    { "role": "assistant", "content": "Here are your top pages...", "timestamp": "2026-02-07T14:30:01Z" }
  ],
  "created_at": "2026-02-01T10:00:00Z",
  "updated_at": "2026-02-07T14:30:01Z"
}
}

POST /conversations

Corpo da RequisiçãoJSON
{
"title": "New conversation",
"team_id": "uuid"
}
  • title (obrigatório) — string não vazia
  • team_id (opcional) — padrão para a organização do usuário

Resposta: 201 com a conversa criada (inclui messages: [] vazio).

PUT /conversations/:id

Corpo da RequisiçãoJSON
{
"title": "Updated title",
"messages": [...]
}

Ambos os campos são opcionais. Aceita atualizações parciais.

DELETE /conversations/:id

Resposta: 200 com { "deleted": true }.

POST /conversations/:id/messages

Anexa uma mensagem à conversa. O servidor adiciona um timestamp a cada mensagem.

Corpo da RequisiçãoJSON
{
"role": "user",
"content": "What were last week's top referrers?"
}
  • role (obrigatório) — função da mensagem (por exemplo, "user", "assistant")
  • content (obrigatório) — texto da mensagem

Resposta: 201 com a conversa completa atualizada incluindo todas as mensagens.


API de Configurações do Site

URL base: https://api.zenovay.com/api/websites

Autenticação: Bearer JWT obrigatório. Cada endpoint aplica uma função mínima.

Gerenciar a configuração do site incluindo configurações gerais, notificações, exclusões de tráfego, rastreamento de receita, domínios e membros da equipe. Todos os caminhos estão no escopo por :websiteId.

Endpoints

MétodoCaminhoFunção Mín.Descrição
PUT/:websiteId/generaleditorAtualizar configurações gerais
GET/:websiteId/notificationsviewerObter preferências de notificação
PUT/:websiteId/notificationseditorAtualizar preferências de notificação
GET/:websiteId/exclusionsviewerObter exclusões de IP e caminho
POST/:websiteId/exclusions/ipeditorAdicionar uma exclusão de IP
DELETE/:websiteId/exclusions/ip/:exclusionIdeditorRemover uma exclusão de IP
POST/:websiteId/exclusions/patheditorAdicionar uma exclusão de caminho
DELETE/:websiteId/exclusions/path/:exclusionIdeditorRemover uma exclusão de caminho
PUT/:websiteId/revenueadminAtualizar configurações de receita
GET/:websiteId/domainsviewerObter configuração de domínio
PUT/:websiteId/domainsadminAtualizar configurações de domínio
GET/:websiteId/team-membersviewerListar membros da equipe
POST/:websiteId/team-membersadminConvidar um membro da equipe
PUT/:websiteId/team-members/:memberIdadminAtualizar função de membro
DELETE/:websiteId/team-members/:memberIdadminRemover um membro da equipe

PUT /:websiteId/general

Corpo da Requisição (todos os campos opcionais)JSON
{
"domain": "example.com",
"name": "My Website",
"timezone": "America/New_York",
"primary_color": "#4F46E5",
"kpi_goal": 10000,
"public_dashboard": true,
"allowed_domains": ["example.com", "www.example.com"]
}
Resposta 200JSON
{
"success": true,
"data": {
  "id": "uuid",
  "domain": "example.com",
  "name": "My Website",
  "timezone": "America/New_York",
  "primary_color": "#4F46E5",
  "kpi_goal": 10000,
  "public_dashboard": true,
  "allowed_domains": ["example.com", "www.example.com"],
  "updated_at": "2026-02-07T12:00:00Z"
}
}

GET /:websiteId/notifications

Retorna preferências de notificação. Se nenhuma tiver sido configurada, retorna um objeto padrão com apenas o website_id.

PUT /:websiteId/notifications

Aceita campos de preferência de notificação. Usa um padrão upsert: cria o registro na primeira chamada, atualiza em chamadas subsequentes.

GET /:websiteId/exclusions

Retorna exclusões de IP e caminho em uma única resposta.

Resposta 200JSON
{
"success": true,
"data": {
  "ip_exclusions": [
    { "id": "uuid", "website_id": "uuid", "ip_address": "192.168.1.1", "description": "Office IP", "created_at": "..." }
  ],
  "path_exclusions": [
    { "id": "uuid", "website_id": "uuid", "path_pattern": "/admin/*", "description": "Admin pages", "created_at": "..." }
  ]
}
}

POST /:websiteId/exclusions/ip

Corpo da RequisiçãoJSON
{
"ip_address": "192.168.1.1",
"description": "Office IP"
}
  • ip_address (obrigatório)
  • description (opcional)

Resposta: 201. Retorna 409 se o IP já estiver excluído.

POST /:websiteId/exclusions/path

Corpo da RequisiçãoJSON
{
"path_pattern": "/admin/*",
"description": "Admin pages"
}
  • path_pattern (obrigatório)
  • description (opcional)

Resposta: 201. Retorna 409 se o padrão de caminho já estiver excluído.

PUT /:websiteId/revenue

Requer função admin.

Corpo da Requisição (ambos opcionais)JSON
{
"revenue_provider": "stripe",
"revenue_currency": "USD"
}
Resposta 200JSON
{
"success": true,
"data": {
  "id": "uuid",
  "revenue_provider": "stripe",
  "revenue_currency": "USD",
  "updated_at": "2026-02-07T12:00:00Z"
}
}

GET /:websiteId/domains

Resposta 200JSON
{
"success": true,
"data": {
  "primary_domain": "example.com",
  "allowed_domains": ["example.com", "www.example.com"],
  "verification_status": "verified"
}
}

PUT /:websiteId/domains

Requer função admin.

Corpo da Requisição (ambos opcionais)JSON
{
"domain": "example.com",
"allowed_domains": ["example.com", "www.example.com"]
}

allowed_domains deve ser um array se fornecido.

GET /:websiteId/team-members

Retorna membros da equipe enriquecidos com dados de perfil do usuário.

Resposta 200JSON
{
"success": true,
"data": [
  {
    "id": "membership_uuid",
    "user_id": "user_uuid",
    "role": "admin",
    "created_at": "2026-01-15T10:00:00Z",
    "deactivated_at": null,
    "user": {
      "id": "user_uuid",
      "email": "[email protected]",
      "full_name": "Jane Doe",
      "avatar_url": "https://..."
    }
  }
]
}

POST /:websiteId/team-members

Convidar um usuário por email. Requer função admin.

Corpo da RequisiçãoJSON
{
"email": "[email protected]",
"role": "editor"
}
  • email (obrigatório) — deve ser um usuário Zenovay registrado
  • role (opcional) — padrão para "viewer". Deve ser um de: owner, admin, editor, viewer

Resposta: 201. Retorna 404 se o email não for encontrado, 409 se já for um membro.

PUT /:websiteId/team-members/:memberId

Atualizar a função de um membro. Requer função admin.

Corpo da RequisiçãoJSON
{
"role": "admin"
}
  • role (obrigatório) — deve ser um de: owner, admin, editor, viewer

DELETE /:websiteId/team-members/:memberId

Remove um membro da equipe (exclusão suave). Requer função admin.

Resposta: 200 com { "deleted": true }.


API de Onboarding

URL base: https://api.zenovay.com/api/onboarding

Autenticação: Bearer JWT obrigatório. No escopo do usuário (sem verificações de equipe ou função).

Rastrear o progresso de integração do usuário. Cada usuário tem um único registro de integração que persiste entre sessões.

Endpoints

MétodoCaminhoDescrição
GET/onboarding/progressObter progresso de integração
POST/onboarding/progressSalvar progresso de integração

GET /onboarding/progress

Retorna o estado de integração do usuário. Se nenhum registro existir, retorna padrões.

Resposta 200JSON
{
"success": true,
"data": {
  "user_id": "uuid",
  "current_step": "add_website",
  "completed": false,
  "data": { "welcomed": true },
  "created_at": "2026-02-01T10:00:00Z",
  "updated_at": "2026-02-07T14:00:00Z"
}
}

POST /onboarding/progress

Usa um padrão upsert: cria o registro na primeira chamada, atualiza em chamadas subsequentes.

Corpo da Requisição (todos os campos opcionais)JSON
{
"step": "install_tracking",
"data": { "welcomed": true, "website_added": true },
"completed": false
}
  • step — salvo como current_step no banco de dados
  • data — objeto JSON arbitrário para armazenar estado específico da etapa
  • completed — padrão para false

API de Equipes

URL base: https://api.zenovay.com/api/teams

Autenticação: Bearer JWT obrigatório. Associação à equipe verificada (qualquer membro ativo pode acessar).

Endpoints de contexto de equipe somente leitura para permissões, estatísticas de uso e listas de membros. Para ações de gerenciamento de equipe (convidar, mudanças de função, remoção), use os endpoints team-members da API de Configurações do Site.

Endpoints

MétodoCaminhoDescrição
GET/teams/:id/permissionsObter permissões e contexto de plano
GET/teams/:id/usageObter estatísticas de uso do período de cobrança atual
GET/teams/:id/membersListar membros da equipe com perfis

GET /teams/:id/permissions

Retorna a função do usuário autenticado, o plano da equipe, contagens de uso atuais e sinalizadores de permissão computados.

Resposta 200JSON
{
"success": true,
"data": {
  "team_id": "uuid",
  "role": "admin",
  "plan": "Pro",
  "plan_limits": {
    "maxWebsites": 5,
    "maxTeamMembers": 5,
    "eventsPerMonth": 10000,
    "dataRetentionDays": 730
  },
  "current_usage": {
    "websites": 3,
    "team_members": 5
  },
  "permissions": {
    "can_manage_billing": false,
    "can_manage_team": true,
    "can_edit_settings": true,
    "can_view": true
  }
}
}

GET /teams/:id/usage

Retorna estatísticas de uso do período de cobrança atual (mês até agora).

Resposta 200JSON
{
"success": true,
"data": {
  "team_id": "uuid",
  "plan": "Pro",
  "period": {
    "start": "2026-02-01T00:00:00.000Z",
    "end": "2026-02-07T12:00:00.000Z"
  },
  "usage": {
    "events": 4521,
    "events_limit": 10000,
    "websites": 3,
    "websites_limit": 10,
    "team_members": 5,
    "team_members_limit": 10
  }
}
}

GET /teams/:id/members

Retorna membros da equipe enriquecidos com dados de perfil do usuário.

Resposta 200JSON
{
"success": true,
"data": [
  {
    "id": "membership_uuid",
    "user_id": "user_uuid",
    "role": "admin",
    "created_at": "2026-01-15T10:00:00Z",
    "user": {
      "id": "user_uuid",
      "email": "[email protected]",
      "full_name": "Jane Doe",
      "name": "Jane",
      "avatar_url": "https://..."
    }
  }
]
}

API de Perfil do Usuário

URL base: https://api.zenovay.com/api/users

Autenticação: Bearer JWT obrigatório. No escopo do usuário (apenas perfil próprio).

Gerenciar o perfil do usuário autenticado e endereço de email.

Endpoints

MétodoCaminhoDescrição
GET/users/meObter perfil do usuário atual
PUT/users/meAtualizar perfil (nome, email)
PUT/users/me/emailAtualizar email com verificação de SSO
DELETE/users/meExcluir conta do usuário
GET/users/me/usageObter estatísticas de uso
GET/users/me/plan-limitsObter limites de plano e recursos

PUT /users/me/email

Endpoint dedicado para mudanças de email com detecção de provedor de SSO. Se o usuário se registrou via um provedor OAuth (Google, GitHub, etc.), a solicitação é rejeitada com uma mensagem para atualizar o email através desse provedor.

Corpo da RequisiçãoJSON
{
"email": "[email protected]"
}
  • email (obrigatório) — deve ser um email válido, diferente do atual

Resposta: 200 com o registro de usuário atualizado. Retorna 400 se o usuário for uma conta de SSO ou o email for inválido/inalterado.

Próximas Etapas

Comece a integrar com a API Zenovay usando os guias abaixo.

Esta página foi útil?