Docs
Data Retention
Retention is set by your plan and enforced automatically — events older than your window are deleted on an hourly sweep, keeping storage predictable and your compliance story simple.
Retention windows
| Plan | Retention | Monthly events |
|---|---|---|
| Free | 30 days | 10,000 |
| Growth | 90 days | 250,000 |
| Scale | 365 days | 2,000,000 |
Your project's current window, plan, and usage this month are shown in the dashboard under Plan & usage. Upgrading moves the window immediately; see Pricing for the full comparison.
How enforcement works
- A background sweep runs every hour and evaluates each event's
occurred_atagainst the project's window. - Events past the window are deleted permanently — they stop appearing in queries, feeds, stats, and exports. Sessions whose last activity is past the window are deleted with them.
- Actor records are kept. Your users still resolve to the same record when new events arrive; their
total_eventsreflects retained history. - Deletion runs in small batches so it never blocks ingestion or reads.
Backfilled events
If you backfill history by passing an explicit timestamp when tracking, the retention window applies to that timestamp — backfilling an event older than your window means it will be removed on the next hourly sweep. Backfilled events still count toward the monthly cap of the month you send them in.
Over the monthly cap
Retention and the monthly event cap are independent. When you reach your plan's cap, new events are rejected with 402 (on both single and batch ingest) until the 1st of next month or until you upgrade. Nothing is deleted and reads, feeds, and exports keep working.
Exporting your data
You own your event model, and export is available on every plan. Click Export on the dashboard's Events page (CSV or JSON, honouring the current filters), or call the API:
# CSV or JSON, same filters as GET /v1/events, up to 10,000 rows per call curl -o events.json "https://api.softechlog.com/v1/events/export?format=json&from=2026-08-01T00:00:00Z" \ -H "Authorization: Bearer stl_sk_xxxxxxxxxxxx"
Each call returns up to 10,000 rows, newest first. For larger histories, split by from/to windows or page through GET /v1/events with cursor pagination.