Skip to main content
Once a group is enrolled, two read-only endpoints return what a benefits tab and a payroll sync need:
  • GET /groups/{groupId}/account: the employer’s plan (for your plan card), population, funding, premium totals and claims spend totals.
  • GET /groups/{groupId}/members: the roster, with each employee’s coverage and payroll deduction. See Payroll deductions.
Aggregate and de-identified by design. The account payload never contains named claims, diagnoses, or any individual’s health data. See Compliance.
Both endpoints return 404 not_found until the group is enrolled. Pre-enrollment, use GET /census for roster display.

The account payload

This is real output for a synthetic four-employee sandbox group whose plan terms are approved. The employer covers 100% of employee-only premium and 90% of the added premium for dependents. services is shortened here, and plans (a list whose first entry is plan) is left out.

Before the plan terms are approved

Prescience approves each employer’s plan terms during onboarding. Until then plan.planStatus is terms_pending, plan.source is plan_config, only the plan configuration fields are present, and plan.employeePremiumCents, plan.tiers, plan.employerContribution and premiums.employeeContributionCents are null. Show the plan as pending rather than as $0.

Rendering the plan card

Render the employer’s plan in your own UI from plan, or from plans if you want to be ready for more than one plan level. Everything comes from the approved plan terms, the same ones employees see when they enroll. plan.deductibleIndividualCents, deductibleFamilyCents, oopMaxIndividualCents, oopMaxFamilyCents and employeePremiumCents are deprecated: they repeat tiers for employee_only and family and stay only for integrations built against them. Before the plan terms are approved they are the only plan amounts.

Tiers

The plan prices three tiers; a household maps to one by its covered dependents: 0 → employee_only, 1 → employee_plus_one, 2 or more → family. A spouse, domestic partner and child each count as one. Quotes and the census count four household shapes, so “employee + spouse” and “employee + one child” are both employee_plus_one here. See Payroll deductions.

Showing the plan in your product

The plan card for your Benefits page: Prescience’s plan shown like a plan you provide, with its price, its terms and what each employee pays. Every value comes from GET /groups/{groupId}/account, GET /groups/{groupId}/members and, for the mark, GET /plans. The only arithmetic is one sum and currency formatting.

What to show

The Diamond card

To show Prescience’s benefits card next to the plan, draw it from listing.card in GET /plans:
  1. Draw card.artUrl (a text-free SVG) at card.aspectRatio, with corners of card.cornerRadiusPct percent of the card’s width.
  2. Print card.kicker, card.badge and card.planName in card.textColor.
  3. For each entry in card.fields, print label and the live value at source in GET /groups/{groupId}/account, formatted as currency. companyName has no label.
Nothing on the card is fixed except the copy in listing.card, so it always matches the employer’s plan. Label the monthly premium by its source: The company’s share is the sum over enrolled members, so it follows actual elections. With premiums.source rate_schedule and plan.rateSources.mismatchedMembers 0, it equals monthlyPremiumEquivalentCents − employeeContributionCents. Skip the sum, and show “Being finalized”, while any enrolled member’s medical.employerMonthlyCents is null.

Example

Rendered from the example payloads on this page:
Name the network carrier (plan.networkCarrier) only as the network: the employer self-funds the plan and Prescience administers it, so never call Prescience the carrier or the insurer. Show plan.services[] (service and memberCost, display strings) on a detail view if you have room.

States

Format cents with your currency utility (61200 → $612.00) and dates in the employer’s locale. Poll /account for plan.termsRevision; when it increases, the card and every deduction have changed.

Other fields

All money is integer cents. Format with your standard currency utility, never floats. The account payload does not include spend by category or a savings figure. Neither can be derived from real records today, so the API does not return them.

The roster

GET /groups/{groupId}/members returns every employee. Two from the same synthetic group, one covering a spouse and one who waived:

Freshness

asOf timestamps every account read. The data behind it updates as pulls settle, claims process and employees enroll. Cache for minutes, not days. Both endpoints fall under the standard 120 req/min rate limit.

Offer letters and careers pages

GET /groups/{groupId}/benefits-summary returns the employer’s approved employee plan terms in one payload built for offer-letter and careers-page templates: plan name and plan year, eligibility rule, network, monthly employee contributions by tier, deductible, out-of-pocket maximum, coinsurance, the covered-care schedule, and the disclosures to print alongside them.
  • It returns 404 not_found until the group is enrolled and 409 conflict until Prescience approves the plan terms during onboarding.
  • revision increases whenever Prescience approves new terms. Store it with each generated letter and regenerate when it changes.
  • Employer plan cost is never part of this payload. Use GET /groups/{groupId}/account for the employer view.