Skip to main content
The Partner API provides two environments: test mode for development and integration testing, and live mode for real employer groups. Both run the same validations, market-rate quote path, webhooks, and onboarding state machine. Test mode uses synthetic employers but still requires a completed market comparison before a quote is available. The things that never happen in test mode are production activation and money movement. Unlike platforms that separate environments by base URL, the Partner API derives the environment from your API key.

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

No money moves in either environment until Prescience activates the company. Activation (sandboxprod) 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.

Stable quote fixtures

For a stored census and market-rate snapshot, the pricing solve is stable. A fresh market sweep can return a newer plan set or rates, so do not snapshot-test against a hard-coded dollar amount forever. Instead, assert the response shape, pricing basis, covered lives, benchmark, and disclosed assumptions. That means you can:
  • Test the real pending state. A quote may return 409 rates_pending while the market comparison is running. The iframe handles this automatically.
  • Build pricing UI against representative numbers. Test mode follows the production quote path without activating a real employer.
  • Re-quote freely. Quoting has no side effects beyond writing the quote record. Rate limit: 60 quote creates per hour.
The quotes guide documents quote inputs, response fields, expiry, and in-review handling.

Test the full lifecycle

A complete test-mode pass looks like:
  1. POST /groups, then PUT /census: verify the census acceptance response. This starts modeling but does not return an iframe URL.
  2. When the employer opens the offer, call POST /embed-sessions from your backend, pass its returned url to your frontend, and render it as the iframe src. Confirm the iframe shows live modeling and then the plan.
  3. Complete the iframe handoff and verify the enrollment.created webhook. If you use the direct quote API instead, handle 409 rates_pending, then test POST /quotes and POST /enrollments separately.
  4. GET /account + GET /members: build the benefits tab against the sandbox company.
  5. PUT /webhook + POST /webhook/test: verify signatures end to end.
  6. New hire and termination calls: verify census sync.
When that loop is green, going live is a key swap plus the compliance checklist. The code does not change.