Read patient
/v1/practices/{practiceId}/patients/{patientId}Returns one patient in the authorized practice and mode.
Request example
curl -X GET 'https://api.affinityrx.com/v1/practices/{practiceId}/patients/{patientId}' \
-H "Authorization: Bearer $AFFINITY_API_KEY" \
-H 'Affinity-Version: 2026-09-28'Response example
These examples show the body structure. Values can differ. Select a status code to see its response.
{
"address": {
"city": "<string>",
"country": "<string>",
"line1": "<string>",
"line2": "<string>",
"postalCode": "<string>",
"state": "<string>"
},
"defaultShippingAddressId": "addr_01j2y8m6jcc9tt24af5pw9x1bc",
"shippingAddress": {
"city": "<string>",
"country": "<string>",
"line1": "<string>",
"line2": "<string>",
"postalCode": "<string>",
"state": "<string>"
},
"allergyReviewStatus": "not_reviewed",
"allergySummary": [
{
"reaction": "<string>",
"substance": "<string>"
}
],
"createdAt": "<string>",
"clinicalProfile": {
"currentMedications": [
"<string>"
],
"heightInches": 0,
"reviewedAt": "<string>",
"weightPounds": 0
},
"dateOfBirth": "<string>",
"email": "<string>",
"externalId": "<string>",
"externalIdentities": [
{
"source": "<string>",
"value": "<string>"
}
],
"addresses": [
{
"id": "addr_01j2y8m6jcc9tt24af5pw9x1bc",
"address": {
"city": "<string>",
"country": "<string>",
"line1": "<string>",
"line2": "<string>",
"postalCode": "<string>",
"state": "<string>"
},
"label": "<string>",
"preferredShipping": false,
"recipientName": "<string>",
"archivedAt": "<string>"
}
],
"encounters": [
{
"notes": "<string>",
"occurredAt": "<string>",
"providerName": "<string>",
"type": "<string>"
}
],
"gender": "f",
"id": "pat_01j2y8m6jcc9tt24af5pw9x1bc",
"livemode": false,
"location": {
"id": "loc_01j2y8m6jcc9tt24af5pw9x1bc",
"name": "<string>",
"state": "<string>",
"status": "active"
},
"locationId": "loc_01j2y8m6jcc9tt24af5pw9x1bc",
"metadata": "<string>",
"medicalRecordNumber": "<string>",
"measurements": [
{
"heightCentimeters": "<string>",
"recordedAt": "<string>",
"source": "<string>",
"weightKilograms": "<string>"
}
],
"name": {
"first": "<string>",
"last": "<string>",
"middle": "<string>",
"preferred": "<string>"
},
"object": "patient",
"phone": "<string>",
"programs": [
{
"endedAt": "<string>",
"name": "<string>",
"startedAt": "<string>",
"status": "active"
}
],
"practiceId": "prac_01j2y8m6jcc9tt24af5pw9x1bc",
"status": "active",
"updatedAt": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 400,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 401,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 403,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 404,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 409,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 422,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 429,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}Implementation specification
Use these field types and limits to build your integration. Download the OpenAPI document for the complete contract.
Path parameters
patientIdstringrequiredPattern: ^pat_[0-7][0-9a-hjkmnp-tv-z]{25}$
practiceIdstringrequiredPattern: ^prac_[0-7][0-9a-hjkmnp-tv-z]{25}$
Headers
Affinity-VersionstringSelects the HTTP API contract for this request only. When omitted, API-key requests use their service account’s stored version. Does not change the stored default.
Pin requests to 2026-09-28.
Affinity-Actor-IdstringRequired for user actors and optional for system actors. Omit both actor headers to use the authenticated service account as a system actor.
Affinity-Actor-TypestringUse user when a person initiated the action and system for autonomous work. Omit both actor headers to default to system.
Response specifications
200Successful response
application/json
addressobject | nullrequiredShow address fields
Any of · 1: object
cityany & anyrequiredShow city fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
countryany & any | nullShow country fields
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
line1any & anyrequiredShow line1 fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
line2any & any | null | nullShow line2 fields
Any of · 1: any & any | null
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
Any of · 2: null
null
postalCodeany & anyrequiredShow postalCode fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
stateany & anyrequiredShow state fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
defaultShippingAddressIdany | nullrequiredShow defaultShippingAddressId fields
Any of · 1: any
All of · 1: any
any
Pattern: ^addr_[0-7][0-9a-hjkmnp-tv-z]{25}$
Any of · 2: null
null
shippingAddressobject | nullrequiredShow shippingAddress fields
Any of · 1: object
cityany & anyrequiredShow city fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
countryany & any | nullShow country fields
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
line1any & anyrequiredShow line1 fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
line2any & any | null | nullShow line2 fields
Any of · 1: any & any | null
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
Any of · 2: null
null
postalCodeany & anyrequiredShow postalCode fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
stateany & anyrequiredShow state fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
allergyReviewStatusstringrequiredAllowed: "not_reviewed", "no_known", "recorded"
allergySummaryobject[]requiredShow allergySummary fields
Array items · object
reactionstring | nullrequiredShow reaction fields
Any of · 1: string
string
Any of · 2: null
null
substancestringrequiredcreatedAtstringrequiredclinicalProfileobjectrequiredNo additional properties
Show clinicalProfile fields
currentMedicationsstring[]requiredShow currentMedications fields
Array items · string
string
heightInchesnumber | string | nullrequiredShow heightInches fields
Any of · 1: number | string
Any of · 1: number
number
Any of · 2: string
string
Allowed: "Infinity", "-Infinity", "NaN"
Any of · 2: null
null
reviewedAtstring | nullrequiredShow reviewedAt fields
Any of · 1: string
string
Any of · 2: null
null
weightPoundsnumber | string | nullrequiredShow weightPounds fields
Any of · 1: number | string
Any of · 1: number
number
Any of · 2: string
string
Allowed: "Infinity", "-Infinity", "NaN"
Any of · 2: null
null
dateOfBirthstringrequiredPattern: ^\d{4}-\d{2}-\d{2}$
emailstring | nullrequiredShow email fields
Any of · 1: string
string
Any of · 2: null
null
externalIdany | nullrequiredShow externalId fields
Any of · 1: any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
externalIdentitiesobject[]requiredShow externalIdentities fields
Array items · object
sourceanyrequiredShow source fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
valueanyrequiredShow value fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
addressesobject[]requiredShow addresses fields
Array items · object
idanyrequiredShow id fields
All of · 1: any
any
Pattern: ^addr_[0-7][0-9a-hjkmnp-tv-z]{25}$
addressobjectrequiredNo additional properties
Show address fields
cityany & anyrequiredShow city fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
countryany & any | nullShow country fields
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
line1any & anyrequiredShow line1 fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
line2any & any | null | nullShow line2 fields
Any of · 1: any & any | null
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
Any of · 2: null
null
postalCodeany & anyrequiredShow postalCode fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
stateany & anyrequiredShow state fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
labelanyrequiredShow label fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
preferredShippingbooleanrequiredrecipientNameany & any | nullrequiredShow recipientName fields
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Pattern: ^[^\p{Cc}\u200B\u2028-\u202E\u2066-\u2069]*$
Any of · 2: null
null
archivedAtstring | nullrequiredShow archivedAt fields
Any of · 1: string
string
Any of · 2: null
null
encountersobject[]requiredShow encounters fields
Array items · object
notesany & any | nullrequiredShow notes fields
Any of · 1: any & any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
All of · 2: any
any
Maximum length: 5000
Any of · 2: null
null
occurredAtstringrequiredproviderNameany | nullrequiredShow providerName fields
Any of · 1: any
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
typeanyrequiredShow type fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
genderstringrequiredAllowed: "f", "m", "o", "u"
idstringrequiredPattern: ^pat_[0-7][0-9a-hjkmnp-tv-z]{25}$
livemodebooleanrequiredlocationobjectrequiredNo additional properties
Show location fields
idanyrequiredShow id fields
All of · 1: any
any
Pattern: ^loc_[0-7][0-9a-hjkmnp-tv-z]{25}$
namestringrequiredstatestring | nullrequiredShow state fields
Any of · 1: string
string
Any of · 2: null
null
statusstringrequiredAllowed: "active", "archived"
locationIdstringrequiredPattern: ^loc_[0-7][0-9a-hjkmnp-tv-z]{25}$
metadataobjectrequiredmedicalRecordNumberstring | nullrequiredShow medicalRecordNumber fields
Any of · 1: string
string
Any of · 2: null
null
measurementsobject[]requiredShow measurements fields
Array items · object
heightCentimetersany | string | nullrequiredShow heightCentimeters fields
Any of · 1: any | string
Any of · 1: any
All of · 1: any
any
Greater than: 0
Any of · 2: string
string
Allowed: "Infinity", "-Infinity", "NaN"
Any of · 2: null
null
recordedAtstringrequiredsourceanyrequiredShow source fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
weightKilogramsany | string | nullrequiredShow weightKilograms fields
Any of · 1: any | string
Any of · 1: any
All of · 1: any
any
Greater than: 0
Any of · 2: string
string
Allowed: "Infinity", "-Infinity", "NaN"
Any of · 2: null
null
nameobjectrequiredNo additional properties
Show name fields
firststringrequiredlaststringrequiredmiddlestring | nullrequiredShow middle fields
Any of · 1: string
string
Any of · 2: null
null
preferredstring | nullrequiredShow preferred fields
Any of · 1: string
string
Any of · 2: null
null
objectstringrequiredAllowed: "patient"
phonestring | nullrequiredShow phone fields
Any of · 1: string
string
Any of · 2: null
null
programsobject[]requiredShow programs fields
Array items · object
endedAtstring | nullrequiredShow endedAt fields
Any of · 1: string
string
Any of · 2: null
null
nameanyrequiredShow name fields
All of · 1: any
any
Pattern: ^[^\u0000\p{Cs}]*$
startedAtstringrequiredstatusstringrequiredAllowed: "active", "completed", "paused"
practiceIdstringrequiredPattern: ^prac_[0-7][0-9a-hjkmnp-tv-z]{25}$
statusstringrequiredAllowed: "active", "inactive"
updatedAtstringrequired400HTTP 400
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
401Unauthorized
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
403Forbidden
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
404Not found
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
409Conflict
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
422Validation error
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
429Too many requests
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri