A native macOS client for Apple Business Manager API
Features • Requirements • Installation • Setup • Usage • License
ABMate is a native macOS application built with SwiftUI that provides a modern, user-friendly interface for interacting with the Apple Business Manager (ABM) and Apple School Manager (ASM) APIs. It streamlines device management workflows by replacing complex API calls with an intuitive GUI.
- 🖥️ Device Management — View, search, sort, and filter all enrolled devices with real-time sync status indicators
- 📊 Dashboard — At-a-glance overview with device breakdown, inventory comparison hero section, auto-run on MDM connect, clickable MDM server count, and elevated Export/Activity controls
- 🔄 Device Assignment — Bulk assign/unassign devices to MDM servers with multi-filter support (OS, enrollment status, MDM availability, sync status)
- 🔁 Inventory Sync — Compare and push purchasing data (PO, vendor, warranty, AppleCare) from ASM/ABM to Jamf Pro with single-device lookup, bulk comparison, selective sync, test modes, retry, cancel, and exportable sync reports
- 📱 Mobile Device Support — Full purchasing sync for mobile devices via Jamf Classic API, including per-device purchasing data fetch for accurate comparison
- 📤 CSV Export — Export filtered device lists from both Devices and Assign views
- 🔐 Secure Authentication — JWT-based ABM/ASM authentication and OAuth 2.0 Jamf Pro authentication, with all credentials stored in the macOS Keychain
- 🔗 Connection Profiles — Save and switch between multiple ABM/ASM and Jamf Pro connections
- ✅ AppleCare Coverage — Look up warranty status, coverage dates, and agreement numbers per device
- 📋 Activity History — Persistent, filterable audit trail of connections, syncs, assignments, and exports with sanitized data written to disk
- 🔔 Toast Notifications — Auto-dismissing status notifications for connection events, sync results, and errors
- macOS 14.0 (Sonoma) or later
- Xcode 15.0 or later (for building from source)
- Apple Business Manager or Apple School Manager account
- ABM API credentials (Client ID, Key ID, Private Key)
- Jamf Pro API Client credentials (for inventory sync features)
Download the latest release from the Releases page.
-
Clone the repository:
git clone https://github.com/pathaksomesh06/ABMate.git cd ABMate -
Open in Xcode:
open ABMate.xcodeproj
-
Build and run (⌘+R)
- Sign in to Apple Business Manager
- Navigate to Settings → API
- Generate a new API key:
- Note the Client ID (starts with
BUSINESSAPI.) - Note the Key ID
- Download the Private Key (.p8 file)
- Note the Client ID (starts with
- Launch ABMate
- Click Connection in the sidebar (or the Configure button on the dashboard)
- Enter your credentials:
- Client ID: Your ABM client ID
- Key ID: Your API key ID
- Private Key: Import your .p8 file
- Click Generate JWT Token
- Click Connect to ABM
- Open Connection Settings and switch to the MDM Server tab
- Enter your Jamf Pro URL, Client ID, and Client Secret
- Click Connect — ABMate authenticates via OAuth 2.0
- Save the profile for quick reconnection
Your Jamf Pro API Client needs the following privileges: Read Computers, Update Computers, Read Mobile Devices, Update Mobile Devices, Read Users, Update Users.
The dashboard provides an at-a-glance overview centered on inventory comparison. When an MDM server is connected, comparison runs automatically. Key elements include a device breakdown by type (Mac, iPhone, iPad, Apple TV), a clickable MDM server count that navigates to the MDM Servers tab, and Export/Activity buttons in the header for quick access.
View all enrolled devices with search, sort, and filter capabilities. Search across serial numbers, models, product types, and order numbers. Each device shows its enrollment status (Assigned/Unassigned) and inventory sync status (Up to Date, Needs Sync, or Not in MDM) when a comparison has been run. Double-click any device to view full details, look up AppleCare coverage, or check the assigned MDM server. Export filtered results to CSV.
Bulk assign or unassign devices to MDM servers. Filter by OS, enrollment status, MDM availability, and sync status. Action controls (Assign/Unassign toggle and MDM server picker) are separated from filters for clarity. Select devices in the table and execute assignments with progress tracking.
Compare purchasing data between ASM/ABM and Jamf Pro, then push updates in bulk. Two modes are available: single-device lookup for quick checks with editable fields, and bulk comparison with selective sync. Bulk sync supports test modes (10 computers or 10 mobile devices), full sync, cancel mid-operation, and retry of failed devices. Supports both computers (Jamf v1 API) and mobile devices (Jamf Classic API). Generates exportable sync reports with full logs.
A persistent, filterable timeline of all actions taken in ABMate — connections, syncs, assignments, and exports. Filter by category using chips. History persists across app launches with a sanitized audit trail (no device serials, server URLs, counts, or filenames written to disk). Look up ABM activity IDs directly from the Activity view header.
View registered MDM servers from your ASM/ABM account. Select a server to query its assigned devices.
Save multiple ABM/ASM and Jamf Pro connection profiles for quick switching between environments. Sensitive credentials (private keys, client secrets) are stored in the macOS Keychain; only metadata is persisted in UserDefaults.
| Endpoint | Description |
|---|---|
/v1/orgDevices |
List organization devices (paginated) |
/v1/mdmServers |
List MDM servers |
/v1/orgDeviceActivities |
Check activity status |
/v1/mdmServers/{id}/devices |
Assign/unassign devices to MDM |
/v1/devices/{id}/appleCare |
Get AppleCare coverage |
/v1/orgDevices/{id}/relationships/assignedServer |
Get assigned MDM server for a device |
| Endpoint | Description |
|---|---|
/api/oauth/token |
OAuth 2.0 client credentials authentication |
/api/v1/computers-inventory |
Fetch computer inventory with purchasing data |
/api/v1/computers-inventory-detail/{id} |
Update computer purchasing fields |
/api/v2/mobile-devices |
Fetch mobile device list |
/api/v2/mobile-devices/{id}/detail |
Fetch mobile device detail |
/JSSResource/mobiledevices/id/{id}/subset/Purchasing |
Fetch mobile device purchasing (Classic API) |
/JSSResource/mobiledevices/id/{id} |
Update mobile device purchasing (Classic API, XML) |
- ABM/ASM private keys are stored securely in the macOS Keychain
- Jamf Pro client secrets are stored in the macOS Keychain
- JWT tokens are generated locally using your private key
- Activity history is persisted with sanitized details — no device serials, server URLs, counts, or filenames written to disk
- No credentials are transmitted to third parties
- All API communication uses HTTPS
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Somesh Pathak
- GitHub: @pathaksomesh06
- Blog: Intune in Real Life
- Apple Business Manager API Documentation
- SwiftUI and Swift community
Made with ❤️ for the Apple Admin community
