> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Notification Layer

> Follow notification delivery, inspect each notification and its delivery attempts, configure the email, SMS, and webhook delivery profiles, and change the delivery settings in Lerian Console.

The Notification Layer is the Console area for the notifications that the platform sends by email, SMS, and webhook. Use it to:

* Follow the delivery figures on the **Overview** screen.
* Find a notification, read its delivery attempts, and retry or cancel it.
* Configure the delivery profiles that send each channel.
* Change the runtime settings of the delivery service.

## Open the Notification Layer

***

Click the gear icon () in the top navigation bar, then select **Notification Layer**. The same entry is also in the Settings sidebar. The area has its own sidebar with four screens: **Overview**, **Notifications**, **Delivery Profiles**, and **Runtime settings**.

With Access Manager, the entry needs the read permission on notifications. Without that permission, **Notification Layer** does not appear in the gear menu or in the Settings sidebar.

Each screen and action needs its own permission:

| Screen or action | Permission with Access Manager |
| - | - |
| **Overview**, **Notifications**, and the detail of a notification | Read on notifications |
| **Retry delivery** and **Cancel notification** | Create on notifications |
| **Delivery Profiles** and the detail of a profile | Read on delivery profiles |
| **New delivery profile** | Create on delivery profiles |
| **Edit delivery profile** and **Edit credentials** on a profile | Update on delivery profiles |
| **Delete** a profile | Delete on delivery profiles |
| **Runtime settings** | Read on systemplane, the resource that holds the runtime settings |
| Save a change on **Runtime settings** | Update on systemplane |

## Overview

***

The **Overview** screen sums up notification delivery across all channels. It opens on the last 24 hours. Buttons switch the window to the last 7 days or the last 30 days. Six cards stand at the top:

| Card | What it shows |
| - | - |
| **Total** | The number of notifications. |
| **Delivered** | The notifications with the status **Delivered**. The delivery rate shows below it, as a percentage of the delivered and failed ones together. |
| **Failed** | The notifications with the status **Failed** or **Exhausted**. |
| **Pending** | The notifications with the status **Pending** or **Processing**. |
| **p95 Latency** | The 95th percentile of the delivery attempt latency. The 99th percentile shows below it. |
| **Total Attempts** | The number of delivery attempts. The average per notification shows below it. |

Below the cards:

* **Top Failure Reasons** shows the failures by reason, for example **Invalid recipient** or **Rejected by Twilio**. A reason without a label shows its failure code.
* **Volume by Channel** shows the number of notifications on each channel.
* **Recent Notifications** lists the five latest notifications of the selected period, with their **Recipient**, **Subject**, **Channel**, **Priority**, **Status**, and **Created At** date. Click a row to open the notification. **View all** opens the **Notifications** screen.

Next to the period buttons, an **Updated** line shows how long ago the Console read the figures. Click **Refresh** to read them again.

If the Console cannot read the figures, an error replaces all of them. Click **Retry** to read them again.

## Notifications

***

The **Notifications** screen lists the notifications of the platform. The table has the columns **Subject**, **ID**, **Channel**, **Recipient**, **Priority**, **Status**, and **Created At**. To open a notification, click its row.

### Notification statuses

| Status | Meaning |
| - | - |
| **Pending** | The notification waits for its next delivery attempt. |
| **Processing** | A delivery attempt is in progress. |
| **Delivered** | The provider accepted the message. This status is final. |
| **Failed** | The last attempt failed. |
| **Exhausted** | The service makes no more attempts, because the attempts ran out or the failure is permanent. |
| **Canceled** | Someone canceled the notification. This status is final. |

### Filter the list

Click the icon button next to **Items per page** to open the filter panel and narrow the list:

* **Status**: click one or more status chips.
* **Channel**: **Email**, **SMS**, or **Webhook**.
* **Recipient**: the exact recipient.
* **Correlation ID**: the correlation identifier of the notification.
* **Failure code**: the failure codes from the overview, the most frequent first.
* **Created from** and **Created to**: the creation date range.

The **Clear filters** icon button empties every field. **Items per page** sets the page size.

### Notification detail

The title of the **Notification** screen is the subject of the notification, or its ID when it has no subject. To go back to the list, use the breadcrumb. The screen has two tabs, **Details** and **Attempts**. A notification with the status **Failed** or **Exhausted** opens on **Attempts**. Other notifications open on **Details**.

The **Details** tab lists these facts:

* **Status**, **Channel**, **ID**, **Subject**, **Recipient**, **Destination**, **Priority**, and **Correlation ID**.
* **Provider message ID**.
* **Attempts**, as the number used and the maximum.
* **Scheduled at**, **Next attempt at**, **Delivered at**, **Failed at**, **Canceled at**, and **Canceled by**.
* **Failure code**, **Created at**, and **Updated at**.

**Metadata** shows below the facts, as JSON, when the notification has metadata.

The **Attempts** tab shows the **Failure detail** card, as JSON, when the notification has failure detail. Below it is the **Delivery attempts** card.

If the notification does not exist, the screen shows **Notification not found.** and a **Back to list** button.

### Delivery attempts

The **Delivery attempts** card lists the attempts, oldest first, as **Attempt 1**, **Attempt 2**, and so on. Each attempt shows:

* Its result and the time of the attempt.
* **Provider**: the delivery profile that made the attempt.
* **Response**: the response code, when there is one.
* **Latency**: the duration of the attempt, in milliseconds.
* The error message, when the attempt failed.
* **Response body**: click it to expand the body that the provider returned.

When the notification has no attempt yet, the card shows **No delivery attempts recorded yet.**

### Retry or cancel a notification

**Retry delivery** is a button in the header of the notification. It is available when the status is **Failed** or **Exhausted**. Confirm in the **Retry delivery?** dialog. The notification goes back to **Pending**, and the service attempts delivery again.

**Cancel notification** is under **More actions** in the header. It is available when the status is **Pending**, **Processing**, or **Failed**. Confirm with **Cancel notification** in the **Cancel notification?** dialog, or click **Keep notification** to stop. You cannot undo a cancellation. The service makes no new delivery attempt.

## Delivery Profiles

***

A delivery profile connects a channel to a provider and holds the credentials for that provider. The **Delivery Profiles** screen lists the profiles with the columns **Name**, **ID**, **Channel**, **Provider**, **Status**, **Priority**, **Default**, and **Created At**. The row menu in **Actions** has **View** and **Delete**.

When a channel has more than one active profile, the service uses the profile with the highest priority first. A tie goes to the default profile, then to the oldest profile. The service skips inactive profiles.

### Create a delivery profile

The form has two steps. It opens with **Email**, **SMTP**, the status **Active**, and the priority 0.

**1. Open the form**

Click **New delivery profile**.

**2. Fill in the Profile step**

Type a **Name**. Select the **Channel**, then the **Provider**. You cannot change either one after you create the profile. Set the **Status**, the **Priority**, and the **Default for this channel** switch.

**3. Set the limits**

Optionally, type a **Rate limit (per second)** and a **Daily limit**. An empty limit means no limit.

**4. Go to the next step**

Click **Next**. The Console checks the fields of the **Profile** step before it opens the next step.

**5. Fill in the provider configuration**

Fill in the fields of the **Provider configuration** step. The fields change with the provider, as the next sections show. Click **Back** to return to the **Profile** step.

**6. Save**

Click **Save**. The Console returns to the list.

Click **Cancel** to return to the list without a new profile.

If you open another screen from a link while the form holds input that you did not save, the Console asks **Discard changes?**. Click **Keep editing** to stay, or **Discard** to leave.

### Email and SMS providers

Each channel has its own providers. An asterisk (\*) marks a required field.

| Channel | Provider | Configuration fields |
| - | - | - |
| **Email** | **SMTP** | **Host**\*, **Port**\*, **From**\*, **Username**, **Password** |
| **Email** | **AWS\_SES** | **AWS region**\*, **Access key ID**\*, **Secret access key**\*, **Session token**, **From**\* |
| **Email** | **SENDGRID** | **API key**\*, **From**\*, **From name** |
| **SMS** | **TWILIO** | **Account SID**\*, **Auth token**\*, **From**\* |
| **SMS** | **ZENVIA** | **API token**\*, **From**\* |
| **SMS** | **INFOBIP** | **API key**\*, **Base URL**\*, **From**\* |

**From** is the sender that recipients see, such as an email address or an approved SMS sender ID. The SMTP **Port** accepts a value from 1 to 65535.

### Webhook provider

The **Webhook** channel has one provider, **HTTP\_WEBHOOK**. The profile does not hold the endpoint address: each webhook notification carries its own address in **Destination**.

The webhook profile has these fields:

* **Signing secret (HMAC)**: optional. The service signs the request body with this secret, so that the destination can verify the sender.
* **Destination auth**: how the service authenticates to the destination. Select **none** for no authentication.
* **Custom headers**: optional name and value pairs that the service sends on every request.

The **Destination auth** value adds its own fields:

| Destination auth | Fields |
| - | - |
| **basic** | **Username**\*, **Password**\* |
| **bearer\_static** | **Token**\* |
| **oauth2\_client\_credentials** | **Auth URL**\*, **Client ID**\*, **Client secret**\*, **Scope**, **Audience** |
| **jwt\_exchange** | **Auth URL**\*, **Token path**\*, **Expires-in path**\*, **HTTP method**, **Custom headers**, **Request body (JSON)** |

For **oauth2\_client\_credentials** and **jwt\_exchange**, **Auth URL** is the token endpoint that the service calls before it delivers the webhook. For **jwt\_exchange**, **Token path** and **Expires-in path** are the JSON paths of the access token and of its lifetime in the response.

### Delivery profile detail

The title of the **Delivery Profile** screen is the name of the profile. One card lists **Status**, **Channel**, **Provider type**, **Priority**, **Rate limit**, **Daily limit**, **Default**, **Consecutive failures**, **Last success**, **Last failure**, **Created at**, **Updated at**, and **ID**. **Consecutive failures** goes back to zero after the next successful delivery.

The header has the buttons **Edit credentials** and **Edit delivery profile**, and the **More actions** menu with **Delete**. Each Edit button opens a side panel.

In **Edit delivery profile** you can change these fields:

* **Name**
* **Status**
* **Priority**
* **Rate limit**
* **Daily limit**
* **Default profile for this channel**

Change the fields and click **Save**. After the priority or a limit has a value, you can change that value, but you cannot clear it.

### Replace the credentials

To replace the provider configuration of a profile:

**1. Open the editor**

Click **Edit credentials**.

**2. Fill in every field**

Fields that are not secret, such as Host, Port, Username, From, AWS region, Base URL and the Destination auth settings, open with their stored values. All other fields open empty, including Access key ID, Account SID, Signing secret (HMAC), Custom headers and Request body (JSON). Type them again: Save credentials replaces the full provider configuration, and a field you leave empty is not kept.

**3. Save**

Click **Save credentials**. To stop, click **Cancel**.

### Delete a delivery profile

Select **Delete** under **More actions** on the profile screen, or in the row menu of the list. Then confirm in the **Delete delivery profile?** dialog.

## Runtime settings

***

The **Runtime settings** screen shows the runtime settings of the delivery service, by group. Each row shows the setting, its key, a description, and the allowed values.

| Group | Setting | Allowed values |
| - | - | - |
| **Delivery & Retry** | **Max delivery attempts** | 1 to 20 |
| **Delivery & Retry** | **Retry base delay (s)** | 5 to 300 |
| **Delivery & Retry** | **Retry max delay (s)** | 60 to 86400 |
| **Delivery & Retry** | **Email concurrency** | 1 to 100 |
| **Delivery & Retry** | **SMS concurrency** | 1 to 50 |
| **Delivery & Retry** | **Webhook concurrency** | 1 to 100 |
| **Delivery & Retry** | **Webhook timeout (s)** | 5 to 120 |
| **Circuit Breaker** | **Failure threshold** | 1 to 50 |
| **Circuit Breaker** | **Recovery timeout (s)** | 10 to 600 |
| **Rate Limiting** | **Default max requests**, **Aggressive max requests**, **Relaxed max requests** | 1 to 100000 |
| **Rate Limiting** | **Default window (s)**, **Aggressive window (s)**, **Relaxed window (s)** | 1 to 3600 |
| **M2M Credentials Cache** | **Credential cache TTL (s)** | 30 to 86400 |
| **Logging** | **Log level** | debug, info, warn, error |

The groups are sections that you can collapse. They are open by default. Each section has a subtitle. When a section holds changes that you did not save, it shows a badge with the number of changes, such as **2 changes**. A section with a value that is not valid opens by itself.

To change settings:

**1. Change the value**

Change the value in a row.

**2. Save or discard**

Click **Save** with the number of changes, for example **Save 2 changes**. To drop all the changes that you did not save, click **Discard**.

If you open another screen from a link while you have changes that you did not save, the Console asks **Discard changes?**. Click **Keep editing** to stay, or **Discard** to leave.

If a value is out of range, the screen saves nothing and asks you to fix the marked fields. If some changes fail, the screen keeps them marked, so you can save them again.

Without the Update permission on systemplane, the screen shows a read-only banner and the fields are disabled. If the Console cannot read some groups, a warning lists them. Click **Retry** in the warning to read them again.

When runtime settings are off on the delivery service, the screen shows **Runtime settings are turned off for this deployment. Ask your platform team to enable them.** You cannot change the settings.

In Lerian Cloud, the screen does not list or save the delivery settings, and it shows **Runtime settings are turned off for this deployment. Ask your platform team to enable them.**


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.