How environments work
- The environment comes from the key.
psk_test_keys operate in test mode,psk_live_keys in live mode. Same base URL, same endpoints, same payload shapes. - Every resource is stamped with its environment. Each group, quote, and enrollment carries
"mode": "test"or"mode": "live". - Environments are fully isolated. Test keys only see test resources; live keys only see live resources. There is no cross-mode read and no “promote to live”. When you go live, you recreate real employers with your live key.
Test mode vs live mode
| Behavior | Test mode | Live mode |
|---|---|---|
| Rating engine | Same deterministic engine | Same deterministic engine |
| Quotes | Real numbers from your census | Real numbers from your census |
| Enrollments | Fully working sandbox company, flagged test: true | Sandbox company, then onboarding to prod |
| Onboarding pipeline | Runs (sandbox state) | Runs, completed with the employer |
| Employer portal provisioning | Account provisioned, no email (inviteSuppressed: true) | Account provisioned, set-password invite emailed |
| Outbound email | Never sent | Sent (portal invites, member invitations at activation) |
| Webhooks | Delivered and signed, "mode": "test" | Delivered and signed, "mode": "live" |
Activation (sandbox → prod) | Never; test companies stay sandboxed | By Prescience, after onboarding |
| Money movement | None | None until Prescience flips the company to prod |
No money moves in either environment until Prescience activates the company. Activation (
sandbox → prod) is a manual gate on our side, after the employer completes onboarding. Test companies are never activated. You cannot trigger a funding pull by accident; there is no API for it.Deterministic quotes
The rating engine is a pure function of the census, the plan year start date, and the rate card. The same inputs always produce the same cents, in test and in live. That means you can:- Snapshot-test your integration. The quote in the quickstart (
monthly.totalCents: 660096) will reproduce exactly from the same census. - Build pricing UI against real numbers. No mock data drift between your test fixtures and production behavior.
- Re-quote freely. Quoting has no side effects beyond writing the quote record. Rate limit: 60 quote creates per hour.
Test the full lifecycle
A complete test-mode pass looks like:POST /groups→PUT /census→POST /quotes: verify your quote handling and plan-selection UI.POST /enrollments: verify your selection flow, theemployerPortalresponse (inviteSuppressed: truein test mode), and theenrollment.createdwebhook.GET /account+GET /members: build the benefits tab against the sandbox company.PUT /webhook+POST /webhook/test: verify signatures end to end.- New hire and termination calls: verify census sync.