Quotes are priced on the market Prescience finds
POST /quotesandquote_groupno longer usemarket_plans. Prescience finds the plans in each group’s market itself, from the census. A request that still sendsmarket_plansis priced the same way, and each plan in it is listed inignored_plans. A new census takes a few minutes to price (a202first).- Send the client’s current plan as
current_coverage(carrier,pepm_centsfor what it costs per employee per month,renewal_date), now also onquote_group. Each version in the quote then hasvs_current_plan: the current plan’s annual cost and how much less or more the version costs. The price is still set against the market. See the Broker quickstart. - Price on a plan (
POST /price-on-planand the MCP toolprice_on_plan) is removed: you no longer choose the plan Prescience sits on. Send the census toPOST /quotes.
snake_case for brokers, and quotes that repeat
- Broker keys now send and receive snake_case on the REST API and the MCP tools:
company_name,external_id,market_plans,plan_design,member_id,employee_onlyand so on, in requests and in answers. camelCase requests are still accepted. HR platform keys keep camelCase. See the Broker quickstart. - Reads match across REST and MCP.
GET /groups,GET /groups/{groupId},list_groupsandget_groupreturn the same group, withmarket_plans,rating_zip,pricing,enrolled,benefits_adminandlatest_quote.GET /groupsandlist_groupsreturn{ groups, count, next_cursor }and takelimitandcursor.get_plan_detailswithplan_idreturns the plan itself, asGET /plans/{planId}does. - Quote creation repeats safely. Asking again for the same group, census and pricing run (
POST /quotes,POST /groups/{groupId}/quotes) returns the quote already made; a changed census or a new pricing run makes a new quote. - A company is matched to your group in the same mode by
company.external_id, elsecompany.domain, and never to an enrolled group; otherwise a group is created. This holds forPOST /quotes,quote_group, New quote in the portal and Slack. - The proposal Excel file has one tab, Comparison. The PDF is unchanged.
Broker quotes, the MCP server and partner-run enrollment
- New
POST /quotes: send a company and its census, get a quote. It finds or creates the group, replaces its census and returns201with the quote, or202while rates are fetched. Send every plan you quoted asmarketPlansand the answer usually comes back in the same request. See the Broker quickstart. - Quotes gain
plans: two computed plans, Prescience Diamond (diamond, the richest coverage with the lowest member out-of-pocket costs) and Prescience Value (value, a lower price with a higher member out-of-pocket maximum). A plan isunavailablewith a reason when it can’t be priced for the group. Each carriesmember_oop_max,all_max_year,median_year,monthly_rates_by_household,worst_year,time_machine,fit_flagsand more. Existing top-level quote fields are unchanged. - A group can carry your
basePlan(the carrier plan Diamond sits on) and every plan you quoted asmarketPlans, which Prescience prices from instead of looking plans up itself.marketPlanstakes up to 500 plans, each with one of three rate bases (memberRatesCents,pmpmCentsormonthlyRatesCents). A plan Prescience can’t build on, such as an HMO or a non-HSA base plan, is ignored and listed inignoredPlans, never rejected. Both are optional fields onPOST /quotes; sending the same company again with changed fields prices it again. - New
POST /price-on-plan: send a census and one plan priced per covered person, get the joint plan and the Prescience layer price. (Removed in October 2026.) - New MCP server at
/api/partner/v1/mcp, using your partner key, and the agent README at/api/partner/v1/mcp/readme. - New partner-run enrollment:
POST /groups/{groupId}/electionsand thedeductions.changedwebhook for partners that run elections and payroll deductions. - Partner accounts have a kind. Broker keys can call the quoting, MCP and elections endpoints and the shared group endpoints, not the HR-platform endpoints, and the reverse; a call outside a key’s access returns
403 forbidden. See Broker account setup.
Quote pricing fields
monthly.pepmCentsnow means cost per enrolling employee (totalCents÷census.employees). It was the cost per covered life.- New
monthly.pmpmCents: the price per covered life, dependents included. - New
reserve.annualCents: the most the employer could owe on top of the price in a year where every member reaches the plan’s out-of-pocket maximum. Disclosed, never added to the price. - New
benchmarkPlan(carrier,planName,metalTier,network): the plan the savings are measured against. census.tiersnow counts real households in all four tiers;employeeChildrenis no longer always0.- Quotes also go to review when a market failed to load.
- Group size no longer sends a quote to review; the 200-employee threshold is gone.
- New
hsaElectiononGET /members: each employee’s saved HSA payroll election: the total to withhold fromeffectiveDateto the end ofcontributionYear(targetCents), Check’ssingleorfamilylimit, and aversionthat changes on every new election.nullwhen there’s no election. - New
benefits: the group’s quoted Diamond design (deductibles, out-of-pocket maximums, coinsurance).GET /plansnow shows Diamond’s typical design: 1,000 / $2,500 out-of-pocket maximums.
pepmCents is per covered life, and they have no pmpmCents, reserve, benchmarkPlan or benefits.Payroll deductions and the employer’s plan
Employers now choose to cover between 50% and 100% of each premium, and employees pay the rest through payroll.GET /groups/{groupId}/members: each member gainscoverageanddeduction(monthly employee share, per-paycheck amount, pre-tax flag, and areasonwhenever an amount can’t be derived). Existing fields are unchanged. See Payroll deductions.GET /groups/{groupId}/account:plannow comes from the employer’s approved plan terms, adds per-tiercontributions, the employer’s chosen contribution,preTaxandpayrollFrequency, and is repeated asplans[0].plan.employeePremiumCentsandpremiums.employeeContributionCentscarry real amounts ornullinstead of a fixed 0.GET /groups/{groupId}/accountno longer returnspremiums.breakdown,savingsorspend.categories, which were not backed by real data.spendaddssource.GET /plansreplacesemployeePremiumCentswithemployerContribution(minPct,maxPct). Quotes returnemployeeContribution.premiumCents: nullwithemployerContributionRange.
Market-rate plan reveal
PUT /groups/{groupId}/censusnow starts the local market comparison and returns census acceptance results only.POST /groups/{groupId}/embed-sessionscreates the separate 30-minute iframe URL when the employer opens the offer.- Current quotes use
pricingBasis: "market_rates"and compare Prescience against the selected local platinum PPO benchmark. - Census submissions may include up to six dependents per employee. When dependent elections are unavailable, the quote discloses the normalized household mix it used.
Partner API v1.1
Additive release; no breaking changes. Existing integrations continue to work unchanged.Onboarding pathwaysPOST /groups/{groupId}/enrollmentsacceptsonboardingMode: "hosted" | "embedded"(defaulthosted). On the hosted pathway, Prescience provisions the enrollment signatory as an employer portal admin and runs onboarding, KYB, banking, and plan setup in the Prescience employer portal.- Enrollment responses now carry
onboardingModeand, when the signatory was provisioned, anemployerPortalobject (provisioned,signinUrl,inviteSuppressed). - Embedded onboarding schemas are available for integrations that use that pathway.
- Test mode never sends outbound email. Portal accounts are still provisioned and the response reports
employerPortal.inviteSuppressed: true.
- Quote responses gain an additive
pricingobject (source,updatedAt) naming the rate-card layer that priced the quote. - Quote expiry and the underwriting in-review employee threshold are now rate-card driven; the defaults are unchanged (30 days, 200 employees).
Partner API v1
First public release of the Prescience Partner API.Core flowPOST /groups,GET /groups,GET/PATCH /groups/{groupId}: employer groups with lifecycle (created→census_received→quoted→enrolled→active)PUT/GET /groups/{groupId}/census: full-census replace with per-row errors; upsert by email/externalId; up to 10,000 membersPOST /groups/{groupId}/quotes: synchronous, deterministic quotes with tier breakdowns and prior-cost comparison;in_reviewflow for groups over 200 employeesPOST /groups/{groupId}/enrollments: provisioning into the onboarding pipeline (sandbox→prodstate machine)
GET /plans: static plan metadata, plan facts, assets, and disclaimersGET /groups/{groupId}/account: aggregate, de-identified employer account data covering funding, premium breakdown, spend categories with k-anonymity suppression, and savingsGET /groups/{groupId}/members: enrollment roster with invitation status and COBRA
POST /groups/{groupId}/members,PATCH /groups/{groupId}/members/{memberId}: new hires, updates, terminations with COBRA handling; post-enrollment changes propagate to the live census
- Bearer-key auth with
psk_test_/psk_live_modes and full mode isolation - Signed webhooks (standard-webhooks scheme):
ping,quote.finalized,enrollment.created,group.state_changed,census.processed Idempotency-Keysupport on all POST/PUT endpoints (24h replay)- Rate limits: 120 req/min, census writes 20/min, quotes 60/hour, with
Retry-After