Request History
The Request History page provides a detailed log of API requests processed by GEM, including commands, macros, model changes, and admin-only operations. Each entry records who made the request, the result (granted or denied), and the denial reason if applicable.
Overview
Request History tracks:
- Commands and Macros: Zone commands and macro executions
- Model Changes: Inserts, updates, deletes, and sorts
- Admin-Only Operations: Script execution, backups, encryption keys, SSL, user management, and other sensitive operations
- Denied Requests: All denied API calls with the reason for denial
Open Request History
Date Range Selection
Controls at the top of the page set the time range and grouping:
| Control | Description |
|---|---|
| Start Date | Beginning of the date range |
| End Date | End of the date range |
| Group By | Timeline chart grouping: Hour, Day, or Week |
| Quick Select | Shortcut buttons: 1D, 7D, 30D, 90D |
| Load | Fetches records for the selected range |
| Refresh | Reloads data with current settings |
The page loads the most recent 2,000 records within the selected date range. For high-traffic systems, narrow the date range for complete coverage.
Summary Cards
Four cards display aggregate statistics for the loaded data:
| Card | Description |
|---|---|
| Total Requests | Total number of logged requests |
| Granted | Count of requests that were allowed |
| Denied | Count of denied requests. Click the card to filter the table to denied requests only. |
| Unique Types | Number of distinct request types in the loaded data |
Request Timeline Chart
A stacked bar chart showing request volume over time:
- Blue bars: Granted requests
- Red bars: Denied requests
- X-Axis: Time buckets (based on Group By setting)
- Y-Axis: Request count
Use the Group By selector to change between hourly, daily, or weekly views.
Top Requests
A table below the timeline lists the 10 most frequently executed requests in the loaded data, with columns for name, type badge, and execution count. Useful for quickly spotting the busiest zones, macros, or API endpoints.
Filters
The filter bar above the request table provides six filter dimensions:
| Filter | Description |
|---|---|
| Type | Request type (e.g., command, macro, update_model, restart_gem) |
| Result | granted or denied |
| Reason | Denial reason (e.g., admin_only, role_denied, unauthorized, invalid_session, invalid_token, remote_disallowed) |
| User | Username of the authenticated user |
| Client | Client session ID |
| IP | Client IP address |
A count indicator shows how many records match the current filters out of the total loaded.
Request Log Table
The table displays individual request records:
| Column | Description |
|---|---|
| Timestamp | When the request was made |
| Type | Request type, color-coded by category |
| Name | Request name (zone name for commands, macro name for macros) |
| Result | granted or denied badge |
| Reason | Denial reason badge (if denied) |
| User | Username |
| Client | Client session ID (truncated). Click to open the Clients detail modal for session context. |
| IP Address | Client IP address |
| Request | Request payload (truncated, hover for full JSON) |
Denied requests are highlighted with a red background for visibility.
Pagination
Results are paginated at 50 records per page. Use the Previous/Next buttons at the bottom to navigate.
Denial Reasons
When a request is denied, one of these reasons is recorded:
| Reason | Description |
|---|---|
| admin_only | Non-admin user attempted an admin-only operation |
| role_denied | User's role explicitly denies this API function |
| unauthorized | User's role does not include this API function |
| invalid_session | Session expired or invalid |
| invalid_token | Resource token is invalid or expired |
| remote_disallowed | Remote access blocked for this user's role |
Logged Request Types
Not all API calls are logged. The following categories are recorded:
Always Logged
- All admin-only operations (backup, restore, restart, scripts, encryption keys, SSL, user management, reports, AI assistant, etc.)
- All denied requests regardless of type
Tracked Operations
command— Zone commandsmacro— Macro executionsset_attribute— Attribute changesreload— Device/zone reloadsupdate_model,insert_model,delete_model,create_model,sort_model— Database changesupsert_user— User creation/updatesenable_disable_target— Enable/disable operationsset_site_mode,clear_site_mode— Site mode changesbuild_automation_from_config,delete_automation— Automation changessave_theme_file,delete_theme_file— Theme changes
REST API
All REST API calls are logged with request_type: rest_api, including /api/token, /api/logout, /api/control/command, /api/control/macro, and /api/data/:entity. Denial reasons specific to the REST API include malformed_body, 2fa_required, 2fa_mismatch, and 2fa_no_email.
Use Cases
Security Auditing
Monitor for unauthorized access attempts:
- Filter by Result:
denied - Review denial reasons
- Look for patterns (repeated denials from same user/IP)
- Cross-reference with Access Log for physical access correlation
Troubleshooting
Investigate when something isn't working:
- Filter by User or Client ID
- Check if requests are being denied
- Review denial reason to identify permission issues
- Adjust Roles if needed
Activity Analysis
Understand system usage patterns:
- Set date range to desired period
- Use the timeline chart to identify peak hours
- Review type breakdown to see which operations are most common
- Filter by type to drill into specific categories
Related Documentation
- Roles — Role-based access control and API permissions
- Clients — Connected client sessions and device details
- Access Log — Physical access control events
- Data Retention — Configure how long request history is kept
- Dashboard — System overview and recent activity widget