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

# Custom event storage and retention

> Store Custom Events so you can build Segments from them and see them on user profiles, choose how long each event is kept, and manage the events you have stored.

Turn on storage when you want to build Segments from your [Custom Events](./custom-events) or see a user's event history on their profile. This page covers what storage gives you, how to turn it on, how to choose a retention period for each event, and how to manage the events you've stored.

<Warning>
  Custom Event storage and retention are rolling out now and coming soon to all apps. If you don't see the storage banner under **Data > Events & Conversions**, your app doesn't have it yet.
</Warning>

## Prerequisites

* A paid plan. Custom Event ingestion isn't available on the Free plan.
* Permission to edit Custom Event retention settings. You need it both to accept the billing terms and to change retention. If you don't have it, the dashboard will prompt you to contact someone on your account who does.

## What storage gives you

Custom Events power Journeys, Conversion Metrics, and Liquid personalization as soon as OneSignal receives them, whether or not you store them. Storing them adds two things:

* **Segments.** Build Segments from the events a user has or hasn't performed, and use those Segments anywhere you target an audience.
* **User profiles.** See each user's event history on their profile, so you can understand what an individual did and when.

The longer you retain an event, the further back your Segments and user profiles can reach, up to 90 days.

## Turn on storage

Head to **Data > Events & Conversions**. If your app is sending events that aren't being stored, a banner at the top of the page tells you so.

<Steps>
  <Step title="Open the storage prompt">
    Select the banner on the Events & Conversions page.
  </Step>

  <Step title="Choose a default retention period for this app">
    Each app has its own default, independent of your other apps. It applies to every event in this app that doesn't have its own retention setting, and you can choose whether to apply it to the events the app has already received. You can change the default later and override it for individual events.
  </Step>

  <Step title="Accept the billing terms">
    Storage starts the moment you accept. OneSignal records who accepted and emails your organization's admins to let them know.
  </Step>
</Steps>

<Check>
  Once you complete these steps, storage is on for your app! Every event OneSignal receives from this point forward is stored for your default retention period.
</Check>

## Set retention per event

Retention is how long OneSignal keeps each stored event, up to a maximum of 90 days. Your app's default covers all events, and you can override it for any individual event.

<Steps>
  <Step title="Open the event">
    Go to **Data > Events & Conversions**, open the **Event List** tab, and select the event.
  </Step>

  <Step title="Choose a retention period">
    In the detail view, set the retention period for that event. That setting overrides your app's default for this event only.
  </Step>
</Steps>

## Manage your stored events

You can lower the retention on events you no longer need to store, or that you want to store for a shorter period. OneSignal deletes the events outside the new window and keeps the rest.

<Warning>
  Deletion runs overnight rather than immediately, so your stored event count reflects the change the following day.
</Warning>

## When you're billed

Sending Custom Events to OneSignal is free on all paid plans. OneSignal only bills for events that are stored for segmentation.

Events power Journeys, Conversion Metrics, and Liquid personalization whether or not you store them. Storing events adds two capabilities: building Segments from them, and viewing them on the user profile.

Storage stays off until someone on your account with permission to edit retention settings accepts the billing terms. Until then, OneSignal receives your events and makes them available to Journeys, Conversion Metrics, and Liquid personalization without storing them.

Each plan includes a monthly allotment of stored events. OneSignal charges events above that allotment at your plan's overage rate, which the dashboard shows you when you turn on storage.

| Plan         | Included stored events per month |
| ------------ | -------------------------------- |
| Growth       | 1,000,000                        |
| Professional | 5,000,000                        |
| Enterprise   | 10,000,000                       |

Your allotment is applied at the organization level, so events stored in one app count toward the same total as events stored in any other app in your organization.

You're billed at the end of your billing cycle, on the events in storage at that moment. OneSignal subtracts your plan's included allotment and charges the rest at your plan's overage rate. If you're at or under your allotment, there's no storage charge at all.

Because billing reads your stored count when the cycle closes, lowering retention before then lowers what you owe for that cycle. Leave enough time for the overnight deletion to run.

To see where you stand, go to **Organizations > Billing**. Your stored event total appears alongside your other usage, broken down by event. OneSignal also emails your organization's admins when you reach 80% and 100% of your allotment.

## FAQ

### Do I pay for events I send but don't store?

No. Sending events is free on all paid plans. You're billed only on the events in storage when your billing cycle closes.

### Can I build a Segment on events older than 90 days?

No. The current maximum for retention is 90 days.

### Does setting an event to Not stored break my Journeys?

No. **Not stored** (0 days) means OneSignal doesn't keep the event, but Journeys, Conversion Metrics, and Liquid personalization all read events as OneSignal receives them, so they work the same whether or not the event is stored. Only Segments and user profiles need stored events.

### Who can turn on storage or change retention?

Someone on your account with permission to edit Custom Event retention settings. The same permission covers accepting the billing terms, setting an app's default, and changing retention on individual events.

### What happens when my app reaches 1,000 unique event names?

Each app can send up to **1,000 unique Custom Event names**. Events sent under a name your app already uses are always accepted, so reaching the limit never interrupts the events you're already sending.

Once an app reaches 1,000 names, events sent under a *new* name are rejected. OneSignal rejects the individual event, not the request, so other events in the same batch are processed normally. The API returns HTTP `202` with an `errors` array, and each rejected event carries the error code `too many event names`.

A rejected event is not stored, is not billed, and cannot trigger a Journey, personalize a message, or be used in a Segment. It does appear in **Data > Events & Conversions**, marked as failed with the reason "This app has reached its limit of unique event names", so you can see which names were rejected.

To make room, delete a Custom Event name you no longer use. Deleting a name frees its slot and permanently deletes the events stored under it.

<Note>
  The Custom Events page warns you once your app passes 900 unique event names, before any event is rejected.
</Note>

Retention and the name limit are separate. Setting an event to Not stored stops OneSignal keeping its events, but the name keeps its slot. Only deleting the name frees the slot. See [Event name limits](./custom-events#event-name-limits) for how to do it.

## Related pages

<Columns cols={2}>
  <Card title="Custom events" icon="bolt" href="./custom-events">
    Send events and use them in Journeys, Segments, and personalization.
  </Card>

  <Card title="Billing FAQ" icon="receipt" href="./billing-faq#event-related-billing">
    How OneSignal calculates the rest of your invoice.
  </Card>
</Columns>
