Skip to content

Notification Channels

JITSudo sends notifications through configured channels when access request lifecycle events occur.

EventDescription
request.pendingNew request submitted, awaiting review
request.approvedRequest approved
request.deniedRequest denied
request.expiredApproval timeout reached
request.break_glassEmergency break-glass access used
grant.activeGrant provisioned, access is live
grant.expiring_soonGrant nearing expiration
grant.expiredGrant expired
grant.revokedGrant revoked
Terminal window
curl -X POST https://jitsudo.example.com/v1/notification-channels/slack-webhook \
-H "X-API-Key: <api-key>" \
-H "X-Tenant-ID: <tenant-uuid>" \
-H "Content-Type: application/json" \
-d '{
"name": "engineering-slack",
"webhook_url": "https://hooks.slack.com/services/T.../B.../xxx",
"event_filters": ["request.pending", "request.approved", "grant.active"]
}'
Terminal window
curl -X POST https://jitsudo.example.com/v1/notification-channels/email \
-H "X-API-Key: <api-key>" \
-H "X-Tenant-ID: <tenant-uuid>" \
-H "Content-Type: application/json" \
-d '{
"name": "security-team-email",
"smtp_host": "smtp.example.com",
"smtp_port": 587,
"from_address": "jitsudo@example.com",
"to_addresses": ["security@example.com"]
}'
Terminal window
curl -X POST https://jitsudo.example.com/v1/notification-channels/generic-webhook \
-H "X-API-Key: <api-key>" \
-H "X-Tenant-ID: <tenant-uuid>" \
-H "Content-Type: application/json" \
-d '{
"name": "pagerduty-webhook",
"url": "https://events.pagerduty.com/integration/xxx/enqueue",
"headers": {"Authorization": "Token token=xxx"}
}'
Terminal window
curl -X POST https://jitsudo.example.com/v1/notification-channels/aws-sns \
-H "X-API-Key: <api-key>" \
-H "X-Tenant-ID: <tenant-uuid>" \
-H "Content-Type: application/json" \
-d '{
"name": "ops-sns-topic",
"topic_arn": "arn:aws:sns:us-east-1:123456789012:jitsudo-notifications"
}'

Each channel can specify event_filters — an array of event types to subscribe to. An empty array (or omitted) means all events are delivered.

Notifications are processed asynchronously by the NotifyWorker:

  • Non-blocking — notification failures don’t affect request processing
  • Retries up to 3 times on failure
  • Deduplication by payload with a 2-hour window