Environments
A project has two environments: Sandbox and Live.
Sandbox is not a mock. It behaves exactly as Live does, down to webhook delivery, with no simulated players, no seeded data and no test-mode endpoints. The only difference is consequence: nothing in Sandbox reaches a real player.
What the two share
Two settings, chosen when the project is created and the same on both environments. Neither can be changed afterwards, so getting one wrong means a new project.
| Setting | Example | What it decides |
|---|---|---|
| Default language | en | The language a player reads when they have not asked for another. |
| Default time zone | America/New_York | Which day a player's activity falls on when you have not sent a time zone for them. |
Images are the one thing wider than a project: they belong to your organization, so every project and both of its environments draw on the same library.
What the two do not share
Everything else. Each of these exists twice, once per environment, with nothing linking the copies:
- Players, what they have done, what is true about them, and their points
- Events and attributes
- Missions, streaks and leaderboards, and every player's progress in them
- The catalog, the shop and everything bought in it
- Webhook endpoints and their signing secrets
- API keys
There is no identity across environments. player-42 in Sandbox and player-42 in Live are two
unrelated players, and nothing merges them.
A key belongs to one environment
| Environment | Key |
|---|---|
| Sandbox | starts with gem_sbox_ |
| Live | starts with gem_live_ |
The key is what decides where a call lands, not anything you send. There is one address,
https://api.gemifier.io, for both, and a Sandbox key cannot read or write anything in Live.
A key is shown once, when you create it, and never again. Revoking one takes effect immediately and cannot be undone, so create the replacement first.
A key has no scopes. Any key is full access to its environment, so both kinds stay on your server. See Authentication.