# Computers Inventory Fetches computer inventory records from Jamf Pro, including hardware details, OS, security posture, and installed software. **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) with API access enabled. 2. Your **Jamf Pro tenant base URL** — for example, `https://acme.jamfcloud.com`. 3. An **API Client** configured under **Settings → API Roles and Clients** in Jamf Pro, with a Client ID and Client Secret. See the Authentication section below for steps to create one. 4. The API Client must be assigned an **API Role** that includes at minimum the **Read Computers** privilege so that Monad can query the `/api/v3/computers-inventory` endpoint. ### Creating an API Role 1. Log in to your Jamf Pro instance. 2. Navigate to **Settings** (gear icon, top-right) → **System** → **API Roles and Clients**. 3. Click the **API Roles** tab, then click **New**. 4. Give the role a descriptive name (for example, `monad-computers-inventory`). 5. Under **Privileges**, enable **Read Computers** (and any other inventory sections you want Monad to access). 6. Click **Save**. ### Creating an API Client 1. Still under **Settings** → **API Roles and Clients**, click the **API Clients** tab, then click **New**. 2. Give the client a descriptive display name (for example, `monad-computers-inventory`). 3. Under **API Roles**, select the role you created above. 4. Set an appropriate **Access Token Lifetime** (Jamf Pro defaults to 30 minutes; Monad refreshes tokens automatically). 5. Make sure the client is **Enabled**. 6. Click **Save**, then click **Generate Client Secret**. 7. Copy the **Client ID** and **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 (for example, `https://acme.jamfcloud.com`). | | Inventory Sections | array | Yes | Inventory sections to request from Jamf Pro. Multi-select from the supported `section` values: `GENERAL`, `DISK_ENCRYPTION`, `PURCHASING`, `APPLICATIONS`, `STORAGE`, `USER_AND_LOCATION`, `CONFIGURATION_PROFILES`, `PRINTERS`, `SERVICES`, `HARDWARE`, `LOCAL_USER_ACCOUNTS`, `CERTIFICATES`, `ATTACHMENTS`, `PLUGINS`, `PACKAGE_RECEIPTS`, `FONTS`, `SECURITY`, `OPERATING_SYSTEM`, `LICENSED_SOFTWARE`, `IBEACONS`, `SOFTWARE_UPDATES`, `EXTENSION_ATTRIBUTES`, `CONTENT_CACHING`, `GROUP_MEMBERSHIPS`. A security-focused default (`GENERAL`, `HARDWARE`, `SECURITY`, `OPERATING_SYSTEM`, `DISK_ENCRYPTION`, `LOCAL_USER_ACCOUNTS`) is suggested if you have no specific need. | | Cron Schedule | string | Yes | Cron expression that controls how often the connector runs an inventory sync (5-field, standard syntax). Jamf recommends no more than one full sync per day. Example: `0 0 * * *` for daily at midnight. | | 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. Created under **Settings → API Roles and Clients**. Used to obtain access tokens via the client credentials grant. | | Client Secret | secret | Yes | OAuth2 Client Secret paired with the Client ID. Used alongside the Client ID to obtain access tokens. | ## Setup Walk-through 1. **Create an API Role** — follow the Authentication section above to create an API Role in Jamf Pro with the **Read Computers** privilege. 2. **Create an API Client** — under **Settings → API Roles and Clients**, create a new API Client, assign the role you just created, generate a Client Secret, and copy the Client ID and Client Secret. 3. **Note your tenant base URL** — this is the root URL of your Jamf Pro instance, for example `https://acme.jamfcloud.com`. 4. **Create the input in Monad**: - Open your Monad workspace and navigate to **Inputs**. - Click **Add Input** and select **Jamf — Computers Inventory**. 5. **Fill in the configuration**: - Enter your **Base URL** (for example, `https://acme.jamfcloud.com`). - Enter the **Client ID** and **Client Secret** from your API Client. - Select the **Inventory Sections** you want Monad to fetch. Each selected value is sent as a repeated `section=` query parameter on the computers-inventory request, so the response size and sync duration scale with the number of selected sections. - Set the **Cron Schedule** to control how often the connector runs (for example, `0 0 * * *` for once daily at midnight). 6. **Save and test** — click **Test Connection**. Monad will authenticate with Jamf Pro and make a sample request to the computers-inventory endpoint to confirm the credentials are valid. 7. **Activate** — once the connection test passes, enable the input. Monad will incrementally sync computer inventory records on each scheduled run, fetching records across the inventory sections you selected. ## Troubleshooting ### Common Issues 1. **Authentication Errors (401 / 403)** - Confirm the Client ID and Client Secret are correct and have not been revoked. - Verify the API Client is **Enabled** in Jamf Pro (**Settings → API Roles and Clients → API Clients**). - Confirm the API Client is assigned an API Role that includes the **Read Computers** privilege. - Ensure no extra whitespace was included when copying the credentials. - Regenerate the Client Secret in Jamf Pro if you suspect it has been compromised. 2. **Invalid Base URL** - The Base URL must use HTTPS and must not include a trailing slash or path (for example, `https://acme.jamfcloud.com`, not `https://acme.jamfcloud.com/`). - For self-hosted instances, confirm the URL is reachable from the Monad pipeline network. 3. **Empty Results** - Confirm that computers exist and are enrolled in your Jamf Pro instance. - Verify the API Role includes the **Read Computers** privilege. - Check the pipeline logs for any API errors returned from the Jamf Pro computers-inventory endpoint. 4. **Invalid Cron Expression** - Ensure the cron expression uses standard 5-field syntax. Refer to [Cron Expression Syntax](https://crontab.guru/) for guidance. - Jamf recommends no more than one full inventory sync per day to avoid excessive load on your Jamf Pro instance. 5. **Rate Limit Errors (429)** - Monad limits requests to 10 per second against the Jamf Pro API. If you see rate-limit responses, contact Monad support or review your Jamf Pro API throttle settings. ## Related Articles - [Jamf Pro Documentation](https://learn.jamf.com/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/bundle/jamf-pro-documentation-current/page/API_Roles_and_Clients.html)