iGRPIGRP 3.0Documentation

API REST

Endpoints REST do iGRP Notification Service — envio, inbox, anexos, templates, destinatários, recorrências, configuração e administração, com as permissões de cada um.

Base<base do serviço>/api/v1 — no workspace do Studio: http://<slug>:<porta>/gateway-api/igrp-notification-service/api/v1
ReferênciaGerada do OpenAPI do serviço (/v3/api-docs · Swagger UI em /swagger-ui.html)
AutenticaçãoAuthorization: Bearer <jwt> emitido pelo Access Management, exceto health/info, OpenAPI, Swagger e /webhooks/**
GraphQLtambém disponível (consultas de notificações e templates)

Os clientes TypeScript e Java cobrem todos estes endpoints.


Permissões e aplicação

Cada endpoint exige uma permissão, lida das claims do token:

PermissãoPara quê
igrp.notification.sendEnviar, reenviar, anexar, cancelar lotes
igrp.notification.readConsultar notificações, lotes, anexos, estatísticas
igrp.notification.inboxInbox do próprio utilizador
igrp.notification.adminTemplates, destinatários, grupos, recorrências, configuração, RGPD
igrp.notification.manual_statusMudar à mão o estado de uma entrega OFFLINE

Os pedidos pertencem a uma aplicação. O serviço usa o claim application_code do token; sem ele, usa o applicationCode do pedido (query nas leituras, corpo nas escritas). Erros: 400 APPLICATION_CODE_REQUIRED, 403 APPLICATION_ACCESS_DENIED, 422 ACCESS_MANAGER_UNAVAILABLE.

Os envios (POST /notifications, bulk e CSV) são M2M: token client_credentials.


Referência

Cada endpoint, com a permissão, os parâmetros, o corpo do pedido, as respostas e exemplos em várias linguagens, está na referência gerada a partir do OpenAPI do serviço:

Testar no playground

O botão Testar no playground envia o pedido a partir do browser para o servidor indicado (por omissão, o gateway do workspace em localhost:2575). Preenche o host do teu ambiente e um token em Autorização. O gateway tem de aceitar pedidos (CORS) vindos da origem da documentação; se não aceitar, usa os exemplos curl.


Corpo do envio

O corpo de POST /notifications (e dos envios em massa):

CampoDescrição
channelStrategyObrigatório. SPECIFIC, ALL ou PREFERRED
channelsEMAIL, SMS, WHATSAPP, PUSH, IN_APP, OFFLINE
recipients[{ userId?, email?, phone?, pushToken? }]
groups[{ groupId | departmentCode | roleCode | permissionName }] — resolvidos no envio
template{ code, locale? } — template publicado
inline{ subject?, title?, body? } — em vez de template
variablesValores das variáveis do template
priorityLOW, NORMAL, HIGH, URGENT
attachments[{ filename, contentRef }]
idempotencyKeyEvita envios duplicados
businessKey, category, correlationIdRastreio e agrupamento
locale, scheduledAt, expiresAtOpcionais
callbackUrlHTTPS, num domínio registado nas definições da aplicação

Exemplo: email com template

EMAIL precisa de SMTP configurado

Para enviar por EMAIL, o provider SMTP tem de estar configurado no Notification Service (NOTIFICATION_PROVIDERS_EMAILSMTP_*: servidor, porta, credenciais e remetente). Sem ele, o envio é recusado com 422 CHANNEL_NOT_ENABLED e nenhum email sai — ver Configurar os canais › EMAIL (SMTP). O canal também tem de estar ativo nas Definições da aplicação.

curl -X POST "$NOTIFICATION_SERVICE_BASE_URL/api/v1/notifications" \
  -H "Authorization: Bearer $TOKEN_M2M" \
  -H "Content-Type: application/json" \
  -d '{
    "applicationCode": "MINHA_APP",
    "channelStrategy": "SPECIFIC",
    "channels": ["EMAIL"],
    "recipients": [{ "email": "utente@exemplo.cv" }],
    "template": { "code": "pedido-confirmacao", "locale": "pt-CV" },
    "variables": { "nome": "Maria Silva", "numeroPedido": "PED-2026-456" },
    "category": "pedido-confirmacao",
    "businessKey": "PED-2026-456",
    "idempotencyKey": "pedido-confirmacao-PED-2026-456"
  }'

Resposta 202 Accepted: a entrega é assíncrona. O estado de cada entrega consulta-se em GET /notifications/{id}.


Erros

Corpo de erro: { "code": "…", "message": "…" }.

HTTPCódigos
400VALIDATION_ERROR, INVALID_REQUEST, APPLICATION_CODE_REQUIRED
403APPLICATION_ACCESS_DENIED, ATTACHMENT_ACCESS_DENIED, MISSING_USER_ID
404TEMPLATE_NOT_FOUND, NOTIFICATION_NOT_FOUND, RECIPIENT_NOT_FOUND, GROUP_NOT_FOUND, BATCH_NOT_FOUND, DELIVERY_NOT_FOUND, INBOX_ITEM_NOT_FOUND, ATTACHMENT_NOT_FOUND, …
413ATTACHMENT_TOO_LARGE
422TEMPLATE_ERROR, CHANNEL_NOT_ENABLED, CHANNEL_NOT_ALLOWED, CSV_INVALID, CALLBACK_DOMAIN_NOT_ALLOWED, SCHEDULING_NOT_SUPPORTED, INVALID_STATE_TRANSITION, ACCESS_MANAGER_UNAVAILABLE
429QUOTA_EXCEEDED

Estados de entrega (DeliveryStatus)

EstadoDescrição
PENDINGAceite, à espera (ou agendada para scheduledAt)
QUEUEDNa fila de processamento
SENDINGEnvio em curso
SENTAceite pelo provider
DELIVEREDEntrega confirmada (recibo do provider, IN_APP guardada, OFFLINE entregue à mão)
READLeitura confirmada (recibo de leitura, IN_APP aberta, marcação manual)
FAILEDFalha definitiva depois das tentativas
CANCELLEDCancelada antes do envio
EXPIREDexpiresAt passou sem envio
How is this guide?

Última atualização: