About Jamf
Jamf Pro is Apple-focused mobile device management (MDM) for macOS, iOS, iPadOS, and tvOS fleets. Connecting Jamf to Serval lets your team query device inventory, manage users and groups, send MDM commands (lock, erase, OS update), manage departments and sites, and ingest your full computer inventory into Serval’s asset system - all through Serval workflows that call the Jamf Pro API and Classic API on your behalf. Serval only ever sends authenticated requests to the exact Jamf domain you configure. Authentication: Jamf Pro API client (OAuth 2.0 client credentials). You create an API role and API client in Jamf Pro and give Serval the client ID, client secret, and your Jamf Pro hostname. Serval stores the client ID and an encrypted copy of the secret, exchanges them for short-lived bearer tokens against your own Jamf instance, and refreshes tokens automatically - no browser-based sign-in, no user-level consent, no refresh token. Token lifetime is whatever you configure on the API client in Jamf Pro. Data sync: On demand. There is no always-on background sync or webhook from Jamf - workflows call the Jamf APIs when they run (subject to each workflow’s approval procedure). For asset inventory, schedule the included Ingest Jamf Computers workflow to pull your full computer fleet into Serval.What the Jamf integration enables
Get your credentials
Serval authenticates with a Jamf Pro API client: an API role defines the privileges Serval will have, and an API client (assigned that role) provides the client ID and secret you’ll paste into Serval. See Jamf’s official guide, API Roles and Clients, for full details.Open API roles and clients
Create an API role
Create an API client
Generate the client secret
Connect in Serval
Enter your API Domain
Enter your Client ID
Enter your Client Secret
Verifying the connection
Six health checks run against your instance to verify connectivity and privileges, and they re-run automatically whenever you update the connection settings. Each check is an API call that exercises a specific privilege, so all six run regardless of which privileges your API role grants - a check whose privilege you left off the role will simply fail with a permission hint. This is expected if you intentionally scoped the role down, and you can safely ignore failures for capabilities you don’t plan to use.-
Test Jamf Connection - verifies Serval can authenticate with your Jamf Pro instance by performing the token exchange and calling a lightweight endpoint that also reports your Jamf Pro version.
- Success: “Successfully authenticated with Jamf Pro at [domain] (version [number])”
- Failure: “Unable to connect to Jamf Pro at [domain].” followed by a status-specific hint - invalid credentials (401): “The OAuth client credentials are invalid or expired. Please verify your Client ID and Client Secret in the Jamf integration settings.”; not authorized (403): “The OAuth client is not authorized to access Jamf. Please ensure the client has been granted the necessary permissions in Jamf Pro.”; server errors (500/502/503): “Jamf returned a server error during authentication. This is likely a temporary issue - please try again later.”
-
List Jamf Computers - checks that Serval can list computer inventory records via the Jamf Pro API (first page of 10).
- Success: “Successfully listed computers from Jamf Pro ([number] total)”
- Failure: “Unable to list computers from Jamf Pro.” followed by a status-specific hint - 401: “The Jamf API credentials may be invalid or expired. Please verify the OAuth client credentials are correct.”; 403: “The Jamf OAuth client may not have the required permissions. Please check that the necessary privileges are granted.”; 404: “The requested Jamf resource was not found. This may indicate missing permissions or incorrect API domain configuration.”; 500/502/503: “Jamf returned a server error. This is likely a temporary issue with Jamf’s API - please try again later.”
-
List Jamf Mobile Devices - checks that Serval can list mobile device inventory records via the Jamf Pro API (first page of 10). Passes with a count of 0 if you manage no mobile devices.
- Success: “Successfully listed mobile devices from Jamf Pro ([number] total)”
- Failure: “Unable to list mobile devices from Jamf Pro.” followed by the same status-specific hints as the computers check.
-
List Jamf Users - checks that Serval can list user accounts via the Classic API (there is no Pro API endpoint for listing users), so your API role’s privileges must cover Classic API user reads.
- Success: “Successfully listed [number] users from Jamf Pro”
- Failure: “Unable to list users from Jamf Pro.” followed by the same status-specific hints as the computers check.
-
List Jamf Computer Groups - checks that Serval can list computer groups via the Classic API.
- Success: “Successfully listed [number] computer groups from Jamf Pro”
- Failure: “Unable to list computer groups from Jamf Pro.” followed by the same status-specific hints as the computers check.
-
List Jamf Departments - checks that Serval can list departments via the Classic API.
- Success: “Successfully listed [number] departments from Jamf Pro”
- Failure: “Unable to list departments from Jamf Pro.” followed by the same status-specific hints as the computers check.
Gotchas and troubleshooting
API role privileges drive everything - including Classic API access
API role privileges drive everything - including Classic API access
API Domain is a hostname with an optional port
API Domain is a hostname with an optional port
Confirm the API client is enabled
Confirm the API client is enabled
The client secret is shown once in Jamf Pro
The client secret is shown once in Jamf Pro
Editing the connection: keep the Client ID filled, paste the full secret when rotating
Editing the connection: keep the Client ID filled, paste the full secret when rotating
Requests are pinned to your configured domain
Requests are pinned to your configured domain
Need help? Contact support@serval.com for assistance with your Jamf integration.

