Docs / Environments

Environments

Every project has two environments, live and test. They count separately, so trying things in test never touches live numbers.

The token decides

The API has no test flag. Each token belongs to one environment, and every event sent with it lands there.

Environment Token starts with For
Live bump_live_ production
Test bump_test_ your laptop, staging, CI

The prefixes also help secret scanners, and people, spot a leaked token.

Tokens are made under Developers > API tokens, in whichever environment the sidebar switch is on. In test, every dashboard page has a Test data band at the top.

What's shared

Shared by live and test:

  • Trackables. orders is one trackable, with separate totals in each environment.
  • Objectives. Try one in test first. Only a live milestone locks its rule.
  • The project's name, timezone and currency.

Separate per environment:

  • events, totals, charts and active figures
  • identifiables and their labels, and forgetting one: forgetting usr_123 in test leaves live's usr_123 alone
  • idempotency keys: the same id in live and in test is two events
  • milestones
  • integrations, so a test webhook never reaches a production URL
  • API tokens
  • the event log, deliveries, problems and the audit log

Reset test data

In test, Settings > Danger zone > Reset test data deletes every test event, total, milestone, delivery, identifiable and problem. Trackables, objectives, test integrations and tokens stay. Live isn't touched. It takes an owner or admin, and it can't be undone.

The reset itself goes in Developers > Audit log, which a reset never clears.

Otherwise test data is kept as long as live data: events for 13 months, totals for good.

Tracking since

Each environment remembers its earliest event counted live, not backfilled. Developers > Events shows it as Tracking since, with a copy button.

It matters when you import history. Backfill everything before that moment and nothing after, and the import and live counting meet without overlap or a gap. The Laravel package's bump:backfill --until takes this value as it's copied.

Backfilled events never move it. A reset of test data clears it, and the next live-counted event sets it again.