Endpoints de Notificações
Visão Geral
Seção intitulada “Visão Geral”A API de Notificações fornece um sistema de notificações em tempo real para alertas, eventos do sistema, atualizações de assinatura e confirmações de pagamento.
Todos os endpoints requerem autenticação.
Authorization: Bearer <token>Tipos de Notificação
Seção intitulada “Tipos de Notificação”| Tipo | Descrição | Exemplos |
|---|---|---|
ALERT | Avisos de qualidade da água, problemas de dispositivos | Oxigênio baixo, temperatura alta, dispositivo offline |
SYSTEM | Manutenção e atualizações do sistema | Atualização do sistema, manutenção agendada |
SUBSCRIPTION | Mudanças de plano e avisos de limites | Plano atualizado, limite se aproximando |
PAYMENT | Notificações relacionadas a pagamentos | Pagamento bem-sucedido, pagamento falhou, fatura pronta |
GET /notifications/
Seção intitulada “GET /notifications/”Listar notificações com filtragem opcional e paginação.
Requisição
Seção intitulada “Requisição”GET /api/v1/notifications/?type={type}&unread_only={bool}&page={page}&page_size={size}Authorization: Bearer <token>Parâmetros de Query
Seção intitulada “Parâmetros de Query”| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type | enum | ❌ | - | Filtrar por tipo de notificação |
unread_only | boolean | ❌ | false | Mostrar apenas notificações não lidas |
page | integer | ❌ | 1 | Número da página |
page_size | integer | ❌ | 20 | Itens por página (máx: 100) |
Resposta 200 OK
Seção intitulada “Resposta 200 OK”{ "notifications": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "user_id": "user-uuid", "type": "ALERT", "title": "Alerta de Oxigênio Baixo", "message": "Nível de oxigênio dissolvido está abaixo de 4.0 mg/L no Viveiro VV-01", "data": { "pond_id": "pond-uuid", "pond_cod": "VV-01", "parameter": "dissolved_oxygen", "value": 3.2, "threshold": 4.0 }, "is_read": false, "created_at": "2026-02-19T10:30:00Z", "read_at": null } ], "pagination": { "page": 1, "page_size": 20, "total_items": 45, "total_pages": 3, "has_next": true, "has_previous": false }}PATCH /notifications/{notification_id}/read
Seção intitulada “PATCH /notifications/{notification_id}/read”Marcar uma notificação específica como lida.
Parâmetros de Caminho
Seção intitulada “Parâmetros de Caminho”| Parâmetro | Tipo | Descrição |
|---|---|---|
notification_id | UUID | ID da notificação |
Requisição
Seção intitulada “Requisição”PATCH /api/v1/notifications/{notification_id}/readAuthorization: Bearer <token>Resposta 200 OK
Seção intitulada “Resposta 200 OK”{ "id": "550e8400-e29b-41d4-a716-446655440000", "is_read": true, "read_at": "2026-02-19T11:00:00Z"}POST /notifications/mark-all-read
Seção intitulada “POST /notifications/mark-all-read”Marcar todas as notificações do usuário autenticado como lidas.
Requisição
Seção intitulada “Requisição”POST /api/v1/notifications/mark-all-readAuthorization: Bearer <token>Resposta 200 OK
Seção intitulada “Resposta 200 OK”{ "message": "Todas as notificações foram marcadas como lidas", "updated_count": 12}Notificações Automáticas
Seção intitulada “Notificações Automáticas”O sistema cria automaticamente notificações para os seguintes eventos:
Alertas de Qualidade da Água
Seção intitulada “Alertas de Qualidade da Água”- Oxigênio dissolvido abaixo do limite (< 4.0 mg/L)
- Temperatura fora da faixa (< 26°C ou > 32°C)
- pH fora da faixa (< 7.5 ou > 8.5)
- Amônia acima do limite (> 0.1 mg/L)
- Nitrito acima do limite (> 0.1 mg/L)
Alertas de Dispositivos
Seção intitulada “Alertas de Dispositivos”- Dispositivo offline por mais de 10 minutos
- Falha de energia detectada
- Erros de comunicação
Eventos de Assinatura
Seção intitulada “Eventos de Assinatura”- Assinatura criada ou atualizada
- Assinatura cancelada
- Aproximando-se dos limites de recursos (80% do máximo)
- Limite de recursos atingido
Eventos de Pagamento
Seção intitulada “Eventos de Pagamento”- Pagamento bem-sucedido
- Pagamento falhou
- Fatura pronta
- Método de pagamento expirado
Exemplos de Uso
Seção intitulada “Exemplos de Uso”Obter Notificações de Alerta Não Lidas
Seção intitulada “Obter Notificações de Alerta Não Lidas”async function getUnreadAlerts(token) { const response = await fetch( 'https://api.aeraplus.com/v1/notifications/?type=ALERT&unread_only=true', { headers: { 'Authorization': `Bearer ${token}` } } );
const data = await response.json(); return data.notifications;}Marcar Notificação como Lida
Seção intitulada “Marcar Notificação como Lida”async function markAsRead(notificationId, token) { const response = await fetch( `https://api.aeraplus.com/v1/notifications/${notificationId}/read`, { method: 'PATCH', headers: { 'Authorization': `Bearer ${token}` } } );
return response.json();}Polling de Notificações em Tempo Real
Seção intitulada “Polling de Notificações em Tempo Real”class NotificationPoller { constructor(token, interval = 30000) { // Poll a cada 30 segundos this.token = token; this.interval = interval; this.timer = null; }
async checkNotifications() { const response = await fetch( 'https://api.aeraplus.com/v1/notifications/?unread_only=true&page_size=10', { headers: { 'Authorization': `Bearer ${this.token}` } } );
const data = await response.json();
// Mostrar badge de notificação const unreadCount = data.notifications.length; this.onUnreadCountChange(unreadCount); }
start() { this.checkNotifications(); this.timer = setInterval(() => { this.checkNotifications(); }, this.interval); }
stop() { if (this.timer) { clearInterval(this.timer); this.timer = null; } }
onUnreadCountChange(count) { console.log(`Notificações não lidas: ${count}`); }}
// Usoconst poller = new NotificationPoller(token);poller.start();GET /notifications/unread/count
Seção intitulada “GET /notifications/unread/count”Obtém a contagem de notificações não lidas para o usuário autenticado.
Requisição
Seção intitulada “Requisição”GET /api/v1/notifications/unread/countAuthorization: Bearer <token>Resposta 200 OK
Seção intitulada “Resposta 200 OK”{ "unread_count": 5, "by_type": { "ALERT": 3, "SYSTEM": 0, "SUBSCRIPTION": 1, "PAYMENT": 1 }}