openapi: 3.1.0
info:
title: PointClickCare Long-Term Care EHR API
description: >-
PointClickCare provides EHR and care coordination APIs for long-term and
post-acute care (LTPAC) facilities. APIs enable access to resident records,
medication administration records, clinical assessments, care plans, and
facility data for skilled nursing facilities (SNFs) and senior living communities.
version: 2.0.0
contact:
name: PointClickCare Developer Support
url: https://developer.pointclickcare.com/spa
license:
name: PointClickCare Terms of Service
url: https://pointclickcare.com/legal/terms-conditions/
servers:
- url: https://api.pointclickcare.com/v2
description: PointClickCare API
security:
- oauth2: []
tags:
- name: Assessments
description: Clinical assessments (MDS, fall risk, etc.)
- name: Diagnoses
description: Diagnosis and condition records
- name: Facilities
description: Facility and unit management
- name: Medications
description: Medication orders and administration records (MAR)
- name: Patients
description: Resident/patient demographics and admission data
- name: Vitals
description: Vital signs records
paths:
/patients:
get:
operationId: listPatients
summary: List residents/patients
description: Returns a list of residents/patients at the specified facility.
tags:
- Patients
parameters:
- name: facilityId
in: query
required: true
description: Facility identifier
schema:
type: string
- name: status
in: query
description: Filter by admission status
schema:
type: string
enum: [ACTIVE, DISCHARGED, DECEASED, RESPITE, LOA]
- name: unitId
in: query
description: Filter by unit/floor
schema:
type: string
- name: updatedSince
in: query
description: Return only records updated after this timestamp
schema:
type: string
format: date-time
- name: offset
in: query
schema:
type: integer
default: 0
- name: limit
in: query
schema:
type: integer
default: 50
maximum: 200
responses:
'200':
description: Patient list
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Patient'
pagination:
$ref: '#/components/schemas/Pagination'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/patients/{patientId}:
get:
operationId: getPatient
summary: Get a resident/patient
description: Returns demographic and admission details for a single resident.
tags:
- Patients
parameters:
- $ref: '#/components/parameters/PatientId'
responses:
'200':
description: Patient details
content:
application/json:
schema:
$ref: '#/components/schemas/PatientDetail'
'404':
$ref: '#/components/responses/NotFound'
/patients/{patientId}/vitals:
get:
operationId: getPatientVitals
summary: Get patient vitals
description: Returns vital sign measurements for a resident within a date range.
tags:
- Vitals
parameters:
- $ref: '#/components/parameters/PatientId'
- name: startDate
in: query
schema:
type: string
format: date
- name: endDate
in: query
schema:
type: string
format: date
- name: vitalType
in: query
description: Filter by vital type
schema:
type: string
enum: [BLOOD_PRESSURE, HEART_RATE, TEMPERATURE, WEIGHT, OXYGEN_SATURATION, RESPIRATION_RATE, BLOOD_GLUCOSE]
- name: limit
in: query
schema:
type: integer
default: 100
responses:
'200':
description: Vital sign records
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/VitalSign'
'404':
$ref: '#/components/responses/NotFound'
/patients/{patientId}/medications:
get:
operationId: getPatientMedications
summary: Get patient medication orders
description: Returns active and historical medication orders for a resident.
tags:
- Medications
parameters:
- $ref: '#/components/parameters/PatientId'
- name: status
in: query
description: Filter by order status
schema:
type: string
enum: [ACTIVE, DISCONTINUED, COMPLETED, ON_HOLD]
- name: startDate
in: query
schema:
type: string
format: date
- name: endDate
in: query
schema:
type: string
format: date
responses:
'200':
description: Medication orders
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/MedicationOrder'
'404':
$ref: '#/components/responses/NotFound'
/patients/{patientId}/medications/mar:
get:
operationId: getPatientMAR
summary: Get medication administration records
description: Returns medication administration records (MAR) documenting when medications were given.
tags:
- Medications
parameters:
- $ref: '#/components/parameters/PatientId'
- name: startDate
in: query
required: true
schema:
type: string
format: date
- name: endDate
in: query
required: true
schema:
type: string
format: date
responses:
'200':
description: MAR records
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/MARRecord'
'404':
$ref: '#/components/responses/NotFound'
/patients/{patientId}/assessments:
get:
operationId: listPatientAssessments
summary: List patient assessments
description: Returns clinical assessments (MDS, fall risk, skin assessment, etc.) for a resident.
tags:
- Assessments
parameters:
- $ref: '#/components/parameters/PatientId'
- name: type
in: query
description: Filter by assessment type
schema:
type: string
- name: startDate
in: query
schema:
type: string
format: date
- name: endDate
in: query
schema:
type: string
format: date
responses:
'200':
description: Assessment list
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Assessment'
'404':
$ref: '#/components/responses/NotFound'
/patients/{patientId}/diagnoses:
get:
operationId: getPatientDiagnoses
summary: Get patient diagnoses
description: Returns ICD-coded diagnoses and active conditions for a resident.
tags:
- Diagnoses
parameters:
- $ref: '#/components/parameters/PatientId'
- name: status
in: query
schema:
type: string
enum: [ACTIVE, INACTIVE, ALL]
default: ACTIVE
responses:
'200':
description: Diagnosis records
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Diagnosis'
'404':
$ref: '#/components/responses/NotFound'
/facilities:
get:
operationId: listFacilities
summary: List facilities
description: Returns facilities accessible to the authenticated application.
tags:
- Facilities
responses:
'200':
description: Facility list
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Facility'
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
oauth2:
type: oauth2
description: OAuth2 authorization code flow via PointClickCare identity server
flows:
authorizationCode:
authorizationUrl: https://login.pointclickcare.com/oauth2/authorize
tokenUrl: https://login.pointclickcare.com/oauth2/token
scopes:
patient.read: Read patient demographics
clinical.read: Read clinical data (vitals, medications, assessments)
facility.read: Read facility information
parameters:
PatientId:
name: patientId
in: path
required: true
description: PointClickCare resident/patient identifier
schema:
type: string
responses:
Unauthorized:
description: Authentication required or token expired
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Forbidden:
description: Insufficient permissions for this resource
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Patient:
type: object
description: A resident/patient demographic summary
properties:
patientId:
type: string
description: PointClickCare patient identifier
facilityId:
type: string
mrn:
type: string
description: Medical record number
firstName:
type: string
lastName:
type: string
middleName:
type: string
dateOfBirth:
type: string
format: date
gender:
type: string
enum: [M, F, U]
status:
type: string
enum: [ACTIVE, DISCHARGED, DECEASED, RESPITE, LOA]
admissionDate:
type: string
format: date
dischargeDate:
type: string
format: date
nullable: true
unitId:
type: string
roomNumber:
type: string
bedNumber:
type: string
payerType:
type: string
enum: [MEDICARE, MEDICAID, PRIVATE_PAY, INSURANCE, VA]
lastUpdateDatetime:
type: string
format: date-time
PatientDetail:
allOf:
- $ref: '#/components/schemas/Patient'
- type: object
properties:
ssn:
type: string
description: Last 4 digits only
primaryPhysician:
type: object
properties:
npi:
type: string
name:
type: string
emergencyContact:
type: object
properties:
name:
type: string
relationship:
type: string
phone:
type: string
allergies:
type: array
items:
type: string
advanceDirective:
type: string
enum: [FULL_CODE, DNR, DNI, COMFORT_CARE, UNKNOWN]
language:
type: string
VitalSign:
type: object
description: A vital sign measurement
properties:
vitalId:
type: string
patientId:
type: string
vitalType:
type: string
enum: [BLOOD_PRESSURE, HEART_RATE, TEMPERATURE, WEIGHT, OXYGEN_SATURATION, RESPIRATION_RATE, BLOOD_GLUCOSE]
recordedDatetime:
type: string
format: date-time
systolic:
type: integer
description: Systolic blood pressure (mmHg)
nullable: true
diastolic:
type: integer
description: Diastolic blood pressure (mmHg)
nullable: true
heartRate:
type: integer
nullable: true
temperature:
type: number
format: double
nullable: true
temperatureUnit:
type: string
enum: [F, C]
nullable: true
weight:
type: number
format: double
nullable: true
weightUnit:
type: string
enum: [LBS, KG]
nullable: true
oxygenSaturation:
type: number
format: double
nullable: true
respirationRate:
type: integer
nullable: true
bloodGlucose:
type: number
format: double
nullable: true
bloodGlucoseUnit:
type: string
enum: [MG_DL, MMOL_L]
nullable: true
recordedBy:
type: string
description: Staff member who recorded the vital
MedicationOrder:
type: object
description: A medication order
properties:
orderId:
type: string
patientId:
type: string
medicationName:
type: string
genericName:
type: string
ndc:
type: string
description: National Drug Code
dose:
type: string
description: Dosage amount and unit (e.g., "500 mg")
route:
type: string
enum: [ORAL, IV, IM, SC, TOPICAL, SUBLINGUAL, INHALED, RECTAL, OTHER]
frequency:
type: string
description: Administration frequency (e.g., "BID", "QHS", "PRN")
status:
type: string
enum: [ACTIVE, DISCONTINUED, COMPLETED, ON_HOLD]
startDate:
type: string
format: date
endDate:
type: string
format: date
nullable: true
orderingPhysicianNpi:
type: string
orderDatetime:
type: string
format: date-time
indication:
type: string
MARRecord:
type: object
description: A medication administration record entry
properties:
marId:
type: string
orderId:
type: string
patientId:
type: string
scheduledDatetime:
type: string
format: date-time
administeredDatetime:
type: string
format: date-time
nullable: true
status:
type: string
enum: [GIVEN, NOT_GIVEN, REFUSED, HELD, PRN_GIVEN]
doseAdministered:
type: string
nullable: true
notGivenReason:
type: string
nullable: true
administeredBy:
type: string
description: Staff member NPI or ID
notes:
type: string
nullable: true
Assessment:
type: object
description: A clinical assessment record
properties:
assessmentId:
type: string
patientId:
type: string
assessmentType:
type: string
description: Type code (e.g., MDS-3.0-ADMISSION, FALL-RISK, BRADEN-SKIN)
assessmentDate:
type: string
format: date
status:
type: string
enum: [DRAFT, COMPLETE, LOCKED, TRANSMITTED]
completedBy:
type: string
score:
type: number
format: double
nullable: true
description: Numeric score if applicable
riskLevel:
type: string
nullable: true
description: Risk classification if applicable
Diagnosis:
type: object
description: A patient diagnosis or condition
properties:
diagnosisId:
type: string
patientId:
type: string
icdCode:
type: string
description: ICD-10-CM code (e.g., I10, E11.9)
icdCodeSet:
type: string
enum: [ICD-10-CM, ICD-9-CM]
default: ICD-10-CM
description:
type: string
diagnosisType:
type: string
enum: [PRIMARY, SECONDARY, COMORBIDITY, COMPLICATION]
status:
type: string
enum: [ACTIVE, INACTIVE, RESOLVED]
onsetDate:
type: string
format: date
nullable: true
resolutionDate:
type: string
format: date
nullable: true
Facility:
type: object
properties:
facilityId:
type: string
name:
type: string
npi:
type: string
medicareProviderNumber:
type: string
address:
type: string
city:
type: string
state:
type: string
maxLength: 2
zip:
type: string
phone:
type: string
facilityType:
type: string
enum: [SNF, ALF, ICF, CCRC, HOME_HEALTH, HOSPICE]
Pagination:
type: object
properties:
offset:
type: integer
limit:
type: integer
totalCount:
type: integer
hasMore:
type: boolean
Error:
type: object
properties:
code:
type: string
message:
type: string
details:
type: string