Idolbe Patch

API reference

Generated from the machine-readable specification at /api/v1/openapi.json (OpenAPI 3.0), which you can import into Postman, Insomnia or any client generator. Base URL: https://vbhpatch.idolbe-ai.com. Read REST API v1 first for credentials and examples.

Read your inventory, missing updates, vulnerabilities and execution history, and run automations from your own tools.

Authenticate with OAuth 2.0 client credentials: create API credentials under Users & API Credentials, exchange them for a bearer token at POST /api/oauth/token (valid 1 hour), then send Authorization: Bearer <token> on every call.

The credentials inherit the permissions of their role; the role must include API Access. Lists are paginated with limit/offset (max 500 rows). Write calls are recorded in the Audit Trail as api:<credential name>.

Wrong secrets are rate-limited per client id and per source IP (HTTP 429 with a Retry-After header).

Permissions

Every call needs credentials whose role includes api.access plus the permission listed on the operation. Roles are managed under Users & API Credentials → Roles.

PermissionGrants
endpoints.viewRead endpoints, groups and installed software
endpoints.manageRename, annotate or remove endpoints
updates.viewRead missing updates
vulnerabilities.viewRead vulnerabilities
automations.viewRead automations and execution history
automations.runRun automations
updates.manageApprove, decline or reset updates
reports.viewRead reports and alert rules
reports.manageCreate reports and alert rules

Operations

POST/api/oauth/token

Exchange API credentials for a bearer token

OAuth 2.0 client-credentials grant. Send the credentials as a form body, as JSON, or with HTTP Basic authentication (client_id:client_secret). Tokens expire after one hour; request a new one when a call answers 401.

Request body (JSON): TokenRequest

StatusResponseBody
200OKTokenResponse
400Unsupported grant type or missing fieldsError
401Unknown client id, wrong secret or disabled credentialsError
429Too many failed attempts (see the Retry-After header)Error

GET/api/v1/endpoints

List endpoints

Required permission: endpoints.view (plus api.access).

ParameterInTypeDescription
limitqueryintegerRows per page, 1–500 (default 100)
offsetqueryintegerRows to skip (default 0)
qquerystringFilter by hostname or display name (case-insensitive substring)
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError

GET/api/v1/endpoints/{id}

Get one endpoint with software, disks and missing updates

Required permission: endpoints.view (plus api.access).

ParameterInTypeDescription
id *pathstringEndpoint id
StatusResponseBody
200OKEndpointDetail
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

PATCH/api/v1/endpoints/{id}

Rename or annotate an endpoint

Required permission: endpoints.manage (plus api.access).

ParameterInTypeDescription
id *pathstringEndpoint id

Request body (JSON): EndpointPatch

StatusResponseBody
200OKobject
400Invalid JSONError
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

DELETE/api/v1/endpoints/{id}

Remove an endpoint from the organization

Removes the record and tells the agent to uninstall itself at its next check-in (agents 0.11.4 and later). Reinstalling the agent enrolls the computer again.

ParameterInTypeDescription
id *pathstringEndpoint id
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

GET/api/v1/updates

List missing updates (one row per endpoint × update)

Required permission: updates.view (plus api.access).

ParameterInTypeDescription
limitqueryintegerRows per page, 1–500 (default 100)
offsetqueryintegerRows to skip (default 0)
endpointIdquerystringOnly this endpoint
severityquerystringCritical, Important, Moderate, Low or Unspecified (applied after paging)
sourcequerystringOS or THIRD_PARTY
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError

GET/api/v1/software

List installed software (one row per endpoint × application)

Required permission: endpoints.view (plus api.access).

ParameterInTypeDescription
limitqueryintegerRows per page, 1–500 (default 100)
offsetqueryintegerRows to skip (default 0)
qquerystringFilter by application name
endpointIdquerystringOnly this endpoint
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError

GET/api/v1/vulnerabilities

List vulnerabilities present on the fleet

Required permission: vulnerabilities.view (plus api.access).

ParameterInTypeDescription
limitqueryintegerRows per page, 1–500 (default 100)
offsetqueryintegerRows to skip (default 0)
minCvssquerynumberMinimum CVSS score
kevquerystring1 = only CISA Known Exploited Vulnerabilities
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError

GET/api/v1/groups

List endpoint groups

Required permission: endpoints.view (plus api.access).

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError

POST/api/v1/groups

Create an endpoint group

Static (machineIds) or dynamic (rules) group; uptime alerts optional.

Request body (JSON): GroupBody

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
422Validation failedError

PATCH/api/v1/groups/{id}

Update an endpoint group

Any subset of the create body. Built-in groups cannot be renamed or given criteria.

ParameterInTypeDescription
id *pathstringGroup id

Request body (JSON): GroupBody

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError
409Built-in groupError

DELETE/api/v1/groups/{id}

Delete an endpoint group

Required permission: endpoints.manage (plus api.access).

ParameterInTypeDescription
id *pathstringGroup id
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError
409Built-in groupError

GET/api/v1/automations

List automations

Required permission: automations.view (plus api.access).

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError

POST/api/v1/automations

Create an automation

Same body as the console wizard. scheduleKind NOW runs the action immediately and returns the run id.

Request body (JSON): AutomationBody

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
422Validation failedError

GET/api/v1/automations/{id}

Get one automation with its payload

Required permission: automations.view (plus api.access).

ParameterInTypeDescription
id *pathstringAutomation id
StatusResponseBody
200OKAutomation
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

PATCH/api/v1/automations/{id}

Enable, pause, rename or fully edit an automation

Send { enabled, name, description } for a light change, or a full AutomationBody (with actionType) to replace every field.

ParameterInTypeDescription
id *pathstringAutomation id

Request body (JSON): AutomationPatch or AutomationBody

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError
422Validation failedError

DELETE/api/v1/automations/{id}

Delete an automation

Required permission: automations.manage (plus api.access).

ParameterInTypeDescription
id *pathstringAutomation id
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

POST/api/v1/actions

Run an action now on endpoints

Queues RUN_SCRIPT, DEPLOY_UPDATES, REBOOT, DEPLOY_SOFTWARE or UNINSTALL_SOFTWARE on the listed endpoints (ids outside the organization are ignored). Appears in History as one run. A DEPLOY_UPDATES that installs nothing on any endpoint (no matching update, or no package source for it) is refused with 422; an endpoint with nothing to install in a run that installs elsewhere gets a CANCELLED command whose result starts with "Nothing to install".

Request body (JSON): ActionBody

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No valid endpointsError
422Validation failed, or nothing to installError

POST/api/v1/updates/approvals

Approve, decline or reset updates

keys are the stable Update.key values from GET /api/v1/updates. A decision covers exactly one version: APPROVED and DECLINED refuse a third-party key without @<version> (422). A per-architecture or raw-spelling key (winget:Microsoft.VCRedist.2015+.x64@…, winget:Zoom.Zoom.EXE@7.1.8 (46825)) is stored under the key GET returns for it. NEW clears the decision stored under each key.

Request body (JSON): ApprovalBody

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
422Validation failedError

GET/api/v1/alerts

List alert rules

Required permission: reports.view (plus api.access).

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError

POST/api/v1/alerts

Create an alert rule

Email recipients and/or an HTTPS webhook (JSON POST per event, X-Idolbe-Signature when a secret is set; Slack and Teams incoming webhooks accept the payload).

Request body (JSON): AlertRuleBody

StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
422Validation failedError

POST/api/v1/automations/{id}/run

Run an automation now

Queues the automation's action on its current targets and returns the run id (follow it with /api/v1/runs?runId=).

ParameterInTypeDescription
id *pathstringAutomation id
StatusResponseBody
200OKobject
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

GET/api/v1/runs

Execution history

Without runId: the most recent runs (automations and ad-hoc actions). With runId: the per-endpoint results of that run.

ParameterInTypeDescription
runIdquerystringReturn the per-endpoint commands of this run instead of the run list
automationIdquerystringOnly runs of this automation
endpointIdquerystringOnly runs that touched this endpoint
limitqueryintegerMax runs, 1–500 (default 100)
StatusResponseBody
200OKobject or object
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

GET/api/v1/reports/{key}

Read a built-in report (JSON or CSV)

Use key _list for the catalog of reports.

ParameterInTypeDescription
key *path_list | endpoints | installed-software | web-browsers | instant-messengers | cloud-storage-apps | software-by-endpoint | hardware-inventory | disk-drives | disks-summary | network-adapters | monitors | physical-memory | firmware | processors | motherboards | sound-devices | scsi-controllers | windows-drivers | printers | update-summary | weekly-update-summary | missing-updates | missing-critical-updates | missing-third-party | installed-updates | reboots | update-status | windows-update-settings | win11-compatibility | windows-update-history | update-statistic | antivirus-status | bitlocker-status | local-user-accounts | local-groups | group-membership | profiles-by-computer | local-administrators | shared-folders | logged-on-users | offline-endpoints | low-disk-space | computer-ad-domains | environment-variables | to-internet-domains | bitlocker-key | logical-disks | disk-volumes | os-information | os-install-dates | computer-time-zones | running-processes | routing-tables | to-tcp-ip-addresses | services | startup-items | applied-gpo | boot-configuration | agent-configuration | vulnerabilities | vulnerable-software | compensating-controls | moveit-vulnerability | webp-vulnerability | cisa-kev | vulnerabilities-by-endpoint | compliance | windows-hot-fixes | cyber-essentials-email | cyber-essentials-office | cyber-essentials-web-browsers | ms-outlook-versions | hw-manufacturers | logon-statistics | profiles-by-user | sd-card-usage | usb-disk-usage | open-hidden-shares | local-time | windows-event-logs | process-memory-stats | disk-partitions | disks-without-bitlocker | ntfs-disk-quotas | all-critical-vulnerabilities | vulnerability-summary | cve-2025-5480-statusReport key (see _list)
formatquerycsvcsv for a text/csv download instead of JSON
StatusResponseBody
200OKReport or object
401Missing, invalid or expired tokenError
403The role of the credentials lacks the required permissionError
404No such record in this organizationError

GET/api/v1/openapi.json

This document

StatusResponseBody
200OKobject

Schemas

Fields marked * are always present. Timestamps are ISO 8601 in UTC; nullable fields are null when unknown.

Error

FieldTypeDescription
error *stringMachine-readable code, e.g. invalid_token, insufficient_scope, not_found, invalid_json
error_descriptionstring, nullable

TokenRequest

FieldTypeDescription
grant_type *client_credentials
client_id *string
client_secret *string

TokenResponse

FieldTypeDescription
access_token *string
token_type *Bearer
expires_in *integerSeconds until expiry

Endpoint

FieldTypeDescription
idstring
namestringDisplay name, or hostname when none is set
hostnamestring
platformstringwindows, linux or macos
statusconnected | disconnected
osstring, nullable
osVersionstring, nullable
osBuildstring, nullable
typeserver | workstation
domainstring, nullable
adOustring, nullable
userstring, nullableLast logged-on user
manufacturerstring, nullable
modelstring, nullable
serialNumberstring, nullable
cpustring, nullable
coresinteger, nullable
ramGBnumber, nullable
ipAddressesarray of string
macAddressesarray of string
antivirusstring, nullable
pendingRebootboolean
agentVersionstring, nullable
attributesobjectCustom attributes attr1…attr30
lastBootAtstring (date-time), nullable
lastSeenAtstring (date-time), nullable
enrolledAtstring (date-time), nullable
commentstring, nullable

EndpointDetail

Everything in Endpoint, plus:

FieldTypeDescription
disksarray of object
softwarearray of object
missingUpdatesarray of object

EndpointPatch

FieldTypeDescription
namestringDisplay name (empty string clears it)
commentstring
attributesobjectOnly keys attr1…attr30 are accepted

Update

FieldTypeDescription
idstring
keystringStable key shared by the same update on every endpoint (approval scope)
endpointIdstring
endpointstring
titlestring
kbstring, nullable
severityCritical | Important | Moderate | Low | Unspecified
sourcestringOS - Mandatory, OS - Optional or Applications
categoriesarray of string
wingetIdstring, nullable
installedVersionstring, nullable
latestVersionstring, nullable
rebootRequiredboolean
releaseDatestring (date-time), nullable
detectedAtstring (date-time), nullable
approvalNEW | APPROVED | DECLINED

SoftwareRow

FieldTypeDescription
endpointIdstring
endpointstring
namestring
versionstring, nullable
publisherstring, nullable
installDatestring, nullable
installedForstring, nullable
installTypestring, nullable

Vulnerability

FieldTypeDescription
cveIdstring
cvssScorenumber, nullable
severitystring, nullable
cisaKevboolean
ransomwareboolean
publishedAtstring (date-time), nullable
remediationStatusstring, nullableOverdue, Due soon or Due later, at the time of the request
remediationDeadlinestring (date-time), nullable
nvdUrlstring, nullable
descriptionstring, nullable
softwarearray of stringAffected products found on the fleet
endpointsarray of object

Group

FieldTypeDescription
idstring
namestring
systembooleanBuilt-in group (All Endpoints, New Endpoints, …)
kindstringSTATIC or DYNAMIC
membersinteger

Automation

FieldTypeDescription
idstring
namestring
actionstringRUN_SCRIPT, DEPLOY_UPDATES, REBOOT, DEPLOY_SOFTWARE or UNINSTALL_SOFTWARE
actionLabelstring
kindstringSIMPLE or RING
scheduleKindstring, nullable
freqstring, nullableDAILY, WEEKLY, MONTHLY or PATCH_TUESDAY
atTimestring, nullable
weekdayinteger, nullable
monthDayinteger, nullable
offsetDaysintegerDays after Patch Tuesday when freq is PATCH_TUESDAY
windowMinutesinteger, nullableMaintenance window: minutes after the slot during which the run may still start; null = no limit
runAtstring (date-time), nullable
enabledboolean
targetModestringGROUP or ENDPOINTS
groupIdstring, nullable
endpointIdsarray of string
lastRunAtstring (date-time), nullable
nextRunAtstring (date-time), nullable
createdBystring, nullable

Run

FieldTypeDescription
idstring
namestring
actionTypestring
statusstringRUNNING, COMPLETED, FAILED or STOPPED
startedAtstring (date-time), nullable
finishedAtstring (date-time), nullable
totalinteger
succeededinteger
failedinteger
createdBystring, nullable
automationIdstring, nullable
automationNamestring, nullable
detailstring, nullable

RunCommand

FieldTypeDescription
idstring
machineIdstring
endpointstring
statusstringPENDING, RUNNING, SUCCESS, FAILED or CANCELLED
startedAtstring (date-time), nullable
finishedAtstring (date-time), nullable
resultstring, nullableExecution log
createdAtstring (date-time), nullable

GroupRule

FieldTypeDescription
field *stringhostname, os, osVersion, platform, domain, type, arch, antivirus, reboot, agentVersion, attr1…attr30, …
op *contains | notContains | equals | notEquals | startsWith | endsWith | isTrue | isFalse
valuestring

GroupBody

FieldTypeDescription
name *string
descriptionstring
matchAllbooleantrue = every include rule must match
rulesarray of GroupRuleDynamic include criteria
excludeRulesarray of GroupRule
machineIdsarray of stringManual members (static group)
offlineAlertMinutesinteger, nullableUptime alert after N minutes offline
onlineAlertbooleanAlert when a member comes back online

AutomationBody

FieldTypeDescription
name *string
descriptionstring
kindSCHEDULED | RINGSCHEDULED or RING
actionType *RUN_SCRIPT | DEPLOY_UPDATES | REBOOT | DEPLOY_SOFTWARE | UNINSTALL_SOFTWARE
payloadobjectAction payload as built by the console wizard. DEPLOY_UPDATES filters use the Update Approval labels (an application version is a Regular or Security Update) when the payload carries "filterVersion": 2. Without it the earlier labels apply: applications are picked only by the type "Application Updates", so types ["Regular Updates"] means Windows updates only, and severities read every application version as Unspecified, so severities ["Critical"] means Windows updates only
targetModeall | group | endpoints
groupIdstring
endpointIdsarray of string
scheduleKindNOW | ONCE | RECURRING
runAtstringISO date-time for ONCE
freqDAILY | WEEKLY | MONTHLY | PATCH_TUESDAY
atTimestringHH:MM
weekdayinteger0 = Sunday
monthDayinteger1–28
offsetDaysintegerDays after Patch Tuesday
windowMinutesinteger, nullableMaintenance window
enabledboolean
startDatestringRING: first ring date
ringsarray of objectRING stages

AutomationPatch

FieldTypeDescription
enabledboolean
namestring
descriptionstring

ActionBody

FieldTypeDescription
endpointIds *array of string
type *RUN_SCRIPT | DEPLOY_UPDATES | REBOOT | DEPLOY_SOFTWARE | UNINSTALL_SOFTWARE
labelstring
payloadobjectRUN_SCRIPT: { script, language } or { scriptId, parameters: { Name: value } } (a Script Library script, its current code and reboot exit codes); DEPLOY_UPDATES: { mode: all | selected (keys) | filters ({ severities, types, sources }), approvalMode, filterVersion }; REBOOT: { message, timeoutSeconds }; DEPLOY_SOFTWARE: { wingetId } or { url, args }; UNINSTALL_SOFTWARE: { name }. DEPLOY_UPDATES filters use the Update Approval labels (an application version is a Regular or Security Update) when the payload carries "filterVersion": 2. Without it the earlier labels apply: applications are picked only by the type "Application Updates", so types ["Regular Updates"] means Windows updates only, and severities read every application version as Unspecified, so severities ["Critical"] means Windows updates only

ApprovalBody

FieldTypeDescription
keys *array of object
status *APPROVED | DECLINED | NEW

AlertRule

FieldTypeDescription
idstring
namestring
triggerstring
thresholdinteger
enabledboolean
emailTostring, nullable
webhookUrlstring, nullable
hasWebhookSecretboolean
reportKeystring, nullable
eventsintegerEvents raised so far
createdAtstring (date-time), nullable

AlertRuleBody

FieldTypeDescription
name *string
trigger *stringGROUP_UPTIME, NEW_ENDPOINT, CRITICAL_VULN, MISSING_CRITICAL_UPDATE, ENDPOINT_OFFLINE, REBOOT_REQUIRED or REPORT_ROWS
thresholdinteger
emailTostringComma-separated recipients
webhookUrlstringHTTPS URL
webhookSecretstring
reportKeystringREPORT_ROWS: report key

ReportMeta

FieldTypeDescription
keystring
titlestring
categorystring
descriptionstring

Report

FieldTypeDescription
titlestring
columnsarray of string
rowsarray of array of objectOne array per row, in column order
totalinteger
collectedAtstring (date-time), nullable