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

# Sessions and release health

> What a session is, how it ends, and how crash-free sessions and users are counted per release.

## Sessions

A session is one period of use of your app on one device. The SDK starts a new session:

* at every cold start of the app;
* when the app returns to the foreground after 30 minutes or more in the background;
* when the current session reaches 4 hours, at the next return to the foreground or the
  next record after that.

Both durations can be changed per app in the [remote configuration](/remote-configuration).
Every record the SDK sends carries its session's id, so a crash, the requests before it and
the screens the user saw line up in one timeline.

## How a session ends

Each session sends a small summary when it starts and a final one when its outcome is known:

| Outcome | Meaning |
| - | - |
| `exited` | The session ended normally: the app was closed or the session rotated |
| `crashed` | The next launch found a crash report for the session |
| `abnormal_exit` | The system ended the app without a crash report, for example out of memory or the watchdog |
| `active` | The session is still going. One that stays active past the rotation timeouts counts as exited |

A crashed process cannot report itself, so `crashed` and `abnormal_exit` arrive at the next
launch. Once a session is `crashed` or `abnormal_exit`, a later summary does not change it.

## Release health

A release is your app's version string (`CFBundleShortVersionString` on iOS). For each app and
release, Apsio counts:

| Number | How it is computed |
| - | - |
| Sessions | Every session that started in the period |
| Crashed sessions | Sessions with outcome `crashed` |
| Abnormal-exit sessions | Sessions with outcome `abnormal_exit` |
| Crash-free sessions rate | 1 − crashed sessions ÷ sessions |
| Users | Distinct installation ids |
| Crash-free users rate | 1 − users with a crashed session ÷ users |

Abnormal exits are shown next to crashes but do not lower the crash-free rates.

### Exact, even when sampled

The session summaries are sent for every session, whatever the
[sampling](/concepts/sampling) rate, and so are crashes and errors. Release health numbers
are therefore counted, not estimated.

### Users need the installation id

Users are counted with the installation id: a random id per install of your app, reset when
the app is reinstalled. When an app turns it off (`installationId: false`), user numbers are
empty and only the session numbers are shown. See [Privacy and consent](/concepts/privacy).

Read release health with the [read API](/read-api): `GET /v1/projects/{projectId}/releases`.


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