Notification channel providers register opt-in health checks:
builder.Services.AddHealthChecks()
.AddGranitSmtpHealthCheck()
.AddGranitAwsSesHealthCheck()
.AddGranitBrevoHealthCheck()
.AddGranitAcsEmailHealthCheck()
.AddGranitAcsSmsHealthCheck()
.AddGranitAzureNotificationHubsHealthCheck()
.AddGranitAwsSnsSmsHealthCheck()
.AddGranitAwsSnsMobilePushHealthCheck()
.AddGranitScalewayEmailHealthCheck()
.AddGranitSendGridHealthCheck()
.AddGranitTwilioHealthCheck()
.AddGranitZulipHealthCheck();
Provider
Extension
Probe
Tags
SMTP
AddGranitSmtpHealthCheck()
EHLO handshake via MailKit
readiness
SES
AddGranitAwsSesHealthCheck()
GetAccount() — Degraded if sending paused
readiness, startup
Brevo
AddGranitBrevoHealthCheck()
GET /account
readiness
ACS Email
AddGranitAcsEmailHealthCheck()
SendAsync probe
readiness
ACS SMS
AddGranitAcsSmsHealthCheck()
SendAsync probe
readiness
Azure Notification Hubs
AddGranitAzureNotificationHubsHealthCheck()
Hub description retrieval
readiness
SNS SMS
AddGranitAwsSnsSmsHealthCheck()
SNS API connectivity check
readiness, startup
SNS Mobile Push
AddGranitAwsSnsMobilePushHealthCheck()
SNS Platform Application check
readiness, startup
Scaleway TEM
AddGranitScalewayEmailHealthCheck()
GET /emails?page_size=1
readiness, startup
SendGrid
AddGranitSendGridHealthCheck()
GET /scopes
readiness, startup
Twilio
AddGranitTwilioHealthCheck()
GET /Accounts/{sid}.json
readiness, startup
Zulip
AddGranitZulipHealthCheck()
GET /api/v1/users/me (Bot auth)
readiness
All checks sanitize error messages — credentials, hostnames, and API keys are never
exposed in the health check response. Every check enforces a 10-second defensive timeout
via .WaitAsync() to prevent blocking Kubernetes probe cycles.