This article encompasses a base for the API calls that are related to processing Application Control Approval Requests directly through ThreatLocker PortalAPI endpoints.
Be sure to input the instance your organization exists on for each call. This is indicated with the "INSTANCE" text in each endpoint. Linked here is a KB to find your instance:
Locating Your Organization's Instance | ThreatLocker Help Center
For more in-depth analysis/usage of each of the endpoints, be sure to check out the other API documentation articles available here:
Getting Pending Approval Requests
ApprovalRequestGetByParameters
https://portalapi.INSTANCE.threatlocker.com/portalapi/ApprovalRequest/ApprovalRequestGetByParameters
To get a list of the organizationIds available, call the OrganizationGetChildrenIdsAndName PortalAPI endpoint using the following URL, replacing the INSTANCE variable accordingly:
https://portalapi.INSTANCE.threatlocker.com/portalapi/Organization/OrganizationGetChildrenIdsAndName
- Method: POST
- Description: This API, using one of the request bodies below, returns a list of all pending requests for your organization(s), including those from Application Control, Elevation Control, and Storage Control. When managing a parent organization, you have the option to view all pending requests for all your child organizations, including grandchild organizations. This is demonstrated below by setting the showChildOrganizations field to true in the second request body. To view just a child organization's Approval Requests, use the managedOrganizationId header as described below. Any valid integer can be entered for the pageNumber and pageSize fields, and it will be returned in the selected format. For instance, if “pageNumber”: 1 and “pageSize”: 2, 2 entries will be returned per page, and the first two requests will be returned.
- Permission Requirements
Optional header: managedOrganizationId header
Expects: organizationId of the organization as <GUID> in format: "00000000-0000-0000-0000-000000000000"
Request body: Return pending Approval Requests for only the currently managed organization
{
"isAscending": false,
"orderBy": "dateTime",
"pageNumber": 1,
"pageSize": 100,
"showChildOrganizations": false,
"showCurrentTierOnly": false,
"statusId": 1
}
Request body: Return pending Approval Requests for the currently managed organization AND any child and grandchild organizations
{
"isAscending": false,
"orderBy": "dateTime",
"pageNumber": 1,
"pageSize": 100,
"showChildOrganizations": true,
"showCurrentTierOnly": false,
"statusId": 1
}
Response body: Sample response body returned from one Approval Request. Some fields have been replaced with template data, but these fields are expected to contain valid data.
{
"statusIdEscalatedToMSP": 13,
"statusIdEscalatedByCustomer": 17,
"masterOrganizationId": "00000000-0000-0000-0000-000000000000",
"approvedBy": "",
"approvalRequestId": "00000000-0000-0000-0000-000000000000",
"dateTime": "YYYY-MM-DDTHH:MM:SSZ",
"path": "<String>",
"hash": null,
"username": "<String>",
"hostname": "<String>",
"statusId": 1,
"computerId": "00000000-0000-0000-0000-000000000000",
"organizationName": "<String>",
"json": null,
"ticketId": "",
"requestor": "",
"requestorReason": "",
"requestorEmailAddress": "",
"comments": "",
"actionDate": null,
"organizationId": "00000000-0000-0000-0000-000000000000",
"multiLevelApprovalRequestId": null,
"approvalNumber": 0,
"approvedByTierLevel": 0,
"tempPolicyId": null,
"policyId": null,
"tempApplicationId": null,
"applicationId": null,
"multiLevelApprovalStatusId": 1,
"initialApprovalTierLevel": 0,
"approvalCount": 0,
"pendingTierLevel": 0,
"hasPendingApprovalRequest": false,
"ipAddress": null,
"isAssigned": false,
"assigneeUserId": null,
"threatLockerDataCenterId": null,
"instanceName": null,
"assigneeUsername": "",
"assigneeFirstName": "",
"assigneeLastname": "",
"threatLockerActionDto": {
"fullPath": "<String>",
"policyId": "00000000-0000-0000-0000-000000000000",
"username": "<String>",
"actionId": 3,
"hash": "<String>",
"processName": "<String>",
"certs": [],
"applicationId": null,
"datetime": "YYYY-MM-DDTHH:MM:SSZ",
"logAction": true,
"serialNumber": "<String>",
"deviceType": "<String>",
"actionType": "<String>",
"size": <Integer>,
"processId": 0,
"ringFence": false,
"policyName": "<String>",
"applicationName": "",
"encryptionStatus": <Integer>,
"installedBy": [
"<String>"
],
"monitorOnly": false,
"notes": "<String>",
"sha256": "<String>",
"ringfencePolicyId": null,
"remotePresence": false,
"organizationId": null,
"hostname": null,
"computerId": null,
"manufacturer": "",
"osType": <Integer>,
"destinationIP": null,
"domainName": "",
"organizationName": null
},
"notes": null,
"signature": null,
"tlInstructions": null,
"suggestCustomRule": null,
"authorizeForPermit": false,
"portalApiUrl": "https://portalapi.INSTANCE.threatlocker.com/",
"cyberHeroManagementConfigured": false,
"maxTriggeredStartDate": null,
"isEscalatedByCyberHero": false,
"isEscalatedByCustomer": false,
"ticketApprovalManager": null,
"showMfaChallenge": false,
"showMfaRegistration": false,
"linkedMfaUser": null,
"serialNumber": null,
"approvalRequestTimerDto": null,
"canRequestNewBuiltIn": false,
"isAssigneeLoggedIntoMaster": false,
"retrievedAssigneeUsername": false,
"count": 0
}
Checking for Matching Applications
Before approving a ThreatLocker Built-In application from an Approval Request, ensure that the file being permitted matches that of the application you believe the request originated from. There are cases where a requested file can be a common DLL or other configuration or system file that can be used by multiple applications. This causes the file to match into multiple applications which are potentially unrelated to the original Approval Request. When applying a ThreatLocker Built-In, the entire Built-In application is permitted.
ApplicationGetMatchingList
https://portalapi.INSTANCE.threatlocker.com/portalapi/Application/ApplicationGetMatchingList
- Method: POST
- Description: This API returns a list of matching applications when provided with fields that uniquely identify the requested file, such as its ThreatLocker hash value, SHA256 hash value, and/or certificate name. ThreatLocker recommends entering at least one identifying field per call. Entering multiple fields that do not all align to the same unique file/Approval Request may return inaccurate matching applications. Ensure that all fields used contain information that pertains only to the requested file. If the Approval Request you are evaluating is from a child organization, use the managedOrganizationId header and set it to the organization that contains the request, as described below. The request body below expects each field to match the fields returned by the requested file. The following options can be used for the OSType in the body below:
- Windows = 1
- MAC = 2
- Linux = 3
- Windows XP = 5
- Permission Requirements
Optional header: managedOrganizationId header
Expects: organizationId of the organization as <GUID> in format: "00000000-0000-0000-0000-000000000000"
Request Body: Return a list of any matching applications
{
"hash": "<String>",
"sha256": "<String>",
"path": "<String>",
"processPath": "<String>",
"certs": [
{
"sha": "<SHA256 of certificate>",
"subject": "<certificateName>",
"validCert": "<Boolean>"
},
{
"sha": "<SHA256 of certificate>",
"subject": "<certificateName>",
"validCert": "<Boolean>"
}
],
"createdBys": [
"<String>",
"<String>"
],
"osType": <Integer>
}
Response body: Response body returned when two matching applications are found. Some fields have been replaced with template data, but these fields are expected to contain valid data.
{
"matchingApplications": [
{
"name": "<String>",
"applicationName": "<String>",
"applicationId": "00000000-0000-0000-0000-000000000000",
"organizationId": "00000000-0000-0000-0000-000000000000",
"organizationName": "<String>",
"osType": <Integer>,
"suggestedPolicyId": null,
"status": <Integer>,
"isMaintained": false,
"researchApplicationId": null
},
{
"name": "<String>",
"applicationName": "<String>",
"applicationId": "00000000-0000-0000-0000-000000000000",
"organizationId": "00000000-0000-0000-0000-000000000000,
"organizationName": "<String>",
"osType": <Integer>,
"suggestedPolicyId": null,
"status": <Integer>,
"isMaintained": false,
"researchApplicationId": null
}
],
"hasMatching": true
}
Getting custom applications to add the requested file/file rules into
ApplicationGetListForAddToApplication
https://portalapi.INSTANCE.threatlocker.com/portalapi/Application/ ApplicationGetListForAddToApplication
- Method: GET
- Description: This API returns all applications available for use with the Approval Request, including parent organization applications when viewing a request from a child organization. Parent applications use a different naming convention, shown in the name field as "parentOrganizationName\\parentOrganizationApplicationName". The applicationName field will return only the application name, without any parent nomenclature. If the Approval Request you are evaluating is from a child organization, use the managedOrganizationId header and set it to the organization that contains the request, as described below. To search for an available application by name, enter any text into the searchText field, as shown below. The osType parameter should match the osType of the computer that made the request when searching for available applications to use with the request. The following options can be used for the OSType below:
- Windows = 1
- MAC = 2
- Linux = 3
- Windows XP = 5
-
Permission Requirements
Optional header: managedOrganizationId header
Expects: organizationId of the organization as <GUID> in format: "00000000-0000-0000-0000-000000000000"
Request URL: Return any Windows applications (osType = 1) that contain the text App (searchText = App)
https://portalapi.INSTANCE.threatlocker.com/portalapi/Application/ApplicationGetListForAddToApplication?osType=1&searchText=App
Response body: Response body returned from an available application. Some fields have been replaced with template data, but these fields are expected to contain valid data.
{
"name": "<String>",
"applicationName": "<String>",
"applicationId": "00000000-0000-0000-0000-000000000000",
"organizationId": "00000000-0000-0000-0000-000000000000",
"organizationName": "<String>",
"osType": <Integer>,
"suggestedPolicyId": null,
"status": 0,
"isMaintained": false,
"researchApplicationId": null
}
Getting an Application to use when using a Maintenance Mode
ApplicationGetForMaintenanceMode
https://portalapi.INSTANCE.threatlocker.com/portalapi/Application/ApplicationGetForMaintenanceMode
- Method: GET
- Description: This API returns all applications available for use with a Maintenance Mode, including parent-organization applications when viewing a request from a child organization. When processing Approval Requests, you can select an existing application and use a Maintenance Mode. With the selected application, the Maintenance Mode will temporarily capture or monitor files that are installed and/or executed in association with the initially requested file. Parent applications use a different naming convention, shown in the label field as "parentOrganizationName\\parentOrganizationApplicationName". If the Approval Request you are evaluating is from a child organization, use the managedOrganizationId header and set it to the organization that contains the request, as described below. The osType parameter should match the osType of the computer that made the request when searching for available applications to use. The following options can be used for the OSType below:
- Windows = 1
- MAC = 2
- Linux = 3
- Windows XP = 5
-
Permission Requirements
Optional header: managedOrganizationId header
Expects: organizationId of the organization as <GUID> in format: "00000000-0000-0000-0000-000000000000"
Request URL: Return any Windows applications (osType = 1)
https://portalapi.INSTANCE.threatlocker.com/portalapi/Application/ApplicationGetForMaintenanceMode?osType=1
Response body: Response body returned from an available application. Some fields have been replaced with template data, but these fields are expected to contain valid data.
{
"label": "<String>",
"value": "00000000-0000-0000-0000-000000000000",
"numericValue": null,
"entityType": null,
"parentId": null,
"disabled": false,
"tooltip": null,
"featureConfigurationIds": [],
"isSupported": null,
"extendedProperties": null
}
Gathering Additional Information (Optional)
ApplicationGetResearchDetailsById
https://portalapi.INSTANCE.threatlocker.com/portalapi/Application/ApplicationGetResearchDetailsById
- Method: GET
- Description: This API returns all research data made available by the ThreatLocker Research Team based on the applicationId provided. This research data includes a product description, potential risks associated with the application, and a mitigation strategy to limit those risks in your organization(s). The applicationId parameter determines which application's research information will be returned, as shown below. Only one applicationId can be entered at a time.
-
Permission Requirements
Request URL: Return the research information from the Adobe Acrobat (Built-In)
https://portalapi.INSTANCE.threatlocker.com/portalapi/Application/ApplicationGetResearchDetailsById?applicationId=4cc1729d-8727-43de-b379-f3df4fe6055a
Response body: Response body returned when supplying the applicationId for the Adobe Acrobat (Built-In)
{
"researchApplicationId": "6c9b00c3-20d5-42b3-b44a-8c2e186e208a",
"productName": "Adobe Acrobat",
"clientApplicationName": "Adobe Acrobat (Built-In)",
"productDescription": "Adobe Acrobat is used to view, create, print, and manage PDF (Portable Document Format) files.",
"clientDescription": "",
"osType": 1,
"remediationText": "Evaluate the need for this software. If it is required for business use, limit access to high-risk applications, files, and the ability to reach out to the internet.",
"potentialRiskStrategyText": "Vulnerabilities may result in unauthorized access to sensitive documents, leading to potential data breaches, intellectual property theft, or manipulation of critical documents.",
"reviewRating": 4,
"concernRating": 3,
"businessRating": 6,
"countriesWhereCodeCompiled": [
{
"name": "India",
"code": "IN",
"tooltip": "Development Influence: India"
},
{
"name": "United States",
"code": "US",
"tooltip": "Company Influence: United States"
}
],
"categories": [
"PDF Software"
],
"accessLevels": [
{
"displayName": "Applications",
"value": "RF applications",
"isProtected": true,
"orderBy": 1
},
{
"displayName": "File",
"value": "RF File Access",
"isProtected": false,
"orderBy": 2
},
{
"displayName": "Internet",
"value": "RF Internet",
"isProtected": false,
"orderBy": 3
},
{
"displayName": "Registry",
"value": "RF Registry",
"isProtected": false,
"orderBy": 4
}
]
}
Approving the Request
ApprovalRequestGetPermitApplicationById
https://portalapi.INSTANCE.threatlocker.com/portalapi/ApprovalRequest/ApprovalRequestGetPermitApplicationById
- Method: GET
- Description: This API returns all the details/Ids of an Approval Request, including the formatted JSON field that is needed to use the ApprovalRequestPermitApplication endpoint below. If the Approval Request you are evaluating is from a child organization, use the managedOrganizationId header and set it to the organization that contains the request, as described below.
-
Permission Requirements
Optional header: managedOrganizationId Header
Expects: organizationId of the organization as <GUID> in format: "00000000-0000-0000-0000-000000000000"
Request URL: Return the Approval Request details/IDs when the approvalRequestId (approvalRequestId=00000000-0000-0000-0000-000000000000) parameter is supplied with a valid approvalRequestId
https://portalapi.INSTANCE.threatlocker.com/portalapi/ApprovalRequest/ApprovalRequestGetPermitApplicationById?approvalRequestId=00000000-0000-0000-0000-000000000000
Response body: Response body when supplying a valid approvalRequestId from a child organization's Approval Request. Some fields have been replaced with template data, but these fields are expected to contain valid data.
ApprovalRequestPermitApplication
https://portalapi.INSTANCE.threatlocker.com/portalapi/ApprovalRequest/ApprovalRequestPermitApplication
- Method: POST
- Description: This API processes pending Application Control Approval Requests. The organizationIds list expects the organizationId of any parent organizations that are effectively "above" where the Approval Request originated from. The JSON value can be imported or copied from the endpoint listed above (ApprovalRequestGetPermitApplicationById) for processing. If the Approval Request you are processing is from a child organization, use the managedOrganizationId header and set it to the organization that contains the request, as described below.
- Permission Requirements
Note: The examples below cover some common scenarios for permitting applications from a child organization, but are not all inclusive. For more detailed documentation, review the KB below:
Optional header: managedOrganizationId Header
Expects: organizationId of the organization as <GUID> in format: "00000000-0000-0000-0000-000000000000"
Help Center