> For the complete documentation index, see [llms.txt](https://docs.hackle.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hackle.io/en/crm-marketing/in-app-message-guide/frequency.md).

# In-App Message Fatigue Management

{% hint style="info" %}
This document covers in detail the **display limit condition check** step of the in-app message display determination process.
{% endhint %}

<figure><img src="/files/x5iKDHzUQTUsvZ1rOsNe" alt=""><figcaption></figcaption></figure>

## Overview

Display limit (fatigue management) is a feature that prevents the same in-app message from being displayed to a user excessively and repeatedly.

Each time an in-app message is displayed, a display record is left, and at the next display point, this record is used to determine whether the configured limit has been exceeded.

## Display Limit Criteria

<table><thead><tr><th width="128.86328125">Category</th><th>Meaning</th><th>Basis</th></tr></thead><tbody><tr><td><strong>Per Session</strong></td><td>Limits the number of displays during a single session</td><td><code>$sessionId</code></td></tr><tr><td><strong>Per Device</strong></td><td>Limits the number of displays on a single device</td><td><code>$deviceId</code></td></tr><tr><td><strong>Per User</strong></td><td>Limits the number of displays during a configured period</td><td><code>Display timestamp stored in the device cache</code></td></tr></tbody></table>

{% hint style="warning" %}
Regardless of the display limit category, all display records are **stored on the user's device**.\
Therefore, if the app is deleted or its data is reset, the display records are lost and the count is aggregated again from 0.
{% endhint %}

> #### Examples
>
> * **1 time per session per user** — Within the same session, the in-app message is displayed only once.
> * **3 times per device per user** — On that device, the in-app message is displayed a total of up to three times.
> * **2 times in 7 days per user** — If it has been displayed twice within the last 7 days, it is no longer displayed.

## Process Details

At the point of in-app message display, the display limit is determined in the following order.

{% stepper %}
{% step %}

#### Retrieve Display Records

All stored display records for that in-app message are loaded. Each record contains the identifier at the time of display and the display timestamp.
{% endstep %}

{% step %}

#### Aggregate Display Counts by Criterion

For each configured criterion (per session, per device, per user), the number of display records matching the condition is counted.

* Per session / per device: aggregate records with matching identifiers
* Per user: aggregate records that occurred within the configured period
  {% endstep %}

{% step %}

#### Determine Whether the Limit Is Exceeded

If **any** of the configured criteria reaches its limit count, the display is restricted.\
Each criterion is judged independently, and the in-app message is displayed only if it passes all criteria.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
If you configure multiple criteria together, the in-app message is displayed only if it satisfies all the configured limit conditions simultaneously.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.hackle.io/en/crm-marketing/in-app-message-guide/frequency.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
