List patients
/v1/practices/{practiceId}/patientsLists patients in one practice and mode. Use externalId for an exact match in the calling integration's namespace. Use externalIdentitySource with externalIdentityValue to search an explicit alias. Identity matching is case-sensitive after trimming whitespace. Other filters also apply.
Request example
curl -X GET 'https://api.affinityrx.com/v1/practices/{practiceId}/patients' \
-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.
{
"data": [
{
"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": null,
"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>"
}
],
"hasMore": false,
"object": "list",
"url": "<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
practiceIdstringrequiredPattern: ^prac_[0-7][0-9a-hjkmnp-tv-z]{25}$
Query parameters
endingBeforestring | nullShow schema
Any of · 1: string
string
Pattern: ^pat_[0-7][0-9a-hjkmnp-tv-z]{25}$
Any of · 2: null
null
externalIdstring | nullShow schema
Any of · 1: string
string
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
externalIdentitySourcestring | nullShow schema
Any of · 1: string
string
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
externalIdentityValuestring | nullShow schema
Any of · 1: string
string
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
genderstring | nullShow schema
Any of · 1: string
string
Allowed: "f", "m", "o", "u"
Any of · 2: null
null
lastOrderAfterstring | nullShow schema
Any of · 1: string
string
Any of · 2: null
null
lastOrderBeforestring | nullShow schema
Any of · 1: string
string
Any of · 2: null
null
limitintegerDefault: 25
Minimum: 1
Maximum: 100
programstring | nullShow schema
Any of · 1: string
string
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
querystring | nullShow schema
Any of · 1: string
string
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
sortstring | nullShow schema
Any of · 1: string
string
Allowed: "created", "name"
Any of · 2: null
null
startingAfterstring | nullShow schema
Any of · 1: string
string
Pattern: ^pat_[0-7][0-9a-hjkmnp-tv-z]{25}$
Any of · 2: null
null
statesstring | nullShow schema
Any of · 1: string
string
Pattern: ^[^\u0000\p{Cs}]*$
Any of · 2: null
null
statusstring | nullShow schema
Any of · 1: string
string
Allowed: "active", "inactive"
Any of · 2: null
null
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
dataobject[]requiredShow data fields
Array items · object
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"
updatedAtstringrequiredhasMorebooleanrequiredobjectstringrequiredAllowed: "list"
urlstringrequired400HTTP 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