Defining CredentialsAndSchedules data objects
Credentials Objects
Credential objects are data elements that nest into the “credentials” array of the CredentialsAndSchedulesV1 data file. These objects define individual credentials that are used to authenticate users at the device.
Example Credential Object Schema
{
"id": "UniquePacSystemCredentialIdentifier1",
"credential": "0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1",
"active": "ACTIVE",
"transportTechnology": "PROX",
"function": "NORMAL",
"activation": "2023-08-09T09:58:33.099Z",
"expiration": "2023-09-09T09:58:33.099Z",
"primarySchedules": [
{ "id": "UniquePacSystemScheduleIdentifier1" },
{ "id": "UniquePacSystemScheduleIdentifier2" }
]
}Credential Fields
Field Name | Description | Data Type | Required | Validation Info |
id | PAC System unique identifier allowing cross-system correlation | string! | true | Can be any unique, non-empty string |
credential | Primary credential hexadecimal code recognized by device | string! | true | Must be exactly 32 hexadecimal char. If credential hex code has fewer than 32 char, pad the ending digits with “F” to denote those bits do not apply. |
active | Represents the active / inactive status of a credential | enum string! | true | “ACTIVE” or “INACTIVE” |
transportTechnology | Allows user to add security validation to only allow presented credential if it is the correct technology. | enum string! | true | See transportTechnologyEnum table for values. |
function | Functionality that credential should do at device | enum string! | true | See functionEnum table for values. |
activation | UTC dateTime that credential should start being active | string! | true | "YYYY-MM-DDThh:mm:ss.sssZ" format dateTime value |
expiration | UTC dateTime that credential should expire | string! | true | "YYYY-MM-DDThh:mm:ss.sssZ" format dateTime value |
primarySchedules | Array of schedule objects that dictate when the credential is to be allowed through device. | objectArray! | true | Array of objects like: |
transportTechnologyEnum
Enum String | Description |
“ANY” | Allows credential to be accepted by device no matter what technology it uses |
“PROX” | Allows credential to be accepted by device only if it uses 125Khz Proximity technology |
“UID” | Allows credential to be accepted by device only when credential is a smart credentials' unencrypted UID or serial number. |
“MIFARE_CLASSIC” | Allows credential to be accepted by device only if it uses Mifare Classic technology |
“MIFARE_DESFIRE” | Allows credential to be accepted by device only if it uses Mifare Desfire technology |
“APPLE_NFC” | Allows credential to be accepted by device only if it uses Apple NFC technology |
“ANDROID_MIFARE2GO” | Allows credential to be accepted by device only if it uses Android Mifare-2-Go technology |
“ALLEGION_BLE” | Allows credential to be accepted by device only if it uses Allegion Bluetooth technology |
functionEnum
Enum String | Description |
“NORMAL” | Credential momentarily unlocks a secured device. Device relocks automatically based on the autoRelockDelay settings. Does not function when device is in Frozen mode. |
“NORMAL_EXTENDED” | Credential momentarily unlocks a secured device. Device relocks automatically based on the ExtendedAutoRelockDelay settings. Does not function when device is in Frozen mode. |
“ONE_TIME_USE” | Same function as a NORMAL credential, but only valid for a single use. |
“ONE_TIME_EXTENDED” | Same function as a NORMAL_EXTENDED credential, but only valid for a single use. |
“PASS_THRU” | Credential momentarily unlocks a secured device. Device relocks automatically based on the autoRelockDelay settings. Allows passage even when device is in Frozen mode. |
“PASS_THRU_EXTENDED” | Credential momentarily unlocks a secured device. Device relocks automatically based on the ExtendedAutoRelockDelay settings. Allows passage even when device is in Frozen mode. |
“TOGGLE” | Toggles device between secured and maintained passage modes. |
“FREEZE” | Toggles device between normal and frozen modes. Device will remain in current state (secured, passage, etc) and only change mode between frozen or normal. |
“LOCKDOWN” | Puts device is frozen secured state no matter what state it was in before. |
“BLOCKED” | Credential is blocked and is no longer valid. |
Schedules Objects
Schedule objects are data elements that nest into the “schedules” array of the CredentialsAndSchedulesV1 data file. These objects define individual schedules for credential behaviors (e.g. times when credential is authorized). There are 3 types of schedules that may be used, each having their own shape.
Always Active Schedules
An Always Active schedule is used when a credential or device behavior has a start dateTime, but then continues perpetually thereafter with no scheduled end. Note: Due to restrictions on many devices this will actually result in the scheduled behavior duration of 23h 59m 59s per day for each day after start dateTime, thus leaving 1s per day when the scheduled behavior does not apply.
Example Always Active Schedule Object Schema
{
"id": "UniquePacSystemScheduleIdentifier1",
"scheduleType": "ALWAYS_ACTIVE",
"dtStart": "2024-04-01T08:00:00"
}Always Active Schedule Fields
Field Name | Description | Data Type | Required | Validation Info |
id | PAC System unique identifier allowing cross-system correlation | string! | true | Can be any unique, non-empty string |
scheduleType | Defines type of schedule which changes the validation requirements for additional schedule data fields | enum string! | true | "ALWAYS_ACTIVE" |
dtStart | Device local DateTime when schedule should go into effect. | string! | true | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
Temporary Schedules
A temporary is used when a credential or device behavior has a start dateTime, but then continues perpetually thereafter until a scheduled end dateTime. Note: Due to restrictions on many devices this will actually result in the scheduled behavior duration of 23h 59m 59s per day for each day after start dateTime, thus leaving 1s per day when the scheduled behavior does not apply up until the schedule expires.
Example Temporary Schedule Object Schema
{
"id": "UniquePacSystemScheduleIdentifier1",
"scheduleType": "TEMPORARY",
"dtStart": "2024-04-01T08:00:00",
"temporaryRule": {
"until": "2024-04-30T17:00:00"
}
}Temporary Schedule Fields
Field Name | Description | Data Type | Required | Validation Info |
id | PAC System unique identifier allowing cross-system correlation | string! | true | Can be any unique, non-empty string |
scheduleType | Defines type of schedule which changes the validation requirements for additional schedule data fields | enum string! | true | "TEMPORARY" |
dtStart | Device local DateTime when schedule should go into effect. | string! | true | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
temporaryRule | Object field nesting additional fields required for a temporary schedule | object! | true | |
temporary.until | Device local DateTime when schedule expires. | string! | true | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
Recurring Schedules
A recurring schedule is used when a credential or device behavior needs a complex set of rules to apply it to specific time ranges and/or frequencies. Each recurring schedule starts each occurence at the same time (based on the specified start time) and ends the occurence after a specified duration. There are 4 different types of recurring schedule that allow a user to control the frequency and pattern of each occurence. Note: Recurring Schedules do not support exception rules within the schedule definition.
Daily Recurring Schedules
A daily recurring schedule applies the occurence continuously every day until the schedule expires (if an until dateTime was given), but it differs from an Always Active or Temporary schedule in that the duration can't have a full day duration. This sort of schedule might be used if the device behavior was to be applied during consistent business hours every day of the week (e.g. 6am to 10pm, 7 days a week)
Example Daily Recurring Schedule Object Schema
{
"id": "UniquePacSystemScheduleIdentifier1",
"scheduleType": "RECURRING",
"dtStart": "2024-04-01T08:00:00",
"recurrenceRule": {
"duration": 32400,
"rrule": {
"frequency": "DAILY",
"until": "2030-01-01T17:00:00"
}
}
}Daily Recurring Schedule Fields
Field Name | Description | Data Type | Required | Validation Info |
id | PAC System unique identifier allowing cross-system correlation | string! | true | Can be any unique, non-empty string |
scheduleType | Defines type of schedule which changes the validation requirements for additional schedule data fields | enum string! | true | "RECURRING" |
dtStart | Device local DateTime when schedule should go into effect. | string! | true | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
recurrenceRule | Object field nesting additional fields required for a recurring schedule | object! | true | |
recurrenceRule.duration | The duration in seconds that each occurrence should be active from the time of day matching that given in “dtStart”. | int! | true | 1 <= duration < 86399 |
recurrenceRule.rrule | Object field nesting r-rule fields required for a recurring schedule | object | true | |
recurrenceRule.rrule.frequency | The frequency by which the r-rule pattern repeats | enum string! | true | "DAILY" |
recurrenceRule.rrule.until | Device local DateTime when schedule expires. | string! | false | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
Weekly Recurring Schedules
A weekly recurring schedule applies the occurence on the specified days of week for each week until the schedule expires (if an until dateTime was given). This sort of schedule might be used if the device behavior was to be applied during consistent business hours but only on specific days of the week (e.g. 8am to 5pm, Monday through Friday).
Example Weekly Recurring Schedule Object Schema
{
"id": "UniquePacSystemScheduleIdentifier1",
"scheduleType": "RECURRING",
"dtStart": "2024-04-01T08:00:00",
"recurrenceRule": {
"duration": 86399,
"rrule": {
"frequency": "WEEKLY",
"byWeekDay": [
{ "day": "MO" },
{ "day": "TU" },
{ "day": "WE" },
{ "day": "TH" },
{ "day": "FR" }
],
"until": "2030-01-01T17:00:00"
}
}
}Weekly Recurring Schedule Fields
Field Name | Description | Data Type | Required | Validation Info |
id | PAC System unique identifier allowing cross-system correlation | string! | true | Can be any unique, non-empty string |
scheduleType | Defines type of schedule which changes the validation requirements for additional schedule data fields | enum string! | true | "RECURRING" |
dtStart | Device local DateTime when schedule should go into effect. | string! | true | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
recurrenceRule | Object field nesting additional fields required for a recurring schedule | object! | true | |
recurrenceRule.duration | The duration in seconds that each occurrence should be active from the time of day matching that given in “dtStart”. | int! | true | 1 <= duration <= 86399 |
recurrenceRule.rrule | Object field nesting r-rule fields required for a recurring schedule | object | true | |
recurrenceRule.rrule.frequency | The frequency by which the r-rule pattern repeats | enum string! | true | "WEEKLY" |
recurrenceRule.rrule.byWeekDay | Array of objects that define which days of the week the schedule should be active. | objectArray! | true | |
recurrenceRule.rrule.byWeekDay.day | The day of week that a schedule occurrence should be active. | enum string! | true | “SU”, “MO”, “TU”, “WE”, “TH”, “FR”, “SA” |
recurrenceRule.rrule.until | Device local DateTime when schedule expires. | string! | false | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
Monthly Recurring Schedules
A monthly recurring schedule applies the occurence on the specified monthDay(s) or specified week of the month for every month until the schedule expires (if an until dateTime was given). This sort of schedule might be used if the device was to be applied consistently on particular days of the month (e.g. 1st and 15th of each month), a specific week of the month (e.g. the 2nd week of each month), and/or specific weekday occurences of the month (e.g. the last occurring Friday of each month). Note: Monthly schedules can recur by weekDay patterns or by monthDay patterns, but they can't have both, see example schema shapes for details.
Example Monthly Recurring Schedules
{
"id": "UniquePacSystemScheduleIdentifier1",
"scheduleType": "RECURRING",
"dtStart": "2024-04-01T08:00:00",
"recurrenceRule": {
"duration": 86399,
"rrule": {
"frequency": "MONTHLY",
"byWeekDay": [
{ "day": "FR", "nth": -1 }
],
"until": "2030-01-01T17:00:00"
}
}
},
{
"id": "UniquePacSystemScheduleIdentifier2",
"scheduleType": "RECURRING",
"dtStart": "2024-04-01T08:00:00",
"recurrenceRule": {
"duration": 86399,
"rrule": {
"frequency": "MONTHLY",
"byMonthDay": [
{ "day": 1 }
],
"until": "2030-01-01T17:00:00"
}
}
}Monthly Recurring Schedule Fields
Field Name | Description | Data Type | Required | Validation Info |
id | PAC System unique identifier allowing cross-system correlation | string! | true | Can be any unique, non-empty string |
scheduleType | Defines type of schedule which changes the validation requirements for additional schedule data fields | enum string! | true | "RECURRING" |
dtStart | Device local DateTime when schedule should go into effect. | string! | true | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
recurrenceRule | Object field nesting additional fields required for a recurring schedule | object! | true | |
recurrenceRule.duration | The duration in seconds that each occurrence should be active from the time of day matching that given in “dtStart”. | int! | true | 1 <= duration <= 86399 |
recurrenceRule.rrule | Object field nesting r-rule fields required for a recurring schedule | objectArray! | true | |
recurrenceRule.rrule.frequency | The frequency by which the r-rule pattern repeats | enum string! | true | "MONTHLY" |
recurrenceRule.rrule.byWeekDay | Array of objects that define which days of the week the schedule should be active. | objectArray! | true | |
recurrenceRule.rrule.byWeekDay.day | The day of week that a schedule occurrence should be active. | enum string! | true | “SU”, “MO”, “TU”, “WE”, “TH”, “FR”, “SA” |
recurrenceRule.rrule.byWeekDay.nth | Limits recurrence of the particular weekday to only the single instance that occurs within the nth week of the month. | int! | true | Where nth > 0, week count is from start of month (nth = 1 means first week of month), where nth < 0, week count is from end of month (nth = -1 means last week of the month). Note: All nth values must be the same for a single schedule. |
recurrenceRule.rrule.byMonthDay | Array of objects that define which days of the month the schedule should be active. | objectArray! | true | |
recurrenceRule.rrule.byMonthDay.day | Calendar day of the month that the schedule should be active. | int! | true | 1 to 31 |
recurrenceRule.rrule.until | Device local DateTime when schedule expires. | string! | false | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
Yearly Recurring Schedules
A yearly recurring schedule gives the control of a month recurring schedule, but it allows the occurences to occur only in specified months of the year. This sort of schedule might be used to schedule specific occurences that occur less frequently than monthly (e.g. December 25th). Note: Yearly schedules can recur by weekDay patterns or by monthDay patterns, but they can't have both, below details the difference.
Example Yearly Recurring Schedules
{
"id": "UniquePacSystemScheduleIdentifier1",
"scheduleType": "RECURRING",
"dtStart": "2024-04-01T08:00:00",
"recurrenceRule": {
"duration": 86399,
"rrule": {
"frequency": "YEARLY",
"byWeekDay": [
{ "day": "TH", "nth": -1 },
{ "day": "FR", "nth": -1 }
],
"byMonth": [
{ "month": "NOVEMBER" }
],
"until": "2030-01-01T17:00:00"
}
}
},
{
"id": "UniquePacSystemScheduleIdentifier2",
"scheduleType": "RECURRING",
"dtStart": "2024-04-01T08:00:00",
"recurrenceRule": {
"duration": 86399,
"rrule": {
"frequency": "YEARLY",
"byMonthDay": [
{ "day": 24 },
{ "day": 25 }
],
"byMonth": [
{ "month": "DECEMBER" }
],
"until": "2030-01-01T17:00:00"
}
}
}Yearly Recurring Schedule Fields
Field Name | Description | Data Type | Required | Validation Info |
id | PAC System unique identifier allowing cross-system correlation | string! | true | Can be any unique, non-empty string |
scheduleType | Defines type of schedule which changes the validation requirements for additional schedule data fields | enum string! | true | "RECURRING" |
dtStart | Device local DateTime when schedule should go into effect. | string! | true | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
recurrenceRule | Object field nesting additional fields required for a recurring schedule | object | true | |
recurrenceRule.duration | The duration in seconds that each occurrence should be active from the time of day matching that given in “dtStart”. | int! | true | 1 <= duration <= 86399 |
recurrenceRule.rrule | Object field nesting r-rule fields required for a recurring schedule | object | true | |
recurrenceRule.rrule.frequency | The frequency by which the r-rule pattern repeats | enum string! | true | "YEARLY" |
recurrenceRule.rrule.byWeekDay | Array of objects that define which days of the week the schedule should be active. | objectArray! | true | |
recurrenceRule.rrule.byWeekDay.day | The day of week that a schedule occurrence should be active. | enum string! | true | “SU”, “MO”, “TU”, “WE”, “TH”, “FR”, “SA” |
recurrenceRule.rrule.byWeekDay.nth | Limits recurrence of the particular weekday to only the single instance that occurs within the nth week of the month. | int! | true | Where nth > 0, week count is from start of month (nth = 1 means first week of month), where nth < 0, week count is from end of month (nth = -1 means last week of the month). Note: All nth values must be the same for a single schedule. |
recurrenceRule.rrule.byMonthDay | Array of objects that define which days of the month the schedule should be active. | objectArray! | true | |
recurrenceRule.rrule.byMonthDay.day | Calendar day of the month that the schedule should be active. | int! | true | 1 to 31 |
recurrenceRule.rrule.byMonth | Array of objects that define which months the schedule should be active. | objectArray! | true | |
recurrenceRule.rrule.byMonth.month | The name of the month that the schedule should be active | enum string! | true | "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" |
recurrenceRule.rrule.until | Device local DateTime when schedule expires. | string! | false | "YYYY-MM-DDThh:mm:ss.sss" local format dateTime value |
What made this section unhelpful for you?
On this page
- Defining CredentialsAndSchedules data objects