POST /quotes and get a quote back. Prescience
has two plans, Prescience Diamond and Prescience Value, each priced from the
group’s market, which Prescience finds itself from the census.
Requests and answers use snake_case field names, on REST and on MCP. camelCase
requests are still accepted.
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
Send the company and its census. Prescience finds the plans in the group’s market itself and prices Diamond and Value against them. If you know what the client pays for its current plan, send it ascurrent_coverage: the quote then
shows how each version compares with it.
current_coverage is optional: the carrier, pepm_cents (what the current
plan costs per employee per month, its renewal price if you have one) and
renewal_date. Each version in the quote then has vs_current_plan: the
current plan’s annual cost (pepm_cents times the employees quoted) and how
much less or more the version costs. The price is still set against the market,
because a current plan’s cost may cover other people than this census.
Don’t send the plans you quoted. market_plans is no longer used: a request
that has it is priced the same way, and each plan in it is listed in
ignored_plans.
The group is your group in the same mode (sandbox or live) with this
company.external_id, else with this company.domain; an enrolled group is
never matched. If there is none, a group is created. Its census and plans are
replaced by the one you send. Asking again for the same group, census and
pricing run returns the quote already made; a changed census or a new pricing
run makes a new quote. domain is required.
company.zip is the headquarters ZIP, and the group is quoted from it. If half
or more of the employees live in one other ZIP, that ZIP is quoted too, and a
group with fewer than 5 employees is quoted in every ZIP its employees live in.
company.rating_zip replaces zip as the headquarters ZIP when you send it. There is no state input: Prescience takes the state from the ZIP, and address.state in responses is that value.
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.covered_lives is higher than the number of employees. Send
dependents for every employee who has them; census.tiers shows what was
priced.
Pricing a new census takes a few minutes (see below).
When pricing takes longer
Pricing a new census takes a few minutes. Until it is ready the response is202:
Response (202)
retry_after_seconds (the Retry-After
header says the same): the same group is matched and, once pricing is done, you
get 201 with the quote, and the same quote on every call after that. 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.
Retrying does not help; a census change starts a new comparison.
Reading a quote
plans has exactly two rows: Prescience Diamond (id: "diamond") and Prescience
Value (id: "value").
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.
A quote returns plan numbers and material links by default. All money is integer cents, so an agent
never has to recompute it.
Share quote materials
Every current quote includesmaterials: five designed documents for the
quoted group. Each row has kind, title, page_url and pdf_url.
How to use the links
- To view a material yourself, open
page_url. It is the interactive page, in the browser, with no sign-in. - To send a material to the employer, send its
page_url, attach the PDF frompdf_url, or both. Do not send the Presenting Prescience playbook. - To show the links in your own tool, put a View button (
page_url) and a PDF button (pdf_url) beside each title.
- The quote email, written for the employer: the benefits packet, health benefits guide, network explorer and About Prescience, each with its PDF attached. You can forward it as it is.
- “For you”: the plan prices, the group link, a client email draft, and all five materials with their PDFs attached.
"send_emails": false with the quote
request. Send true to turn them back on.
?plan=diamond or ?plan=value
to either URL to select an available quoted plan; the download follows that plan.
The page and PDF use the stored quote inputs. No employer logo is needed;
missing display names use a fixed fallback. Missing plan facts stay unconfirmed.
Employee contributions are chosen during enrollment; group premiums are not an
employee payroll deduction. The network page labels directory samples and
unavailable data explicitly. The network explorer lists covered people by name under
their home ZIP, so you can search the team by name, ZIP or city; no material shows
dates of birth.
Links in a 202 response are tied to the original rating inputs and test/live
mode. They show a preparation page until that quote is ready. A changed census or plan input requires a new quote; old material links
show a refresh message and PDF requests return 409. Quote-specific links retain
the quoted plan. Links have no scheduled expiry, but suspension of the partner, disabling live access for live groups,
removal of the quote or group, changed rating inputs, or a signing-key change
can revoke access. The quote’s validity date remains visible: a shareable link
does not extend pricing validity or approve enrollment.
materials is included in both view=numbers and view=full. fields=materials
keeps just the links and required identifiers; exclude=materials omits them.
Older quotes without a saved census fingerprint may have no materials. The
API reference documents the schema;
MCP returns the same snake_case keys.
Only Prescience’s plans come back
A quote returns Prescience Diamond and Prescience Value and nothing about other carriers’ plans, or about how the plans are found. Compare against the quotes you already have from your carriers.Choose how much comes back
view picks how much of the quote you get. It works as a query parameter or in
the body of POST /quotes and POST /groups/{groupId}/quotes, as a query
parameter on the quote GETs, and as view on the MCP tools quote_group and
get_quote.
fields and exclude work on top of either view: fields returns only those
fields, for example fields=plans.pmpm_cents; exclude leaves some out, for
example exclude=plans.logos. Send them as a comma-separated query parameter or
as a list in the body. quote_id, group_id and status always come back.
What each plan is (its description, benefits, member terms and logos) does not
change per group: get it once from the plan details and cache
it. view=numbers, the default:
view=full:
Plan details
GET /api/partner/v1/plans returns your two plans, and
GET /api/partner/v1/plans/{planId} one of them (diamond or value), in
snake_case: name,
description, benefits (coinsurance, HSA eligibility and the feature list),
member_terms, the employer contribution range, logos, a selling_guide link
and disclaimers. They are the same for every group, so fetch them once and
cache them (Cache-Control: private, max-age=3600). The MCP tool
get_plan_details returns the same: with plan_id the plan itself, as
GET /plans/{planId} does, and without it { "plans": [...] }. GET /plans/diamond:
Plan design and moving forward
Carriers ask for a few plan terms before they quote. Set them on the group withPOST /groups, PATCH /groups/{groupId} or a plan_design object in POST /quotes, which also takes the group’s current_coverage (carrier, pepm_cents for the renewal price, renewal_date); all are optional, and a field sent
as null is cleared. They come back on GET /groups/{groupId} as plan_design.
POST /groups/{groupId}/move-forward. It records the request on the group as
move_forward (status: "requested", requested_at and requested_by) and
Prescience sets up enrollment. The body is optional: requested_by names the
person on your side (it defaults to your partner name) and note adds a line.
A second request changes nothing and returns the first one. Until the group has a
quote for its current census (before the first quote, or while an edited census is
being repriced) it returns 409 quote_not_ready: wait for the quote (a 202 from POST /quotes says how long), then call it again.
From then on GET /groups/{groupId} also returns enrollment: the carrier and plan_name to submit for enrollment, and its status (setting_up, then enrolled).
Edit the census
PUT /groups/{groupId}/census/members adds, updates and removes members without
sending the whole census:
members match like a census PUT (external_id, else email): a match is
updated, anything else is added. remove names members by member_id,
external_id or email; when an entry gives more than one, they must all name
the same member. The answer gives accepted, removed, member_count,
not_found (positions in remove that matched nobody) and errors by index;
valid rows are applied. Quotes you already have are kept but no longer match the
census, so quote again to price the new one. An enrolled group answers 409.
Reading a group
GET /groups/{groupId} and GET /groups (MCP get_group and list_groups)
return the same group:
plan_design, move_forward and enrollment appear once they are set.
market_plans is always 0: plans you send are no longer used. pricing is where pricing stands and
latest_quote the group’s newest quote in a line. GET /groups returns
{ "groups": [...], "count": 1, "next_cursor": null }; pass limit and cursor
to page.
What the portal does, in the API and MCP
Everything you can do in the portal has a route and an MCP tool:
The client proposal is a PDF and an Excel file. The Excel file has one tab, Comparison.
Quote in Slack
Company ZIPs may use five digits or ZIP+4; we use the first five digits for rating. If Prescience has linked a Slack channel to your account, drop a census CSV in it to quote without the API or the portal. Mentioning @Prescience is optional. Export Excel or Google Sheets as CSV first (maximum 5 MB); spreadsheet files, images and PDF censuses are not parsed. Company details can be on one line. The CSV still needs one person per row, with each employee followed by their dependents. Common census layouts work: column names likefirst_name, zip or postal_code, gender and dob,
dates like 6/19/01, and relationship words like domestic_partner. If a row
can’t be read, the bot lists what to fix.
You don’t need a special format for the company details. Add the company name,
domain and HQ ZIP anywhere in the message, in any form, for example
Acme Co, acme.com, 94110, or leave them out. The bot works out what it can:
- the domain from the file name, for example
acme.com-census.csv - the company name from the domain
- the ZIP as the most common employee ZIP in the census
carrier Aetna, renewal $850.
The bot replies in the thread. It says it is pricing, then posts Prescience
Diamond and Prescience Value (monthly price, price per person per month,
deductible, out-of-pocket max, and what your company pays if every employee gets
reaches the quoted out-of-pocket maximum, a modeled scenario), attaches the proposal as Excel (one tab, Comparison) and PDF, and links the
group in the portal. It also includes all five shareable materials,
with interactive pages and PDFs that employers and employees can open without signing in.
Pricing can take minutes; the quote is posted when it is ready.
Reply in the thread with:
The group is matched as
POST /quotes matches it, by domain since the message
has no external ID, and an enrolled group is never matched. Asking again for the
same group, census and pricing run returns the quote already made.
Quotes from Slack are made in production when your account has production access,
and in the sandbox otherwise.
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.