Understanding how the acre Access Control application is organized will help you develop custom applications and integrations. This guide explains each functional module and how they map to API capabilities.
| Module | Primary Purpose | Key API Objects |
|---|---|---|
| Access Control | Grant/deny access decisions | Person, CardAssignment, AccessLevel, Schedule |
| Access Configuration | Configure access rules | Schedule, Holiday, AccessLevel, Area |
| General Configuration | System-wide settings | EventType, App, Generic |
| Hardware Provisioning | Physical device management | Controller, Downstream, Reader, Input, Output |
| Video Management | Camera and recording control | Camera |
| Visitor Management | Guest access tracking | Visitor, Building |
| System Administration | User and security management | User, OperationRight, Instance |
Access control is the core function of the acre Access Control system. This module provides security tools that determine which personnel can access specific areas of a facility.
| Capability | Description | Related API |
|---|---|---|
| Access Decisions | Grant or deny access based on credentials and rules | CardAssignment, AccessLevel |
| Scheduling | Time-based access rules and holiday exceptions | Schedule, Holiday |
| Area Control | Define and manage secure areas | Area, AreaAssignment |
| Mustering | Emergency roll call and personnel location | Person, CardAssignment.LastUsed |
// Get a person by their key using GetByHrefAsync with constructed href
var personHref = $"/api/f/{instanceKey}/people/{personKey}";
var person = await client.GetByHrefAsync<PersonInfo>(personHref);
// Or get connected access levels directly
var accessLevels = await client.GetConnectedObjectsAsync(person, "AccessLevel");
foreach (var accessLevel in accessLevels.OfType<AccessLevelInfo>())
{
Console.WriteLine($"Access Level: {accessLevel.CommonName}");
}
Access configuration allows users to view and modify all features used to configure physical access to facilities.
| Element | Description | Use Case |
|---|---|---|
| Schedules | Define time windows for access | “Business Hours: Mon-Fri 8am-6pm” |
| Holidays | Override schedules on specific dates | “Christmas Day: No access” |
| Access Levels | Group readers with schedules | “Engineering: Lab + Office during business hours” |
| Elevator Access | Floor-level access control | “Executive floor access for managers only” |
| Area Assignments | Intrusion zone configuration, anti-passback setup | “Arm/disarm areas by schedule” |
var schedule = new ScheduleInfo
{
CommonName = "Business Hours",
ScheduleDurations = new[]
{
new ScheduleDurationItem
{
Days = DaysOfWeek.Monday | DaysOfWeek.Tuesday |
DaysOfWeek.Wednesday | DaysOfWeek.Thursday |
DaysOfWeek.Friday,
StartTime = new TimeSpan(8, 0, 0),
EndTime = new TimeSpan(18, 0, 0)
}
}
};
var created = await client.AddScheduleAsync(instance, schedule);
General configuration provides access to system-wide settings including events, design customization, and directory services.
| Area | Description | API Objects |
|---|---|---|
| Event Configuration | Define event types and behaviors | EventType, AlarmDefinition |
| Administrative Features | System-wide settings | User, OperationRight, Group |
| LDAP Agents | Directory service synchronization | LdapAgent, LdapQuery |
| Instance Settings | Per-instance configuration | Instance, InstanceSettings |
Hardware provisioning is where physical devices are configured, monitored, and maintained.
Controller (ISC)
├── Downstream (DRI, SRI, ICM, OCM)
│ ├── Reader (Entry, Exit)
│ ├── Input (Door Contact, REX)
│ └── Output (Lock, Alarm)
└── Direct Peripherals
├── Reader
├── Input
└── Output
| Device Type | Examples | API Object |
|---|---|---|
| Controllers | Mercury EP1502, EP2500, LP1502, etc | Controller |
| Downstreams | MR50, MR52, MR16IN, MR16OUT, etc | Downstream |
| Readers | HID, Schlage, OSDP readers, etc | Reader |
| Inputs | Door contacts, motion sensors, etc | Input |
| Outputs | Locks, relays, LED indicators, etc | Output |
| Gateways | Engage wireless gateways | Gateway |
| Panels | Intrusion panels (acre Intrusion, Bosch) | AcreIntrusionPanel, Panel |
For Mercury controllers, readers are added as peripherals to downstream devices:
var reader = new MercuryReaderInfo
{
CommonName = "Main Lobby - Entry Reader",
Address = 1,
MercuryReaderType = MercuryReaderTypes.Wiegand,
MercuryReaderAccessMethod = MercuryReaderAccessMethods.Card
};
// Add the reader as a peripheral to the downstream (links automatically)
var createdReader = await client.AddPeripheralToDownStreamAsync(downstream, reader);
For ASC controllers, readers are added to folders using the Readers2 endpoint:
var reader = new AscReaderInfo
{
CommonName = "Main Entrance Reader"
};
// Add the reader to the folder
var createdReader = await client.AddReaderAsync(folder, reader);
The video management module integrates with digital video systems for monitoring and archiving.
| Feature | Description | API Support |
|---|---|---|
| Camera Integration | Connect cameras from various DVR/NVR systems | Camera |
| Live Viewing | Real-time video streaming | Via Video Player Plugin |
| Playback | Review recorded footage | Time-based queries |
| Event Linking | Associate video clips with access events | EventMessageData |
Visitor management enables organizations to enroll, track, and manage guest access.
// Create a person for the visitor
var visitor = new PersonInfo
{
CommonName = "John Smith - Visitor",
GivenName = "John",
Surname = "Smith"
};
// Add metadata for visitor tracking
visitor.Metadata = new[]
{
new MetadataItem
{
Application = "VisitorManagement",
Values = new
{
Company = "Acme Corp",
HostPersonKey = hostPerson.Key,
ScheduledArrival = DateTime.Today.AddHours(9),
ScheduledDeparture = DateTime.Today.AddHours(17)
}
}
};
var created = await client.AddPersonAsync(instance, visitor);
// Assign temporary access with expiration
var tempCard = new CardAssignmentInfo
{
EncodedNumber = 12345,
FacilityCode = 100,
ExpiresOn = DateTime.Today.AddDays(1)
};
visitor.CardAssignments = new[] { tempCard };
await client.UpdatePersonAsync(visitor);
System administration provides tools for managing users, permissions, and system configuration.
| Function | Description | Who Can Perform |
|---|---|---|
| User Management | Create, modify, disable users | System Administrators |
| Permission Assignment | Grant/revoke operator rights | System Administrators |
| Password Policies | Configure password requirements | System Administrators |
| Audit Logging | Review system activity | System Administrators |
| Instance Management | Create/configure instances | System Administrators |
// Create a person first
var person = new PersonInfo
{
CommonName = "Jane Operator",
GivenName = "Jane",
Surname = "Operator"
};
var createdPerson = await client.AddPersonAsync(instance, person);
// Create a user account linked to the person
var user = new UserInfo
{
Username = "joperator",
MustChangePassword = true,
IsDisabled = false
};
// Add the user first
var createdUser = await client.AddUserAsync(instance, user);
// Link the user to the person using AssignConnectedObjectAsync
await client.AssignConnectedObjectAsync(createdUser, createdPerson, "Person", false);
// Assign limited permissions using AddOperationRightsAsync
var opRight = new OperationRightInfo
{
CommonName = "People Read/Update Rights",
System = "Person",
Actions = new[] { "Read", "Update" },
GrantType = GrantTypes.Grant,
Enabled = true
};
await client.AddOperationRightsAsync(instance, "YourAppCode", user.Key, opRight);