Scenario Notification Content Builder
API Contract
REST
/api/v1/notification-content
8 endpoints
GET
/api/v1/notification-content/api/v1/notification-content
List all built notification content records
Public
Response Example
{
"data": [
{
"id": "cnt_01HABC001",
"scenario_type": "inactivity",
"locale": "nb-NO",
"title": "Vi savner deg!",
"body": "Det har gått 9 dager siden sist du var aktiv. Klikk for å se hva som skjer.",
"deep_link_route": "/home/feed",
"built_at": "2026-03-26T09:00:00Z"
},
{
"id": "cnt_01HABC002",
"scenario_type": "certification_expiry",
"locale": "en-US",
"title": "Your certification expires soon",
"body": "Your Safety Certification expires in 30 days. Renew now to stay active.",
"deep_link_route": "/profile/certifications/cert_safety_003",
"built_at": "2026-03-26T09:01:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 94
}
}
GET
/api/v1/notification-content/api/v1/notification-content/:id
Get a specific built notification content record
Public
Response Example
{
"id": "cnt_01HABC001",
"scenario_type": "inactivity",
"locale": "nb-NO",
"title": "Vi savner deg!",
"body": "Det har gått 9 dager siden sist du var aktiv. Klikk for å se hva som skjer.",
"deep_link_route": "/home/feed",
"context_data": {
"user_id": "usr_mentor_7821",
"days_inactive": 9
},
"built_at": "2026-03-26T09:00:00Z"
}
POST
/api/v1/notification-content/api/v1/notification-content
Build notification content for a given scenario type, context data, and locale
Public
Request Example
{
"scenario_type": "inactivity",
"context_data": {
"user_id": "usr_mentor_7821",
"days_inactive": 9,
"user_first_name": "Kari"
},
"locale": "nb-NO"
}
Response Example
{
"id": "cnt_01HABC099",
"scenario_type": "inactivity",
"locale": "nb-NO",
"title": "Vi savner deg, Kari!",
"body": "Det har gått 9 dager siden sist du var aktiv. Kom tilbake og se hva som skjer.",
"deep_link_route": "/home/feed",
"context_data": {
"user_id": "usr_mentor_7821",
"days_inactive": 9,
"user_first_name": "Kari"
},
"built_at": "2026-03-26T09:30:00Z"
}
PUT
/api/v1/notification-content/api/v1/notification-content/:id
Update a built notification content record (e.g. override copy)
Public
Request Example
{
"title": "We miss you, Kari!",
"body": "It's been 9 days. Come back and check what's new.",
"locale": "en-US"
}
Response Example
{
"id": "cnt_01HABC001",
"scenario_type": "inactivity",
"locale": "en-US",
"title": "We miss you, Kari!",
"body": "It's been 9 days. Come back and check what's new.",
"deep_link_route": "/home/feed",
"built_at": "2026-03-26T09:00:00Z"
}
DELETE
/api/v1/notification-content/api/v1/notification-content/:id
Delete a notification content record
Public
Response Example
{
"success": true,
"deleted_id": "cnt_01HABC001"
}
GET
/api/v1/notification-content/api/v1/notification-content/supported-scenarios
Get the list of all supported scenario types
Public
Response Example
{
"scenario_types": [
{
"type": "inactivity",
"description": "User has not been active for N days"
},
{
"type": "milestone",
"description": "User achieved a tracked milestone"
},
{
"type": "certification_expiry",
"description": "User certification expires within lead time"
}
]
}
GET
/api/v1/notification-content/api/v1/notification-content/templates/:scenarioType
Get the notification template for a scenario type and locale
Public
Response Example
{
"scenario_type": "inactivity",
"locale": "nb-NO",
"title_template": "Vi savner deg, {{user_first_name}}!",
"body_template": "Det har gått {{days_inactive}} dager siden sist du var aktiv. Klikk for å se hva som skjer.",
"deep_link_template": "/home/feed",
"required_context_fields": [
"user_first_name",
"days_inactive"
]
}
GET
/api/v1/notification-content/api/v1/notification-content/deep-link-route
Resolve the deep link route for a scenario type and context data
Public
Response Example
{
"scenario_type": "certification_expiry",
"deep_link_route": "/profile/certifications/cert_safety_003",
"deep_link_url": "eircodex://profile/certifications/cert_safety_003"
}