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
ignoredPlanswith the reason, plususedPlans(sent,used,baseCandidates,benchmarkCandidates). A400is 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, the202hasbaseFromMarket: true: Prescience fetches a base plan from the market sweep (minutes) while the benchmark stays your platinum PPO.
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
WithmarketPlans 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)
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 censusexternalId. 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.
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 toPOST /price-on-plan instead.
Change a plan later
Send the same company again (sameexternalId, 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 whatfit_check returns.
Final pricing, eligibility and network are confirmed during underwriting and
onboarding.