Request a Demo
Platform Infrastructure

Notification Engine

The single outbound communication layer for the entire Civic platform — every module that sends a message to a citizen routes through Notification Engine.

99.95%

Uptime SLA

<60s

Emergency Latency

50K/hr

Bulk Throughput

95%+

Email Delivery

Purpose-Built for Canadian Municipalities

Ontario Compliant
MFIPPA Ready
AODA Accessible
Bilingual Support
Canadian Hosted
SOC 2 Aligned

How It Works

The identity journey, step by step

From first registration to golden record resolution — how a resident's identity evolves across the platform.

01

Tax Reminder Delivery

A resident receives their property tax instalment reminder via their preferred channel.

How it works

Property Tax module triggers a 'tax.instalment.reminder' notification. Notification Engine resolves the citizen's preferred channel (SMS), merges the template with their name, address, amount, and due date, and dispatches the SMS via Twilio. The resident receives a bilingual text message with a link to pay online.

Step 1 of 5

Purpose & Scope

What this module owns

Clear ownership boundaries prevent duplication and ensure every capability has exactly one authoritative home.

Owns

10

Delegated to

4

Citizen preferences storage

civic-identity

Content authoring (CMS pages, engagement content)

citizen-engagement

Audit log storage

audit-trail

Form rendering

forms-engine

These capabilities are handled by dedicated modules and consumed via stable API contracts — keeping boundaries clean and ownership unambiguous.

Core Capabilities

What it does

4 capability groups comprising 8 discrete capabilities — each with API surface, business rules, and data ownership.

Deliver notifications via email, SMS, push notification, in-app, and print mail — all from a single send request.

Email

SMTP with DKIM/SPF/DMARC authentication. Configurable provider (SendGrid, SES, SMTP relay). HTML with inline CSS + plain-text fallback.

SMS

Configurable gateway (Twilio, Sinch). Canadian carrier support. 160-char limit with smart splitting for longer messages.

Push Notification

Firebase Cloud Messaging (Android) + Apple Push Notification Service (iOS). Rich notifications with action buttons.

Print Mail

Generate print-ready PDF letters using municipality letterhead. Batch for Canada Post mailing. AODA large-print variant auto-generated.

Preference-based routing with automatic failover — if the primary channel fails, the next preferred channel is tried. In-app is always the final guaranteed fallback.

Preference-Based Routing

Each notification routed through the citizen's preferred channel for that notification category (sourced from civic-identity).

Automatic Failover

If primary channel fails (SMS undelivered, email bounced), retry via next preferred channel. In-app is always the final guaranteed fallback.

Multi-Channel Delivery

Some notification types delivered to ALL channels simultaneously (e.g., emergency alerts, payment confirmations).

Retry Logic

Hard bounces flag address as invalid + notify agent. Soft bounces retry up to 3× with exponential backoff.

Real-World Scenarios

Who uses this, and how

3 persona-driven scenarios showing how Notification Engine works in practice — from resident registration to privacy compliance.

Finance Department

Bulk Tax Billing Day

It's property tax billing day and 45,000 residents need to receive their tax bill notifications simultaneously.

Steps

  1. 1Property Tax module triggers bulk notification with template 'tax.bill.generated' for all 45,000 accounts
  2. 2Notification Engine queues all notifications in the async message queue with 'normal' priority
  3. 3Each notification resolves the citizen's preferred channel and language from civic-identity
  4. 4Templates are merged with personalized data (name, roll number, amount, due date, e-billing PDF link)
  5. 5Notifications dispatch at 50,000/hour via configured email and SMS providers
  6. 6Delivery dashboard shows real-time progress, bounce rates, and engagement metrics

Outcome

45,000 notifications delivered within 1 hour. 95%+ email delivery rate. Bounced addresses flagged for staff follow-up. All deliveries fully audited.

View scenario

Emergency Management

Flood Alert — Geographic Targeting

Rising river levels require an immediate evacuation notice to residents within the flood plain.

Steps

  1. 1Emergency management officer opens the rapid composition interface
  2. 2Selects alert type 'flood' with severity 'critical' and draws the flood-zone polygon on the map
  3. 3Composes bilingual alert message with evacuation instructions and shelter locations
  4. 4System identifies 2,300 residents within the polygon and bypasses all preferences
  5. 5Emergency alerts dispatch simultaneously via email, SMS, push, and in-app to all 2,300 residents
  6. 6Alert Ready integration broadcasts to the national emergency system

Outcome

2,300 residents alerted within 60 seconds. All channels saturated. Complete post-incident log generated for emergency debrief.

View scenario

Communications Team

CASL Consent Expiry Re-Engagement

Implied consent for 500 residents is approaching the 2-year CASL expiry. The system must prompt re-consent before commercial messages are blocked.

Steps

  1. 1System detects 500 implied consent records expiring within 30 days
  2. 2Generates re-consent outreach notifications using the approved re-consent template
  3. 3Notifications include clear opt-in mechanism and description of commercial communications
  4. 4Residents who opt in receive updated express consent (no expiry); others are flagged
  5. 5After expiry date, commercial messages are automatically blocked for non-renewed residents
  6. 6Transactional notifications continue unaffected for all residents

Outcome

CASL compliance maintained. 60% re-consent rate. Zero commercial messages sent without valid consent. Full audit trail of every consent decision.

View scenario

Internal Architecture

How it's built

4 architectural layers comprising 24 components — from API gateway to data quality engine.

4 layers · 24 total components

Notification Engine

Every module owns a single bounded context, exposes stable APIs, and can be composed into any Civic product — that's the architecture that scales.

Krutik Parikh

Creator of Civic

Data Model

Entity Architecture

5 entities with 6 relationships — the authoritative schema for this bounded context.

Entities

Select an entity to explore its fields and relationships

API Surface

Integration Endpoints

17 RESTful endpoints across 4 resource groups — plus 7 domain events for async integration.

|
POST

/api/v1/notifications/send

Send a notification (template + citizen + merge data)

POST

/api/v1/notifications/send-bulk

Bulk send to multiple citizens

POST

/api/v1/notifications/emergency

Issue emergency alert (bypasses preferences)

GET

/api/v1/notifications/{id}

Get notification status and delivery details

GET

/api/v1/notifications/citizen/{citizenId}

Delivery history for a citizen (staff use)

Technical Specifications

Performance, Compliance & Configuration

Availability

Target99.95% uptime

Throughput

Target50,000 notifications/hour for bulk sends (tax billing day); 1,000,000+ for emergency alerts

Latency

TargetEmergency alerts: < 60 seconds from issue to delivery. Transactional: < 5 minutes. Commercial: < 1 hour.

Delivery Rate

Target95%+ email delivery; 98%+ SMS delivery; 99.9%+ in-app delivery

Storage

TargetNotification history retained 7 years per MFIPPA

Encryption

TargetTLS 1.2+ in transit; PII in notification payloads encrypted at rest

FAQ

Frequently Asked Questions

Ready to Integrate

Build on Notification Engine

Request an architecture brief, integration guide, or live demo environment for your team.