PointClickCare Long-Term Care EHR API

PointClickCare provides EHR and care coordination APIs for long-term and post-acute care facilities. APIs enable access to resident records, medication administration, clinical assessments, and care plan data for skilled nursing facilities and senior living communities.

OpenAPI Specification

pointclickcare-ehr-openapi.yml Raw ↑
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