Skip to main content
POST
Upsert Patient (forgiving)

Authorizations

X-API-Key
string
header
required

Body

application/json

Forgiving upsert request — every field optional, no throwing validators.

The service normalizes and silently drops unparseable phone / email / DOB values. The post-normalization invariant (phone OR full demographics) is checked there as well.

external_id
ExternalIdInput · object | null

External identifier from the integration. Used as the highest-priority match key.

first_name
string | null
last_name
string | null
middle_name
string | null
date_of_birth
string | null

DOB in any of: YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, MM-DD-YYYY, MM/DD/YY. Unparseable values are dropped.

gender
string | null
phone_number
string | null
additional_phone_number
string | null
email
string | null
address
string | null
address2
string | null
city
string | null
state
string | null
zip
string | null
comments
string | null
workflow_stage_id
string | null
assigned_user_id
string | null
location_id
string | null

Company location ID. Foreign IDs are dropped.

organization_id
string | null

Company organization ID. Foreign or inactive IDs are dropped.

tags
string[] | null
referral
ReferralCreateRequest · object | null

Nested referral creation for patient creation.

Same referral the /v1/referrals endpoints take, minus patient_id (the patient is the one being created) and plus file_id.

payors
PayorUpsertInline · object[] | null
custom_fields
Custom Fields · object | null
created_from
enum<string> | null

Patient creation source enum matching Prisma

Available options:
form,
call,
api,
file,
sms,
fax,
chat_agent,
manual,
bulk_import,
eligibility,
prior_auth

Response

Successful Response

Response — 200 OK for both create and update (idempotent semantics).

patient
Patient · object
required

Patient resource response model.

matched
boolean
required

True if an existing patient was found and updated

created
boolean
required

True if a new patient was created

match_reason
enum<string> | null

Which match tier resolved the patient. None when created=True.

Available options:
external_id,
demographics,
phone_fuzzy_name,
email_fuzzy_name
dropped_fields
string[]

Fields the request supplied that were silently dropped during normalization (unparseable phone/email/DOB, or external_id conflict, or phone-immutability lock).

payor_results
PayorProcessingResult · object[]