Scheduled access levels allow temporary access assignment to cardholders. Access levels are automatically activated and removed based on configured date ranges by the Scheduled Access Level Service.
| Feature | Description |
|---|---|
| Activation | Access level automatically assigned when ActiveOn date is reached |
| Expiration | Access level automatically removed when ExpiresOn date is reached |
| Service-Managed | The Scheduled Access Level Service handles all assignments |
| Object Links | Uses ScheduledAccessLevel relation with metadata |
┌─────────────────────────────────────────────────────────────────┐
│ Scheduled Access Level │
├─────────────────────────────────────────────────────────────────┤
│ 1. User assigns ScheduledAccessLevel to Person │
│ 2. Service checks ActiveOn/ExpiresOn dates on schedule │
│ 3. When ActiveOn <= now: Service adds AccessLevel link │
│ 4. When ExpiresOn <= now: Service removes both links │
└─────────────────────────────────────────────────────────────────┘
| Field | Description |
|---|---|
accessLevel |
The access level object to schedule |
ActiveOn |
When the access level should be activated |
ExpiresOn |
When the access level should expire |
// Schedule an access level for a visitor
DateTime? activeOn = new DateTime(2025, 08, 20); // Starts Aug 20, 2025
DateTime expiresOn = new DateTime(2025, 08, 27); // Expires Aug 27, 2025
await client.AssignConnectedObjectAsync(
person,
accessLevel,
"ScheduledAccessLevel",
false,
new { ActiveOn = activeOn, ExpiresOn = expiresOn }
);
{
"ObjectLinks": [
{
"LinkedObjectId": "12345",
"CommonName": "Visitor Access",
"Relation": "ScheduledAccessLevel",
"Metadata": {
"ActiveOn": "2025-08-20 12:00:00 AM",
"ExpiresOn": "2025-08-27 12:00:00 AM"
}
}
]
}
{
"ObjectLinks": [
{
"LinkedObjectId": "12345",
"CommonName": "Visitor Access",
"Relation": "ScheduledAccessLevel",
"Metadata": {
"ActiveOn": null,
"ExpiresOn": "2025-08-27 12:00:00 AM"
}
},
{
"LinkedObjectId": "12345",
"CommonName": "Visitor Access",
"Relation": "AccessLevel"
}
]
}
Note: After activation,
ActiveOnis set tonullto prevent duplicate processing.
The service activates an access level when:
ActiveOn <= nowExpiresOn >= nowThe service removes access when:
ExpiresOn <= nowScheduledAccessLevel and AccessLevel links are removedThe service only queries for scheduled access levels where:
ActiveOn <= now (needs activation)ExpiresOn <= now (needs removal)| Scenario | Behavior |
|---|---|
Missing ExpiresOn |
Object link is deleted entirely |
| Invalid metadata | Object link is deleted entirely |
| Already assigned | No duplicate assignment occurs |
Future ActiveOn |
No action until date is reached |
| Scenario | ActiveOn | ExpiresOn |
|---|---|---|
| Visitor access | Arrival date | Departure date |
| Contractor | Project start | Project end |
| Temporary employee | Start date | Contract end |
| Event access | Event day 8 AM | Event day 6 PM |
Example in C#
// Returns: nothing
await client.AddScheduledAccessLevelBatchForPersonAsync(PersonInfo person, ObjectLinkItem scheduledAccessLevelLinkItems);
Overview of AddScheduledAccessLevelBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.AddScheduledAccessLevelBatchForPersonAsync(String personHref, ObjectLinkItem scheduledAccessLevelLinkItems, String batchLink);
Overview of AddScheduledAccessLevelBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.AddScheduledAccessLevelGroupBatchForPersonAsync(PersonInfo person, ObjectLinkItem scheduledAccessLevelGroupLinkItems);
Overview of AddScheduledAccessLevelGroupBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.AddScheduledAccessLevelGroupBatchForPersonAsync(String personHref, ObjectLinkItem scheduledAccessLevelGroupLinkItems, String batchLink);
Overview of AddScheduledAccessLevelGroupBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.RemoveScheduledAccessLevelBatchForPersonAsync(PersonInfo person, ObjectLinkItem scheduledAccessLevelLinkItems);
Overview of RemoveScheduledAccessLevelBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.RemoveScheduledAccessLevelBatchForPersonAsync(String personHref, ObjectLinkItem scheduledAccessLevelLinkItems, String batchLink);
Overview of RemoveScheduledAccessLevelBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.RemoveScheduledAccessLevelGroupBatchForPersonAsync(PersonInfo person, ObjectLinkItem scheduledAccessLevelGroupLinkItems);
Overview of RemoveScheduledAccessLevelGroupBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.RemoveScheduledAccessLevelGroupBatchForPersonAsync(String personHref, ObjectLinkItem scheduledAccessLevelGroupLinkItems, String batchLink);
Overview of RemoveScheduledAccessLevelGroupBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.SetScheduledAccessLevelBatchForPersonAsync(PersonInfo person, ObjectLinkItem scheduledAccessLevelLinkItems);
Overview of SetScheduledAccessLevelBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.SetScheduledAccessLevelBatchForPersonAsync(String personHref, ObjectLinkItem scheduledAccessLevelLinkItems, String batchLink);
Overview of SetScheduledAccessLevelBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.SetScheduledAccessLevelGroupBatchForPersonAsync(PersonInfo person, ObjectLinkItem scheduledAccessLevelGroupLinkItems);
Overview of SetScheduledAccessLevelGroupBatchForPersonAsync goes here.
Example in C#
// Returns: nothing
await client.SetScheduledAccessLevelGroupBatchForPersonAsync(String personHref, ObjectLinkItem scheduledAccessLevelGroupLinkItems, String batchLink);
Overview of SetScheduledAccessLevelGroupBatchForPersonAsync goes here.