One event language
Product teams trigger named events while the service owns channel and delivery policy.
Notifications gives product and operations teams one source-owned domain for event routing, templates, delivery policy, retries, and customer-visible message history.
Inspect the published API contractNotifications domain
Tenant-aware delivery workflow
Operational workspace
Payment confirmed
Event accepted with tenant and recipient context
Channel policy
Preferences, locale, quiet hours, and TTL evaluated
Provider delivery
Email, SMS, push, or webhook adapter selected
Delivery history
Attempt state retained for support and product workflows
Product outcome
As products grow, every team starts sending email, SMS, push, and webhooks differently. Notifications keeps product events, customer preferences, tenant context, and delivery outcomes behind one explicit boundary your team can operate.
Product teams trigger named events while the service owns channel and delivery policy.
Tenant context, quiet hours, locale, and user preferences can shape each delivery path.
Operations can follow a message from accepted event to provider response and final state.
01 / Domain capabilities
Define product events once, validate their payloads, and route them to the right channels without embedding provider logic in every service.
Keep message content, locale variants, and rendering inputs inside a reviewable product contract.
Apply preferences, quiet hours, schedules, TTL, and tenant-specific rules before a message leaves the system.
Track attempts and provider outcomes so operations can investigate failures and retry through controlled workflows.
02 / Product workflow
A product service submits the event name, tenant, recipient, payload, and idempotency context.
Notifications checks the catalog, template, recipient preferences, timing, and eligible channels.
The service renders the message and hands it to the configured provider path.
Product and support workflows can read delivery state without querying provider dashboards.
03 / Technical depth
POST /notify.v1.NotifyService/TriggerEvent
Authorization: Bearer $TOKEN
Content-Type: application/json
{
"event_name": "billing.payment_successful",
"tenant_id": "company_72",
"user_id": "user_19",
"payload": {
"plan_name": "Growth"
},
"idempotency_key": "event_8f4b"
}Named events and validated payloads keep producers independent from channel implementation.
Attempts, provider responses, and final state remain queryable for the owning tenant.
Email, SMS, push, and webhook adapters can evolve without changing product event calls.
04 / Where it fits
Send invitations, onboarding prompts, account changes, and security notices through a consistent customer-aware policy.
Turn entitlement, subscription, and usage events into messages without coupling billing logic to a provider.
Route workflow changes and exception states to the right recipient and preserve the delivery trail for support.
Ownership model
The source license, update term, support boundary, and customer-cloud responsibilities remain explicit. Missing domain work can be scoped as a custom module instead of hidden in a roadmap promise.
Licensed Go source for the notification domain
Published REST and Connect/gRPC contract
Customer-selected providers and customer-cloud deployment
Optional adapters or domain channels scoped as custom work
Notifications architecture review
Everything you need to know about integrating and hosting this Launch Rail service.