Payers carry no patient information, so
payers:read is not a patient-data permission. Coverage is: the add-on,
the agreement and, for an organization, the approval for the Insurance coverage kind all apply. See
Permissions.
A patient the clinic has restricted, or a coverage that does not exist, returns 404 with code: "not_found". The
two are never told apart. See Errors.
Payers
The list holds only the payers the clinic has enabled under Settings → Insurance. A payer the clinic has not enabled is not listed, and reading it returns404. To attach a coverage to a payer you need its id from this list.
What a coverage looks like
The subscriber’s address, the clinic’s private notes and the running deductible and out-of-pocket totals are never
returned.
List coverages
Add a coverage
201 Created with the coverage. Idempotency-Key is required on POST and optional on PATCH. See
Retries and duplicates.
You may send payer_id, member_id, group_number, group_name, plan_name, payment_responsibility,
relationship_to_subscriber, the subscriber’s name, date of birth, gender and member ID, coverage_type,
effective_date, termination_date, copay_amount, coinsurance_percent, deductible_amount,
out_of_pocket_max, pre_authorization_required, network_status, is_primary and origin_assistant_name. A field
this list does not name is refused with invalid_request, and the error names the field.
Eligibility results, running deductible and out-of-pocket totals, and the clinic’s notes belong to the clinic and
cannot be sent.
A coverage you add is not active until staff confirm it
This is the rule to build around. A coverage created through the API is saved asunconfirmed and inactive
(coverage_active: false), and you cannot change that:
- Sending
coverage_active: trueis refused with409 activation_requires_staff. - At the clinic, the coverage shows Added by your system’s name, not active until confirmed, with a Confirm button.
- A member of staff checks the payer, member ID and subscriber against the patient’s card and selects Confirm. Only then is the coverage active and usable for eligibility checks and claims.
- Reading the coverage afterwards shows
verification_status: "confirmed"andcoverage_active: true. Poll it, or use the change feed, to find out.
coverage_active: false or a termination_date.
If you change a confirmed coverage’s payer, member ID, group number, relationship or the subscriber’s name,
date of birth or member ID, it returns to unconfirmed and inactive, and staff must confirm it again. Other edits keep
its status.
The payer must be enabled
payer_id must be a payer from the payer list. If it is not enabled under Settings → Insurance, the
request is refused with 409 payer_not_enabled. Ask the clinic to enable the payer, then send it again.
One coverage per patient and payer
A patient can have one coverage per payer. Adding a second one for the same payer returns409 coverage_exists, and
when you may see that patient the error carries the existing coverage’s id so you can PATCH it instead.
Change a coverage
200 with the coverage. The same rules apply as when adding one. A PATCH does not accept null, so a value you have sent cannot be cleared again through the API; ask the clinic to clear it.
FHIR
SendAccept: application/fhir+json to read a coverage, or a list of them as a Bundle, as a FHIR R4 Coverage.
An unconfirmed coverage has status: "draft"; a confirmed active one is active; an ended or inactive one is
cancelled (confirmed, but not active). The beneficiary is the patient, the payor is an Organization for the payer, and relationship
uses the standard HL7 subscriber-relationship coding. A payer is read as a FHIR Organization the same way.
A payer’s Organization has type of payer. FHIR input is not accepted: an application/fhir+json body on POST or PATCH is refused with an OperationOutcome (400, not supported), so send additions and changes in the plain JSON shape above. See FHIR R4.
A worked example
- Your intake system reads a patient’s insurance card. It lists the clinic’s payers and finds “Aetna”.
- It sends
POST …/coverageswith the payer’sid, the member ID and anIdempotency-Key. The answer is201, withcoverage_active: falseandverification_status: "unconfirmed". - The connection drops before the answer arrives. It sends the same request with the same key and gets the same coverage back, not a second one.
- At the clinic the patient’s Insurance Coverage shows Added by Acme Intake, not active until confirmed. A staff member compares it with the card and selects Confirm.
- Your system reads the coverage again. It is
confirmedand active, and the clinic can run an eligibility check on it. - Later the patient changes plans. Your system sends a
PATCHwith the new member ID. The coverage returns tounconfirmeduntil staff confirm it again.