Skip to main content
Changed
Prescience prices the market; current plan comparison

Quotes are priced on the market Prescience finds

  • POST /quotes and quote_group no longer use market_plans. Prescience finds the plans in each group’s market itself, from the census. A request that still sends market_plans is priced the same way, and each plan in it is listed in ignored_plans. A new census takes a few minutes to price (a 202 first).
  • Send the client’s current plan as current_coverage (carrier, pepm_cents for what it costs per employee per month, renewal_date), now also on quote_group. Each version in the quote then has vs_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-plan and the MCP tool price_on_plan) is removed: you no longer choose the plan Prescience sits on. Send the census to POST /quotes.
Changed
Broker snake_case

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_only and 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_groups and get_group return the same group, with market_plans, rating_zip, pricing, enrolled, benefits_admin and latest_quote. GET /groups and list_groups return { groups, count, next_cursor } and take limit and cursor. get_plan_details with plan_id returns the plan itself, as GET /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, else company.domain, and never to an enrolled group; otherwise a group is created. This holds for POST /quotes, quote_group, New quote in the portal and Slack.
  • The proposal Excel file has one tab, Comparison. The PDF is unchanged.
New
Broker quotes and MCP

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 returns 201 with the quote, or 202 while rates are fetched. Send every plan you quoted as marketPlans and 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 is unavailable with a reason when it can’t be priced for the group. Each carries member_oop_max, all_max_year, median_year, monthly_rates_by_household, worst_year, time_machine, fit_flags and 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 as marketPlans, which Prescience prices from instead of looking plans up itself. marketPlans takes up to 500 plans, each with one of three rate bases (memberRatesCents, pmpmCents or monthlyRatesCents). A plan Prescience can’t build on, such as an HMO or a non-HSA base plan, is ignored and listed in ignoredPlans, never rejected. Both are optional fields on POST /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}/elections and the deductions.changed webhook 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.
Changed
Quote pricing fields

Quote pricing fields

  • monthly.pepmCents now 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.tiers now counts real households in all four tiers; employeeChildren is no longer always 0.
  • 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 hsaElection on GET /members: each employee’s saved HSA payroll election: the total to withhold from effectiveDate to the end of contributionYear (targetCents), Check’s single or family limit, and a version that changes on every new election. null when there’s no election.
  • New benefits: the group’s quoted Diamond design (deductibles, out-of-pocket maximums, coinsurance). GET /plans now shows Diamond’s typical design: 0deductible,0 deductible, 1,000 / $2,500 out-of-pocket maximums.
Quotes created before this change are returned as stored: their pepmCents is per covered life, and they have no pmpmCents, reserve, benchmarkPlan or benefits.
Changed
Payroll deductions and the real plan

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 gains coverage and deduction (monthly employee share, per-paycheck amount, pre-tax flag, and a reason whenever an amount can’t be derived). Existing fields are unchanged. See Payroll deductions.
  • GET /groups/{groupId}/account: plan now comes from the employer’s approved plan terms, adds per-tier contributions, the employer’s chosen contribution, preTax and payrollFrequency, and is repeated as plans[0]. plan.employeePremiumCents and premiums.employeeContributionCents carry real amounts or null instead of a fixed 0.
  • GET /groups/{groupId}/account no longer returns premiums.breakdown, savings or spend.categories, which were not backed by real data. spend adds source.
  • GET /plans replaces employeePremiumCents with employerContribution (minPct, maxPct). Quotes return employeeContribution.premiumCents: null with employerContributionRange.
Current
Market-rate iframe flow

Market-rate plan reveal

  • PUT /groups/{groupId}/census now starts the local market comparison and returns census acceptance results only.
  • POST /groups/{groupId}/embed-sessions creates 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.
Additive
v1.1

Partner API v1.1

Additive release; no breaking changes. Existing integrations continue to work unchanged.Onboarding pathways
  • POST /groups/{groupId}/enrollments accepts onboardingMode: "hosted" | "embedded" (default hosted). 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 onboardingMode and, when the signatory was provisioned, an employerPortal object (provisioned, signinUrl, inviteSuppressed).
  • Embedded onboarding schemas are available for integrations that use that pathway.
Test-mode email suppression
  • Test mode never sends outbound email. Portal accounts are still provisioned and the response reports employerPortal.inviteSuppressed: true.
Pricing configuration
  • Quote responses gain an additive pricing object (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).
Initial release
v1

Partner API v1

First public release of the Prescience Partner API.Core flow
  • POST /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 members
  • POST /groups/{groupId}/quotes: synchronous, deterministic quotes with tier breakdowns and prior-cost comparison; in_review flow for groups over 200 employees
  • POST /groups/{groupId}/enrollments: provisioning into the onboarding pipeline (sandbox → prod state machine)
Plan and account data
  • GET /plans: static plan metadata, plan facts, assets, and disclaimers
  • GET /groups/{groupId}/account: aggregate, de-identified employer account data covering funding, premium breakdown, spend categories with k-anonymity suppression, and savings
  • GET /groups/{groupId}/members: enrollment roster with invitation status and COBRA
Census sync
  • POST /groups/{groupId}/members, PATCH /groups/{groupId}/members/{memberId}: new hires, updates, terminations with COBRA handling; post-enrollment changes propagate to the live census
Platform
  • 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-Key support on all POST/PUT endpoints (24h replay)
  • Rate limits: 120 req/min, census writes 20/min, quotes 60/hour, with Retry-After