Skip to content
  • Why ECP
    Read about ECP's mission and values in proving a complete software solution for assisted living and long-term care communities.
    See what our valued customers have to say about their personal experience with ECP.
    ECP is a rapidly growing software service that provides industry leading community management solution.
    View the list of industry standard certifications that we're proud to have achieved.
  • Solutions
    BY INDUSTRY
    Discover why ECP is the preferred assisted living software, helping communities thrive and provide better care.
     
    Understand how ECP aids in providing person-centered care to improve residents' quality of life.  
     
    Save time and grow your business with the leading Assisted Living eMAR.
     
    Automate and grow your Independent Living communities.
     
    Explore the tools available to help improve the quality of care for individuals with disabilities.
     
    Learn how ECP can benefit Adult Family Homes, Group Homes, and Small Assisted Living Communities.
    One platform, every state. Standardized workflows, portfolio-wide visibility, and implementation built for large operators. 
     
    Take a look at the tools ECP provides to gain complete oversight into your communities.  
     
    Improve your workflow and spend more time caring for your residents with the inudustry's leading clinical software.
     
    Learn how ECP helps reduce time spent charting, providing more quality time with residents.
     
    Identify prospects that align with your goals and increase occupancy rates.  
     
     

     

  • Products

    Reduce medication errors with safer med passing and enhanced oversight.

    Capture leads, build relationships, and grow occupancy.
    Confidently care and ensure better care.

     

    Track every step from decision to move-in day, all in one place.
    Capture every service, every payment, every time.
  • Resources
    Review common questions to find the answers you're looking for.
     
    Our library of informative guides to ECP products and solutions as well as industry-related topics.
     
    View a list of upcoming webinars and events.
    Connect seamlessly with pharmacy partners and favorite tools through ECP's integrations.
     
    Read these success stories from our customers.
     
    ECP helps senior living communities turn daily care into measurable outcomes that support value-based care partnerships.
    Build seamless, reliable connections to ensure accurate data exchange.
     
    Stay in the know with ECP updates and industry knowledge.
    Browse our comprehensive library of standard and state custom reports.
     
    Stay informed with official updates, product enhancements, and industry contributions from ECP.
  • Integrations
  • Contact
  • Customer login
Search icon

ECP API Developer Resources

Explore Developer Guides and Reference Docs for ECP APIs and Data Sharing

ECP gives both customers and approved third-party software partners access to a number of ways to connect ECP, including HL7, batch CSV and other file-based exports, direct secure messaging, pre-built integrations, and real-time APIs.

ECP API developer resources

This page covers ECP's two API-based methods of integrating with ECP as a partnered software vendor or community. These methods can be leveraged exclusively or in tandem.

ECP's API-based integration methods:

  • ECP Webhook API: Subscribe to events to receive immediate notifications when changes are made to resident census, resident profiles, resident contacts, user profiles, and more. This API is primarily used where the developer wishes to keep a third-party system in sync with ECP.
  • ECP REST API: This API allows you to programmatically create or access user profiles, residents, resident contacts, resident vital readings, and more. This API is primarily used where the developer wishes to trigger every specific action or access to data in ECP.

 

ECP’s Webhook API

The purpose of ECP's Webhook API is to provide partners with real-time updates pertaining to communities’ residents, resident contacts, and users to sync systems and reduce manual data entry.

The sections below will outline getting connected, available event types, payload contents, and some sample JSON payloads. The events shared will vary based on every partner’s needs. For example, partners are not required to receive diet-related events if they cannot be utilized in a meaningful way.

Getting Connected

First and foremost, please submit an integration request to begin the process of becoming an official ECP Dev Partner. Once approved, ECP has exposed a webhook endpoint for partners to utilize to subscribe to events. This webhook transmits byte-sized JSON payloads to a callback URL exposed by partnered companies. The exposed URL must be capable of ingesting POST requests from ECP.

 



Event Types

Event Name Entity Affected Event Trigger Includes
allergy.update
See Sample
Resident Resident's documented allergies are updated via Resident File > General tab root JSON
allergy Object
contact.create
See Sample
Resident Contact New resident contact is created via Resident File > Contacts tab root JSON
contact Object
contact.residents Array
contact.delete Resident Contact Resident contact is removed via Resident File > Contacts tab root JSON
contact Object
contact.residents Array
contact.update Resident Contact Resident contact's information is updated via Resident File > Contacts tab root JSON
contact Object
contact.residents Array
diet.update
See Sample
Resident Resident's diet information is updated via Resident File > Diet tab root JSON
diet Object
lead.create
See Sample
Lead Lead is created in ECP CRM/Move-Ins root JSON
lead Object
lead.update Lead Lead is updated in ECP CRM/Move-Ins root JSON
lead Object
levelOfCare.update
See Sample
Resident Resident's required level of care is either manually updated via Care Plan tab > Level of Care Status or by completing an assessment
Note: Differs from resident.levelOfCareLogEntry events in that levelOfCare.update events will only be sent if the resident's current Level of Care changes. Backdated changes will not sent and therefore, no historical context will be provided.
root JSON
levelOfCare Object
payorType.create
See Sample
Payor Type Payor Type is created via Global List Management > Payor Types root JSON
payorType Object
payorType.delete
See Sample
Payor Type Payor Type is deleted via Global List Management > Payor Types root JSON
payorType Object
resident.create
See Sample
Resident New resident is manually created via Add New Resident window
New resident is created via third-party integration
New resident is created via ECP CRM lead profile
Resident is transferred to ECP account
Resident is reactivated via Discharged Residents window (Note: Previously-sent residentId will not change)
root JSON
resident Object
resident.delete Resident Resident is discharged via Resident File or third-party integration
Resident is transferred from ECP account
root JSON
resident Object
resident.update Resident Any info provided in the Resident object is updated via Resident File window root JSON
resident Object
resident.assessmentDecision.update
See Sample
Resident Assessment Decision Resident's Assessment Decision is updated pre-move-in via the Leads window. root JSON
resident.assessmentDecision Object
resident.assessmentLogEntry.update
See Sample
Resident Assessment Log Resident assessment is marked complete root JSON
resident.assessmentLogEntry Object

resident.assessmentLogEntry.create
See Sample

Resident Assessment Log
Resident assessment is deleted root JSON
resident.assessmentLogEntry Object
resident.levelOfCareLogEntry.create
See Sample
Resident Level of Care Log Resident's required level of care is either manually updated via Care Plan tab > Level of Care Status or by completing an assessment, creating a new Level of Care log entry
Note: Differs from levelOfCare.update events in that resident.levelOfCareLogEntry events are meant to communicate any/all changes to the resident's entire Level of Care log. Backdated logs will be sent to provide all historical context.
root JSON
resident.levelOfCareLogEntry Object
resident.levelOfCareLogEntry.delete
See Sample
Resident Level of Care Log Resident Level of Care log entry is deleted
root JSON
resident.levelOfCareLogEntry Object
resident.payorTypeLogEntry.create
See Sample
Resident Payor Type Log Resident payor type log entry is created
Note: A simpler way to sync residents' current Payor Type is via Resident events, using currentPayorType. Similar to other log entry events, these events are meant to communicate any/all changes to the resident's entire Payor Type log. Backdated logs will be sent to provide all historical context.
root JSON
resident.payorTypeLogEntry Object
resident.payorTypeLogEntry.delete
See Sample
Resident Payor Type Log Resident payor type log entry is deleted root JSON
resident.payorTypeLogEntry Object
resident.roomLogEntry.create
See Sample
Resident Room Log Resident-specific Apartment/Room log entry is added
Note: A simpler way to sync residents' current Apartment/Room is via Resident events, using room and roomId. Similar to other log entry events, these events are meant to communicate any/all changes to the resident's entire Apartment/Room log. Backdated logs will be sent to provide all historical context.
root JSON
resident.roomLogEntry Object
resident.roomLogEntry.delete
See Sample
Resident Room Log
Resident-specific apartment/room log entry is deleted root JSON
resident.roomLogEntry Object
resident.roomLogEntry.update
See Sample
Resident Room Log Resident-specific apartment/room log entry is updated root JSON
resident.roomLogEntry Object
resident.statusLogEntry.create
See Sample
Resident Status Log Resident status log entry is created
Note: A simpler way to sync residents' current Status is via Resident events, using status and statusDescription. Similar to other log entry events, these events are meant to communicate any/all changes to the resident's entire Status log. Backdated logs will be sent to provide all historical context.

root JSON
resident.statusLogEntry Object
statusType Object

resident.statusLogEntry.delete
See Sample
Resident Status Log
Resident status log entry is deleted root JSON
resident.statusLogEntry Object
statusType Object
statusType.create
See Sample
Status Type Resident Status option is added via Resident Status Library root JSON
statusType Object
statusType.delete
See Sample
Status Type Resident Status option is deleted from Resident Status Library root JSON
statusType Object
statusType.update
See Sample
Status Type Resident Status option is updated via Resident Status Library root JSON
statusType Object
user.create
See Sample
User New user is manually created via User Logins window
New user is created via third-party integration
A deactivated user is reactivated via User Logins window (Note: Previously-sent userId will not change)
root JSON
user Object
user.update User Any info provided in the User object is updated via User Logins window or third-party integration root JSON
user Object
user.delete User User is deactivated via User Logins or third-party integration root JSON
user Object


JSON Objects

With each JSON payload, the following objects will be included to provide software partners up-to-date resident, resident contact, or user information. Depending on the event type, partners can choose which parts of each payload to process. The root JSON below includes the unique message ID, company/location IDs, what event occurred, and the date/time of when the event occurred. This information is sent with every event.

 
root JSON:

Key Data Type Description Included In
companyId String (GUID) Unique company (parent) identifier All Events
dataFormat String "JSON" All Events
eventName String Set to one of the following values based on event type:
"allergy.update" | "contact.create" | "contact.delete" | "contact.update" | "diet.update" | "lead.create" | "lead.update" |"levelOfCare.update" | "payorType.create" | "payorType.delete" | "resident.create" | "resident.delete" | "resident.update" | "resident.assessmentDecision.update" |  "resident.assessmentLogEntry.delete" | "resident.assessmentLogEntry.update" | "resident.levelOfCareLogEntry.create" | "resident.levelOfCareLogEntry.delete" | "resident.payorTypeLogEntry.create" | "resident.payorTypeLogEntry.delete" | "resident.roomLogEntry.create" | "resident.roomLogEntry.delete" | "resident.roomLogEntry.update" | "resident.statusLogEntry.create" | "resident.statusLogEntry.delete" | "statusType.create" | "statusType.delete" | "statusType.update" | "user.create" | "user.delete" | "user.update"
All Events
eventTimestamp String Date/time (UTC) of event, conforming to ISO 8601
Example Provided: "2026-08-16T13:37:27+00:00"
All Events
id String (GUID) Unique message identifier All Events
locationId String (GUID) Unique location (child) identifier All Events
version String API version All Events
 
allergy Object:

The Allergy object includes all the resident’s allergies currently documented. To eventually be converted to record-based storage to differentiate between drug, food, and environmental allergies. This object is included in resident-related allergies.update events.

Key Data Type Description Included In
allergies Array of Strings Resident's current allergies
Update
residentId String (GUID) Unique identifier of resident that allergies relate to Update
 
contact Object:

The Contact object includes resident contacts’ information. This object is included in contact-related contact.create, contact.delete, and contact.update events.

Key Data Type Description Included In
address String Resident contact’s address line 1 and address line 2 values combined Create, Delete, Update
Nullable
addressLine1 String Resident contact's address line 1 Create, Delete, Update
Nullable
addressLine2 String Resident contact's address line 2 Create, Delete, Update
Nullable
city String Resident contact’s city Create, Delete, Update
Nullable
contactId String (GUID) Unique contact identifier Create, Delete, Update
email String Resident contact’s email Create, Delete, Update
Nullable
firstName String Resident contact’s first name Create, Delete, Update
lastName String Resident contact’s last name Create, Delete, Update
phone String Resident contact’s phone number Create, Delete, Update
Nullable
phoneCell String Resident contact’s cellphone number Create, Delete, Update
Nullable
phoneWork String Resident contact’s work phone number Create, Delete, Update
Nullable
preferredContactMethod String Resident contact’s preferred contact method:
"Phone" | "Text" | "Email"
Create, Delete, Update
Nullable
preferredContactTime String Resident contact’s preferred time to be contacted:
"Morning" | "Afternoon" | "Evening"
Create, Delete, Update
Nullable
prospectiveResidents Array of Objects If contact is associated with prospective residents, their information will be provided here. See contact.residents // contact.prospectiveResidents information below. Create, Delete, Update
residents Array of Objects If contact is associated with residents, their information will be provided here. See contact.residents // contact.prospectiveResidents information below. Create, Delete, Update
state String Resident contact’s state Create, Delete, Update
Nullable
zip String Resident contact’s zip code Create, Delete, Update
Nullable
 
contact.residents // contact.prospectiveResidents Array:

Since a Contact can be associated with multiple residents and/or prospective residents, contact.residents and contact.prospectiveResidents are sent as arrays of objects. This array is included in the Contact object sent with contact.create, contact.delete, and contact.update events.

Key Data Type Description Included In
billingContact Boolean Indicates whether contact is marked a billing contact Create, Delete, Update
healthCarePoa Boolean Indicates whether contact is marked resident’s health care power of attorney Create, Delete, Update
healthCarePoaActivated Boolean If contact is resident’s health care power of attorney, indicates if POA is activated Create, Delete, Update
notes String Notes attached to contact’s information Create, Delete, Update
Nullable
primaryContact Boolean Indicates whether contact is marked primary Create, Delete, Update
providesProducts Boolean Indicates whether contact provides products and/or medications for resident Create, Delete, Update
relationship String Resident contact’s relation to resident Create, Delete, Update
Nullable
residentId String (GUID) Unique identifier of resident the contact relates to Create, Delete, Update
stateAppointedGuardian Boolean Indicates whether contact is marked resident’s state-appointed guardian Create, Delete, Update
 
diet Object:

The Diet object includes the diet plan(s), special diet order(s), food texture, and fluid consistency the specified resident requires. This object is included in resident-related diet.update events.

Key Data Type Description Included In
dietPlans Array of Strings Resident's current diet plan(s):
"2-gram Sodium" | "45-gram CCHO (Consistent Carbohydrate)" | "60-gram CCHO (Consistent Carbohydrate)" | "75-gram CCHO (Consistent Carbohydrate)" | "Clear Liquid" | "Diabetic Plate Method" | "Fat-Restricted" | "Fiber-Restricted" | "Full Liquid" | "Gluten-Free" | “Heart-Healthy (Cardiac)" | "HiCal/HiPro (High Calorie/High Protein)" | "Lactose Intolerant" | "Low-Fat Low-Cholesterol 2-gram Na+ (Cardiac)" | "No Added Salt (NAS)" | "No Concentrated Sweets (NCS)" | "Nothing By Mouth (NPO)" | "Pescatarian" | "Reduced Concentrated Sweets" | "Reduced Gluten" | "Regular/General" | "Renal" | "Renal Diabetic" | "Tube Feeding" | "Vegan" | "Vegetarian (+Lacto)" | "Vegetarian (+Lacto-Ovo)" | "Vegetarian (+Ovo)"
Update
Nullable
foodTexture String Resident's required food texture:
"Finger Food" | "Liquidized" | "Mechanical Soft" | "Minced & Moist" | "Pureed" | "Regular/Easy to Chew" | "Soft & Bite-Sized"
Update
Nullable
fluidConsistency String Resident's required fluid consistency:
"Thin" | "Slightly Thick" | "Mildly Thick" | "Moderately Thick" | "Extremely Thick"
Update
Nullable
residentId String (GUID) Unique identifier of resident the diet information relates to Update
specialDietOrders Array of Strings Resident's special diet order(s)(custom) Update
Nullable
 
lead Object:

The Lead object contains information on when an ECP CRM/Move-Ins lead is created, the residents/prospects that make up the lead profile, and the stage the lead is currently in. This object is included in lead.create and lead.update events

Key
Data Type
Description
Included In
createdDate String System-generated date/time (UTC) of when Lead was created, conforming to ISO 8601
Example Provided: "2026-08-16T00:00:00+00:00"
Create, Update
inquiryMethod String Lead's inquiry method:
"Email" | "In Person" | "Phone" | "Web"
Create, Update
leadId String (GUID) Unique Lead identifier Create, Update
residents Array of Objects
Residents that are part of Lead profile. Each object contains fields similar to the Resident object:
{
   dateOfBirth (String),
   email (String),
   financialMoveInDate (String),
   firstName (String),
   gender (String),
   lastName (String),
   middleName (String),
   nickname (String),
   phone (String),
   physicalMoveInDate (String),
   residentId (String - GUID),
   room (Object),
      {
         displayValue (String),
         roomId (String - GUID)
      }
   suffix (String)

}

 
Create, Update
stage Object Lead's current Stage. Object contains:
{
   displayValue (String),
   stageId (String - GUID),
   type (String = "archived" | "custom" | "default" | "moved in" )
}

Create, Update
submittedFrom String
Lead creation method
 
Create, Update
 
levelOfCare Object:

The Level of Care object includes the most up-to-date level of care information for the resident specified. LOC updates are made manually or when completing an assessment of a resident’s needs. This object is included in resident-related levelOfCare.update events.

Key Data Type Description Included In
amount Float The dollar amount (with cents) set as the recurring charge for the newly assigned level of care. If an assessment includes point overages that led to extra recurring cost, that would be reflected here. Update
Nullable
amountFrequency String Frequency of newly assigned level of care:
"monthly" | "daily"
Update
Nullable
effectiveTimestamp String Date/time (UTC) of when level of care change takes effect, conforming to ISO 8601
Example Provided: "2026-08-16T13:37:27+00:00"
Update
Nullable
name String Name of newly assigned level of care Update
Nullable
residentId String (GUID) Unique identifier of resident the level of care relates to Update
 
payorType Object:

The Payor Type object includes the Payor Type's name and unique identifier. This object is included in payorType.create and payorType.delete events.

Key Data Type Description Included In
displayValue String Name of Payor Type Create
payorTypeId String (GUID) Unique Payor Type identifier Create, Delete
 
resident Object:

The Resident object includes all basic information for the resident ID specified. This object is included in resident.create, resident.delete, and resident.update events.

Key
Data Type
Description
Included In
billThroughDate String Date up to which the resident is billed for services Create, Delete, Update
Nullable
building String Resident's building name Create, Delete, Update
Nullable
buildingId String (GUID) Resident's unique building identifier Create, Delete, Update
Nullable
careType String
Resident's care type:
"Adult Day Care" | "Assisted Living" | "Group Home" | "Home Health" | "Independent Living" | "Memory Care" | "Other" | "Personal Care"
Create, Delete, Update
Nullable
codeStatus String Indicates resident's current code status:
"Full Code" | "DNR (Do Not Resuscitate)"
Create, Delete, Update
Nullable
currentPayorType Object
Object containing the following information regarding resident's payor:
payorTypeId: String (GUID)
displayValue: String
Example Provided:
"payorTypeId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"displayValue": "Private"
Create, Delete, Update
Nullable
dateOfBirth String Resident's date of birth Create, Delete, Update
email String Resident's email Create, Delete, Update
Nullable
externalIds Object Collection of custom resident-related key/value pairs (Strings)(configured per location)
Example Provided: A community wants to send a billing-related ID to their dietary platform, so they can generate dining-related invoices that include this unique ID. This can be manually added to residents' profiles and sent as "billingid": "1234".
Create, Delete, Update
Nullable
financialMoveInDate String Resident's financial move-in date Create, Delete, Update
firstName String Resident's first name Create, Delete, Update
gender String Resident's gender:
"Male" | "Female" | "Other"
Create, Delete, Update
lastName String Resident's last name Create, Delete, Update
Nullable
livingWill Boolean Indicates if resident has a living will Create, Delete, Update
middleName String Resident's middle name Create, Delete, Update
Nullable
nickname String Resident's nickname Create, Delete, Update
Nullable
otherAdvancedDirectives String Resident's other advanced directives Create, Delete, Update
Nullable
phone String Resident's phone number Create, Delete, Update
Nullable
residencyEnd String Resident's residency end date (typically populated upon discharge) Create, Delete, Update
Nullable
residencyStart String Resident's physical move-in date (sometimes also referred to as physicalMoveInDate) Create, Delete, Update
residentId String (GUID) Unique resident identifier Create, Delete, Update
room String Resident's room label Create, Delete, Update
Nullable
roomId String (GUID) Resident's unique room identifier Create, Delete, Update
Nullable
status String Resident's current status:
"Active" | "Inactive"
Example Provided: A hospital visit is typically set up as a temporary inactive status. The resident will not be fully discharged, but this field will be set to "Inactive" with a statusDescription of "Hospital".
Create, Delete, Update
statusDescription String Resident's current status description Create, Delete, Update
suffix String Resident's suffix Create, Delete, Update
Nullable
 
resident.assessmentDecision Object:

The Resident Assessment Decision object includes the move-in-related decision made based on a pre-move-in assessment, as well as any notes documented at the time. This object is included in resident.assessmentDecision.update events.

Key
Data Type
Description
Included In
assessmentDecisionId String (GUID) Unique identifier of Assessment Decision
Update
displayValue String

Text description of Assessment Decision
"Accepted" | "Denied" | "Not Yet" | "Undecided"

Update
effectiveTimestamp String (GUID) System-generated date/time (UTC) of when Assessment Decision was made, conforming to ISO 8601
Example Provided: "2026-08-16T00:00:00+00:00"
Update
notes String
Notes associated with Assessment Decision Update
Nullable
residentId String (GUID)
 Unique identifier of resident the Assessment Decision relates to Update
 
resident.assessmentLogEntry Object:

The Resident Assessment Log Entry object includes all core details of a singular, completed, resident assessment. This object is included in resident.assessmentLogEntry.delete and resident.assessmentLogEntry.update events.

Key
Data Type
Description
Included In
assessedDate String Date (YYYY-MM-DD) of resident's Assessment, set by end user Update
assessment Object The Assessment type completed. Object contains:
{
   assessmentId (String - GUID),
   
displayValue (String)
}
Update
assessmentLogEntryId String (GUID) Unique identifier of Assessment log entry Delete, Update
completedTimestamp String
System-generated date/time (UTC) of when Assessment was marked complete, conforming to ISO 8601
Example Provided: "2026-08-16T00:00:00+00:00"
Update
createdTimestamp String System-generated date/time (UTC) of when Assessment was created, conforming to ISO 8601
Example Provided: "2026-08-16T00:00:00+00:00"
Update
displayValue String Assessment Label + ":" + Report Reference Name set by end user
Example Provided: "Pre-move-in Assessment: First Assessment"
Update
points Integer Total assessment points Update
Nullable
residentId String (GUID)  Unique identifier of resident the Assessment log entry relates to Update
 
resident.levelOfCareLogEntry Object:

The Resident Level of Care Log Entry object includes all core details of a singular, resident-specific Level of Care log. This object is included in resident.levelOfCareLogEntry.create and resident.levelOfCareLogEntry.delete events.

Key
Data Type
Description
Included In
amount String (Float) Format) The dollar amount (with cents) set as the actual recurring charge associated with the Level of Care log entry. If an assessment includes point overages that led to extra recurring cost, that would be reflected here.
Example Provided: "1100.000"
Create
amountFrequency String Frequency of newly assigned Level of Care:
"monthly" | "daily"
Create
effectiveTimestamp String Date/time (UTC) of when Level of Care change takes effect, conforming to ISO 8601
Example Provided: "2026-08-16T00:00:00+00:00"
Create
expectedAmount String (Float) Format)
The dollar amount (with cents) set as the expected recurring charge associated with the Level of Care log entry.
Example Provided: "1000.000"
Create
levelOfCareLogEntryId String (GUID) Unique identifier of Level of Care log entry Create, Delete
name String Name of Level of Care Create
residentId String (GUID) Unique identifier of resident the Level of Care log entry relates to Create
 
resident.payorTypeLogEntry Object:

The Resident Payor Type Log Entry object includes all core details of a singular, resident-specific Payor Type log. This object is included in resident.payorTypeLogEntry.create and resident.payorTypeLogEntry.delete events.

Key
Data Type
Description
Included In
effectiveTimeStamp String Date/time (UTC) of when Payor Type change takes effect, conforming to ISO 8601
Example Provided: "2026-08-16T00:00:00+00:00"
Create
payorType Object Resident's assigned Payor Type. Object contains:
{
   displayValue (String),
   
payorTypeId (String - GUID)
}
Create
payorTypeLogEntryId String (GUID) Unique identifier of Payor Type log entry Create, Delete
residentId String (GUID)
Unique identifier of resident the Payor Type log entry relates to
Create
 
resident.roomLogEntry Object:

The Resident Room Log Entry object includes all core details of a singular, resident-specific Apartment/Room log. This object is included in resident.roomLogEntry.create, resident.roomLogEntry.delete, and resident.roomLogEntry.update events.

Key
Data Type
Description
Included In
amount String (Float) Format) The dollar amount (with cents) set as the actual recurring charge associated with the Apartment/Room log entry.
Example Provided: "2000.000"
Create, Update
building Object Resident's assigned Building/Wing/Floor. Object contains:
{
   buildingId (String - GUID),
   
displayValue (String)
}
Create, Update
effectiveTimeStamp String Date/time (UTC) of when Apartment/Room change takes effect, conforming to ISO 8601
Example Provided: "2026-08-01T00:00:00+00:00"
Create, Update
expectedAmount String (Float Format) The dollar amount (with cents) set as the expected recurring charge associated with the Apartment/Room log entry.
Example Provided: "1800.000"
Create, Update
expirationTimestamp String End date/time (UTC) of the Apartment/Room log, conforming to ISO 8601
Example Provided: "2026-10-31T00:00:00+00:00"
Create, Update
Nullable
residentId
String (GUID) Unique identifier of resident the Apartment/Room log entry relates to
Create, Update
room Object Resident's assigned Apartment/Room. Object contains:
{
   displayValue (String),
   roomId
 (String - GUID)
}
Create, Update
roomLogEntryId String (GUID) Unique identifier of Apartment/Room log entry Create, Delete, Update
 
resident.statusLogEntry Object:

The Resident Status Log Entry object includes all core details of a singular, resident-specific Status log. This object is included in resident.statusLogEntry.create and resident.statusLogEntry.delete events.

Key
Data Type
Description
Included In
effectiveTimestamp String
Date/time (UTC) of when Status log entry takes effect, conforming to ISO 8601
Example Provided: "2026-08-01T00:00:00+00:00"
Create
notes String Notes associated with Status log entry Create
Nullable
residentId String (GUID) Unique identifier of resident the Status log entry relates to
Create
statusLogEntryId String (GUID) Unique identifier of Status log entry Create, Delete
statusType Object Resident's assigned statusType (associated with options in Resident Status Library). See statusType Object information below.
Create
 
statusType Object:

The Status Type object includes information on how a resident status option is configured. This object is included in resident.statusLogEntry.create, resident.statusLogEntry.delete, statusType.create, statusType.delete, and statusType.update events.

Key
Data Type
Description
Included In
billable Boolean
Indicates whether Status Type is billable Create, Update
displayValue String Name of Status Type Create, Update
makesInactive Boolean Indicates whether Status Type makes resident inactive Create, Update
statusTypeId String (GUID) Unique identifier of Status Type Create, Delete, Update

user Object:

The User object includes all basic information for the specified user/employee ID, as well as locations/residents they’re allowed access to. This object is included in user-related user.create, user.delete, and user.update events.

Key Data Type Description Included In
admin Boolean Indicates whether user is a System Administrator Create, Delete, Update
chartingInitials String User’s charting initials Create, Delete, Update
email String User’s email Create, Delete, Update
Nullable
firstName String User’s first name Create, Delete, Update
lastName String User’s last name Create, Delete, Update
locationsAllowed Array of GUIDs Unique identifiers of locations the user has access to Create, Delete, Update
phone String User’s phone number Create, Delete, Update
Nullable
phoneCell String User’s cellphone number Create, Delete, Update
Nullable
residentsAllowed Array of GUIDs Unique identifiers of residents the user has access to
Notes:
If empty array w/ viewAllResidents:true, user has access to all residents.
If empty array w/ viewAllResidents:false, user has access to no residents.
Create, Delete, Update
role String User’s role:
"Administrative" | "Caregiver" | "Community Relations" | "Dietary" | "Director" | "Finance" | "Housekeeping" | "Human Resources" | "IT" | "Life Enrichment" | "Maintenance" | "Manager" | "Med Passer" | "Nursing" | "Operations" | "Outside Provider" | "Owner" | "Pharmacy"
Create, Delete, Update
title String User’s job title Create, Delete, Update
Nullable
userId String (GUID) User’s ID Create, Delete, Update
userTaskGroups Array of Objects

User's assigned Task Groups. Each object contains:
{
   displayValue (String),
   
userTaskGroupId (String - GUID)
}

Create, Delete, Update
viewAllResidents Boolean Indicates whether user is configured to view all residents
Note: See residentsAllowed above
Create, Delete, Update

 

 

 

 

Sample Payloads

allergy.update
{
    "companyId": "93AF182E-C2E5-434E-9804-D2BBA7326630",
    "data": {
        "allergy": {
            "allergies": [
                "Gluten",
                "Peanuts",
                "Bees",
                "Latex",
                "Penicillin"
            ],
            "residentId": "6B74A89D-71FC-49DB-9035-8005A6E9CC77"
        }
    },
    "dataFormat": "JSON",
    "eventName": "allergy.update",
    "eventTimestamp": "2025-02-02T17:47:21.823",
    "id": "44999E915-BFF7-4A83-A6A7-7430FC4D2C11",
    "locationId": "1F1E8529-A69C-4A8D-9575-DE8C7B661BEE",
    "version": "1.0"
}

 

contact.create
{
    "companyId": "93AF182E-C2E5-434E-9804-D2BBA7326630",
    "data": {
        "contact": {
            "address": "123 Fake St. Apartment 101",
            "addressLine1": "123 Fake St.",
            "addressLine2": "Apartment 101",
            "city": "Elkhorn",
            "contactId": "A239D0E1-5A78-4F05-9C10-54CCD4B807F8",
            "email": "john@email.com",
            "firstName": "John",
            "lastName": "Contact",
            "phone": "555-555-5556",
            "phoneCell": "555-555-5557",
            "phoneWork": "555-555-5558",
            "preferredContactMethod": "Phone",
            "preferredContactTime": "Afternoon",
            "prospectiveResidents": [],
            "residents": [
                {
                    "billingContact": false,
                    "healthCarePoa": false,
                    "healthCarePoaActivated": false,
                    "notes": "John visits every Monday.",
                    "primaryContact": false,
                    "providesProducts": false,
                    "relationship": "Son",
                    "residentId": "6B74A89D-71FC-49DB-9035-8005A6E9CC77",
                    "stateAppointedGuardian": false
                },
                {
                    "billingContact": false,
                    "healthCarePoa": true,
                    "healthCarePoaActivated": true,
                    "notes": "John visits every Monday.",
                    "primaryContact": false,
                    "providesProducts": false,
                    "relationship": "Son",
                    "residentId": "8684A89V-999C-4E0B-5565-966EBRE9CC77",
                    "stateAppointedGuardian": false
                }
            ],
            "state": "WI",
            "zip": "53121"
        }
    },
    "dataFormat": "JSON",
    "eventName": "contact.create",
    "eventTimestamp": "2024-02-06T17:47:21.823",
    "id": "C66E73B3-49E9-4CEB-83D6-1FAB44D72541",
    "locationId": "1F1E8529-A69C-4A8D-9575-DE8C7B661BEE",
    "version": "1.0"
}

 

diet.update:
{
    "companyId": "93AF182E-C2E5-434E-9804-D2BBA7326630",
    "data": {
        "diet": {
            "dietPlans": [
                "Fat-Restricted",
                "Gluten-Free"
            ],
            "fluidConsistency": "Thin",
            "foodTexture": "Regular/Easy to Chew",
            "residentId": "6B74A89D-71FC-49DB-9035-8005A6E9CC77",
            "specialDietOrders": [
                "1500 Calorie",
                "Minced Meats"
            ]
        }
    },
    "dataFormat": "JSON",
    "eventName": "diet.update",
    "eventTimestamp": "2025-02-08T17:47:21.823",
    "id": "42F81723-75BB-450F-BDEE-3FD237C72157",
    "locationId": "1F1E8529-A69C-4A8D-9575-DE8C7B661BEE",
    "version": "1.0"
}
            

 

lead.create:
{
    "companyId": "00035EAB-9A98-4FF5-ACF7-AF0FAA3533AC",
    "data": {
        "lead": {
            "createdDate": "2026-08-06T20:13:02.697Z",
            "inquiryMethod": "Web",
            "leadId": "37812742-57F1-43E0-93EB-121A35499F5A",
            "methodOfEntry": "Web Form",
            "residents": [
               {
                  "dateOfBirth": null,
                  "email": null,
                  "financialMoveInDate": null,
                  "firstName": "James",
                  "gender": "Male",
                  "lastName": "Baumeister",
                  "middleName": null,
                  "nickname": "Jim",
                  "phone": null,
                  "physicalMoveInDate": null,
                  "residentId": "7F407177-A9DF-436D-A34E-D9EDC11F2928",
                  "room": null,
                  "suffix": null
               }
            ],
            "stage": {
               "displayValue": "New",
               "stageId": "81E2A771-256F-4BCE-B464-22443F40FF33",
               "type": "default"
            },
            "submittedFrom": "Web Form"
        }
    },
    "dataFormat": "JSON",
    "eventName": "lead.create",
    "eventTimestamp": "2026-08-06T20:13:02.697",
    "id": "BCDAEE49-F5C8-4248-B98E-A56864069335",
    "locationId": "82B1E7FF-F016-4A68-84F1-217FE234C3C4",
    "version": "1.0"
}
            

 

levelOfCare.update
{
    "companyId": "93AF182E-C2E5-434E-9804-D2BBA7326630",
    "data": {
        "levelOfCare": {
            "amount": "1500.00",
            "amountFrequency": "Monthly",
            "effectiveTimestamp": "2024-02-02T17:47:21.823",
            "name": "Pro Max",
            "residentId": "6B74A89D-71FC-49DB-9035-8005A6E9CC77"
        }
    },
    "dataFormat": "JSON",
    "eventName": "levelOfCare.update",
    "eventTimestamp": "2025-02-02T17:47:21.823",
    "id": "44999E915-BFF7-4A83-A6A7-7430FC4D20IT",
    "locationId": "1F1E8529-A69C-4A8D-9575-DE8C7B661BEE",
    "version": "1.0"
}

 

payorType.create
{
    "companyId": "A6BF1F3C-9642-4FAC-8AA4-21458B05FA16",
    "data": {
        "payorType": {
            "displayValue": "Private",
            "payorTypeId": "1028CC76-8CF1-4D77-B436-54360B3D800A"
        }
    },
    "dataFormat": "JSON",
    "eventName": "payorType.create",
    "eventTimestamp": "2025-02-02T17:47:21.823",
    "id": "43D5CE89-5EB3-473E-AEF0-68973DC9A536",
    "locationId": "F6CF0F14-D494-4277-BF5B-F603615C5569",
    "version": "1.0"
}

 

payorType.delete
{
    "companyId": "A6BF1F3C-9642-4FAC-8AA4-21458B05FA16",
    "data": {
        "payorType": {
            "payorTypeId": "1028CC76-8CF1-4D77-B436-54360B3D800A"
        }
    },
    "dataFormat": "JSON",
    "eventName": "payorType.delete",
    "eventTimestamp": "2025-02-02T17:47:21.823",
    "id": "43D5CE89-5EB3-473E-AEF0-68973DC9A536",
    "locationId": "F6CF0F14-D494-4277-BF5B-F603615C5569",
    "version": "1.0"
}

 

resident.create:
{
    "companyId": "93AF182E-C2E5-434E-9804-D2BBA7326630",
    "data": {
        "resident": {
            "billThroughDate": "2025-08-18T00:00:00",
            "building": "Main Building",
            "buildingId": "035D7785-CFB9-46CB-95EC-136A2D939C0D",
            "careType": null,
            "codeStatus": "Full Code",
            "currentPayorType": {
                "payorTypeId": "3E0FFC5D-6D0D-46E5-AA55-7373B919CAA2",
                "displayValue": "Private"
            },
            "dateOfBirth": "1991-01-01T00:00:00",
            "email": "testemail@email.com",
            "externalIds": {
                "billingid": "123456"
            },
            "financialMoveInDate": "2025-01-01T00:00:00",
            "firstName": "James",
            "gender": "Male",
            "lastName": "Tester",
            "livingWill": true,
            "middleName": "I",
            "nickname": "Jim",
            "otherAdvancedDirectives": null,
            "phone": "555-555-5555",
            "residencyEnd": "2025-08-18T00:00:00",
            "residencyStart": "2025-01-19T00:00:00",
            "residentId": "E062E995-B6B0-4332-9B19-AAD64E5CB048",
            "room": "101",
            "roomId": "0BDC3D4B-FFED-4843-BBBA-5BB3A51E3AE4",
            "status": "Active",
            "statusDescription": "Active Resident",
            "suffix": "Jr."
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.create",
    "eventTimestamp": "2025-01-01T16:43:48.473",
    "id": "456381BE-6366-4758-AC41-F29BC9ABFBBB",
    "locationId": "362AA2C6-0AAA-49E1-95FA-53284890FCCC",
    "version": "1.0"
}
            

 

resident.assessmentDecision.update:
{
    "companyId": "D7411185-9D87-4C85-8DAA-F0819253C254",
    "data": {
        "resident.assessmentDecision": {
            "assessmentDecisionId": "AEE974BF-DF2D-498A-93BA-26B00CF6EE45",
            "displayValue": "Accepted",
            "effectiveTimestamp": "2026-08-05T20:38:28.230",
            "notes": null,
            "residentId": "17688CDE-FFAD-4197-A08F-430D7EC0E4D2"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.assessmentDecision.update",
    "eventTimestamp": "2026-08-05T20:38:28.247",
    "id": "05509344-46BD-4396-A26D-A2DE0DA32159",
    "locationId": "388A2F5E-3845-4452-8575-3AA0EF5F5FCD",
    "version": "1.0"
}
            

 

resident.assessmentLogEntry.update:
{
    "companyId": "B69F5DC9-A66A-4BC6-9A69-332C22340A3A",
    "data": {
        "resident.assessmentLogEntry": {
            "assessedDate": "2026-08-04",
            "assessment": {
               "assessmentId": "AB0DB2BD-52D7-4BEE-8380-D0C78A2BF691",
               "displayValue": "ECP Assess Needs"
            },
            "assessmentLogEntryId": "E944F29C-27EF-42CD-BCA0-20571E8E220A",
            "completedTimestamp": "2026-08-04T05:00:00.000",
            "createdTimestamp": "2026-08-04T04:00:00.000",
            "displayValue": "Pre-move-in Assessment: First Assessment",
            "points": 100,
            "residentId": "E062E995-B6B0-4332-9B19-AAD64E5CB048"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.assessmentLogEntry.create",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "0249929C-39B7-4DF9-860E-8A1186EE2B51",
    "locationId": "E079CC4A-5AD3-4AF1-9FE4-54B354A9C0E3",
    "version": "1.0"
}
            

 

resident.assessmentLogEntry.delete:
{
    "companyId": "B69F5DC9-A66A-4BC6-9A69-332C22340A3A",
    "data": {
            "assessmentLogEntryId": "E944F29C-27EF-42CD-BCA0-20571E8E220A"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.assessmentLogEntry.delete",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "0249929C-39B7-4DF9-860E-8A1186EE2B51",
    "locationId": "E079CC4A-5AD3-4AF1-9FE4-54B354A9C0E3",
    "version": "1.0"
}
            

 

resident.levelOfCareLogEntry.create:
{
    "companyId": "93AF182E-C2E5-434E-9804-D2BBA7326630",
    "data": {
        "resident.levelOfCareLogEntry": {
            "amount": "1100.000",
            "amountFrequency": "monthly",
            "effectiveTimestamp": "2026-08-03T05:00:00.000",
            "expectedAmount": "1000.000",
            "levelOfCareLogEntryId": "6665E95A-AAAA-4FD6-96D5-17DDB6E5E666",
            "name": "Care Level One",
            "residentId": "E062E995-B6B0-4332-9B19-AAD64E5CB048"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.levelOfCareLogEntry.create",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "887F8529-D123-E345-9575-XO8CXO677888",
    "locationId": "1F1E8529-A69C-4A8D-9575-DE8C7B661BEE",
    "version": "1.0"
}
            

 

resident.levelOfCareLogEntry.delete:
{
    "companyId": "0DC8CA02-0B29-4D14-82C3-5ADA6C718FD6",
    "data": {
        "resident.levelOfCareLogEntry": {
            "levelOfCareLogEntryId": "05E76FA6-1CA7-4E3B-B920-35D148934C8B"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.levelOfCareLogEntry.delete",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "AECC6D82-A09A-42ED-9686-26EC0480568B",
    "locationId": "E9902411-34CF-43AC-A0C1-9F1321D53F26",
    "version": "1.0"
}
            

 

resident.payorTypeLogEntry.create:
{
    "companyId": "3E9DA648-6E60-44E5-BA5F-7328DBE1E55D",
    "data": {
        "resident.payorTypeLogEntry": {
            "effectiveTimestamp": "2026-08-03T05:00:00.000",
            "payorType": {
               "displayValue": "Private",
               "payorTypeId": "7B923FD1-986F-45AD-9819-497FE2843A7C"
            },
            "payorTypeLogEntryId": "A44058B5-F23F-402E-BD2E-6753D6426E61",
            "residentId": "1366F799-C330-4F68-9F3A-04F11F094A3B"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.payorTypeLogEntry.create",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "32067F06-8EB8-4015-8FBF-DC003407FF69",
    "locationId": "8E3DE42E-09A8-4931-B840-A147D54ED99E",
    "version": "1.0"
}
            

 

resident.payorTypeLogEntry.delete:
{
    "companyId": "3E9DA648-6E60-44E5-BA5F-7328DBE1E55D",
    "data": {
        "resident.payorTypeLogEntry": {
            "payorTypeLogEntryId": "A44058B5-F23F-402E-BD2E-6753D6426E61"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.payorTypeLogEntry.delete",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "32067F06-8EB8-4015-8FBF-DC003407FF69",
    "locationId": "8E3DE42E-09A8-4931-B840-A147D54ED99E",
    "version": "1.0"
}
            

 

resident.roomLogEntry.create:
{
    "companyId": "EB7A2793-0D4D-4989-8B6B-AA76FB1E7B2C",
    "data": {
        "resident.roomLogEntry": {
            "amount": "2000.0000",
            "building": {
               "buildingId": "E1D3E33D-2803-47FE-A601-95A31FDD49D4",
               "displayValue": "1st Floor"
            },
            "effectiveTimestamp": "2026-08-01T00:00:00.000",
            "expectedAmount": "1800.0000",
            "expirationTimestamp": "2026-10-31T00:00:00.000",
            "residentId": "96369ABA-2C22-45B9-8C99-060A9804704D",
            "room": {
               "displayValue": "101",
               "roomId": "C53512F3-DC4C-4CCC-8A47-729E53A75776"
            },
            "roomLogEntryId": "7D67E443-8EDB-4E97-9DB0-653DD5253A2D"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.roomLogEntry.create",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "D0FF2C8B-1ED9-4F66-B6CA-AD4FEFB15DE0",
    "locationId": "DE5601EE-CCCD-41AB-A18A-FC7103EE2175",
    "version": "1.0"
}
            

 

resident.roomLogEntry.delete:
{
    "companyId": "EB7A2793-0D4D-4989-8B6B-AA76FB1E7B2C",
    "data": {
        "resident.roomLogEntry": {
            "roomLogEntryId": "7D67E443-8EDB-4E97-9DB0-653DD5253A2D"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.roomLogEntry.delete",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "D0FF2C8B-1ED9-4F66-B6CA-AD4FEFB15DE0",
    "locationId": "DE5601EE-CCCD-41AB-A18A-FC7103EE2175",
    "version": "1.0"
}
            

 

resident.roomLogEntry.update:
{
    "companyId": "EB7A2793-0D4D-4989-8B6B-AA76FB1E7B2C",
    "data": {
        "resident.roomLogEntry": {
            "amount": "2000.0000",
            "building": {
               "buildingId": "E1D3E33D-2803-47FE-A601-95A31FDD49D4",
               "displayValue": "1st Floor"
            },
            "effectiveTimestamp": "2026-08-01T00:00:00.000",
            "expectedAmount": "1800.0000",
            "expirationTimestamp": "2026-10-31T00:00:00.000",
            "residentId": "96369ABA-2C22-45B9-8C99-060A9804704D",
            "room": {
               "displayValue": "101",
               "roomId": "C53512F3-DC4C-4CCC-8A47-729E53A75776"
            },
            "roomLogEntryId": "7D67E443-8EDB-4E97-9DB0-653DD5253A2D"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.roomLogEntry.update",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "D0FF2C8B-1ED9-4F66-B6CA-AD4FEFB15DE0",
    "locationId": "DE5601EE-CCCD-41AB-A18A-FC7103EE2175",
    "version": "1.0"
}
            

 

resident.statusLogEntry.create:
{
    "companyId": "31C6C78E-7DB9-4E7E-8FB2-58D365E4F8C6",
    "data": {
        "resident.statusLogEntry": {
            "effectiveTimestamp": "2026-08-01T00:00:00.000",
            "notes": null,
            "residentId": "ABA47FB0-BED9-41E3-A66A-8FC0FD9DD56F",
            "statusLogEntryId": "BA8EEF44-D1DE-4A76-B1A8-C59CD5109D35",
            "statusType": {
               "billable": false,
               "displayValue": "With Family",
               "makesInactive": true,
               "statusTypeId": "21A5312D-502A-4FF9-8FD5-9A4463D08757"
            }
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.statusLogEntry.create",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "721BCD97-88F0-4166-AF93-354B88AD87D1",
    "locationId": "AE58D1D5-EE0C-46A1-88F1-A4743A311FB5",
    "version": "1.0"
}
            

 

resident.statusLogEntry.delete:
{
    "companyId": "31C6C78E-7DB9-4E7E-8FB2-58D365E4F8C6",
    "data": {
        "resident.statusLogEntry": {
            "statusLogEntryId": "BA8EEF44-D1DE-4A76-B1A8-C59CD5109D35"
        }
    },
    "dataFormat": "JSON",
    "eventName": "resident.statusLogEntry.delete",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "721BCD97-88F0-4166-AF93-354B88AD87D1",
    "locationId": "AE58D1D5-EE0C-46A1-88F1-A4743A311FB5",
    "version": "1.0"
}
            

 

statusType.create:
{
    "companyId": "79B50F7B-47BE-4CD6-A40C-9165A3889B39",
    "data": {
        "statusType": {
            "billable": false,
            "displayValue": "With Family",
            "makesInactive": true,
            "statusTypeId": "DC16BCA4-7068-4EA1-BB90-731FB23BC49B"
        }
    },
    "dataFormat": "JSON",
    "eventName": "statusType.create",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "0BD10609-0F4F-4448-9339-70CD3BE237CE",
    "locationId": "DBBAF24F-6DE2-4115-ADC3-85114165A5D2",
    "version": "1.0"
}
            

 

statusType.delete:
{
    "companyId": "79B50F7B-47BE-4CD6-A40C-9165A3889B39",
    "data": {
        "statusType": {
            "statusTypeId": "DC16BCA4-7068-4EA1-BB90-731FB23BC49B"
        }
    },
    "dataFormat": "JSON",
    "eventName": "statusType.delete",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "0BD10609-0F4F-4448-9339-70CD3BE237CE",
    "locationId": "DBBAF24F-6DE2-4115-ADC3-85114165A5D2",
    "version": "1.0"
}
            

 

statusType.update:
{
    "companyId": "79B50F7B-47BE-4CD6-A40C-9165A3889B39",
    "data": {
        "statusType": {
            "billable": false,
            "displayValue": "With Family",
            "makesInactive": true,
            "statusTypeId": "DC16BCA4-7068-4EA1-BB90-731FB23BC49B"
        }
    },
    "dataFormat": "JSON",
    "eventName": "statusType.update",
    "eventTimestamp": "2026-08-03T16:43:48.473",
    "id": "0BD10609-0F4F-4448-9339-70CD3BE237CE",
    "locationId": "DBBAF24F-6DE2-4115-ADC3-85114165A5D2",
    "version": "1.0"
}
            

 

user.create
{
    "companyId": "93AF182E-C2E5-434E-9804-D2BBA7326630",
    "data": {
        "user": {
            "admin": false,
            "chartingInitials": "JaBa",
            "email": "james@james.com",
            "firstName": "James",
            "lastName": "Baum",
            "locationsAllowed": [
                "D40ADCBD-1808-478A-9F76-A702403A0FD4",
                "1F1E8529-A69C-4A8D-9575-DE8C7B661BEE"
            ],
            "phone": "555-555-5555",
            "phoneCell": "555-555-5566",
            "residentsAllowed": [
                "800097B6-E637-41D1-9575-1F052EE6DEFA",
                "23D8895E-6179-49CE-843F-3291B8D3E288",
                "7F5A422C-8EF6-4B6E-A03E-F24EEA10E9F4"
            ],
            "role": "Nursing",
            "title": "VP of Clinical Services",
            "userId": "E635DCE9-D456-4F5B-A608-F6FBFA4D6A81",
            "userTaskGroups": [
                {
                    "displayValue": "RN (TASK GROUP)",
                    "userTaskGroupId": "62DA5A73-0DC0-454C-9413-C65EF7432498"
                },
                {
                    "displayValue": "Medpasser (TASK GROUP)",
                    "userTaskGroupId": "624D26BB-357D-4571-BBA7-B6C7565E0100"
                }
            ],
            "viewAllResidents": false
        }
    },
    "dataFormat": "JSON",
    "eventName": "user.create",
    "eventTimestamp": "2024-02-06T17:47:21.823",
    "id": "C66E73B3-49E9-4CEB-83D6-1FAB44D72541",
    "locationId": "1F1E8529-A69C-4A8D-9575-DE8C7B661BEE",
    "version": "1.0"
}

 

ECP’s REST API


ECP's REST API provides a programmatic interface to interact with ECP's core functionalities. This API empowers developers to build custom integrations and automate tasks, improving efficiency and data accuracy within the ECP platform.

The following API specifications outline the available API endpoints and associated data points.

Please submit an integration request to start building your connection and begin the process of becoming an official ECP Dev Partner.

Method: POST
URL: https://oauth2.ecp123.com/token
Description: This endpoint is utilized to retrieve a temporary bearer token that will be required in the headers of all REST API calls outlined in the sections below. Provided bearer tokens expire in 60 minutes.

Request Body:
Parameter Data Type Description Required
grant_type String Set to "client_credentials" Yes
client_id String OAuth client ID unique to each community's parent organization; Currently provided by ECP representative Yes
client_secret String Base64-encoded client secret unique to each community's parent organization; Decoded value currently provided by ECP representative Yes
scope String The scopes this OAuth client have access to OR the scopes being requested at this time Yes
Successful Response:
Parameter Data Type Description Required
token_type String Set to "Bearer" Yes
expires_in Number Number of seconds before bearer token expires Yes
access_token String

Bearer token to use in subsequent API calls

Yes
scope String

Echo of scopes requested

Yes
Request Body Sample:

{ "grant_type": "client_credentials", "client_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "client_secret": "lkinawekiginawkeuifnalksdfnalkwuenfaukwefluaksdf", "scope": "location.read vital.read vital.write" }

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations
URL Path Parameters: Add /{locationId} to URL to retrieve a specific location's information.
Scope Required:
location.read
Description: Retrieve active locations/accounts the provided OAuth token has access to.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Optional Request Parameters:
Parameter Data Type Type Description
locationId String (GUID) Path Parameter

Added to URL to retrieve a specific location's info.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC"

page Number Query String Parameter By default, results are returned in batches of 100. Page is sometimes necessary to see subsequent results.
Example Provided: "...v1/locations?page=2"
resultsPerPage Number Query String Parameter Used to specify the amount of results per page with a max of 100. If this value is greater than 100, 100 will be returned.
Example Provided: "...v1/locations?resultsPerPage=10&page=2"

Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Array of Location Objects
Contains an array of Location objects including the following:
{
   locationId (GUID),
   displayValue (String),
   address (String),
   city (String),
   state (String),
   zip (String)
}
No
numberOfResults Number The total number of results (the response is paginated in batches of what resultsPerPage is set to, with a default max of 100 results per page) No
error String If an error occurred, the error message No

Method: GET
URL: https://api.ecp123.com/clinical/v1/location
Scope Required:
location.read
Description: Retrieve location names the provided OAuth token has access to. These names are required when using POST/PUT/GET User endpoints. See GET Locations to retrieve more detailed location-related information.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Response:
Code Data Type Description Required
200 Array of Strings Array of location names that vendor/company has access to with provided OAuth token. No
400 String There was a problem with the request. No

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/buildings
URL Path Parameters: Add /{buildingId} to URL to retrieve a specific building's information.
Scope Required:
location.read
Description: Retrieve a list of active buildings/buildingIds per locationId specified in the request URL. Buildings are the equivalent of wings/floors in ECP.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Optional Request Parameters:
Parameter Data Type Type Description
buildingId String (GUID) Path Parameter

Added to URL to retrieve a specific building's info.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/buildings/fdad8823-83e2-42dc-8c33-9bb57e125844"

page Number Query String Parameter By default, results are returned in batches of 100. Page is sometimes necessary to see subsequent results.
Example Provided: ".../buildings?page=2"
resultsPerPage Number Query String Parameter Used to specify the amount of results per page with a max of 100. If this value is greater than 100, 100 will be returned.
Example Provided: ".../buildings?resultsPerPage=10&page=2"

Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Array of Building Objects
Contains an array of Building objects including the following:
{
   buildingId (GUID),
   displayValue (String)
}
No
numberOfResults Number The total number of results (the response is paginated in batches of what resultsPerPage is set to, with a default max of 100 results per page) No
error String If an error occurred, the error message No

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/buildings/{buildingId}/rooms
URL Path Parameters: Add /{roomId} to URL to retrieve a specific room's information.
Scope Required:
location.read
Description: Retrieve active apartments/rooms, per locationId and buildingId specified in the request URL.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Optional Request Parameters:
Parameter Data Type Type Description
roomId String (GUID) Path Parameter

Added to URL to return a specific room's info.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/buildings/fdad8823-83e2-42dc-8c33-9bb57e125844/rooms/1840d08c-391f-4535-b20e-0ec5100e89cd"

page Number Query String Parameter By default, results are returned in batches of 100. Page is sometimes necessary to see subsequent results.
Example Provided: ".../rooms?page=2"
resultsPerPage Number Query String Parameter Used to specify the amount of results per page with a max of 100. If this value is greater than 100, 100 will be returned.
Example Provided: ".../rooms?resultsPerPage=10&page=2"

Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Array of Room Objects
Contains an array of Room objects including the following:
{
   addressLine1 (String),
   addressLine2 (String),
   careType (String),
   city (String),
   displayValue (String),
   notes (String),
   phone (String),
   roomId (GUID),
   state (String),
   type (String),
   zip (String)
}
No
numberOfResults Number The total number of results (the response is paginated in batches of what resultsPerPage is set to, with a default max of 100 results per page) No
error String If an error occurred, the error message No

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/shifts
Scope Required:
shift.read
Description: Returns the name, ID, and local start time for all care and med shifts configured for the location specified in the request URL.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Object
Contains careShifts and medShifts arrays of objects (outlined below).
No
data.careShifts Array of Objects

Each careShift object contains:
{
   displayValue (String),
   shiftId (String - GUID),
   localStartTime (String - 24-hour time)
}

Yes, when data object is returned. However, careShifts can be an empty array if the locationId specified does not use ECP care-planning.
data.medShifts Array of Objects

Each medShift object contains:
{
   displayValue (String),
   shiftId (String - GUID),
   localStartTime (String - 24-hour time)
}

Yes, when data object is returned.
error String If an error occurred, the error message No

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/careCategories
Scope Required:
careCategory.read
Description: Returns Care Categories' display labels, unique IDs, and subcategories for the location specified in the request URL. The location specified must have ECP Care Planning enabled.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Object
Contains a careCategories array of objects (outlined below)
No
data.careCategories Array of Objects

Each careCategories object contains:
{
   displayValue (String),
   careCategoryId (String - GUID),
   careSubcategories (Array of Objects - outlined below)
}

No
data.careCategories.careSubcategories Array of Objects

Each careSubcategories object contains:
{
   displayValue (String),
   careSubcategoryId (String - GUID)
}

No
error String If an error occurred, the error message No

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/careCharting
Scope Required:
care.read
Description: Returns planned, Scheduled and PRN (As Needed) care/treatment charting records for active residents for the location and date specified in the request URL. The location specified must have ECP Care Planning enabled.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Request Parameters:
Parameter Data Type Type Description
date String (YYYY-MM-DD) Query String Parameter Required.
Added to URL to narrow search results to one calendar day. Querying more than 1 calendar day in the past or more than 2 calendar days in the future is prohibited.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/careCharting?date=2026-07-22"
locationId String (GUID) Path Parameter  Required.
Added to URL to retrieve a specific location's charting records.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/careCharting?date=2026-07-22"
buildingId String (GUID) Query String Parameter Added to URL to narrow results to a specific building.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/careCharting?buildingId=603D5F4E-95EE-49C9-B8FB-56CDE4D2C5DB&date=2026-07-22"
residentId String (GUID) Query String Parameter Added to URL to narrow results to a specific resident.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/careCharting?residentId=A3D2979C-F3C0-4B9B-8643-442D086FA438&date=2026-07-22"
page Number Query String Parameter By default, results are returned in batches of 10 residents at a time. Page is sometimes necessary to see subsequent results.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/careCharting?date=2026-07-22&page=2"
resultsPerPage Number Query String Parameter Used to specify the amount of results per page with a max of 10 residents.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/careCharting?date=2026-07-22&resultsPerPage=5&page=2"
Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Array of Objects
Contains an array of objects that includes residentId (String - GUID) and a cares array. cares and subsequent, nested careCharting arrays are outlined below.
Yes, if result="Success" and careCharting records exist for locationId and date specified.
data.cares Array of Objects

Each cares object contains:
{
   careId (String - GUID): UUID of care,
   displayValue (String)
: Name of care,
   instructions (String): Instructions for caregiver,
   estimatedMinutes (Number): Estimated time to provide care,
   careCategory (Object): Outlined below,
   userTaskGroup (Object): Outlined below,
   careCharting (Array of Objects): Outlined below

}

Yes, if result="Success" and careCharting records exist for locationId and date specified.
date.cares.careCategory Object

The careCategory object contains:
{
   displayValue (String):
Name of care category,
   careCategoryId (String - GUID): UUID of care category,
   careSubcategory (Object): Outlined below
}

Yes, if result="Success" and careCharting records exist for locationId and date specified.
data.cares.careCategory.careSubcategory Object

The careSubcategory object contains:
{
   displayValue (String):
Name of care subcategory,
   careSubcategoryId (String - GUID): UUID of care subcategory
}

Yes, if result="Success" and careCharting records exist for locationId and date specified.
data.cares.userTaskGroup Object

The userTaskGroup object contains:
{
   displayValue (String):
Name of assigned user task group,
   userTaskGroupId (String - GUID): UUID of user task group
}

If null, any user can complete.
data.cares.careCharting Array of Objects

Each careCharting object contains:
{
   careChartingId (String - GUID): UUID of care charting record,
   scheduledTimestamp (String)
: UTC timestamp,
         Note: PRNs will include a time of 00:00 converted to UTC.
   scheduledTimeLabel (String): Description of scheduled time,
   isPRN (Boolean): Indicates if care is PRN/As Needed,
   result (Object): Outlined below
}

Yes, if result="Success" and careCharting records exist for locationId and date specified.
data.cares.careCharting.result Object

The result object contains:
{
   status (String): "Incomplete" | "Issued" | "Not Issued",
   completedTimestamp (String)
: UTC timestamp,
   completedByUserId (String - GUID): UUID of user,
   minutes (Number): Actual time to provide care,
   notIssuedReason (Object): Outlined below,
         Note: Only populated when status="Not Issued"
   notes (String): Notes documented at time of care
}

Yes, if result="Success" and careCharting records exist for locationId and date specified.
data.cares.careCharting.result.notIssuedReason Object

The notIssuedReason object contains:
{
   displayValue (String):
Name of "Not Issued" (Refusal) reason,
   notIssuedReasonId (String - GUID): UUID of reason
}

If null, care is not marked "Not Issued" (Refused).
error String

If an error occurred, the error message. Potential errors include:
   - Invalid locationId format.
   - This location does not have ECP Care Planning enabled.
   - date is required.
   - The date requested cannot be more than 2 calendar  
         days in the future.
   - The date requested cannot be more than 1 calendar
        day in the past.
   - residentId and buildingId request parameters cannot
        be used at the same time.
   - residentId not found.
   - buildingId not found.
   - resultsPerPage cannot exceed 10.
   - page must be at least 1.

Yes, if result="Error"

Response Sample:
{
    "result": "Success",
"data": [
{
"residentId": "B4767348-087D-4C80-B207-AA2F5B2A8457",
"cares": [
{
                "careId": "250E11E0-5C91-4B89-9B02-2379AC1E4B82",
              "displayValue": "Provide Meal",
        "instructions": "Provide meal to resident, monitor for signs of choking.",
        "estimatedMinutes": 20,
        "careCategory": {
          "careCategoryId": "F1EE5A65-9B6C-494C-B4F5-CA09C7A459E4",
          "displayValue": "ADLs",
          "careSubcategory": {
            "careSubcategoryId": "67F0C839-0BC5-4D9B-BF16-BFD55B59D51D",
            "displayValue": "Eating"
          }
        },
        "userTaskGroup": {
          "userTaskGroupId": "F1BC06DB-786D-4433-9DE6-5CC46DA85FAA",
          "displayValue": "Caregiver"
        },
        "careCharting": [
          {
            "careChartingId": "D13952B6-A996-46F8-83E4-EE5FDBF6B022",
            "scheduledTimestamp": "2026-05-01T12:00:00.000Z",
            "scheduledTimeLabel": "Breakfast",
            "isPRN": false,
            "result": {
                "status": "Not Issued",
              "completedTimestamp": "2026-05-01T12:00:00.000Z",
              "completedByUserId": "D82F1113-FEA2-48C6-9773-774317CA7E4B",
              "minutes": 20,
              "notIssuedReason": {
                              "notIssuedReasonId": "FC33A989-C18B-43B6-841A-FFF09E1688E0",
                "displayValue": "Resident Refused Care."
},
              "notes": "These are some long notes documented at the time of care."
            }
          }
]
}
]
}
],
"numberOfResults": 1
}

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/notIssuedReasons
Scope Required:
notIssuedReason.read
Description: Returns all potential care/med-related "not issued"/refusal reasons that are unique per location specified in the request URL.
Note: Reasons and their IDs sometimes match across multiple locations, especially when a company is set up to store reasons at the global, company-wide level.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Object
Contains a notIssuedReasons array of objects (outlined below)
No
data.notIssuedReasons Array of Objects

Each notIssuedReasons object contains:
{
   displayValue (String),
   notIssuedReasonId (String - GUID)
}

No
error String If an error occurred, the error message No

Method: POST
URL:
https://api.ecp123.com/clinical/v1/locations/{locationId}/emitEvents
Scope Required:
emitEvents.write
Other Requirements: To successfully submit event emit requests, an ECP representative must link your REST API access with a webhook event subscriber. The linked event subscriber must also be subscribed to events for the location specified in the URL. You will be prevented from requesting entities that your linked subscriber is not granted access to.
Description: If integrated via the webhook event approach outlined in the top section of this page, this endpoint is used to request a full snapshot (via a string of event payloads) of all active/current information for the location specified in the request URL and entities specified in the request body. To be used to request initial data pushes leading up to go-live.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter Data Type Description Required
entities Array of Strings Entities currently supported:
"allergy" | "contact" | "diet" | "levelOfCare" | "payorType" | "resident.assessmentDecision" | "resident.levelOfCareLogEntry" | "resident.payorTypeLogEntry" | "resident.roomLogEntry" | "resident.statusLogEntry" | "resident" | "user"

Note:
Your linked event subscriber must be subscribed to the entities requested.
Yes
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
error String

If an error occurred, the error message. Will fail if required fields are not provided, an invalid locationId is specified, or if rate-limiting applies. POST emitEvents currently only allows for:
   - Up to [1] emit events request per unique locationId within a 15-minute timespan
   - Up to [3] emit events requests per unique locationId in a rolling 24-hour period
   - Up to [50] emit events requests per vendor in a rolling 24-hour period

No
Request Body Sample:
{
    "entities": [
"contact",
"resident"
]
}

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/residents
URL Path Parameters: Add /{residentId} to URL to retrieve a specific resident's information.
Scope Required:
resident.read
Description: This endpoint is utilized to retrieve basic information on residents, per locationId specified in the request URL.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Optional Request Parameters:
Parameter Data Type Type Description
discharged Boolean Query String Parameter

By default, only active residents are returned. Setting discharged to true will return all discharged residents.

Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/residents?discharged=true"

page Number Query String Parameter

By default, results are returned in batches of 100. Page is sometimes necessary to see subsequent results.
Example Provided: ".../rooms?page=2"

residentId String (GUID) Path Parameter Added to URL to return a specific resident's info.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/residents/45b6837b-5324-4990-a388-880e82d5934f"
resultsPerPage Number Query String Parameter Used to specify the amount of results per page with a max of 100. If this value is greater than 100, 100 will be returned.
Example Provided: ".../rooms?resultsPerPage=10&page=2"

Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Array of Resident Objects
Contains an array of Resident objects including the following:
{
   building (Object) {
      buildingId (GUID),
      displayValue (String)
   },
   dateOfBirth (String),
   externalIds (Custom resident-related key/value pairs) {
      "[Custom Key 1]": "[Value 1]",
      "[Custom Key 2]": "[Value 2]",
      [...]
   },
   firstName (String),
   gender (String),
   lastName (String),
   middleName (String),
   nickname (String),
   residentId (GUID),
   room (Object) {
      displayValue (String),
      roomId (GUID)
   },
   status (String),
   statusDescription (String),
   suffix (String)
}
No
numberOfResults Number The total number of results (the response is paginated in batches of what resultsPerPage is set to, with a default max of 100 results per page) No
error String If an error occurred, the error message No

Method: POST
URL:
https://api.ecp123.com/clinical/v1/resident
Scope Required:
resident.write
Description: Create resident profiles in the ECP. A unique identifier (GUID) is returned to be stored and referenced if subscribed to ECP's Webhook API for future resident profile updates.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter Data Type Description Required
codeStatus String (9) Resident's current code status:
"Full Code" | "DNR"
No
dateOfBirth String (10) Resident's date of birth in YYYY-MM-DD format Yes
email String (100) Resident's email No
externalIds
Array of key/value pairs:
idKey; String (30)
idValue; String (50)
Location-specific idKey followed by resident-specific idValue derived from third-party system.
Note: idKeys must be configured per mutual client location/company before vendor utilization. Keys cannot be created via API.
No
financialMoveInDate String (10) Resident's financial move-in date in YYYY-MM-DD format No
firstName String (30) Resident's first name Yes
gender String (6) Resident's gender:
"Male" | "Female" | "Other"
No
lastName String (30) Resident's last name Yes
livingWill Boolean Indicates if resident has a living will No
locationId String (GUID) Unique identifier associated with location the resident is assigned to Yes
middleName String (1) Resident's middle initial No
moveInDate (Deprecated) String (10) This field is now deprecated. Please use physicalMoveInDate instead.
No
nickname String (30) Resident's nickname No
otherAdvancedDirectives String (300) Resident's other advanced directives No
phone String (16) Resident's phone number No
physicalMoveInDate String (10)

Resident's physical move-in date in YYYY-MM-DD format
Notes:
- If set to future date and community uses Clinical-only, resident will be given an "Awaiting Move-In" status.
- This field replaces the deprecated moveInDate field.
- If financialMoveInDate is not passed in, this sets both physical and financial move-in dates.

No
readyForDeposit Boolean If location is using ECP CRM/Move-Ins, a Prospect will be created as a result of a POST Resident request. When a Prospect is created, this field indicates whether the Prospect is ready for deposit. No
readyForPreAssessment Boolean If location is using ECP CRM/Move-Ins, a Prospect will be created as a result of a POST Resident request. When a Prospect is created, this field indicates whether the Prospect is ready for a pre-assessment. No
room String (16) Resident's room label No
stageId String (GUID) If location is using ECP CRM/Move-Ins, a Prospect will be created as a result of a POST Resident request. When a Prospect is created, this field can be used to set the Prospect's current Stage. If not specified, the Prospect will be created in the first default Stage.
Note: See GET Stages endpoint for more information.
No
suffix String (6) Resident's suffix No
coResident Object A secondary, related resident to create at the same time. If location is using ECP CRM/Move-Ins, the two prospects will be created under the same Lead profile. See sample below for supported fields. No
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
error String

If an error occurred, the error message. Potential errors include:
  - A resident with the same first name, last name, and date of birth already exists.
  - locationId is a required field
  - locationId must be a valid UUID
  - firstName is a required field
  - firstName must not exceed 30 characters
  - lastName is a required field
  - lastName must not exceed 30 characters
  - dateOfBirth is required and must be in the format YYYY-MM-DD
  - dateOfBirth must be in the format YYYY-MM-DD
  - middleName must not exceed 1 character
  - nickname must not exceed 30 characters
  - email must not exceed 100 characters
  - phone must not exceed 16 characters
  - room must not exceed 30 characters
  - suffix must not exceed 6 characters
  - otherAdvancedDirectives must not exceed 300 characters
  - gender value must be Male, Female, or Other.
  - codeStatus value must be either Full Code or DNR
  - livingWill must be a boolean type.
  - readyForPreAssessment must be a boolean type.
  - readyForDeposit must be a boolean type.
  - moveInDate must be in the format YYYY-MM-DD and represent a valid date
  - physicalMoveInDate must be in the format YYYY-MM-DD and represent a valid date
  - financialMoveInDate must be in the format YYYY-MM-DD and represent a valid date
  - stageId must be a valid UUID
  - stageId not found.
  - The stageId specified is restricted.
  - externalIds must be valid key/value pairs.
  - externalIds idKey must not exceed 50 characters.
  - externalIds idValue must not exceed 100 characters.
  - idKey of [key] does not exist in locationId specified.
  - idKey [idKey]; idValue [idValue] is already in-use by residentId [residentId]
  - Failed to create resident - [details]

No
residentId String (36)

GUID provided in response to POST resident
Note:
If sent with “Success” result, this is the GUID of the newly created resident. If sent with “Error” result due to duplicate resident, this is the GUID of the existing resident where first name, last name, and DOB match.

No
Request Body Sample:
{
    "codeStatus": "Full Code",
    "dateOfBirth": "1970-02-21",
    "email": "james@james.com",
    "externalIds": [
    	{"idKey": "billingid", "idValue": "12345"},
        {"idKey": "thirdpartyid", "idValue": "67890"}
    ],     
"financialMoveInDate": "2026-01-01",
"firstName": "James", "gender": "Male", "lastName": "Baum", "livingWill": false, "locationId": "XXX12FF-XXXC-XXX2-843C-93AXXXX772F8", "middleName": "A",
"nickname": "Jim",
"otherAdvancedDirectives": "This is a long text field.", "phone": "555-555-5555",
"physicalMoveInDate": "2026-01-23",
"readyDeposit": true,
"readyForPreAssessment": true, "room": "1A", "suffix": "Sr.",
"coResident": {
  "codeStatus": "DNR",
"dateOfBirth": "1965-01-09",
"email": "secondary@test.com",
"externalIds": [
{"idKey": "billingid", "idValue": "765432"},
{"idKey": "thirdpartyid", "idValue": "67123"}
],
"firstName": "Secondary",
"gender": "Female",
"lastName": "Baum",
"livingWill": true,
"middleName": "B",
"nickname": "Sec",
"otherAdvancedDirectives": "Here are other advanced directives for the secondary resident.",
"phone": "555-555-6666",
"readyForDeposit": true,
"readyForPreAssessment": true,
"room": "1B",
"suffix": "Jr."
}
}

Method: PATCH
URL:
https://api.ecp123.com/clinical/v1/resident
Scope Required:
resident.write
Description: Update resident profiles in the ECP using the resident's locationId and unique residentId. All other fields are optional and will only be updated if defined.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter Data Type Description Required
codeStatus String (9) Resident's current code status:
"Full Code" | "DNR"
No
dateOfBirth String (10) Resident's date of birth in YYYY-MM-DD format No
email String (100) Resident's email No
externalIds Array of key/value pairs:
idKey; String (30)
idValue; String (50)
Location-specific idKey followed by resident-specific idValue derived from third-party system.
Note: idKeys must be configured per mutual client location/company before vendor utilization. Keys cannot be created via API.
No
firstName String (30) Resident's first name No
gender String (6) Resident's gender:
"Male" | "Female" | "Other"
No
lastName String (30) Resident's last name No
livingWill Boolean Indicates if resident has a living will No
locationId String (GUID) Unique identifier associated with location the resident is assigned to Yes
middleName String (1) Resident's middle initial No
nickname String (30) Resident's nickname No
otherAdvancedDirectives String (300) Resident's other advanced directives No
phone String (16) Resident's phone number No
readyForDeposit Boolean If location is using ECP CRM/Move-Ins and the resident specified is still a Prospect, this field indicates whether the Prospect is ready for deposit. No
readyForPreAssessment Boolean If location is using ECP CRM/Move-Ins and the resident specified is still a Prospect, this field indicates whether the Prospect is ready for a pre-assessment. No
residentId String (GUID) Resident's unique identifier Yes
stageId String (GUID) If location is using ECP CRM/Move-Ins and the resident specified is still a Prospect, this field can be used to set the Prospect's current Stage.
Note: See GET Stages endpoint for more information.
No
suffix String (6) Resident's suffix No
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" or "Failure" Yes
error String If an error occurred, the error message. Potential errors include:
  - locationId is a required field
  - locationId must be a valid UUID
  - residentId is a required field
  - residentId not found.
  - firstName must not exceed 30 characters
  - lastName must not exceed 30 characters
  - dateOfBirth must be in the format YYYY-MM-DD
  - middleName must not exceed 1 character
  - nickname must not exceed 30 characters
  - email must not exceed 100 characters
  - phone must not exceed 16 characters
  - room must not exceed 30 characters
  - suffix must not exceed 6 characters
  - otherAdvancedDirectives must not exceed 300 characters
  - gender value must be Male, Female, or Other.
  - codeStatus value must be either Full Code or DNR
  - livingWill must be a boolean type.
  - readyForPreAssessment must be a boolean type.
  - readyForDeposit must be a boolean type.
  - stageId must be a valid UUID
  - stageId not found.
  - The stageId specified is restricted.
  - externalIds must be valid key/value pairs.
  - externalIds idKey must not exceed 50 characters.
  - externalIds idValue must not exceed 100 characters.
  - idKey of [key] does not exist in locationId specified.
  - idKey [idKey]; idValue [idValue] is already in-use by residentId [residentId]
  - The following parameters are not supported: [parameters]
  - Error: [generic error]
  - Failed to update resident - [details]
No
Request Body Sample:
{
    "codeStatus": "Full Code",
    "dateOfBirth": "1970-02-21",
    "email": "james@james.com",
"firstName": "James", "gender": "Male", "lastName": "Baum", "livingWill": false, "locationId": "F2266F87-52BC-4EBA-AECB-7E6ABEBF3EBF", "middleName": "A",
"nickname": "Jim",
"otherAdvancedDirectives": "This is a long text field.", "phone": "555-555-5555",
"readyDeposit": true,
"readyForPreAssessment": true,
"residentId": "2B9FA1B5-82F3-4F2A-8017-149FF263AEB2",
"stageId": "7A36D2F4-3F99-4CCA-B381-C9261E8A2777",    
"suffix": "Sr."
}

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/residents/{residentId}/statusLog
URL Path Parameters: Add /{statusLogEntryId} to URL to retrieve a specific log's information.
Scope Required:
resident.read
Description: This endpoint is utilized to retrieve a resident's entire status log, per residentId specified in the request URL.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Optional Request Parameters:
Parameter Data Type Type Description
page Number Query String Parameter By default, results are returned in batches of 100. Page is sometimes necessary to see subsequent results.
Example Provided: ".../statusLog?page=2"
resultsPerPage Number Query String Parameter Used to specify the amount of results per page with a max of 100. If this value is greater than 100, 100 will be returned.
Example Provided: ".../statusLog?resultsPerPage=10&page=2"

statusLogEntryId String (GUID) Path Parameter Added to URL to return a specific status log entry's info.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/residents/fdad8823-83e2-42dc-8c33-9bb57e125844/statusLog/fb9e3a60-9b17-4257-b52f-f192d10c77cb"
Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Array of Status Log Entry Objects
Contains an array of Status Log Entry objects including the following:
{
   billable (Boolean),
   createdTimestamp (String - UTC),
   effectiveTimestamp (String - UTC),
   notes (String),
   status ("Active" or "Inactive"),
   statusDescription (String),
   statusLogEntryId (String - GUID)
}
No
numberOfResults Number The total number of results (the response is paginated in batches of what resultsPerPage is set to, with a default max of 100 results per page) No
error String If an error occurred, the error message No

Method: POST
URL: https://api.ecp123.com/clinical/v1/resident/contact/
Scope Required: contact.write
Description: This endpoint is utilized to create resident contacts in the ECP locationId specified. A unique identifier is returned to be stored and referenced if subscribed to ECP's Webhook API for future Contact updates.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter
Data Type
Description
Required
address
String (50)
Contact's address
No
billingContact
Boolean
Indicates whether contact is marked a billing contact
No
city
String (50)
Contact's city
No
email
String (100)
Contact's email
No
firstName
String (30)
Contact's first name
Yes
healthCarePoa
Boolean
Indicates whether contact is marked health care power of attorney
No
healthCarePoaActivated
Boolean
If contact is resident’s health care power of attorney, indicates if POA is activated 
No
lastName
String (30)
Contact's last name
Yes
locationId
String (36)
Unique GUID associated with location the contact’s resident is assigned to 
Yes
notes
String (300)
Contact-related notes
No
phone
String (16)
Contact's phone number
No
phoneCell
String (16)
Contact's cellphone number
No
phoneWork
String (16)
Contact's work phone number
No
preferredContactMethod
String (5)
Contact’s preferred contact method: 
“Phone” | “Text” | “Email” 
No
preferredContactTime
String (9)
Contact’s preferred time to be contacted: 
“Morning” | “Afternoon” | “Evening” 
No
primaryContact
Boolean
Indicates whether contact is marked primary 
No
providesProducts
Boolean
Indicates whether contact provides products and/or medications for resident 
No
relationship
String (100)
Contact’s relation to resident 
No
residentId
String (36)
Unique GUID associated with resident that contact relates to 
Yes
state
String (2)
Contact's state
No
stateAppointedGuardian
Boolean
Indicates whether contact is marked resident’s state-appointed guardian 
No
zip
String (9)
Contact’s zip code 
No
Response:
Parameter
Data Type
Description
Required
result
String
Either “Success” or “Error”. 
Yes
error
String
If an error occurred, the error message.

Will fail if required fields are not provided OR location is invalid. 
No
contactId
String (36)
GUID provided in response to POST contact 
If sent with “Success” result, this will be the GUID of the newly created contact. If sent with “Error” result due to duplicate contact, this will be the GUID of the existing contact where first name and last name match.
No
Request Body Sample:
{
    "address": "123 Main St.",
    "billingContact": 1,
    "city": "Fake City",
    "email": "jamies@email.com",
    "firstName": "Jamie",
    "healthCarePoa": 1,
    "healthCarePoaActivated": 1,
    "lastName": "Tester",
    "locationId": "XXX12FF-XXXC-XXX2-843C-93AXXXX772F8",
    "notes": "This is a long text field for additional notes.",
    "phone": "555-555-5556",
    "phoneCell": "555-555-5557",
    "phoneWork": "555-555-5558",
    "preferredContactMethod": "Phone",
    "preferredContactTime": "Morning",
    "primaryContact": 1,
    "providesProducts": 1,
    "relationship": "Daughter",
    "residentId": "2CXXXXFB-4XXE-4XX0-8XX6-1ECB6XXXX173",
    "state": "WI",
    "stateAppointedGuardian": 0,
    "zip": 53120
}     

Method: POST
URL:
https://api.ecp123.com/clinical/v1/resident/observation
Scope Required:
observation.write
Description: This endpoint is utilized to post resident observations.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter Data Type Description Required
important
Boolean
Flag observation as important to display at the top of Recent Notes/Observations windows
 
Note: Default value is false
No
locationId String (36) Resident's locationId, a unique identifier shared via ECP representative or ECP's Webhook API Yes
minutes Integer User time spent as a result of observation No
note String (20000) Resident observation note Yes
timestamp
String (10)
UTC timestamp of when observation was recorded, conforming to ISO 8601

Example Provided: "2025-05-05T13:37:27+00:00"
Yes
residentId String (36) Resident's unique identifier shared via ECP's Webhook API Yes, but only when passing residentId to identify resident
firstName String (30) Resident's first name Yes, but only when passing FN + LN + DOB to identify resident
lastName String (30) Resident's last name Yes, but only when passing FN + LN + DOB to identify resident
dateOfBirth String (10) Resident's date of birth in YYYY-MM-DD format Yes, but only when passing FN + LN + DOB to identify resident
externalIdName String (30) Resident's External ID field name Yes, but only when passing externalIdName + externalIdValue to identify resident
externalIdValue String (50) Resident's External ID value corresponding with externalIdName Yes, but only when passing externalIdName + externalIdValue to identify resident
userId String (36) User's unique identifier shared via ECP's Webhook API Yes, but only when using userId instead of loginName to specify user recording observation
loginName String (113) Login Name of user recording observation Yes, but only when using loginName instead of userId to specify user recording observation
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
error String If an error occurred, the error message. Will fail if required fields are not provided OR location is invalid. No
Request Body Sample:
{
    "important": 1,
"locationId": "XXX12FF-XXXC-XXX2-843C-93AXXXX772F8",
"minutes": 20,
"note": "As of late, Lauren requires more assistance with mobility. Today, I assisted her to and from commons on a few different occasions.", "timestamp": "2025-03-05T09:20:30+00:00", "firstName": "James", "lastName": "Baum",
"dateOfBirth": "1970-02-21",
"userId": "12312FF-X555-X555-8XXS-18XXXXX38105"
}

Method: POST
URLs:
https://api.ecp123.com/clinical/v1/resident/vital/blood-ox
https://api.ecp123.com/clinical/v1/resident/vital/blood-pressure
https://api.ecp123.com/clinical/v1/resident/vital/blood-sugar
https://api.ecp123.com/clinical/v1/resident/vital/pulse
https://api.ecp123.com/clinical/v1/resident/vital/respirations
https://api.ecp123.com/clinical/v1/resident/vital/temperature
https://api.ecp123.com/clinical/v1/resident/vital/weight
Scope Required:
vital.write
Description:
These endpoints are utilized to add resident vital readings to residents' profiles in ECP. These seven endpoints are identical, with the exception of vital-specific fields/values required when posting to each. This information is specified in the table below. Please note, there are different ways to identify locations/users/residents. If not utilizing ECP's Webhook API, the location endpoint can be leveraged to retrieve required location names.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter Data Type Description Required
(for blood-ox endpoint) bloodOx Number  Resident's blood ox reading Yes, but only when hitting /v1/resident/vital/blood-ox
(for blood-pressure endpoint) systolic Number Systolic portion of resident's blood pressure reading Yes, but only when hitting /v1/resident/vital/blood-pressure
(for blood-pressure endpoint) diastolic Number Diastolic portion of resident's blood pressure reading Yes, but only when hitting /v1/resident/vital/blood-pressure
(for blood-sugar endpoint) bloodSugar Number Resident's blood sugar reading Yes, but only when hitting /v1/resident/vital/blood-sugar
(for pulse endpoint) pulse Number Resident's pulse reading Yes, but only when hitting /v1/resident/vital/pulse
(for respirations endpoint) respirations Number Resident's respirations reading Yes, but only when hitting /v1/resident/vital/respirations
(for temperature endpoint) temperature Number Resident's temperature reading Yes, but only when hitting /v1/resident/vital/temperature
(for weight endpoint) weight Number Resident's weight reading Yes, but only when hitting /v1/resident/vital/weight
location String Resident's location (referencing names returned from v1/location endpoint) Yes, but only when using location instead of locationId to specify resident location
locationId String (36) Resident's locationId, a unique identifier shared via ECP representative or ECP's Webhook API Yes, but only when using locationId instead of location to specify resident location
loginName String Login Name of user recording vital reading Yes, but only when using loginName instead of userId to specify user recording vital
userId String (36) User's unique identifier shared via ECP's Webhook API Yes, but only when using userId instead of loginName to specify user recording vital
firstName String Resident's first name Yes, but only when passing FN + LN + DOB to identify resident
lastName String Resident's last name Yes, but only when passing FN + LN + DOB to identify resident
dateOfBirth String Resident's date of birth in YYYY-MM-DD format Yes, but only when passing FN + LN + DOB to identify resident
residentId String (36) Resident's unique identifier shared via ECP's Webhook API Yes, but only when passing residentId to identify resident
externalIdName String Resident's External ID field name Yes, but only when passing externalIdName + externalIdValue to identify resident
externalIdValue String Resident's External ID value corresponding with externalIdName Yes, but only when passing externalIdName + externalIdValue to identify resident
timestamp String Timestamp of when vital sign was recorded, conforming to ISO 8601

Example Provided: "2025-05-05T13:37:27+00:00"
Yes
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
error String If an error occurred, the error message. POST will fail if required fields are not provided. No
Request Body Sample:
{
    "weight": "180",
    "locationId": "XXX12FF-XXXC-XXX2-843C-93AXXXX772F8",
    "userId": "12314XX-XXXX-XXXX-XXXX-876XXXX888XX",
    "firstName": "James",
    "lastName": "Baum",
    "dateOfBirth": "1950-06-02",
    "timestamp": "2025-10-09T19:20:30+00:00",
}     

Method: GET
URLs:
https://api.ecp123.com/clinical/v1/resident/vital/blood-ox
https://api.ecp123.com/clinical/v1/resident/vital/blood-pressure
https://api.ecp123.com/clinical/v1/resident/vital/blood-sugar
https://api.ecp123.com/clinical/v1/resident/vital/pulse
https://api.ecp123.com/clinical/v1/resident/vital/respirations
https://api.ecp123.com/clinical/v1/resident/vital/temperature
https://api.ecp123.com/clinical/v1/resident/vital/weight
Scope Required:
vital.read
Description: Retrieve vital readings for a specific resident or all residents in a single location.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to" Yes
Query String Parameters:
Parameter Data Type Description Required
location String Residents' location name (referencing names returned from v1/location/ endpoint) Yes, but only when using location instead of locationId to specify location
locationId String (GUID) Residents' locationId, a unique identifier shared via ECP representative or ECP's Webhook API Yes, but only when using locationId instead of location to specify location
startingDateTime String Start of date range of when vital signs were recorded, conforming to ISO 8601
Example Provided: "2025-05-05T13:37:27+00:00"
No
endingDateTime String End of date range of when vital signs were recorded, conforming to ISO 8601
Example Provided: "2025-05-05T13:37:27+00:00"
No
page Number Data will be paginated into batches of 100. Sorting will be by date/time. No
residentId String (GUID) Residents' residentId, a unique identifier No
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
data Array
An array of objects of the form:
{
   resident (Object)
      firstName (String),
      lastName (String),
      dateOfBirth (String),
      residentId (String - GUID),
      externalIds (Array)
         externalIdName (String),
         externalIdValue (String),
   [vital] (Object),
      id (String - GUID),
      [vital reading],
      timestamp (String),
      createdDate (String),
      updatedDate (String),
      loginName (String)
}
 
Up to 100 entries will be returned (the result is paginated). Note that an array of all external IDs and their corresponding values will be returned in the object.
No
numberOfResults Number The total number of results (the response is paginated in batches of 100). Yes
error String If an error occurred, the error message. Potential errors include:
  - Either location or locationId is required.
  - startingDateTime must match ISO 8601 (https://www.w3.org/TR/NOTE-datetime).
  - endingDateTime must match ISO 8601 (https://www.w3.org/TR/NOTE-datetime).
  - endingDateTime must be at least startingDateTime
  - Invalid residentId format.
  - Something went wrong.

If using ECP's user-specific OAuth token approach (authorization_code grant type):
  - You do not have access to locationId provided.
  - You do not have permission to view Vitals History in ECP.
No
Request Body Sample:

{ "locationId": "XXX12FF-XXXC-XXX2-843C-93AXXXX772F8", "startingDateTime": "2025-01-05T19:20:30+00:00", "endingDateTime": "2025-01-10T19:20:30+00:00", "page": 10 }

Method: POST
URL:
https://api.ecp123.com/clinical/v1/resident/allergy
Scope Required: allergy.write
Description: This endpoint is utilized to add/update a resident's allergies in ECP. Please note, there are different ways to identify locations/residents. If not utilizing ECP's Webhook API, the location endpoint can be leveraged to retrieve required location names.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter Data Type Description Required
allergy String An allergy to add to a resident's list of allergies. Yes
location String (60) A unique identifier associated with the ECP location the resident is assigned to. Yes, but only when using location instead of locationId to specify resident location
locationId String (36) Resident's locationId, a unique identifier shared via ECP representative or ECP's Webhook API Yes, but only when using locationId instead of location to specify resident location
loginName String Login Name of user recording allergies. Yes
firstName String (30) Resident's first name Yes, but only when passing FN + LN + DOB to identify resident
lastName String (30) Resident's last name Yes, but only when passing FN + LN + DOB to identify resident
dateOfBirth String Resident's date of birth in YYYY-MM-DD format Yes, but only when passing FN + LN + DOB to identify resident
residentId String (36) Resident's unique identifier shared via ECP's Webhook API Yes, but only when passing residentId to identify resident
externalIdName String Resident's External ID field name Yes, but only when passing externalIdName + externalIdValue to identify resident
externalIdValue String Resident's External ID value corresponding with externalIdName Yes, but only when passing externalIdName + externalIdValue to identify resident
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
error String If an error occurred, the error message.
Will fail if residentId OR firstName/lastName/dateOfBirth OR externalIdName/externalIdValue are not specified.
Will fail if either no or multiple residents match the firstName/lastName/dateOfBirth or the externalIdName/externalIdValue provided.
No
Method: GET
URL: https://api.ecp123.com/clinical/v1/resident/allergy
Scope Required: allergy.read
Description: This endpoint is utilized to retrieve documented allergies for all residents of a specified location. Results are paginated in batches of 100. Please note, there are two different ways of specifying which location you're querying, via location name (location) or location ID (locationId).
 
Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Query String Parameters:
Parameter Data Type Description Required
location
String
Residents' location name (referencing names returned from v1/location/ endpoint)
Yes, but only when using location instead of locationId to specify location
locationId
String (GUID)
Residents' locationId (GUID), a unique identifier shared via ECP representative or ECP's Webhook API
Yes, but only when using locationId instead of location to specify location
page
String
Page number of results
Note: With results paginated into batches of 100, increment page number until numberOfResults=0
No
residentId
String (GUID)
Residents' residentId (GUID), a unique identifier
No
Response:
Parameter Data Type Description Required
result
String
Either "Success" or "Error"
Yes
data
Array
An array of objects containing the following fields:
allergy (String),
allergiesModifiedDate: String,
dateOfBirth (String),
externalIds: Array of externalIdName (String) and externalIdValue (String) pairings,
firstName (String),
lastName (String),
residentId (String - GUID),
timestamp (deprecated)
No
numberOfResults
Number
Total number of results (residents w/ allergies) on page returned
Note: With results paginated into batches of 100, increment page number until numberOfResults=0
No
error
String
If an error occurred, the error message
No
Using Query String Parameters:

https://api.ecp123.com/clinical/v1/resident/allergy?locationId=XXX812FF-XXXC-XXX2-XXXC-XXX0603772F8

OR

https://api.ecp123.com/clinical/v1/resident/allergy?locationId=XXX812FF-XXXC-XXX2-XXXC-XXX0603772F8&page=1

OR

https://api.ecp123.com/clinical/v1/resident/allergy?location=Evergreen Assisted Living&page=2

Method: POST
URL: https://api.ecp123.com/clinical/v1/resident/diagnosis 
Scope Required: diagnosis.write
Description:
This endpoint is utilized to add diagnoses to resident profiles in ECP. Please note, there are different ways to identify locations/residents. If not utilizing ECP's Webhook API, the location endpoint can be leveraged to retrieve required location names. Requests must include a diagnosis code or description.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter Data Type Description Required
loginName String (25) Login Name of user recording diagnosis Yes
code String ICD-10 code of recorded diagnosis
Note: Must precisely match an ICD-10 code
Yes, but only when diagnosis value is not provided
diagnosis
String
Description of recorded diagnosis
Yes, but only when code is not provided
comment String (2000) Any comments associated with diagnosis No
location String (60) A unique identifier associated with the ECP location the resident is assigned to Yes, but only when using location instead of locationId to specify resident location
locationId String (36) Resident's locationId, a unique identifier shared via ECP representative or ECP's Webhook API Yes, but only when using locationId instead of location to specify resident location
timestamp String (25) Timestamp of when diagnosis was recorded, conforming to ISO 8601

Example Provided: "2025-05-05T13:37:27+00:00"
Yes
firstName String (30) Resident's first name Yes, but only when passing FN + LN + DOB to identify resident
lastName String (30) Resident's last name Yes, but only when passing FN + LN + DOB to identify resident
dateOfBirth String Resident's date of birth in YYYY-MM-DD format Yes, but only when passing FN + LN + DOB to identify resident
residentId  String (36)
Resident's unique identifier shared via ECP's Webhook API
Yes, but only when passing residentId to identify resident
externalIdName String Resident's External ID field name Yes, but only when passing externalIdName + externalIdValue to identify resident
externalIdValue String Resident's External ID value corresponding with externalIdName Yes, but only when passing externalIdName + externalIdValue to identify resident
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
error String

If an error occurred, the error message.
Will fail if
residentId OR firstName/lastName/dateOfBirth OR externalIdName/externalIdValue are not specified.
Will fail if either no or multiple residents match the firstName/lastName/dateOfBirth or the externalIdName/externalIdValue provided.
Will fail if an invalid ICD-10 code is entered.

No

Method: GET
URL: https://api.ecp123.com/clinical/v1/resident/diagnosis
Scope Required: diagnosis.read
Description: This endpoint is utilized to retrieve documented diagnoses for all residents of a specified location.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Query String Parameters:
Parameter Data Type Description Required
location String (60) Residents' location name (referencing names returned from v1/location/ endpoint) Yes, but only using location instead of locationId to specify location
locationId String (36) Residents' locationId, a unique identifier shared via ECP representative or ECP's Webhook API Yes, but only when using locationId instead of location to specify location
startingDateTime String (25) The starting date/time to pull data for, conforming to ISO 8601 (e.g.,  2014-03-12T13:37:27+00:00). If skipped, data will start at the beginning of time.  No
endingDateTime String (25) The ending date/time to pull data for, conforming to ISO 8601 (e.g.,  2014-03-12T13:37:27+00:00). If skipped, data will not have an ending date/time. No
page Number Data will be paginated into batches of 100. Sorting will be by date/time for all fields with date/time associated, and alphabetical by last name for fields without date/time associated.  No
Response:
Parameter Data Type Description Required
result String Either "Success" or "Error" Yes
data Array

An array of objects of the form 

   code, 
   location, 
   diagnosis, 
   comment, 
   timestamp, 
   firstName, 
   lastName, 
   dateOfBirth, 
   loginName, 
   externalIds: [ 
    {externalIdName: externalIdValue}, 
    {externalIdName2: externalIdValue2}, 
     ... 
   ] 

 

Up to 100 entries will be returned (the result is paginated). Note that an array of all external IDs and their corresponding values will be returned in the object.

No
numberOfResults Number The total number of results (the response is paginated in batches of 100). No
error String If an error occurred, the error message. No

Method: POST
URL: https://api.ecp123.com/clinical/v1/user/ 
Scope Required:
user.write
Description: Create user accounts in ECP.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter
Data Type
Description
Required
loginName
String (25)
User's Employee Login
Yes
password
String (16)
User's temporary password
Note: User will be prompted to update their password the first time they log in.
No
location
Array of Strings (60)
Array of unique identifiers associated with ECP locations the user has access to
Yes
firstName
String (30)
User's first name
Yes
lastName
String (30)
User's last name
Yes
active
Boolean
Indicates if user account is active
No
viewAllResidents
Boolean
Indicates if user account has access to all residents
No
userGroup
String (15)
User's assigned User Group
Note: This value must precisely match a User Group unique to the user's ECP account.
Yes
role
String (15)
User's assigned Role
"Administrative" | "Caregiver" | "Community Relations" | "Dietary" | "Director" |
"Finance" | "Housekeeping" | "Human Resources" | "IT" | "Life Enrichment" | "Maintenance" | "Manager" | "Med Passer" | "Nursing" | "Operations" | "Outside Provider" | "Owner" | "Pharmacy"
Yes
systemAdmin
Boolean
Indicates if user is a System Administrator
Note: Default = false; Maximum of three per ECP account
No
chartingInitials
String (5)
User's charting initials
Note: If not provided, charting initials will be auto-generated.
No
title
String (50)
User's title
No
address
String (50)
User's address
No
cityStateZip
String (50)
User's city, state, and zip
No
phone
String (16)
User's phone number
No
cellphone
String (16)
User's cellphone number
No
cellCarrier
String (15)
User's cellphone carrier
"Alltel" | "AT&T" | "Boost Mobile" | "CellCom" | "CellularOne" | "Cingular" | "Cricket" | "Metro PCS" | "Net10" | "Nextel" | "Omnipoint" | "Qwest" | "Spectrum Mobile" | "Sprint" | "T-Mobile" | "US Cellular" | "Verizon" | "Virgin Mobile"
No
pager
String (16)
User's pager number
No
email
String (150)
User's email address
Note: Required for System Administrators
No
Response:
Response
Description
"Success"
No errors encountered; User/employee created
"Error:" or "Errors:"

An individual error or list of errors. Potential errors include:
  - loginName is a required field.
  - password must be a string.
  - password must be at least 8 characters.
  - password must be at most 16 characters.
  - password cannot contain your login name.
  - password cannot contain your first name.
  - password cannot contain your last name.
  - password is too common and cannot be used. Please choose a more secure password.
  - firstName is a required field.
  - firstName must be at most 30 characters
  - lastName is a required field.
  - lastName must be at most 30 characters
  - There is already a user with this LoginName.
  - loginName must be at least 3 characters
  - loginName must be at most 113 characters
  - address must be at most 50 characters
  - cityStateZip must be at most 50 characters
  - phone must be at most 16 characters
  - cellPhone must be at most 16 characters
  - pager must be at most 16 characters
  - email must be at most 150 characters
  - chartingInitials must be at most 6 characters
  - Charting Initials are not unique, please try again.
  - There are too many users with similarly auto-generated initials. Please provide unique charting initials for this user.
  - This is not a valid Role. Role must be one of [list of valid roles]
  - This is not a valid User Group. User Group must be one of [list of valid user groups]
  - This is not a valid Cell Phone Carrier. Cell Phone Carrier must be one of [list of valid carriers]
  - System Admins must have an email address.
  - At least one valid location must be provided.
  - Failed to create employee.
  - Failed to create employee log.
  - Failed to link locations to the employee.

 

Method: PUT
URL:
https://api.ecp123.com/clinical/v1/user/ 
Scope Required: user.write
Description: Update a user account in ECP by passing in the user's unique loginName. All other fields are optional and will be updated if defined.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Request Body:
Parameter
Data Type
Description
Required
loginName
String (25)
User's Employee Login
Yes
password
String (16)
User's password
No
location
Array of Strings (60)
Array of unique identifiers associated with ECP locations the user has access to
No
firstName
String (30)
User's first name
No
lastName
String (30)
User's last name
No
active
Boolean
Indicates if user account is active
No
viewAllResidents
Boolean
Indicates if user account has access to all residents
No
userGroup
String (15)
User's assigned User Group
Note: This value must precisely match a User Group unique to the user's ECP account.
No
role
String (15)
User's assigned Role
"Administrative" | "Caregiver" | "Community Relations" | "Dietary" | "Director" |
"Finance" | "Housekeeping" | "Human Resources" | "IT" | "Life Enrichment" | "Maintenance" | "Manager" | "Med Passer" | "Nursing" | "Operations" | "Outside Provider" | "Owner" | "Pharmacy"
No
systemAdmin
Boolean
Indicates if user is a System Administrator
Note: Maximum of three per ECP account
No
chartingInitials
String (5)
User's charting initials
No
title
String (50)
User's title
No
address
String (50)
User's address
No
cityStateZip
String (50)
User's city, state, and zip
No
phone
String (16)
User's phone number
No
cellphone
String (16)
User's cellphone number
No
cellCarrier
String (15)
User's cellphone carrier
"Alltel" | "AT&T" | "Boost Mobile" | "CellCom" | "CellularOne" | "Cingular" | "Cricket" | "Metro PCS" | "Net10" | "Nextel" | "Omnipoint" | "Qwest" | "Spectrum Mobile" | "Sprint" | "T-Mobile" | "US Cellular" | "Verizon" | "Virgin Mobile"
No
pager
String (16)
User's pager number
No
email
String (150)
User's email address
Note: Required for System Administrators
No
Response:
Response
Description
"Success"
No errors encountered; User/employee updated
"Error:" or "Errors:"
An individual error or list of errors. Potential errors include:
  - firstName must be at most 30 characters
  - lastName must be at most 30 characters
  - loginName must be at least 3 characters
  - loginName must be at most 113 characters
  - password must be a string.
  - password must be at least 8 characters.
  - password must be at most 16 characters.
  - password cannot contain your login name.
  - password cannot contain your first name.
  - password cannot contain your last name.
  - password is too common and cannot be used. Please choose a more secure password.
  - address must be at most 50 characters
  - cityStateZip must be at most 50 characters
  - phone must be at most 16 characters
  - cellPhone must be at most 16 characters
  - pager must be at most 16 characters
  - email must be at most 150 characters
  - chartingInitials must be at most 6 characters
  - Charting Initials are not unique, please try again.
  - This is not a valid Role. Role must be one of [list of valid roles]
  - This is not a valid User Group. User Group must be one of [list of valid user groups]
  - This is not a valid Cell Phone Carrier. Cell Phone Carrier must be one of [list of valid carriers]
  - System Admins must have an email address.
  - Could not find employee with LoginName: [loginName]
  - Must include at least 1 valid location.
  - Failed to update employee.
  - Failed to create employee log.
  - Failed to link locations to the employee.

 

Method: GET
URL:
https://api.ecp123.com/clinical/v1/user/ 
Scope Required:
user.read
Description: Retrieve ECP user account information using the user's unique loginName.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all locations/endpoints that vendor/company has access to Yes
Query String Parameters:
Parameter
Data Type
Description
Required
loginName
String (25)
User's Employee Login
Yes
Response:
Parameter
Data Type
Description
Always Specified
loginName
String (25)
User's Employee Login
Yes
location
Array of Strings (60)
Array of unique identifiers associated with ECP locations the user has access to
No
firstName
String (30)
User's first name
Yes
lastName
String (30)
User's last name
Yes
active
Boolean
Indicates if user account is active
Yes
viewAllResidents
Boolean
Indicates if user account has access to all residents
Yes
userGroup
String (15)
User's assigned User Group
No
role
String (15)
User's assigned Role
"Administrative" | "Caregiver" | "Community Relations" | "Dietary" | "Director" |
"Finance" | "Housekeeping" | "Human Resources" | "IT" | "Life Enrichment" | "Maintenance" | "Manager" | "Med Passer" | "Nursing" | "Operations" | "Outside Provider" | "Owner" | "Pharmacy"
Yes
systemAdmin
Boolean
Indicates if user is a System Administrator
Yes
chartingInitials
String (5)
User's charting initials
Yes
title
String (50)
User's title
No
address
String (50)
User's address
No
cityStateZip
String (50)
User's city, state, and zip
No
phone
String (16)
User's phone number
No
cellphone
String (16)
User's cellphone number
No
cellCarrier
String (15)
User's cellphone carrier
"Alltel" | "AT&T" | "Boost Mobile" | "CellCom" | "CellularOne" | "Cingular" | "Cricket" | "Metro PCS" | "Net10" | "Nextel" | "Omnipoint" | "Qwest" | "Spectrum Mobile" | "Sprint" | "T-Mobile" | "US Cellular" | "Verizon" | "Virgin Mobile"
No
pager
String (16)
User's pager number
No
email
String (150)
User's email address
No
[Potential 400 Errors Returned]
N/A
An individual error or list of errors. Potential errors include:
  - loginName or userId query parameter is required.
  - No information found for the loginName or userId specified.
If using ECP's user-specific OAuth token approach (authorization_code grant type):
  - You do not have permission to view other users' information in ECP.
No

 

Method: GET
URL: https://api.ecp123.com/clinical/v1/locations/{locationId}/stages
URL Path Parameters: Add /{stageId} to URL to retrieve a specific stage's information.
Scope Required:
stage.read
Description: This endpoint is utilized to retrieve the ECP CRM/Move-Ins Stage configuration per locationId specified in the request URL. The locationId specified must have the ECP CRM/Move-Ins product enabled to get any information returned.

Headers:
Key Value Description Required
auth-bearer "Bearer [token returned from OAuth API endpoint]" Bearer token (expires in 60 minutes) Yes
authorization "Api-Key [key provided by ECP representative]" Key utilized across all endpoints the vendor/company has access to Yes
Optional Request Parameters:
Parameter Data Type Type Description
page Number Query String Parameter By default, results are returned in batches of 100. Page is sometimes necessary to see subsequent results.
Example Provided: ".../stages?page=2"
resultsPerPage Number Query String Parameter Used to specify the amount of results per page with a max of 100. If this value is greater than 100, 100 will be returned.
Example Provided: ".../stages?resultsPerPage=10&page=2"

stageId String (GUID) Path Parameter Added to URL to return a specific stage's info.
Example Provided: "...v1/locations/1fc5EEEE-AAAA-4f75-CCCC-4ecd23feBBCC/stages/AAAA8823-83e2-42dc-BBBB-9bb57e125844"
Response:
Parameter Data Type Description Always Specified
result String Either "Success" or "Error" Yes
data Array of Stage Objects
Contains an array of Stage objects including the following:
{
   displayValue (String),
   type (String - "archived" or "custom" or "default"),
   order (Integer),
   restricted (Boolean),
   stageId (String - GUID)
}
Notes: Type can be used to tell the difference between the default landing stage for new leads/prospects if stage is not specified ("default"), what stage(s) are treated as archived ("archived"), and all others ("custom"). The Restricted boolean indicates the stage cannot be interacted with via other API endpoints (POST/PATCH Resident).
No
numberOfResults Number The total number of results (the response is paginated in batches of what resultsPerPage is set to, with a default max of 100 results per page) No
error String If an error occurred, the error message No

Note: CRM endpoints use a different method of authorization than the other REST endpoints. You can get a CRM API key from settings within the application. You’ll also need to generate a “snippet ID” — also from in-app CRM settings — that serves as a destination location identifier. These values are included in the required payload body. The request body MUST be encoded as multipart/form-data.
Method:
POST
URL:
https://crm.ecp123.com/system/integrations/webform/addLead_webform.cfm
Scope Required:
API scopes are not used for CRM endpoints.
Description: Create a lead in CRM given basic contact information.

Request Body:
Parameter
Data Type
Description
Required
APIKEY
String
CRM-generated persistent auth token (account-level)
Yes
SNIPPETID
String
CRM-generated linking ID to route new leads to a given location within the account
Yes
SOURCE_NAME
String
Displayed on the lead as “Added From” - e.g. the name of your app
Yes
inquiringFor
String
MUST be one of “lovedOne” or “myself”. Controls interpretation of some fields below.
Yes
FIRST_NAME
String
Saved as the contact’s first name when inquiringFor = “lovedOne”. Saved as the prospective resident’s first name when inquiringFor = “myself”.
Yes
LAST_NAME
String
Saved as the contact’s last name when inquiringFor = “lovedOne”. Saved as the prospective resident’s last name when inquiringFor = “myself”.
No
PHONE
String
Saved on the contact record when inquiringFor = “lovedOne”. Saved on the prospective resident record when inquiringFor = “myself”. Send as 10 sequential digits, i.e. “8658675309”.
PHONE or EMAIL required.
EMAIL
String
Saved on the contact record when inquiringFor = “lovedOne”. Saved on the prospective resident record when inquiringFor = “myself”.
PHONE or EMAIL required.
LOVED_ONE_FIRST_NAME
String
First name of the prospective resident. Ignored if inquiringFor is not “lovedOne”.
Required when inquiringFor = "lovedOne"
LOVED_ONE_LAST_NAME
String
Last name of the prospective resident. Ignored if inquiringFor is not “lovedOne”.
Required when inquiringFor = "lovedOne"
REASON_FOR_INQUIRY
String
Short text saved to a dedicated field on the lead
Yes
PREFERRED_METHOD
String
MUST be one of “Phone”, “Text”, or “Email”. Saved on the contact record when inquiring for a loved one. Saved on the prospective resident record when inquiring for self.
No
TRANSCRIPT
String
Saved as a new Note on the newly created lead. Not frequently used.
No
INTEGRATION_TRAFFIC_SOURCE
String
Displayed in lead sourcing info - e.g., the referer [sic] before your app converted the lead
No
INTEGRATION_SUBMISSION_LOCATION
String
Displayed in lead sourcing info - e.g., the particular page in your app where the lead converted
No
LEAD_MESSAGE
String
Saved as a new Note on the newly created lead
No
REQUESTED_TOUR_DATE
String
Added as context on the auto-created first followup task for the lead. Not frequently used.
No
Response:
Note:
You'll get a 200 in all cases, success or failure.
Parameter Data Type Description Required
success
Integer
1 when the lead was successfully created. 0 when the lead was not. This is the primary result you should key off of.
Yes
message
String
Human-readable status message
Yes
LEAD_ID
Integer
Internal ID of lead. Useful for constructing URLs etc.
No
errors
Object
Key/value pairs describing some errors that may have been encountered.
No
NEW_LEAD_DATA
Object in Array
A full representation of the newly created lead object
No
Request Body Sample #1:
When the person in question is the prospective resident themselves (minimum required payload). In this example, the lead John Public will get created with no linked contacts.
Key Value
SNIPPETID
99
APIKEY
12345-ABC-DEF-67890
inquiringFor
myself
FIRST_NAME
John
LAST_NAME
Public
EMAIL
john@email.com
PHONE
8658675309
REASON_FOR_INQUIRY
Looking for more help during the day
SOURCE_NAME
Postman
Request Body Sample #2:
When the person in question is a family member of the prospective resident (minimum required payload). In this example, The lead Frank Public will get created with a linked primary contact for John Public.
Key Value
SNIPPETID 99
APIKEY 12345-ABC-DEF-67890
inquiringFor lovedOne
FIRST_NAME John
LAST_NAME Public
EMAIL john@email.com
PHONE 8658675309
REASON_FOR_INQUIRY Looking for more help during the day
SOURCE_NAME Postman
LOVED_ONE_FIRST_NAME Frank
LOVED_ONE_LAST_NAME Public

 

ECP Integration partners

Let's team up! 
Integrate with ECP.

Are you ready to connect your solution with the easiest-to-use and most modern software in senior living? At ECP, we help your product shine while serving thousands of communities nationwide.