The Roompact User Synchronization API allows for the updating of Roompact resident account information by third parties. The API accepts batches of resident data in JSON format and updates the corresponding users in the Roompact system. Roompact will provide each third party that interfaces with the API a client key that will be passed to the API with each request.
All resident data sent to the Roompact API should be sent via the following Method/URL:
POST https://roompact.com/api/users
The Roompact server will respond in JSON format to any request submitted to this URL, even if the data sent with the request is not in a valid format or if the key is invalid. Each response object will contain a “status” field which will contain either SUCCESS or ERROR, and will include a “message” field giving more detail.
{
"status": "SUCCESS",
"message": "Request received"
}
{
"status": "ERROR",
"message": "Could not read your API key - Perhaps your JSON string is incorrectly formatted?"
}
The resident import interface accepts the following fields for each user. Basic fields such as user_first
, user_last
, and user_email
are required during initial user creation and should be included in most subsequent requests. The user_uid
field is also required if the school using Single Sign-On (CAS or Shibboleth). Fields that are not included with a request will be neither modified nor deleted. All field labels are case sensitive, and must be supplied exactly as indicated in the FIELD column below.
As defined in RFC 2119.
FIELD | REQUIREMENT LEVEL | DESCRIPTION |
---|---|---|
user_email |
REQUIRED | The email address of the user. Acts as a unique identifier for users at institutions that do not provide a unique user identifier (user_uid field). This field is used as part of the user’s login credentials unless the institution is using a Single Sign-On integration with Roompact. This field MUST be included for each user with all requests. |
user_uid |
RECOMMENDED | An explicit unique identifier for a user. This field MUST contain the user’s Single Sign-On identifier if the institution has established CAS or Shibboleth login integration with Roompact. If a user’s email is subject to change at any point, this field is REQUIRED in order to track the user. Once set, this field MUST NOT be changed and will always be treated as a reference to the same user. |
user_first |
RECOMMENDED | The user’s first name. Any middle names should be included with this field (e.g. if the user’s name is “George Walker Bush” the user_first field should be “George Walker”). This field is REQUIRED during initial user creation. |
user_preferred_first |
OPTIONAL | The user’s preferred first name. If set, this field will be used instead of the user_first field for the user’s first name, and the user_first field will be ignored. If technical limitations do not allow a separate field to be used for preferred names, the user_first field can instead be populated with the preferred name of the user. |
user_last |
RECOMMENDED | The user’s last name. This field MUST be included during initial user creation. |
user_phone |
RECOMMENDED | The user’s phone number. All non-numerical characters will be stripped from the input data before saving (e.g. “(234) 567-8900” will be saved as “2345678900”). Providing this field is recommended because text messages are used as a primary method of communication between staff and residents in many features in Roompact. Not providing this field will result in email getting used as a fallback communication method. |
user_pronouns |
OPTIONAL | The user’s pronouns. This field is not case sensitive and it will be displayed on the user’s profile page as provided. |
user_student_id |
OPTIONAL | The user’s student ID number. This field will be used exclusively in the client side component of the Roompact software, and not as a unique identifier in the system. No format is expected and it will be displayed on the user’s profile page as provided. |
user_address |
OPTIONAL | The user’s campus address. Will be displayed on their profile page or accessible in some other form through the client side component of the Roompact software. |
user_birthdate |
OPTIONAL | The date of birth of the user. The date should be sent as a string adhering to the following YYYY-MM-DD format (Example: 1995-06-25) |
user_age |
OPTIONAL | The age of the user. The age should be sent as a string (Example: 19). If an user_age value is provided, the user_birthdate will be hidden on staff and resident views. |
user_image_data |
OPTIONAL | This field should contain a base64 encoded BLOB of user image data. Note: that the maximum size of a POST request accepted by the Roompact webservers is 100MB. When updating large numbers of users, if the total size of all of the images exceeds this limit, the update should be split into multiple smaller requests. |
user_image_url |
OPTIONAL | This field should contain a url to the user’s image. Note that if the user_image_url field is included in a request, the user_image_data field will be ignored if both are included. Sending requests with both fields should be avoided. Images that are not served over SSL will automatically be downloaded and rehosted by Roompact. |
user_start_date |
RECOMMENDED | The start date of the user’s room assignment as indicated by the building_name , floor_name , suite_name , and room_name fields (described below). The date should be sent as a string in YYYY-MM-DD format (Example: 2020-04-20). This field is REQUIRED if the user_end_date field is provided, otherwise both fields will be ignored. The date supplied in this field must precede the date in the user_end_date field. If a user has a different room assignment in the system with an overlapping date range, that assignment will be shortened to accommodate the new assignment. If a user has a room assignment in the system for the same room that has ended within 30 days of the supplied start date, the existing room assignment will be extended. |
user_end_date |
RECOMMENDED | The end date of the user’s room assignment as indicated by the building_name , floor_name , suite_name , and room_name fields. This field is REQUIRED if the user_start_date field is provided, otherwise both fields will be ignored. See the description for user_start_date for data format and behavior details. |
override_user_deactivate |
OPTIONAL | This field can be used explicitly deactivate a user, ending the user’s current assignment as well as deleting all existing future assignments. For deactivation to happen field should be set to the string “TRUE”. When this deactivation occurs, all other field updates for this user to be ignored. |
building_name |
RECOMMENDED | This field should contain the string name of the building/hall that the user should be placed in for a room assignment. This field is REQUIRED during room assignment creation or change, even if the user is not being moved between buildings. Examples: “Lincoln Hall”, “Riverview Apartments” |
floor_name |
RECOMMENDED | This field should contain the string name of the floor that the user should be placed in for a room assignment. This field is REQUIRED during room assignment creation or change, even if the user is not being moved across floors. Examples: “3rd Floor”, “3”, “Wing 3A” |
suite_name |
OPTIONAL | This field should contain the string name of the suite that the user should be placed in for a room assignment. (Note: This is an optional layer in the campus structure hierarchy that Roompact can represent). Example: “303-304” |
room_name |
RECOMMENDED | This field should contain the string name of the room that the user should be placed in for a room assignment. This field is REQUIRED during room assignment creation or change. Examples: “303”, “303A”, “402” |
Note: Room assignment fields such as floor_name
, and building_name
act both as location keys for roster updates as well as user-facing labels within the application. If user-facing labels that differ from location keys are desired, they can be configured by a Roompact technical staff member.
The format that each request should adhere to is as follows:
{
"key": "Elxob3Oiof1enbVNOxELygMMNafYI24nnCMyFAR4PTjc4f0TMFElWq7JBmHkpMHM",
"version": "2.0",
"user_data": [
{
// The data of the first user to be updated
"user_email": "dmarks@roompact.com",
"user_first": "Danny",
"user_last": "Marks",
"user_phone": "1234567890",
"user_pronouns": "they/them",
"user_student_id": "1111222200",
"user_address": "123 S. Florida Ave, Suite 303, Chicago, IL 60606",
"user_start_date": "2020-08-15",
"user_end_date": "2021-05-01",
"building_name": "Lincoln Hall",
"floor_name": "3rd Floor",
"room_name": "303"
},
{
// The data of the second user to be updated
"user_email": "jstevens@roompact.com",
"user_first": "Jack",
"user_last": "Stevens",
"user_phone": "1234562340",
"user_pronouns": "he/him/his",
"user_student_id": "1113444401",
"user_address": "500 N. Virginia Ave, Suite 40, Chicago, IL 60606",
"user_start_date": "2020-08-15",
"user_end_date": "2021-05-01",
"building_name": "Jackson Hall",
"floor_name": "1st Floor",
"room_name": "105"
}
// Additional users can be included here
]
}
There are a few key aspects of the format that should be recognized:
key
field must be included at the outermost level of the request, and should contain the API key that Roompact provides.version
field must be set to a value of 2.0
.user_data
field is an array that contains the bulk of the data of each request.user_email
) must be included for each user.The Roompact API is robust in that it can accept different types of resident data in the form of varying fields and can also accept varying numbers of residents per request. However, there are a few limitations. Keep in mind the following:
user_image_data
field (base64-encoded image BLOBs) have the potential to reach this size limit. In the case of such an update, multiple significantly smaller requests should be sent in place of each large request.The recommended use for this API is to create a script that sends large batches of users en masse at a particular time of day. In this configuration a script will retrieve all resident data from the database or other software system, create data batch(es) that adhere to the API format and max request sizes, and send the request(s) at once. Under this scheme, optional fields could be included daily, even when unchanged. Applying this nightly technique when sending large BLOBs of image data is not recommended, and it is instead preferable to send image data fields only when an image is changed and must be updated, or once every few weeks.
In the event of a gap in updates (e.g. for a break between the Fall and Spring terms), the system will seamlessly resume processing data. All user accounts will be updated as defined in the following section.
The Roompact system will update user accounts with the data received from a client while in the following manner:
user_email
field will only be updated if the user_uid
field is also provided. The user_uid
field can never be changed for a given user.We will provide a few more examples of different requests that are both correctly and incorrectly formatted in the next few sections.
{
"key": "Elxob3Oiof1enbVNOxELygMMNafYI24nnCMyFAR4PTjc4f0TMFElWq7JBmHkpMHM",
"version": "2.0",
"user_data": [
{
"user_email": "dmarks@roompact.com",
"user_uid": "dmarks91",
"user_first": "Danny",
"user_last": "Marks",
"user_image_data": "dGhlcmVpc25vc3Bvbndmb3Fpbm……9pcW5md29pbnF3ZmtvcW53Zms="
},
{
"user_email": "jstevens@roompact.com",
"user_uid": "jstev231",
"user_first": "Jack",
"user_last": "Stevens",
"user_image_data": "ZmtxbGp3ZmxrcWp3ZmxranF3bC……xtd3Fmbm9mYWxrandma3F3cWY="
}
]
}
RESULT: SUCCESS
Explanation: This type of request can be used to update user images. The user_email
and user_uid
fields are included for the purposes of identifying which user each image string of image data corresponds to. Note that the user_image_data
field contains a base64 encoded string, and in this example we have shortened to contents of this field significantly.
{
"key": "Elxob3Oiof1enbVNOxELygMMNafYI24nnCMyFAR4PTjc4f0TMFElWq7JBmHkpMHM",
"version": "2.0",
"user_data": [
{
"user_email": "dmarks@roompact.com",
"user_first": "Danny",
"user_last": "Marks",
"floor_name": "3rd Floor",
"suite_name": "303",
"room_name": "C"
},
{
"user_email": "jstevens@roompact.com",
"user_first": "Jack",
"user_last": "Stevens",
"floor_name": "1st Floor",
"suite_name": "401",
"room_name": "A"
}
]
}
RESULT: ERROR
Explanation: This request is invalid because the building_name
field is missing while other room assignment fields are included. The building_name
field must always be included for each user during a room assignment update. Including this field would make this a valid request that would result in each user being moved to the room indicated.
{
"key": "Elxob3Oiof1enbVNOxELygMMNafYI24nnCMyFAR4PTjc4f0TMFElWq7JBmHkpMHM",
"version": "2.0",
"user_data": [
{
"user_email": "dmarks@roompact.com",
"user_uid": "dmarks91",
"user_first": "Danny",
"user_last": "Marks",
"user_phone": "",
"user_pronouns": "",
"user_student_id": "",
"user_address": ""
},
{
"user_email": "jstevens@roompact.com",
"user_uid": "jstev231",
"user_first": "Jack",
"user_last": "Stevens",
"user_phone": "",
"user_pronouns": "",
"user_student_id": "",
"user_address": ""
}
]
}
RESULT: SUCCESS
Explanation: Although this request includes empty strings for multiple fields for each user, this request is valid. The result of this request would be to update the corresponding users to erase all of the data from the included fields.
{
"key": "Elxob3Oiof1enbVNOxELygMMNafYI24nnCMyFAR4PTjc4f0TMFElWq7JBmHkpMHM",
"version": "2.0",
"user_data": [
{
"user_email": "dmarks2@roompact.com",
"user_uid": "dmarks91",
"user_first": "Danny",
"user_last": "Marks"
},
{
"user_email": "jstevens2@roompact.com",
"user_uid": "jstev231",
"user_first": "Jack",
"user_last": "Stevens"
}
]
}
RESULT: SUCCESS
Explanation: It may seem that this request is doing nothing, but the Roompact system will look up each user based off of the user_uid
field and change each user’s email address, first name, and last name to the contents of the user_email
, user_first
, and user_last
fields, respectively. This is the type of request that a third party would send in order to change existing users’ email addresses or names (along with any other fields that need updating for the user).