CorebanqCorebanq Developer Docs
Notificationsv1

Read one notification

Reads one row scoped to the caller and, when supplied, the customer. title and content are resolved into the request's language before the row is returned — FROM THE KEYS ONLY. Unlike the list, this route never consults the event push template, so a templated notification reads differently here; and link_url and link_text are never populated on this route at all. See the UserNotification schema.

GET
/v1/notifications/{notification_id}

Authorization

BearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

notification_id*string

Id of the notifications.user_notifications row — the per-recipient copy, not the fan-out source row's id.

Query Parameters

customer_id?string

Optional scope. Omitted, it stays the nil uuid and is passed through as such. A value that does not parse is refused 400 — but with common.invalid_input, not the notifications_m.invalid_id the service builds: the handler discards that AppError and calls BadRequest400 with no argument.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/notifications/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "title": "string",
  "content": "string",
  "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",
  "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e",
  "event": "string",
  "rec_id": "0ba687c4-349e-490d-969f-fd374e232d42",
  "rec_type": "string",
  "created_at": "2019-08-24T14:15:22Z",
  "sent_at": "2019-08-24T14:15:22Z",
  "read": true,
  "read_at": "2019-08-24T14:15:22Z",
  "system_sse_delivered_at": "2019-08-24T14:15:22Z",
  "channels_attempted": [
    "string"
  ],
  "channels_sent": [
    "string"
  ],
  "channels_delivered": [
    "string"
  ],
  "channels_failed": [
    "string"
  ],
  "link_url": "string",
  "link_text": "string",
  "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
  "modified_at": "2019-08-24T14:15:22Z",
  "modified_by": "e8d4374d-93a1-4e98-a6c6-fdcf00c5059f",
  "active": true,
  "metadata": {}
}
{
  "status": 400,
  "message": "Invalid notification id",
  "code": "notifications_m.invalid_id",
  "class": "validation"
}
{
  "status": 401,
  "message": "Unauthorized",
  "code": "common.unauthorized",
  "class": "business"
}
{
  "status": 403,
  "message": "No access to the record",
  "code": "common.rbac_no_rec_access",
  "class": "business"
}
{
  "status": 404,
  "message": "Notification not found",
  "code": "notifications_m.not_found",
  "class": "business"
}
{
  "status": 429,
  "message": "Rate limit for 203.0.113.10 to 8f1d2c34-5b6e-4a70-9c81-2d3e4f5a6b7c exceeded.",
  "code": "rate_limits_m.exceeded",
  "class": "temporary",
  "retryable": true
}
{
  "status": 500,
  "message": "Database error",
  "code": "common.database_error",
  "class": "business"
}

{
  "overall_status": "unhealthy",
  "message": "Service is shutting down",
  "timestamp": "2026-08-27T15:04:05Z"
}