# Mobile Devices Fetches mobile device records from Jamf Pro, including hardware details, OS version, enrollment status, and management information. **Sync Type: Full Synchronization** ## Prerequisites Before connecting Monad to Jamf Pro, you need: 1. An active Jamf Pro instance (cloud-hosted at `*.jamfcloud.com` or self-hosted). 2. Your **Jamf Pro tenant base URL** — for example, `https://acme.jamfcloud.com`. 3. An **API Client** (Client ID and Client Secret) with sufficient privileges to read mobile device records. See the Authentication section below for steps to create one. ### Creating an API Client in Jamf Pro 1. Log in to your Jamf Pro instance. 2. Navigate to **Settings** > **System** > **API Roles and Clients**. 3. First, create an **API Role**: - Click **New** under the **API Roles** tab. - Give the role a descriptive display name (e.g., `Monad Mobile Devices Reader`). - Grant the role the **Read Mobile Devices** privilege. - Save the role. 4. Then, create an **API Client**: - Click **New** under the **API Clients** tab. - Give the client a descriptive display name (e.g., `monad-mobile-devices`). - Assign the API Role you created above. - Set an appropriate **Access Token Lifetime** (Jamf default is 30 minutes; Monad refreshes automatically). - Enable the client and click **Save**. 5. Click **Generate Client Secret** and copy both the **Client ID** and the **Client Secret** — the secret is shown only once, so store it securely. ## Configuration The following configuration defines the input parameters. ### Settings | Setting | Type | Required | Description | | ------- | ---- | -------- | ----------- | | Base URL | string | Yes | The base URL for your Jamf Pro tenant (e.g. `https://acme.jamfcloud.com`). Do not include a trailing slash. | | Cron | string | Yes | Cron expression that controls how often the connector polls for updated mobile device records (5-field, standard syntax). Example: `0 0 * * *` for daily at midnight. Jamf recommends no more than one full sync per day. | | Use Synthetic Data | boolean | No | Generate synthetic data for testing instead of connecting to the real Jamf Pro API. Defaults to `false`. | ### Secrets | Secret | Type | Required | Description | | ------ | ---- | -------- | ----------- | | Client ID | secret | Yes | OAuth2 Client ID from your Jamf Pro API client. Used to obtain access tokens via the client credentials grant. | | Client Secret | secret | Yes | OAuth2 Client Secret paired with the Client ID. Used to obtain access tokens. | ## Setup Walk-through 1. **Create an API Role and Client** — follow the Authentication section above to create a Jamf Pro API role with mobile device read access, then generate an API client and copy the Client ID and Client Secret. 2. **Create the input in Monad**: - Open your Monad workspace and navigate to **Inputs**. - Click **Add Input** and select **Jamf — Mobile Devices**. 3. **Fill in the configuration**: - Enter your **Base URL** (e.g., `https://acme.jamfcloud.com`). - Paste the **Client ID** and **Client Secret** from your Jamf Pro API client. - Set the **Cron** schedule to control how often the connector polls for new or updated records (e.g., `0 0 * * *` for once daily). 4. **Save and test** — click **Test Connection**. Monad will authenticate with Jamf Pro and make a sample request to the mobile devices endpoint to confirm the credentials and base URL are valid. 5. **Activate** — once the connection test passes, enable the input. Monad will incrementally sync mobile device records on each scheduled run, fetching only records updated since the last successful sync. ## Troubleshooting ### Common Issues 1. **Authentication Errors (401 / 403)** - Confirm the Client ID and Client Secret are correct and match the API client in Jamf Pro (**Settings** > **API Roles and Clients**). - Ensure the API client is enabled and has not expired or been revoked. - Verify the API client has the **Read Mobile Devices** privilege through its assigned API role. - Ensure no extra whitespace was included when copying the credentials. 2. **Connection Refused or Timeout** - Confirm the **Base URL** is correct and includes the `https://` scheme (e.g., `https://acme.jamfcloud.com`). - If your Jamf Pro instance is self-hosted, ensure Monad's egress IPs are permitted through your firewall. 3. **Empty Results** - Confirm that mobile devices are enrolled in your Jamf Pro instance. - Check that the API role grants **Read Mobile Devices** access — other privileges do not grant access to this endpoint. - Review the pipeline logs for any error responses returned from the Jamf Pro API. 4. **Invalid Cron Expression** - Ensure the cron expression uses standard 5-field syntax. Refer to [Cron Expression Syntax](https://crontab.guru/) for guidance. ## Related Articles - [Jamf Pro Documentation](https://learn.jamf.com/en-US/bundle/jamf-pro-documentation-current/page/Jamf_Pro_Documentation.html) - [Jamf Pro API Reference](https://developer.jamf.com/jamf-pro/reference/jamf-pro-api) - [Jamf Pro API Roles and Clients](https://learn.jamf.com/en-US/bundle/jamf-pro-documentation-current/page/API_Roles_and_Clients.html)