Skip to main content
Brokers send a client’s census to POST /quotes and get a quote back. Prescience has two plans, Prescience Diamond and Prescience Value, each priced from the plans you sent or from the group’s market. Brokers use the same API keys as every partner. Prescience sets up your brokerage and invites your admins; sign in to the partner portal to create keys. Sandbox keys work first, then production.

Send a census and the plans you quoted

You already quote every plan for the client. Send them with the census and Prescience prices Diamond from them, with no marketplace query, so the answer usually comes back in the same request:
marketPlans takes up to 500 plans of any metal, funding type or carrier. Each plan needs its carrier, name, planType, metalTier, hsaEligible, deductibles, out-of-pocket maximums and a rate (see Send your own plans). From the list:
  • The plan Diamond sits on is the best HSA-eligible PPO, EPO or POS plan, unless you send a basePlan.
  • Prices are set against a platinum PPO in the list.
  • A plan Prescience can’t build on (an HMO, a plan missing a required field) is ignored, never rejected, and the response lists it in ignoredPlans with the reason, plus usedPlans (sent, used, baseCandidates, benchmarkCandidates). A 400 is only for broken JSON, a missing or invalid census, more than 500 plans, or a list with no usable plan.
  • With no HSA-eligible PPO, EPO or POS plan in the list, or no platinum PPO, the response is 422 market_unavailable, and its message gives the reasons (“No HSA-eligible PPO, EPO or POS plan in the plans sent.”, “No platinum PPO was quoted to compare with.”), one per plan as “Diamond: … Value: …”. When the list has a platinum PPO but no HSA base plan, the 202 has baseFromMarket: true: Prescience fetches a base plan from the market sweep (minutes) while the benchmark stays your platinum PPO.
The group is found by company.externalId, else company.domain, else created. Its census and plans are replaced by the ones you send, so sending the same company again re-quotes it. domain is required. company.ratingZip is the ZIP of the market to price when it differs from the headquarters ZIP. Households are priced from the dependents you send. When no employee in the census has a dependent listed, Prescience models a typical mix instead of assuming none (10% of employees with one dependent, 25% with a family), so the quote’s census.coveredLives is higher than the number of employees. Send dependents for every employee who has them; census.tiers shows what was priced. Without marketPlans, Prescience sweeps the group’s market through SimplyInsured instead, which takes minutes (see below).

When pricing takes longer

With marketPlans the request waits for pricing, which takes seconds. Without them, rates for a new census are fetched from the market first, which takes minutes. Until rates are ready the response is 202:
Response (202)
Send the same request again after retryAfterSeconds: the same group is matched and, once rates are ready, you get 201 with the quote. You can also call POST /groups/{groupId}/quotes, or wait for the group.market_rates_ready webhook. A 202 is never stored under an Idempotency-Key, so repeating the request keeps working. 422 market_unavailable means Prescience can’t price the group from its market. Retrying does not help; a census or plan change starts a new comparison.

Reading a quote

plans has exactly two rows: Prescience Diamond (id: "diamond") and Prescience Value (id: "value"). Each has a one-line description. When a plan can’t be priced for a group, its row has status: "unavailable" and a reason, with no prices; the other plan still returns. A plan marked in_review is subject to Prescience underwriting review before it is final. Every version carries these fields, so an agent never has to recompute them. All money is integer cents. The quote also has pricedOn (census_only, base_plan or market_plans), the census counts and ignoredPlans / usedPlans when you sent plans. See the Quote schema for every field.

Send your own plans

Prices depend on what you send. basePlan and each marketPlans item use the same shape: Money is integer cents. Give each plan one rate basis:
  • memberRatesCents: the exact monthly rate for each employee’s household, as { "externalId", "monthlyCents" } by the census externalId. Preferred, because small-group rates are age-rated. It wins over the others; employees missing from it fall back to them.
  • pmpmCents: the price per covered person. A household costs this times its people.
  • monthlyRatesCents: the monthly premium for one household of each shape.
For example, by household shape:
Optional plan fields (carrierPlanId, network, fundingType, effectiveDate, ratingZip, embeddedDeductible, coinsurancePct, copaysCents, rxDeductibleCents, referralRequired, hsaDeductibleRequired, sbcUrl, doctorSearchUrl, carrierLogoUrl) are kept when valid and left out, with a note, when not; they never fail a plan. See the API reference for each. pricedOn on the quote says which mode was used. When the base plan is yours, plans[].underlyingPlan has source: "broker", repeats your plan, and notes that enrollment needs member IDs and eligibility from that plan’s carrier. Send null to clear a plan from the group.

Price Prescience on one plan

If you already know the plan the client will be on, send the census and that one plan to POST /price-on-plan instead.

Change a plan later

Send the same company again (same externalId, else the same domain) with changed basePlan or marketPlans. They are saved on the group and the group is priced again; send null to clear one. A basePlan that is an HMO or not HSA-eligible is ignored and reported in ignoredPlans, and the price comes from marketPlans or the sweep; plans in marketPlans can be any plan.

Which clients fit

Quote Prescience when the client is quoting gold or platinum, or wants rich benefits, in California (strong) or New Jersey (workable), with 5 to 50 employees, on a group plan. See the Fit guidelines for every criterion and what fit_check returns. Final pricing, eligibility and network are confirmed during underwriting and onboarding.