diff --git a/specs/Data-Gateway.json b/specs/Data-Gateway.json index b541504..12c303d 100644 --- a/specs/Data-Gateway.json +++ b/specs/Data-Gateway.json @@ -192,6 +192,9 @@ "404": { "description": "The requested object was not found." }, + "500": { + "description": "An unexpected error occurred on the server!" + }, "503": { "description": "App is starting still. Feature is not available. Please try again later." }, @@ -414,77 +417,27 @@ "role" ] }, - "LicenseReport.CorrelationRecord": { - "description": "Metadata that describes the execution session (run) that is used to tie/relate all of the license report together.", + "Report.FeatureBreakdown": { + "additionalProperties": { + "type": "boolean", + "examples": [ + true + ] + }, + "description": "List of features that are configured for the specific service plan's service configuration for the related principal.\nThe key is the name of the feature that is being described.\nThe value is the state of the feature configuration, `true` is in scope and `false` meaning not in scope.", "examples": [ { - "auditTenantAccount": "priv-user@example.com", - "correlationId": "9d838115-0868-45d4-b8a5-98adc1af7e42", - "reportTenantAccount": "ent-user@example.com", - "tenantId": "7e536189-b2dd-4c8b-98b1-9b174777883f", - "createdAt": "2024-08-01T21:13:12.821Z", - "updatedAt": "2024-08-01T21:13:12.821Z" - } - ], - "properties": { - "auditTenantAccount": { - "description": "The user account used to retrieve the license information in the tenant being audited.", - "examples": [ - "admin-user@example.com" - ], - "format": "email", - "type": "string" - }, - "correlationId": { - "description": "The ID of the execution session (run) that is used to tie/relate all of the data together.", - "examples": [ - "88da2253-758f-4135-9d37-64448c8b65c1" - ], - "format": "uuid", - "type": "string", - "pattern": "^\\w+-\\w+-\\w+-\\w+-\\w+$" - }, - "reportTenantAccount": { - "description": "User account used to store/report the license report to the SHI Lab cloud service.", - "examples": [ - "generic-user@example.com" - ], - "format": "email", - "type": "string" - }, - "tenantId": { - "description": "Unique ID of customer's Microsoft tenant that the license report is for.", - "examples": [ - "0e1fe83f-a33f-4250-8546-225b8d45ae01" - ], - "format": "uuid", - "type": "string", - "pattern": "^\\w+-\\w+-\\w+-\\w+-\\w+$" - }, - "createdAt": { - "description": "Timestamp of when the report was created.", - "examples": [ - "2024-08-01T21:12:22.148Z" - ], - "format": "date-time", - "type": "string" - }, - "updatedAt": { - "description": "Timestamp of when the report was last updated.", - "examples": [ - "2024-08-01T21:12:22.148Z" - ], - "format": "date-time", - "type": "string" + "Conditional Access": true, + "Access Reviews": true, + "Dynamic Groups": false, + "On-Prem Password Rest": true, + "On-Prem Password Protection": false } - }, - "required": [ - "auditTenantAccount" ], - "title": "License Report - Correlation Record", + "title": "Report - Feature Breakdown", "type": "object" }, - "LicenseReport.LicenseData": { + "LicenseReportV0.LicenseData": { "type": "object", "properties": { "assignedLicense": { @@ -513,7 +466,7 @@ "additionalProperties": { "oneOf": [ { - "$ref": "#/components/schemas/LicenseReport.FeatureBreakdown" + "$ref": "#/components/schemas/Report.FeatureBreakdown" }, { "type": "integer", @@ -548,7 +501,7 @@ "additionalProperties": { "oneOf": [ { - "$ref": "#/components/schemas/LicenseReport.FeatureBreakdown" + "$ref": "#/components/schemas/Report.FeatureBreakdown" }, { "type": "integer", @@ -634,27 +587,7 @@ ], "title": "License Report - License Data" }, - "LicenseReport.FeatureBreakdown": { - "additionalProperties": { - "type": "boolean", - "examples": [ - true - ] - }, - "description": "List of features that are configured for the specific service plan's service configuration for the related principal.\nThe key is the name of the feature that is being described.\nThe value is the state of the feature configuration, `true` is in scope and `false` meaning not in scope.", - "examples": [ - { - "Conditional Access": true, - "Access Reviews": true, - "Dynamic Groups": false, - "On-Prem Password Rest": true, - "On-Prem Password Protection": false - } - ], - "title": "License Report - Feature Breakdown", - "type": "object" - }, - "LicenseReport": { + "LicenseReportV0": { "description": "Completely calculated license report structure that is the result of a complete run.", "examples": [ { @@ -709,11 +642,11 @@ "type": "object" }, "correlation": { - "$ref": "#/components/schemas/LicenseReport.CorrelationRecord" + "$ref": "#/components/schemas/Report.CorrelationRecord" }, "licenseData": { "additionalProperties": { - "$ref": "#/components/schemas/LicenseReport.LicenseData" + "$ref": "#/components/schemas/LicenseReportV0.LicenseData" } } }, @@ -724,105 +657,838 @@ ], "title": "License Report - Complete Object" }, - "LicenseEntitlement.Shield": { - "description": "Record that describes the purchased licenses for a specific tenant. More than one of these can be active at a single time.", + "LicenseReportV1": { + "description": "Completely calculated license report V1 structure that is the result of a complete run.", + "examples": [ + { + "availableLicense": [ + { + "count": 10, + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "123e4567-e89b-12d3-a456-426614174000" + ] + } + ], + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + "principalData": { + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + }, + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Software Engineer", + "idpDepartment": "Engineering", + "idpOfficeLocation": "Building 1", + "idpEmployeeType": "Full-Time" + } + } + } + }, + "schemaVersion": 1 + } + ], + "type": "object", "properties": { - "correlationId": { - "description": "Used to correlate the license entitlements with other records.", + "availableLicense": { + "type": "array", + "description": "Array of license bundles available. Each item includes the total purchased, the unique license bundle ID, and a list of associated service plan list.", + "items": { + "type": "object", + "required": [ + "count", + "id", + "servicePlanList" + ], + "properties": { + "count": { + "type": "integer", + "format": "int32", + "description": "Number of licenses that are purchased of the specific license.", + "examples": [ + 10 + ] + }, + "id": { + "type": "string", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "description": "Well known ID of the license bundle.", + "examples": [ + "09d9b4dc-b229-4f06-a22a-617c82091e21" + ] + }, + "servicePlanList": { + "type": "array", + "items": { + "type": "string", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "description": "Well known ID of the service plan.", + "examples": [ + "ff417b87-8f30-4250-94bb-8551cab0453b" + ] + }, + "description": "List of available service plans for the current license.", + "examples": [ + [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "f0578fdb-bbf3-43a0-939d-af4a7ddf2532" + ] + ] + } + }, + "examples": [ + { + "count": 10, + "id": "034d1003-cab4-4a91-9ebc-c8931fdf0063", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ] + }, "examples": [ - "e097a3f5-9599-44a2-8923-fd3276c83ae1" - ], - "format": "uuid", - "maxLength": 36, - "minLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", - "readOnly": true, - "type": "string" + [ + { + "count": 10, + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "123e4567-e89b-12d3-a456-426614174000" + ] + }, + { + "count": 20, + "id": "e7358cd2-fea1-4dad-9ff1-e344f9a2b93f", + "servicePlanList": [ + "73d8d3d6-b398-4665-8c64-15e63a75a3b1" + ] + } + ] + ] }, - "enterpriseDeviceCount": { - "description": "Count of Enterprise Devices that are allowed to be managed.", + "correlation": { + "$ref": "#/components/schemas/Report.CorrelationRecord" + }, + "principalData": { + "$ref": "#/components/schemas/Report.PrincipalData" + }, + "schemaVersion": { + "type": "integer", + "format": "int32", + "description": "Version number of the license report schema.", "examples": [ - 5 + 1 + ] + } + }, + "required": [ + "availableLicense", + "correlation", + "principalData", + "schemaVersion" + ], + "title": "License Report V1 - Complete Object" + }, + "Report.CorrelationRecord": { + "description": "Metadata that describes the execution session (run) that is used to tie/relate report versions together.", + "examples": [ + { + "auditTenantAccount": "priv-user@example.com", + "correlationId": "9d838115-0868-45d4-b8a5-98adc1af7e42", + "reportTenantAccount": "ent-user@example.com", + "tenantId": "7e536189-b2dd-4c8b-98b1-9b174777883f", + "createdAt": "2024-08-01T21:13:12.821Z", + "updatedAt": "2024-08-01T21:13:12.821Z" + } + ], + "properties": { + "auditTenantAccount": { + "description": "The user account used to retrieve the information in the tenant being audited.", + "examples": [ + "admin-user@example.com" ], - "format": "int32", - "type": "integer" + "format": "email", + "type": "string" }, - "enterpriseInterfaceCount": { - "description": "Count of Enterprise Interfaces that are allowed to be managed.", + "correlationId": { + "description": "The ID of the execution session (run) that is used to tie/relate all of the data together.", "examples": [ - 6 + "88da2253-758f-4135-9d37-64448c8b65c1" ], - "format": "int32", - "type": "integer" + "format": "uuid", + "type": "string", + "pattern": "^\\w+-\\w+-\\w+-\\w+-\\w+$" }, - "enterpriseIntermediaryCount": { - "description": "Count of Enterprise Intermediaries that are allowed to be managed.", + "reportTenantAccount": { + "description": "User account used to store/report the report to the SHI Lab cloud service.", "examples": [ - 7 + "generic-user@example.com" ], - "format": "int32", - "type": "integer" + "format": "email", + "type": "string" }, - "enterpriseUserCount": { - "description": "Count of Enterprise Users that are allowed to be managed.", + "tenantId": { + "description": "Unique ID of customer's Microsoft tenant that the report is auditing.", "examples": [ - 8 + "0e1fe83f-a33f-4250-8546-225b8d45ae01" ], - "format": "int32", - "type": "integer" + "format": "uuid", + "type": "string", + "pattern": "^\\w+-\\w+-\\w+-\\w+-\\w+$" }, - "notValidAfter": { - "description": "Date that the entitlement expires at.", + "createdAt": { + "description": "Timestamp of when the report was created.", "examples": [ - "2024-07-30T17:35:24.044Z" + "2024-08-01T21:12:22.148Z" ], "format": "date-time", "type": "string" }, - "notValidBefore": { - "description": "Date that the entitlement becomes active at.", + "updatedAt": { + "description": "Timestamp of when the report was last updated.", "examples": [ - "2024-07-30T17:37:15.300Z" + "2024-08-01T21:12:22.148Z" ], "format": "date-time", "type": "string" + } + }, + "required": [ + "auditTenantAccount" + ], + "title": "License Report - Correlation Record", + "type": "object" + }, + "Report.PrincipalData": { + "description": "Contains user and device records included in the report, detailing assigned services, licenses, consumed services, and related metadata for each principal.", + "type": "object", + "required": [ + "device", + "user" + ], + "properties": { + "user": { + "title": "User Principal Records", + "type": "object", + "description": "Object containing user records, each keyed by user ID. Includes assigned services, licenses, consumed services, inferred attributes, metadata, and enhanced identity data for each user.", + "additionalProperties": { + "type": "object", + "required": [ + "assignedService", + "assignedLicense", + "consumedService", + "llmInferred", + "principalMetadata", + "enhancedData" + ], + "properties": { + "assignedService": { + "$ref": "#/components/schemas/Report.PrincipalData.CommonService" + }, + "assignedLicense": { + "$ref": "#/components/schemas/Report.PrincipalData.AssignedLicense" + }, + "consumedService": { + "$ref": "#/components/schemas/Report.PrincipalData.CommonService" + }, + "llmInferred": { + "title": "Principal Inferred Attributes", + "type": "object", + "required": [ + "isServiceAccount", + "isFrontlineWorker", + "isTempWorker" + ], + "description": "Inferred principal attributes, showing if the account is a service account, frontline worker, temporary worker.", + "properties": { + "isServiceAccount": { + "description": "Indicates if the account is a service account.", + "type": [ + "boolean", + "null" + ], + "examples": [ + true, + null + ] + }, + "isFrontlineWorker": { + "description": "Indicates if the user is a frontline worker.", + "type": [ + "boolean", + "null" + ], + "examples": [ + true, + null + ] + }, + "isTempWorker": { + "description": "Indicates if the user is a temporary worker.", + "type": [ + "boolean", + "null" + ], + "examples": [ + true, + null + ] + } + }, + "examples": [ + { + "isFrontlineWorker": false, + "isTempWorker": true, + "isServiceAccount": null + } + ] + }, + "principalMetadata": { + "$ref": "#/components/schemas/Report.PrincipalData.PrincipalMetadata" + }, + "enhancedData": { + "title": "User Enhanced Identity Data", + "description": "Additional identity details for the user, such as principal name, job title, department, office location, and employee type; present only if customer consented, otherwise null.", + "oneOf": [ + { + "type": "object", + "required": [ + "userPrincipalName", + "idpJobTitle", + "idpDepartment", + "idpOfficeLocation", + "idpEmployeeType" + ], + "properties": { + "userPrincipalName": { + "type": "string", + "description": "The user's principal name (UPN).", + "examples": [ + "user@example.com" + ] + }, + "idpJobTitle": { + "type": [ + "string", + "null" + ], + "description": "The user's job title.", + "examples": [ + "Engineer", + null + ] + }, + "idpDepartment": { + "type": [ + "string", + "null" + ], + "description": "The user's department.", + "examples": [ + "IT", + null + ] + }, + "idpOfficeLocation": { + "type": [ + "string", + "null" + ], + "description": "The user's office location.", + "examples": [ + "HQ", + null + ] + }, + "idpEmployeeType": { + "type": [ + "string", + "null" + ], + "description": "The user's employee type.", + "examples": [ + "Permanent", + null + ] + } + }, + "examples": [ + { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Permanent" + } + ] + }, + { + "type": "null", + "description": "No data or unused." + } + ], + "examples": [ + { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Permanent" + }, + null + ] + } + } + }, + "examples": [ + { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Full-Time" + } + } + } + ] }, - "privilegedDeviceCount": { - "description": "Count of Privileged Devices (PAW) that are allowed to be managed.", + "device": { + "title": "Device Principal Records", + "type": "object", + "description": "Object containing device records, each keyed by device ID. Includes assigned services, licenses, consumed services, and metadata for each device.", + "additionalProperties": { + "type": "object", + "required": [ + "assignedService", + "assignedLicense", + "consumedService", + "principalMetadata" + ], + "properties": { + "assignedService": { + "$ref": "#/components/schemas/Report.PrincipalData.CommonService" + }, + "assignedLicense": { + "$ref": "#/components/schemas/Report.PrincipalData.AssignedLicense" + }, + "consumedService": { + "$ref": "#/components/schemas/Report.PrincipalData.CommonService" + }, + "principalMetadata": { + "$ref": "#/components/schemas/Report.PrincipalData.PrincipalMetadata" + } + } + }, "examples": [ - 9 + { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + ] + } + }, + "examples": [ + { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Full-Time" + } + } + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + } + ], + "title": "Report - Principal Data" + }, + "Report.PrincipalData.CommonService": { + "type": "object", + "description": "Represents a service assignment or usage for a principal, which can be a feature breakdown, a usage count, or null if not applicable.", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/components/schemas/Report.FeatureBreakdown" + }, + { + "type": "number", + "description": "Number of in-scope principals or usage count.", + "examples": [ + 10 + ] + }, + { + "type": "null", + "description": "No data or unused." + } + ], + "examples": [ + { + "featureA": true, + "featureB": false, + "featureC": null + } + ] + }, + "examples": [ + { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + }, + "a1b2c3d4-e5f6-7890-abcd-ef1234567890": 5, + "123e4567-e89b-12d3-a456-426614174000": null + } + ], + "title": "Report - PrincipalData - Common Service" + }, + "Report.PrincipalData.AssignedLicense": { + "description": "List of licenses assigned to a principal, including license ID and associated service plans.", + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "servicePlanList" + ], + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Unique identifier for the assigned license.", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "examples": [ + "88da2253-758f-4135-9d37-64448c8b65c1" + ] + }, + "servicePlanList": { + "type": "array", + "items": { + "type": "string", + "format": "uuid", + "description": "Unique identifier for the service plan.", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "examples": [ + [ + "88da2253-758f-4135-9d37-64448c8b65c1" + ] + ] + }, + "description": "List of service plans associated with the assigned license." + } + }, + "examples": [ + { + "id": "6318eedb-d578-4917-93d5-26a49fe29431", + "servicePlanList": [ + "d1c81651-c68e-4603-8009-579ac5202286" + ] + } + ] + }, + "examples": [ + [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "123e4567-e89b-12d3-a456-426614174000" + ] + }, + { + "id": "7e8f9a0b-1c2d-3e4f-5a6b-7c8d9e0f1a2b", + "servicePlanList": [ + "abcdefab-cdef-abcd-efab-cdefabcdefab" + ] + } + ] + ], + "title": "Report - PrincipalData - Assigned License" + }, + "Report.PrincipalData.PrincipalMetadata": { + "type": "object", + "description": "Metadata about the principal, such as whether the account is a shared.", + "required": [ + "sharedMailbox" + ], + "properties": { + "sharedMailbox": { + "type": "boolean", + "examples": [ + true + ] + } + }, + "examples": [ + { + "sharedMailbox": true + } + ], + "title": "Report - PrincipalData - Principal Meta Data" + }, + "LicenseEntitlement.Shield": { + "description": "Record that describes the purchased licenses for a specific tenant. More than one of these can be active at a single time.", + "properties": { + "correlationId": { + "description": "Used to correlate the license entitlements with other records.", + "examples": [ + "e097a3f5-9599-44a2-8923-fd3276c83ae1" ], - "format": "int32", - "type": "integer" + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "readOnly": true, + "type": "string" }, - "privilegedInterfaceCount": { - "description": "Count of Privileged Interfaces that are allowed to be managed.", + "enterpriseDeviceCount": { + "description": "Count of Enterprise Devices that are allowed to be managed.", "examples": [ - 10 + 5 ], "format": "int32", "type": "integer" }, - "privilegedIntermediaryCount": { - "description": "Count of Privileged Intermediaries that are allowed to be managed.", + "enterpriseInterfaceCount": { + "description": "Count of Enterprise Interfaces that are allowed to be managed.", "examples": [ - 11 + 6 ], "format": "int32", "type": "integer" }, - "privilegedUserCount": { - "description": "Count of Privileged Users that are allowed to be managed.", + "enterpriseIntermediaryCount": { + "description": "Count of Enterprise Intermediaries that are allowed to be managed.", "examples": [ - 12 + 7 ], "format": "int32", "type": "integer" }, - "purchaseId": { - "description": "This could be any value used to correlate the purchase operation to this entitlement record.", + "enterpriseUserCount": { + "description": "Count of Enterprise Users that are allowed to be managed.", "examples": [ - "Bob's your uncle." + 8 + ], + "format": "int32", + "type": "integer" + }, + "notValidAfter": { + "description": "Date that the entitlement expires at.", + "examples": [ + "2024-07-30T17:35:24.044Z" + ], + "format": "date-time", + "type": "string" + }, + "notValidBefore": { + "description": "Date that the entitlement becomes active at.", + "examples": [ + "2024-07-30T17:37:15.300Z" + ], + "format": "date-time", + "type": "string" + }, + "privilegedDeviceCount": { + "description": "Count of Privileged Devices (PAW) that are allowed to be managed.", + "examples": [ + 9 + ], + "format": "int32", + "type": "integer" + }, + "privilegedInterfaceCount": { + "description": "Count of Privileged Interfaces that are allowed to be managed.", + "examples": [ + 10 + ], + "format": "int32", + "type": "integer" + }, + "privilegedIntermediaryCount": { + "description": "Count of Privileged Intermediaries that are allowed to be managed.", + "examples": [ + 11 + ], + "format": "int32", + "type": "integer" + }, + "privilegedUserCount": { + "description": "Count of Privileged Users that are allowed to be managed.", + "examples": [ + 12 + ], + "format": "int32", + "type": "integer" + }, + "purchaseId": { + "description": "This could be any value used to correlate the purchase operation to this entitlement record.", + "examples": [ + "Bob's your uncle." ], "type": "string" }, @@ -1467,6 +2133,174 @@ ] } ] + }, + "ArchitectureReportV1": { + "description": "Completely calculated architecture report structure that is the result of a complete run.", + "type": "object", + "properties": { + "correlation": { + "$ref": "#/components/schemas/Report.CorrelationRecord" + }, + "principalData": { + "$ref": "#/components/schemas/ArchitectureReport.PrincipalData" + }, + "tenantMetadata": { + "$ref": "#/components/schemas/ArchitectureReportV1.TenantMetadata" + }, + "schemaVersion": { + "type": "integer", + "format": "int32", + "description": "Version number of the license report schema.", + "examples": [ + 1 + ] + } + }, + "required": [ + "correlation", + "tenantMetadata", + "principalData", + "schemaVersion" + ], + "examples": [ + { + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Full-Time" + } + } + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + }, + "tenantMetadata": { + "totalDeviceCount": 1, + "totalGuestCount": 1, + "totalMemberCount": 1, + "totalUserCount": 1 + }, + "schemaVersion": 1 + } + ], + "title": "Architecture Report V1 - Complete Object" + }, + "ArchitectureReportV1.TenantMetadata": { + "description": "This is the the tenant data calculated for the architecture report", + "examples": [ + { + "totalDeviceCount": 1, + "totalGuestCount": 1, + "totalMemberCount": 1, + "totalUserCount": 1 + } + ], + "properties": { + "totalDeviceCount": { + "description": "The count of total devices within the tenant", + "examples": [ + 1 + ], + "format": "int32", + "type": "integer" + }, + "totalGuestCount": { + "description": "The count of total guests within the tenant", + "examples": [ + 1 + ], + "format": "int32", + "type": "integer" + }, + "totalMemberCount": { + "description": "The count of total members within the tenant", + "examples": [ + 1 + ], + "format": "int32", + "type": "integer" + }, + "totalUserCount": { + "description": "The count of total users within the tenant", + "examples": [ + 1 + ], + "format": "int32", + "type": "integer" + } + }, + "required": [ + "totalDeviceCount", + "totalGuestCount", + "totalMemberCount", + "totalUserCount" + ], + "title": "Architecture Report V1 - Tenant Metadata" + }, + "ArchitectureReport.PrincipalData": { + "description": "Contains user and device records included in the architecture report, detailing assigned services, licenses, consumed services, and related metadata for each principal.", + "$ref": "#/components/schemas/Report.PrincipalData", + "title": "Architecture Report - Principal Data" } }, "securitySchemes": { @@ -1489,7 +2323,7 @@ }, "description": "Collects data from the various SHI Lab products and makes it available in a standardized way.", "title": "SHI Data Gateway", - "version": "2.3.1" + "version": "2.4.0" }, "openapi": "3.1.1", "paths": { @@ -1607,7 +2441,7 @@ } }, "schema": { - "$ref": "#/components/schemas/LicenseReport" + "$ref": "#/components/schemas/LicenseReportV0" } } } @@ -1673,7 +2507,7 @@ } }, "schema": { - "$ref": "#/components/schemas/LicenseReport" + "$ref": "#/components/schemas/LicenseReportV0" } } }, @@ -1739,7 +2573,7 @@ "type": "array", "minItems": 0, "items": { - "$ref": "#/components/schemas/LicenseReport.CorrelationRecord" + "$ref": "#/components/schemas/Report.CorrelationRecord" }, "examples": [ [ @@ -1826,7 +2660,7 @@ "type": "array", "minItems": 0, "items": { - "$ref": "#/components/schemas/LicenseReport.CorrelationRecord" + "$ref": "#/components/schemas/Report.CorrelationRecord" }, "examples": [ [ @@ -1939,7 +2773,7 @@ } }, "schema": { - "$ref": "#/components/schemas/LicenseReport" + "$ref": "#/components/schemas/LicenseReportV0" } } }, @@ -2061,7 +2895,7 @@ } }, "schema": { - "$ref": "#/components/schemas/LicenseReport" + "$ref": "#/components/schemas/LicenseReportV0" } } }, @@ -2113,40 +2947,104 @@ "summary": "Delete the Specified License Report for Specified Tenant" } }, - "/Api/Chat/LicenseGpt": { + "/Api/V1/LicenseReport": { "post": { - "summary": "Inquire License Data from AI Agent", - "description": "Enables a conversation mode with AI agent to request details of the available license reports for the currently authenticated tenant.\n\nThis endpoint requires the `LicenseReport.Read`, `LicenseReport.ReadWrite`, `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/Api/Chat/LicenseGpt/Post", + "description": "Store the results of a license analytics run.\n\nThis endpoint requires the `LicenseReport.ReadWrite`, or `LicenseReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/LicenseReport/Post", "requestBody": { "content": { "application/json": { - "schema": { - "description": "Collection of conversation parts provided by user to be ingested by the agent", - "type": "array", - "items": { - "$ref": "#/components/schemas/Chat.OpenAIChatMessage" - } - }, "examples": { - "Tool call": { - "summary": "Example tool call request", - "description": "An example request that represent a message initiated by the chat assistant to call a tool function for the currently authenticated tenant.", + "License Report": { + "description": "Sample, truncated report from an example customer environment. The request body is the License Report V1 that to be stored.", + "summary": "Example License Report Request", "value": { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ + "availableLicense": [ { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" + "count": 10, + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "123e4567-e89b-12d3-a456-426614174000" + ] + } + ], + "correlation": { + "auditTenantAccount": "user@example.com" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Software Engineer", + "idpDepartment": "Engineering", + "idpOfficeLocation": "Building 1", + "idpEmployeeType": "Full-Time" + } + } + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } } } - ] + }, + "schemaVersion": 1 } + }, + "Ignorant License Report Request": { + "description": "Looks like automation started without checking the docs—give them a quick read to make things easier!", + "summary": "Docs First, Smooth Automation Ahead", + "value": {} } + }, + "schema": { + "$ref": "#/components/schemas/LicenseReportV1" } } } @@ -2155,155 +3053,97 @@ "200": { "content": { "application/json": { - "schema": { - "examples": [ - { - "messageList": [ - { - "role": "user", - "content": "Hello" - }, - { - "role": "assistant", - "content": "Hello, how can I assist you today?" - }, - { - "role": "user", - "content": "Can you show me what correlation records I have?" - }, + "examples": { + "License Report V1": { + "description": "Sample, truncated report from an example customer environment. This will return the same report as the request input.", + "summary": "Example of license report stored.", + "value": { + "availableLicense": [ { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ - { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" + "count": 10, + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "123e4567-e89b-12d3-a456-426614174000" + ] + } + ], + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Software Engineer", + "idpDepartment": "Engineering", + "idpOfficeLocation": "Building 1", + "idpEmployeeType": "Full-Time" } - ] - }, - { - "role": "tool", - "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", - "tool_call_id": "call_abc123" + } }, - { - "role": "assistant", - "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } } - ], - "responseText": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" - } - ], - "type": "object", - "properties": { - "messageList": { - "type": "array", - "description": "List of message objects in current conversation", - "items": { - "$ref": "#/components/schemas/Chat.OpenAIChatMessage" }, - "examples": [ - [ - { - "role": "user", - "content": "Hello" - }, - { - "role": "assistant", - "content": "Hello, how can I assist you today?" - }, - { - "role": "user", - "content": "Can you show me what correlation records I have?" - }, - { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ - { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" - } - } - ] - }, - { - "role": "tool", - "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", - "tool_call_id": "call_abc123" - }, - { - "role": "assistant", - "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" - } - ] - ] - }, - "responseText": { - "type": "string", - "description": "Most recent response text", - "examples": [ - "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" - ] - } - }, - "required": [ - "messageList", - "responseText" - ] - }, - "examples": { - "Chat response": { - "summary": "Example chat response with context", - "description": "An example chat response that includes context of current chat session with the request appended for the currently authenticated tenant.", - "value": { - "messageList": [ - { - "role": "user", - "content": "Hello" - }, - { - "role": "assistant", - "content": "Hello, how can I assist you today?" - }, - { - "role": "user", - "content": "Can you show me what correlation records I have?" - }, - { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ - { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" - } - } - ] - }, - { - "role": "tool", - "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", - "tool_call_id": "call_abc123" - }, - { - "role": "assistant", - "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" - } - ], - "responseText": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + "schemaVersion": 1 } } + }, + "schema": { + "$ref": "#/components/schemas/LicenseReportV1" } } }, @@ -2311,226 +3151,728 @@ }, "400": { "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "$ref": "#/components/responses/500" } }, "tags": [ - "Chat" - ] + "License Analytics" + ], + "summary": "Store License Analytics Data" } }, - "/Api/Chat/LicenseGpt/Tenant/{tenantId}": { - "post": { - "summary": "Inquire License Data from AI Agent", - "description": "Enables a conversation mode with AI agent to request details of the available license reports for the specified tenant.\n\nThis endpoint requires the `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/Api/Chat/LicenseGpt/Tenant/:tenantId/Post", + "/Api/V1/LicenseReport/Correlation": { + "get": { + "description": "Retrieves the list of correlation records for the authenticated tenant. Can use filters targeting creation date to limit results. Correlation records store the metadata for a specific license report.\n\nThis endpoint requires the `LicenseReport.Read`, `LicenseReport.Read.All`, `LicenseReport.ReadWrite`, or `LicenseReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/LicenseReport/Correlation/Get", "parameters": [ { - "$ref": "#/components/parameters/tenantId" + "$ref": "#/components/parameters/dateStart" + }, + { + "$ref": "#/components/parameters/dateEnd" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "description": "Collection of conversation parts provided by user to be ingested by the agent", - "type": "array", - "items": { - "$ref": "#/components/schemas/Chat.OpenAIChatMessage" + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Example Correlation Records": { + "description": "Sample list of correlation records for the current authenticated tenant.", + "summary": "Available Correlation Records", + "value": [ + { + "auditTenantAccount": "user@example.com", + "correlationId": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + { + "auditTenantAccount": "user@example.com", + "correlationId": "5888a922-9f5b-45fd-bd5f-de3283d6a79e", + "createdAt": "2023-12-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + } + ] + } }, - "examples": [ - [ - { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ - { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" - } - } - ] - } - ] - ] - }, - "examples": { - "Chat request": { - "summary": "Example chat request", - "description": "An example request that represent a message initiated by the chat assistant to call a tool function for the specified tenant.", - "value": [ - { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ - { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" - } - } - ] - } + "schema": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/Report.CorrelationRecord" + }, + "examples": [ + [ + { + "auditTenantAccount": "user@example.com", + "correlationId": "547404d4-8734-415f-a7ca-e9c1ffb95e48", + "createdAt": "2023-12-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + { + "auditTenantAccount": "user@example.com", + "correlationId": "d76878d6-1495-4243-a334-a82bb9818cd0", + "createdAt": "2023-12-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + } + ] ] } } - } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, + "tags": [ + "License Analytics" + ], + "summary": "Retrieve the List of Correlation Records" + } + }, + "/Api/V1/LicenseReport/Correlation/Tenant/{tenantId}": { + "get": { + "description": "Retrieves the list of correlation records for the specified tenant. Can use filters targeting creation date to limit results. Correlation records store the metadata for a specific license report.\n\nThis endpoint requires the `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/V1/LicenseReport/Correlation/Tenant/:tenantId/Get", + "parameters": [ + { + "$ref": "#/components/parameters/tenantId" + }, + { + "$ref": "#/components/parameters/dateStart" + }, + { + "$ref": "#/components/parameters/dateEnd" + } + ], "responses": { "200": { "content": { "application/json": { + "examples": { + "Example Correlation Records": { + "description": "Sample list of correlation records for the specified tenant.", + "summary": "Available Correlation Records", + "value": [ + { + "auditTenantAccount": "user@example.com", + "correlationId": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + { + "auditTenantAccount": "user@example.com", + "correlationId": "e0d101e8-6f1e-40a9-a66f-cad4112c9a59", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + } + ] + } + }, "schema": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/Report.CorrelationRecord" + }, "examples": [ - { - "messageList": [ - { - "role": "user", - "content": "Hello" - }, - { - "role": "assistant", - "content": "Hello, how can I assist you today?" - }, - { - "role": "user", - "content": "Can you show me what correlation records I have?" - }, + [ + { + "auditTenantAccount": "user@example.com", + "correlationId": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + { + "auditTenantAccount": "user@example.com", + "correlationId": "e0d101e8-6f1e-40a9-a66f-cad4112c9a59", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + } + ] + ] + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "tags": [ + "License Analytics" + ], + "summary": "Retrieve the List of Correlation Records for Specified Tenant" + } + }, + "/Api/V1/LicenseReport/Correlation/{correlationId}/Data": { + "get": { + "description": "Retrieves the full license report v1 for the specified correlation ID in the authenticated tenant. The license report v1 contains all of the license usage and compliance information with the required correlation data.\n\nThis endpoint requires the `LicenseReport.Read`, `LicenseReport.Read.All`, `LicenseReport.ReadWrite`, or `LicenseReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/LicenseReport/Correlation/:correlationId/Data/Get", + "parameters": [ + { + "$ref": "#/components/parameters/correlationId" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Example License Report V1": { + "description": "Sample, truncated license report v1 from an example customer environment for a correlation record of the current authenticated tenant.", + "summary": "Example License Report V1", + "value": { + "availableLicense": [ { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ - { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" - } - } + "count": 10, + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "123e4567-e89b-12d3-a456-426614174000" ] - }, - { - "role": "tool", - "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", - "tool_call_id": "call_abc123" - }, - { - "role": "assistant", - "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" } ], - "responseText": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" - } - ], - "type": "object", - "properties": { - "messageList": { - "type": "array", - "description": "List of message objects in current conversation", - "items": { - "$ref": "#/components/schemas/Chat.OpenAIChatMessage" + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" }, - "examples": [ - [ - { - "role": "user", - "content": "Hello" - }, - { - "role": "assistant", - "content": "Hello, how can I assist you today?" - }, - { - "role": "user", - "content": "Can you show me what correlation records I have?" - }, - { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" - } + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] } - ] - }, - { - "role": "tool", - "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", - "tool_call_id": "call_abc123" - }, - { - "role": "assistant", - "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Software Engineer", + "idpDepartment": "Engineering", + "idpOfficeLocation": "Building 1", + "idpEmployeeType": "Full-Time" + } } - ] - ] - }, - "responseText": { - "type": "string", - "description": "Most recent response text", - "examples": [ - "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" - ] + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + }, + "schemaVersion": 1 } - }, - "required": [ - "messageList", - "responseText" - ] + } }, + "schema": { + "$ref": "#/components/schemas/LicenseReportV1" + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "tags": [ + "License Analytics" + ], + "summary": "Retrieve the Specified License Report V1" + }, + "delete": { + "description": "Deletes the full license report v1 for the specified correlation ID.\n\nThis endpoint requires the `LicenseReport.ReadWrite`, or `LicenseReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/LicenseReport/Correlation/:correlationId/Data/delete", + "parameters": [ + { + "$ref": "#/components/parameters/correlationId" + } + ], + "responses": { + "201": { + "description": "Deleted successfully" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "tags": [ + "License Analytics" + ], + "summary": "Delete the Specified License Report for the currently authenticated tenant." + } + }, + "/Api/V1/LicenseReport/Correlation/{correlationId}/Tenant/{tenantId}/Data": { + "get": { + "description": "Retrieves the full license report v1 for the specified correlation ID and tenant. The license report v1 contains all of the license usage and compliance information with the required correlation data.\n\nThis endpoint requires the `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/V1/LicenseReport/Correlation/:correlationId/Tenant/:tenantId/Data/Get", + "parameters": [ + { + "$ref": "#/components/parameters/correlationId" + }, + { + "$ref": "#/components/parameters/tenantId" + } + ], + "responses": { + "200": { + "content": { + "application/json": { "examples": { - "Chat response": { - "summary": "Example chat response", - "description": "An example chat response that includes context of current chat session with the request appended for the specified tenant.", + "License Report V1": { + "description": "Sample, truncated report from an example customer environment for a correlation record of the specified tenant.", + "summary": "Example License Report V1", "value": { - "messageList": [ - { - "role": "user", - "content": "Hello" - }, - { - "role": "assistant", - "content": "Hello, how can I assist you today?" - }, - { - "role": "user", - "content": "Can you show me what correlation records I have?" - }, + "availableLicense": [ { - "role": "assistant", - "content": "What are the available IDs?", - "tool_calls": [ - { - "id": "call_abc123", - "type": "function", - "function": { - "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", - "name": "getCorrelationIDs" + "count": 10, + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "123e4567-e89b-12d3-a456-426614174000" + ] + } + ], + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Software Engineer", + "idpDepartment": "Engineering", + "idpOfficeLocation": "Building 1", + "idpEmployeeType": "Full-Time" } - ] - }, - { - "role": "tool", - "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", - "tool_call_id": "call_abc123" + } }, - { - "role": "assistant", - "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } } - ], + }, + "schemaVersion": 1 + } + } + }, + "schema": { + "$ref": "#/components/schemas/LicenseReportV1" + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "tags": [ + "License Analytics" + ], + "summary": "Retrieve the Specified License Report V1 for Specified Tenant" + }, + "delete": { + "description": "Deletes the full license report v1 for the specified correlation ID and tenant.\n\nThis endpoint requires the `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/V1/LicenseReport/Correlation/:correlationId/Tenant/:tenantId/Data/delete", + "parameters": [ + { + "$ref": "#/components/parameters/correlationId" + }, + { + "$ref": "#/components/parameters/tenantId" + } + ], + "responses": { + "201": { + "description": "Deleted successfully" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "tags": [ + "License Analytics" + ], + "summary": "Delete the Specified License Report V1 for Specified Tenant" + } + }, + "/Api/Chat/LicenseGpt": { + "post": { + "summary": "Inquire License Data from AI Agent", + "description": "Enables a conversation mode with AI agent to request details of the available license reports for the currently authenticated tenant.\n\nThis endpoint requires the `LicenseReport.Read`, `LicenseReport.ReadWrite`, `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/Chat/LicenseGpt/Post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "Collection of conversation parts provided by user to be ingested by the agent", + "type": "array", + "items": { + "$ref": "#/components/schemas/Chat.OpenAIChatMessage" + } + }, + "examples": { + "Tool call": { + "summary": "Example tool call request", + "description": "An example request that represent a message initiated by the chat assistant to call a tool function for the currently authenticated tenant.", + "value": { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + } + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "examples": [ + { + "messageList": [ + { + "role": "user", + "content": "Hello" + }, + { + "role": "assistant", + "content": "Hello, how can I assist you today?" + }, + { + "role": "user", + "content": "Can you show me what correlation records I have?" + }, + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + }, + { + "role": "tool", + "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", + "tool_call_id": "call_abc123" + }, + { + "role": "assistant", + "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ], + "responseText": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ], + "type": "object", + "properties": { + "messageList": { + "type": "array", + "description": "List of message objects in current conversation", + "items": { + "$ref": "#/components/schemas/Chat.OpenAIChatMessage" + }, + "examples": [ + [ + { + "role": "user", + "content": "Hello" + }, + { + "role": "assistant", + "content": "Hello, how can I assist you today?" + }, + { + "role": "user", + "content": "Can you show me what correlation records I have?" + }, + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + }, + { + "role": "tool", + "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", + "tool_call_id": "call_abc123" + }, + { + "role": "assistant", + "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ] + ] + }, + "responseText": { + "type": "string", + "description": "Most recent response text", + "examples": [ + "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + ] + } + }, + "required": [ + "messageList", + "responseText" + ] + }, + "examples": { + "Chat response": { + "summary": "Example chat response with context", + "description": "An example chat response that includes context of current chat session with the request appended for the currently authenticated tenant.", + "value": { + "messageList": [ + { + "role": "user", + "content": "Hello" + }, + { + "role": "assistant", + "content": "Hello, how can I assist you today?" + }, + { + "role": "user", + "content": "Can you show me what correlation records I have?" + }, + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + }, + { + "role": "tool", + "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", + "tool_call_id": "call_abc123" + }, + { + "role": "assistant", + "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ], "responseText": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" } } @@ -2544,70 +3886,643 @@ } }, "tags": [ - "Chat" + "Chat" + ] + } + }, + "/Api/Chat/LicenseGpt/Tenant/{tenantId}": { + "post": { + "summary": "Inquire License Data from AI Agent", + "description": "Enables a conversation mode with AI agent to request details of the available license reports for the specified tenant.\n\nThis endpoint requires the `LicenseReport.Read.All`, or `LicenseReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/Chat/LicenseGpt/Tenant/:tenantId/Post", + "parameters": [ + { + "$ref": "#/components/parameters/tenantId" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "Collection of conversation parts provided by user to be ingested by the agent", + "type": "array", + "items": { + "$ref": "#/components/schemas/Chat.OpenAIChatMessage" + }, + "examples": [ + [ + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + } + ] + ] + }, + "examples": { + "Chat request": { + "summary": "Example chat request", + "description": "An example request that represent a message initiated by the chat assistant to call a tool function for the specified tenant.", + "value": [ + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + } + ] + } + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "examples": [ + { + "messageList": [ + { + "role": "user", + "content": "Hello" + }, + { + "role": "assistant", + "content": "Hello, how can I assist you today?" + }, + { + "role": "user", + "content": "Can you show me what correlation records I have?" + }, + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + }, + { + "role": "tool", + "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", + "tool_call_id": "call_abc123" + }, + { + "role": "assistant", + "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ], + "responseText": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ], + "type": "object", + "properties": { + "messageList": { + "type": "array", + "description": "List of message objects in current conversation", + "items": { + "$ref": "#/components/schemas/Chat.OpenAIChatMessage" + }, + "examples": [ + [ + { + "role": "user", + "content": "Hello" + }, + { + "role": "assistant", + "content": "Hello, how can I assist you today?" + }, + { + "role": "user", + "content": "Can you show me what correlation records I have?" + }, + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + }, + { + "role": "tool", + "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", + "tool_call_id": "call_abc123" + }, + { + "role": "assistant", + "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ] + ] + }, + "responseText": { + "type": "string", + "description": "Most recent response text", + "examples": [ + "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + ] + } + }, + "required": [ + "messageList", + "responseText" + ] + }, + "examples": { + "Chat response": { + "summary": "Example chat response", + "description": "An example chat response that includes context of current chat session with the request appended for the specified tenant.", + "value": { + "messageList": [ + { + "role": "user", + "content": "Hello" + }, + { + "role": "assistant", + "content": "Hello, how can I assist you today?" + }, + { + "role": "user", + "content": "Can you show me what correlation records I have?" + }, + { + "role": "assistant", + "content": "What are the available IDs?", + "tool_calls": [ + { + "id": "call_abc123", + "type": "function", + "function": { + "arguments": "{\"startDate\":\"2025-07-01\",\"endDate\":\"2025-07-10\"}", + "name": "getCorrelationIDs" + } + } + ] + }, + { + "role": "tool", + "content": "{\"825a9d7e-0b62-4392-b8ef-ab6951a46ebd\":\"2025-07-03T18:39:50.828Z\",\"744c0878-3a82-48a7-b239-a1d4b9298a69\":\"2025-07-07T21:01:20.995Z\"}", + "tool_call_id": "call_abc123" + }, + { + "role": "assistant", + "content": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + ], + "responseText": "You have correlation records for the following dates:\n- July 3, 2025\n- July 7, 2025\n\nWould you like to see details from any of these correlation records?" + } + } + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + } + }, + "tags": [ + "Chat" + ] + } + }, + "/Api/Chat/UpdateDocs": { + "post": { + "description": "Sends a request to update the cached Data Gateway documentation if there is a newer version.\n\nThis endpoint requires the `LicenseGptCache.ReadWrite` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Chat/UpdateDocs/Post", + "responses": { + "204": { + "description": "Documentation updated successfully" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + } + }, + "summary": "Update Cached Documentation", + "tags": [ + "Chat" + ] + } + }, + "/Api/Entitlement/Shield": { + "post": { + "description": "Creates a new license entitlement (activation) for SHIELD.\n\nThis endpoint requires the `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/Entitlement/Shield/Post", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Specialized Purchase": { + "description": "Add-on purchase for the specified customer for some additional specialized licenses.", + "summary": "Specialized Purchase", + "value": { + "enterpriseDeviceCount": 0, + "enterpriseInterfaceCount": 0, + "enterpriseIntermediaryCount": 0, + "enterpriseUserCount": 0, + "notValidAfter": "2024-07-30T18:09:05.970Z", + "notValidBefore": "1970-01-01T00:00:00.000Z", + "privilegedDeviceCount": 0, + "privilegedInterfaceCount": 0, + "privilegedIntermediaryCount": 0, + "privilegedUserCount": 0, + "purchaseId": "ABC123", + "specializedDeviceCount": 50, + "specializedInterfaceCount": 3, + "specializedIntermediaryCount": 1, + "specializedUserCount": 50, + "tenantId": "4b00fb78-d291-4dbd-8c0a-c93ae20bffd1" + } + }, + "Initial Purchase": { + "description": "Complete suite of components purchased for the specified customer.", + "summary": "Initial Purchase", + "value": { + "enterpriseDeviceCount": 7000, + "enterpriseInterfaceCount": 500, + "enterpriseIntermediaryCount": 10, + "enterpriseUserCount": 7000, + "notValidAfter": "2024-07-30T18:12:23.049Z", + "notValidBefore": "1970-01-01T00:00:00.000Z", + "privilegedDeviceCount": 200, + "privilegedInterfaceCount": 50, + "privilegedIntermediaryCount": 3, + "privilegedUserCount": 200, + "purchaseId": "654DEF", + "specializedDeviceCount": 1000, + "specializedInterfaceCount": 11, + "specializedIntermediaryCount": 2, + "specializedUserCount": 1000, + "tenantId": "58ffb93f-5098-4630-bfc4-eeb4664208b4" + } + }, + "Ignorant Entitlement Creation Request": { + "description": "Clueless dev trying to automate this application without reading the docs. RTFM!", + "summary": "Ignorant Entitlement Creation Request", + "value": {} + } + }, + "schema": { + "$ref": "#/components/schemas/LicenseEntitlement.Shield" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Small MSP": { + "description": "Example license entitlement for a small MSP.", + "summary": "Local MSP", + "value": { + "correlationId": "60594489-6022-4ddb-8aa5-288c8d356cf2", + "enterpriseDeviceCount": 25, + "enterpriseInterfaceCount": 25, + "enterpriseIntermediaryCount": 25, + "enterpriseUserCount": 25, + "notValidAfter": "2024-07-30T17:56:00.704Z", + "notValidBefore": "1970-01-01T00:00:00.000Z", + "privilegedDeviceCount": 10, + "privilegedInterfaceCount": 10, + "privilegedIntermediaryCount": 2, + "privilegedUserCount": 10, + "purchaseId": "Bob's your mother's brother.", + "specializedDeviceCount": 5, + "specializedInterfaceCount": 5, + "specializedIntermediaryCount": 0, + "specializedUserCount": 5, + "tenantId": "1948adeb-797f-466b-962d-cc708a69d08d" + } + }, + "Enterprise": { + "description": "Example license entitlement for an enterprise sized company.", + "summary": "Enterprise", + "value": { + "correlationId": "46569e8d-eeaa-42f4-b954-05a998108eee", + "enterpriseDeviceCount": 50000, + "enterpriseInterfaceCount": 50000, + "enterpriseIntermediaryCount": 100, + "enterpriseUserCount": 50000, + "notValidAfter": "2024-07-30T17:58:54.619Z", + "notValidBefore": "1970-01-01T00:00:00.000Z", + "privilegedDeviceCount": 300, + "privilegedInterfaceCount": 100, + "privilegedIntermediaryCount": 50, + "privilegedUserCount": 300, + "purchaseId": "Bob's your mother's brother.", + "specializedDeviceCount": 1000, + "specializedInterfaceCount": 5, + "specializedIntermediaryCount": 10, + "specializedUserCount": 1000, + "tenantId": "bf78263c-6cec-44bc-9893-024dde25a486" + } + } + }, + "schema": { + "$ref": "#/components/schemas/LicenseEntitlement.Shield" + } + } + }, + "description": "OK" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "tags": [ + "License Entitlement" + ], + "summary": "Creates a new License Entitlement for SHIELD." + } + }, + "/Api/Entitlement/Shield/Active": { + "get": { + "description": "Retrieves the count of licenses that are available to the authenticated tenant. No scopes (permissions) required.", + "operationId": "/Api/Entitlement/Shield/Active/Get", + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Small MSP": { + "description": "Example active license count for a small MSP for the currently authenticated tenant.", + "summary": "Local MSP", + "value": { + "enterpriseDeviceCount": 54, + "enterpriseInterfaceCount": 46, + "enterpriseIntermediaryCount": 2, + "enterpriseUserCount": 54, + "privilegedDeviceCount": 12, + "privilegedInterfaceCount": 52, + "privilegedIntermediaryCount": 4, + "privilegedUserCount": 12, + "specializedDeviceCount": 20, + "specializedInterfaceCount": 15, + "specializedIntermediaryCount": 0, + "specializedUserCount": 20 + } + }, + "No Licenses": { + "description": "Example license count for a company that doesn't have any licenses for the currently authenticated tenant..", + "summary": "No License", + "value": { + "enterpriseDeviceCount": 0, + "enterpriseInterfaceCount": 0, + "enterpriseIntermediaryCount": 0, + "enterpriseUserCount": 0, + "privilegedDeviceCount": 0, + "privilegedInterfaceCount": 0, + "privilegedIntermediaryCount": 0, + "privilegedUserCount": 0, + "specializedDeviceCount": 0, + "specializedInterfaceCount": 0, + "specializedIntermediaryCount": 0, + "specializedUserCount": 0 + } + }, + "Enterprise": { + "description": "Example active license count for an enterprise sized company for the currently authenticated tenant..", + "summary": "Enterprise", + "value": { + "enterpriseDeviceCount": 60000, + "enterpriseInterfaceCount": 500, + "enterpriseIntermediaryCount": 20, + "enterpriseUserCount": 60000, + "privilegedDeviceCount": 200, + "privilegedInterfaceCount": 450, + "privilegedIntermediaryCount": 15, + "privilegedUserCount": 200, + "specializedDeviceCount": 1000, + "specializedInterfaceCount": 50, + "specializedIntermediaryCount": 2, + "specializedUserCount": 1000 + } + } + }, + "schema": { + "$ref": "#/components/schemas/LicenseEntitlement.Shield.Count" + } + } + }, + "description": "OK" + }, + "401": { + "$ref": "#/components/responses/401" + } + }, + "tags": [ + "License Entitlement" + ], + "summary": "List of Available Licenses" + } + }, + "/Api/Entitlement/Shield/Tenant/{tenantId}": { + "get": { + "description": "Retrieves the list of license entitlements that are assigned to the specified tenant.\n\nThis endpoint requires the `LicenseEntitlement.Read.All`, or `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/Entitlement/Shield/Tenant/:tenantId/Get", + "parameters": [ + { + "$ref": "#/components/parameters/tenantId" + } + ], + "summary": "List of Entitlement Records for Specified Tenant", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/LicenseEntitlement.Shield" + }, + "examples": [ + [ + { + "correlationId": "e097a3f5-9599-44a2-8923-fd3276c83ae1", + "enterpriseDeviceCount": 5, + "enterpriseInterfaceCount": 6, + "enterpriseIntermediaryCount": 7, + "enterpriseUserCount": 8, + "notValidAfter": "2024-07-30T17:35:24.044Z", + "notValidBefore": "2024-07-30T17:37:15.300Z", + "privilegedDeviceCount": 9, + "privilegedInterfaceCount": 10, + "privilegedIntermediaryCount": 11, + "privilegedUserCount": 12, + "purchaseId": "any arbitrary string as purchaseId", + "specializedDeviceCount": 13, + "specializedInterfaceCount": 14, + "specializedIntermediaryCount": 15, + "specializedUserCount": 15, + "tenantId": "a2a1698d-a3e0-42d3-96a4-47eb3e8f7dd1" + } + ] + ] + }, + "examples": { + "Example Purchase": { + "summary": "Example entitlement purchase", + "description": "An example SHIELD entitlement for the specified tenant.", + "value": [ + { + "correlationId": "e097a3f5-9599-44a2-8923-fd3276c83ae1", + "enterpriseDeviceCount": 5, + "enterpriseInterfaceCount": 6, + "enterpriseIntermediaryCount": 7, + "enterpriseUserCount": 8, + "notValidAfter": "2024-07-30T17:35:24.044Z", + "notValidBefore": "2024-07-30T17:37:15.300Z", + "privilegedDeviceCount": 9, + "privilegedInterfaceCount": 10, + "privilegedIntermediaryCount": 11, + "privilegedUserCount": 12, + "purchaseId": "any arbitrary string as purchaseId", + "specializedDeviceCount": 13, + "specializedInterfaceCount": 14, + "specializedIntermediaryCount": 15, + "specializedUserCount": 15, + "tenantId": "a2a1698d-a3e0-42d3-96a4-47eb3e8f7dd1" + } + ] + } + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "tags": [ + "License Entitlement" ] } }, - "/Api/Entitlement/Shield": { + "/Api/Entitlement/Shield/Tenant/{tenantId}/Correlation/{correlationId}": { + "delete": { + "description": "Deletes the requested SHIELD license entitlement record.\n\nThis endpoint requires the `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/Entitlement/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", + "parameters": [ + { + "$ref": "#/components/parameters/tenantId" + }, + { + "$ref": "#/components/parameters/correlationId" + } + ], + "summary": "Delete Specified License Entitlement", + "responses": { + "201": { + "description": "Deleted Successfully" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + }, + "tags": [ + "License Entitlement" + ] + } + }, + "/Api/Telemetry/Shield": { "post": { - "description": "Creates a new license entitlement (activation) for SHIELD.\n\nThis endpoint requires the `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/Api/Entitlement/Shield/Post", + "description": "Submits the telemetry report for SHIELD.\n\nThis endpoint requires the `Telemetry.Shield.ReadWrite`, or `Telemetry.Shield.ReadWrite.All` scope (permission).", + "operationId": "/Api/Telemetry/Shield/Post", "requestBody": { "content": { "application/json": { "examples": { - "Specialized Purchase": { - "description": "Add-on purchase for the specified customer for some additional specialized licenses.", - "summary": "Specialized Purchase", - "value": { - "enterpriseDeviceCount": 0, - "enterpriseInterfaceCount": 0, - "enterpriseIntermediaryCount": 0, - "enterpriseUserCount": 0, - "notValidAfter": "2024-07-30T18:09:05.970Z", - "notValidBefore": "1970-01-01T00:00:00.000Z", - "privilegedDeviceCount": 0, - "privilegedInterfaceCount": 0, - "privilegedIntermediaryCount": 0, - "privilegedUserCount": 0, - "purchaseId": "ABC123", - "specializedDeviceCount": 50, - "specializedInterfaceCount": 3, - "specializedIntermediaryCount": 1, - "specializedUserCount": 50, - "tenantId": "4b00fb78-d291-4dbd-8c0a-c93ae20bffd1" - } - }, - "Initial Purchase": { - "description": "Complete suite of components purchased for the specified customer.", - "summary": "Initial Purchase", + "Monthly Report": { + "description": "Example monthly telemetry report for an enterprise organization.", + "summary": "Monthly Report", "value": { - "enterpriseDeviceCount": 7000, - "enterpriseInterfaceCount": 500, - "enterpriseIntermediaryCount": 10, - "enterpriseUserCount": 7000, - "notValidAfter": "2024-07-30T18:12:23.049Z", - "notValidBefore": "1970-01-01T00:00:00.000Z", - "privilegedDeviceCount": 200, - "privilegedInterfaceCount": 50, - "privilegedIntermediaryCount": 3, - "privilegedUserCount": 200, - "purchaseId": "654DEF", - "specializedDeviceCount": 1000, - "specializedInterfaceCount": 11, + "enterpriseDeviceCount": 64221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 642219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, "specializedIntermediaryCount": 2, - "specializedUserCount": 1000, - "tenantId": "58ffb93f-5098-4630-bfc4-eeb4664208b4" + "specializedUserCount": 5238 } - }, - "Ignorant Entitlement Creation Request": { - "description": "Clueless dev trying to automate this application without reading the docs. RTFM!", - "summary": "Ignorant Entitlement Creation Request", - "value": {} } }, "schema": { - "$ref": "#/components/schemas/LicenseEntitlement.Shield" + "$ref": "#/components/schemas/Telemetry.Shield" } } } @@ -2617,55 +4532,170 @@ "content": { "application/json": { "examples": { - "Small MSP": { - "description": "Example license entitlement for a small MSP.", - "summary": "Local MSP", - "value": { - "correlationId": "60594489-6022-4ddb-8aa5-288c8d356cf2", - "enterpriseDeviceCount": 25, - "enterpriseInterfaceCount": 25, - "enterpriseIntermediaryCount": 25, - "enterpriseUserCount": 25, - "notValidAfter": "2024-07-30T17:56:00.704Z", - "notValidBefore": "1970-01-01T00:00:00.000Z", - "privilegedDeviceCount": 10, - "privilegedInterfaceCount": 10, - "privilegedIntermediaryCount": 2, - "privilegedUserCount": 10, - "purchaseId": "Bob's your mother's brother.", - "specializedDeviceCount": 5, - "specializedInterfaceCount": 5, - "specializedIntermediaryCount": 0, - "specializedUserCount": 5, - "tenantId": "1948adeb-797f-466b-962d-cc708a69d08d" - } - }, - "Enterprise": { - "description": "Example license entitlement for an enterprise sized company.", - "summary": "Enterprise", + "Monthly Report": { + "description": "An example of latest monthly telemetry report for an enterprise organization after the latest telemetry input.", + "summary": "Updated Monthly Report", "value": { - "correlationId": "46569e8d-eeaa-42f4-b954-05a998108eee", - "enterpriseDeviceCount": 50000, - "enterpriseInterfaceCount": 50000, - "enterpriseIntermediaryCount": 100, - "enterpriseUserCount": 50000, - "notValidAfter": "2024-07-30T17:58:54.619Z", - "notValidBefore": "1970-01-01T00:00:00.000Z", - "privilegedDeviceCount": 300, - "privilegedInterfaceCount": 100, - "privilegedIntermediaryCount": 50, - "privilegedUserCount": 300, - "purchaseId": "Bob's your mother's brother.", - "specializedDeviceCount": 1000, - "specializedInterfaceCount": 5, - "specializedIntermediaryCount": 10, - "specializedUserCount": 1000, - "tenantId": "bf78263c-6cec-44bc-9893-024dde25a486" + "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", + "enterpriseDeviceCount": 64221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 642219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-08-05T15:25:55.525Z", + "updatedAt": "2024-08-05T15:25:55.525Z" } } }, "schema": { - "$ref": "#/components/schemas/LicenseEntitlement.Shield" + "$ref": "#/components/schemas/Telemetry.Shield" + } + } + }, + "description": "OK" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "tags": [ + "Telemetry" + ], + "summary": "Collects SHIELD Telemetry" + }, + "get": { + "description": "Retrieves the telemetry records that have been reported for the authenticated tenant. Data is not guaranteed to be retrieved in any specific order.\n\nThis endpoint requires the `Telemetry.Shield.Read`, `Telemetry.Shield.Read.All`, `Telemetry.Shield.ReadWrite`, or `Telemetry.Shield.ReadWrite.All` scope (permission).", + "operationId": "/Api/Telemetry/Shield/Get", + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "List of Reports": { + "description": "List of all available SHIELD telemetry reports for the current authenticated tenant.", + "summary": "List of SHIELD telemetry reports", + "value": [ + { + "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", + "enterpriseDeviceCount": 64221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 642219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-08-05T15:25:55.525Z", + "updatedAt": "2024-08-05T15:25:55.525Z" + }, + { + "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", + "enterpriseDeviceCount": 63221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 632219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-07-05T15:25:55.525Z", + "updatedAt": "2024-07-05T15:25:55.525Z" + } + ] + } + }, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Telemetry.Shield" + }, + "minItems": 0, + "examples": [ + [ + { + "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", + "enterpriseDeviceCount": 64221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 642219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-08-05T15:25:55.525Z", + "updatedAt": "2024-08-05T15:25:55.525Z" + }, + { + "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", + "enterpriseDeviceCount": 63221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 632219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-07-05T15:25:55.525Z", + "updatedAt": "2024-07-05T15:25:55.525Z" + } + ] + ] } } }, @@ -2678,160 +4708,236 @@ "$ref": "#/components/responses/403" } }, + "summary": "Lists Reported Telemetry", "tags": [ - "License Entitlement" - ], - "summary": "Creates a new License Entitlement for SHIELD." + "Telemetry" + ] } }, - "/Api/Entitlement/Shield/Active": { + "/Api/Telemetry/Shield/Tenant/{tenantId}": { "get": { - "description": "Retrieves the count of licenses that are available to the authenticated tenant. No scopes (permissions) required.", - "operationId": "/Api/Entitlement/Shield/Active/Get", + "description": "Retrieves the telemetry records that have been reported for the specified tenant. Data is not guaranteed to be retrieved in any specific order.\n\nThis endpoint requires the `Telemetry.Shield.Read.All`, or `Telemetry.Shield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/Telemetry/Shield/Tenant/:tenantId/Get", + "parameters": [ + { + "$ref": "#/components/parameters/tenantId" + } + ], "responses": { "200": { "content": { "application/json": { "examples": { - "Small MSP": { - "description": "Example active license count for a small MSP for the currently authenticated tenant.", - "summary": "Local MSP", - "value": { - "enterpriseDeviceCount": 54, - "enterpriseInterfaceCount": 46, - "enterpriseIntermediaryCount": 2, - "enterpriseUserCount": 54, - "privilegedDeviceCount": 12, - "privilegedInterfaceCount": 52, - "privilegedIntermediaryCount": 4, - "privilegedUserCount": 12, - "specializedDeviceCount": 20, - "specializedInterfaceCount": 15, - "specializedIntermediaryCount": 0, - "specializedUserCount": 20 - } - }, - "No Licenses": { - "description": "Example license count for a company that doesn't have any licenses for the currently authenticated tenant..", - "summary": "No License", - "value": { - "enterpriseDeviceCount": 0, - "enterpriseInterfaceCount": 0, - "enterpriseIntermediaryCount": 0, - "enterpriseUserCount": 0, - "privilegedDeviceCount": 0, - "privilegedInterfaceCount": 0, - "privilegedIntermediaryCount": 0, - "privilegedUserCount": 0, - "specializedDeviceCount": 0, - "specializedInterfaceCount": 0, - "specializedIntermediaryCount": 0, - "specializedUserCount": 0 - } - }, - "Enterprise": { - "description": "Example active license count for an enterprise sized company for the currently authenticated tenant..", - "summary": "Enterprise", - "value": { - "enterpriseDeviceCount": 60000, - "enterpriseInterfaceCount": 500, - "enterpriseIntermediaryCount": 20, - "enterpriseUserCount": 60000, - "privilegedDeviceCount": 200, - "privilegedInterfaceCount": 450, - "privilegedIntermediaryCount": 15, - "privilegedUserCount": 200, - "specializedDeviceCount": 1000, - "specializedInterfaceCount": 50, - "specializedIntermediaryCount": 2, - "specializedUserCount": 1000 - } + "List of Reports": { + "description": "List of all available SHIELD telemetry reports for the specified tenant.", + "summary": "List of SHIELD telemetry reports", + "value": [ + { + "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", + "enterpriseDeviceCount": 64221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 642219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-08-05T15:25:55.525Z", + "updatedAt": "2024-08-05T15:25:55.525Z" + }, + { + "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", + "enterpriseDeviceCount": 63221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 632219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-07-05T15:25:55.525Z", + "updatedAt": "2024-07-05T15:25:55.525Z" + } + ] } }, "schema": { - "$ref": "#/components/schemas/LicenseEntitlement.Shield.Count" + "type": "array", + "items": { + "$ref": "#/components/schemas/Telemetry.Shield" + }, + "minItems": 0, + "examples": [ + [ + { + "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", + "enterpriseDeviceCount": 64221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 642219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-08-05T15:25:55.525Z", + "updatedAt": "2024-08-05T15:25:55.525Z" + }, + { + "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", + "enterpriseDeviceCount": 63221, + "enterpriseInterfaceCount": 523, + "enterpriseIntermediaryCount": 44, + "enterpriseUserCount": 632219, + "monthlyActiveEntUsers": 0, + "monthlyActivePrivUsers": 0, + "monthlyActiveSpecUsers": 0, + "privilegedDeviceCount": 50, + "privilegedInterfaceCount": 2000, + "privilegedIntermediaryCount": 25, + "privilegedUserCount": 50, + "shieldArchitectureVersion": "2", + "shieldCoreVersion": "3.0.0", + "specializedDeviceCount": 0, + "specializedInterfaceCount": 612, + "specializedIntermediaryCount": 2, + "specializedUserCount": 5238, + "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", + "createdAt": "2024-07-05T15:25:55.525Z", + "updatedAt": "2024-07-05T15:25:55.525Z" + } + ] + ] } } }, "description": "OK" }, + "400": { + "$ref": "#/components/responses/400" + }, "401": { "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" } }, + "summary": "Retrieves Telemetry for Specified Tenant", "tags": [ - "License Entitlement" - ], - "summary": "List of Available Licenses" + "Telemetry" + ] } }, - "/Api/Entitlement/Shield/Tenant/{tenantId}": { - "get": { - "description": "Retrieves the list of license entitlements that are assigned to the specified tenant.\n\nThis endpoint requires the `LicenseEntitlement.Read.All`, or `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/Api/Entitlement/Shield/Tenant/:tenantId/Get", + "/Api/Telemetry/Shield/Tenant/{tenantId}/Correlation/{correlationId}": { + "delete": { + "description": "Deletes the specified telemetry record for the specified tenant.\n\nThis endpoint requires the `Telemetry.Shield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/Telemetry/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", "parameters": [ { "$ref": "#/components/parameters/tenantId" + }, + { + "$ref": "#/components/parameters/correlationId" } ], - "summary": "List of Entitlement Records for Specified Tenant", + "responses": { + "201": { + "description": "Deleted Successfully" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + }, + "summary": "Delete Specified Telemetry Record", + "tags": [ + "Telemetry" + ] + } + }, + "/Api/Update/Shield/Channel": { + "get": { + "description": "Retrieves all of the channel configurations that are present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/Get", "responses": { "200": { "content": { "application/json": { "schema": { "type": "array", - "minItems": 0, "items": { - "$ref": "#/components/schemas/LicenseEntitlement.Shield" + "$ref": "#/components/schemas/Update.Shield.Channel" }, "examples": [ [ { - "correlationId": "e097a3f5-9599-44a2-8923-fd3276c83ae1", - "enterpriseDeviceCount": 5, - "enterpriseInterfaceCount": 6, - "enterpriseIntermediaryCount": 7, - "enterpriseUserCount": 8, - "notValidAfter": "2024-07-30T17:35:24.044Z", - "notValidBefore": "2024-07-30T17:37:15.300Z", - "privilegedDeviceCount": 9, - "privilegedInterfaceCount": 10, - "privilegedIntermediaryCount": 11, - "privilegedUserCount": 12, - "purchaseId": "any arbitrary string as purchaseId", - "specializedDeviceCount": 13, - "specializedInterfaceCount": 14, - "specializedIntermediaryCount": 15, - "specializedUserCount": 15, - "tenantId": "a2a1698d-a3e0-42d3-96a4-47eb3e8f7dd1" + "latest": "1.12.5", + "name": "stable", + "previous": "1.12.4" } ] ] }, "examples": { - "Example Purchase": { - "summary": "Example entitlement purchase", - "description": "An example SHIELD entitlement for the specified tenant.", + "Channel configuration": { + "summary": "Example all channel configs", + "description": "An example showing the all channel configurations.", "value": [ { - "correlationId": "e097a3f5-9599-44a2-8923-fd3276c83ae1", - "enterpriseDeviceCount": 5, - "enterpriseInterfaceCount": 6, - "enterpriseIntermediaryCount": 7, - "enterpriseUserCount": 8, - "notValidAfter": "2024-07-30T17:35:24.044Z", - "notValidBefore": "2024-07-30T17:37:15.300Z", - "privilegedDeviceCount": 9, - "privilegedInterfaceCount": 10, - "privilegedIntermediaryCount": 11, - "privilegedUserCount": 12, - "purchaseId": "any arbitrary string as purchaseId", - "specializedDeviceCount": 13, - "specializedInterfaceCount": 14, - "specializedIntermediaryCount": 15, - "specializedUserCount": 15, - "tenantId": "a2a1698d-a3e0-42d3-96a4-47eb3e8f7dd1" + "latest": "1.12.5", + "name": "stable", + "previous": "1.12.4" + }, + { + "latest": "1.12.7", + "name": "alpha", + "previous": "1.12.6" + }, + { + "latest": "1.12.6", + "name": "beta", + "previous": "1.12.5" } ] } @@ -2840,40 +4946,61 @@ }, "description": "OK" }, - "400": { - "$ref": "#/components/responses/400" - }, "401": { "$ref": "#/components/responses/401" }, "403": { "$ref": "#/components/responses/403" + }, + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, + "summary": "Retrieves All Channel Configurations", "tags": [ - "License Entitlement" + "SHIELD - Update" ] } }, - "/Api/Entitlement/Shield/Tenant/{tenantId}/Correlation/{correlationId}": { - "delete": { - "description": "Deletes the requested SHIELD license entitlement record.\n\nThis endpoint requires the `LicenseEntitlement.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/Api/Entitlement/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", + "/Api/Update/Shield/Channel/{channelName}": { + "get": { + "description": "Retrieves configuration for the specific channel from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Get", "parameters": [ { - "$ref": "#/components/parameters/tenantId" - }, - { - "$ref": "#/components/parameters/correlationId" + "$ref": "#/components/parameters/channelName" } ], - "summary": "Delete Specified License Entitlement", "responses": { - "201": { - "description": "Deleted Successfully" - }, - "400": { - "$ref": "#/components/responses/400" + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Update.Shield.Channel" + }, + "examples": { + "Stable channel config": { + "summary": "Example stable channel config", + "description": "An example showing the stable update channel configuration.", + "value": { + "latest": "1.12.5", + "name": "stable", + "previous": "1.12.4" + } + }, + "Alpha channel config": { + "summary": "Example alpha channel config", + "description": "An example showing the alpha update channel configuration.", + "value": { + "latest": "1.12.7", + "name": "alpha", + "previous": "1.12.6" + } + } + } + } + }, + "description": "OK" }, "401": { "$ref": "#/components/responses/401" @@ -2881,49 +5008,60 @@ "403": { "$ref": "#/components/responses/403" }, - "404": { - "$ref": "#/components/responses/404" + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, + "summary": "Retrieves Specific Channel Configuration", "tags": [ - "License Entitlement" + "SHIELD - Update" ] - } - }, - "/Api/Telemetry/Shield": { - "post": { - "description": "Submits the telemetry report for SHIELD.\n\nThis endpoint requires the `Telemetry.Shield.ReadWrite`, or `Telemetry.Shield.ReadWrite.All` scope (permission).", - "operationId": "/Api/Telemetry/Shield/Post", + }, + "patch": { + "description": "Updates (or adds when missing) the specified channel configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Patch", + "parameters": [ + { + "$ref": "#/components/parameters/channelName" + } + ], "requestBody": { "content": { "application/json": { "examples": { - "Monthly Report": { - "description": "Example monthly telemetry report for an enterprise organization.", - "summary": "Monthly Report", + "Channel Configuration Details": { + "description": "Example channel configuration object that will add/update for specified channel.", + "summary": "Channel Configuration", "value": { - "enterpriseDeviceCount": 64221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 642219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238 + "latest": "1.12.5", + "previous": "1.12.4" } } }, "schema": { - "$ref": "#/components/schemas/Telemetry.Shield" + "type": "object", + "properties": { + "latest": { + "description": "Version number of the latest update available to the chanel.", + "examples": [ + "1.12.5" + ], + "type": "string" + }, + "previous": { + "description": "Version number of the number that is being replaced via ring deployment, available to all rings at the minimum.", + "examples": [ + "1.12.14" + ], + "type": "string" + } + }, + "examples": [ + { + "latest": "1.12.5", + "previous": "1.12.4" + } + ] } } } @@ -2933,170 +5071,160 @@ "content": { "application/json": { "examples": { - "Monthly Report": { - "description": "An example of latest monthly telemetry report for an enterprise organization after the latest telemetry input.", - "summary": "Updated Monthly Report", + "Channel Configuration Details": { + "description": "Example object returned on creation or update.", + "summary": "Channel Configuration", "value": { - "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", - "enterpriseDeviceCount": 64221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 642219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-08-05T15:25:55.525Z", - "updatedAt": "2024-08-05T15:25:55.525Z" + "latest": "1.12.5", + "name": "stable", + "previous": "1.12.4" } } }, "schema": { - "$ref": "#/components/schemas/Telemetry.Shield" + "$ref": "#/components/schemas/Update.Shield.Channel" } } }, "description": "OK" }, + "400": { + "$ref": "#/components/responses/400" + }, "401": { "$ref": "#/components/responses/401" }, "403": { "$ref": "#/components/responses/403" + }, + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, + "summary": "Upserts Channel Configuration", "tags": [ - "Telemetry" - ], - "summary": "Collects SHIELD Telemetry" + "SHIELD - Update" + ] }, + "delete": { + "description": "Deletes the specified channel configuration and associated rings.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Delete", + "parameters": [ + { + "$ref": "#/components/parameters/channelName" + } + ], + "responses": { + "204": { + "description": "Deleted Successfully" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + } + }, + "summary": "Deletes the Specified Channel", + "tags": [ + "SHIELD - Update" + ] + } + }, + "/Api/Update/Shield/Channel/{channelName}/Ring": { "get": { - "description": "Retrieves the telemetry records that have been reported for the authenticated tenant. Data is not guaranteed to be retrieved in any specific order.\n\nThis endpoint requires the `Telemetry.Shield.Read`, `Telemetry.Shield.Read.All`, `Telemetry.Shield.ReadWrite`, or `Telemetry.Shield.ReadWrite.All` scope (permission).", - "operationId": "/Api/Telemetry/Shield/Get", + "description": "Retrieves all of the ring configurations for a channel that are present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/Get", + "parameters": [ + { + "$ref": "#/components/parameters/channelName" + } + ], "responses": { "200": { "content": { "application/json": { - "examples": { - "List of Reports": { - "description": "List of all available SHIELD telemetry reports for the current authenticated tenant.", - "summary": "List of SHIELD telemetry reports", - "value": [ - { - "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", - "enterpriseDeviceCount": 64221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 642219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-08-05T15:25:55.525Z", - "updatedAt": "2024-08-05T15:25:55.525Z" - }, - { - "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", - "enterpriseDeviceCount": 63221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 632219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-07-05T15:25:55.525Z", - "updatedAt": "2024-07-05T15:25:55.525Z" - } - ] - } - }, "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Telemetry.Shield" + "$ref": "#/components/schemas/Update.Shield.Channel.Ring" }, - "minItems": 0, "examples": [ [ { - "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", - "enterpriseDeviceCount": 64221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 642219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-08-05T15:25:55.525Z", - "updatedAt": "2024-08-05T15:25:55.525Z" + "latest": true, + "number": 1 + } + ] + ] + }, + "examples": { + "All ring config": { + "summary": "Example all ring configs", + "description": "An example showing the configurations of all rings of the specified channel.", + "value": [ + { + "latest": true, + "number": 1 }, { - "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", - "enterpriseDeviceCount": 63221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 632219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-07-05T15:25:55.525Z", - "updatedAt": "2024-07-05T15:25:55.525Z" + "latest": false, + "number": 0 } ] - ] + } + } + } + }, + "description": "OK" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + } + }, + "summary": "Retrieves All Ring Configurations", + "tags": [ + "SHIELD - Update" + ] + } + }, + "/Api/Update/Shield/Channel/{channelName}/Ring/{number}": { + "get": { + "description": "Retrieves configuration for the specific channel ring from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Get", + "parameters": [ + { + "$ref": "#/components/parameters/channelName" + }, + { + "$ref": "#/components/parameters/channelRing" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Update.Shield.Channel.Ring" + }, + "examples": { + "Sample ring config": { + "summary": "Example ring configuration", + "description": "An example ring configuration for the specified channel and ring.", + "value": { + "latest": true, + "number": 1 + } + } } } }, @@ -3107,137 +5235,75 @@ }, "403": { "$ref": "#/components/responses/403" + }, + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Lists Reported Telemetry", + "summary": "Retrieves Specific Channel Ring Configuration", "tags": [ - "Telemetry" + "SHIELD - Update" ] - } - }, - "/Api/Telemetry/Shield/Tenant/{tenantId}": { - "get": { - "description": "Retrieves the telemetry records that have been reported for the specified tenant. Data is not guaranteed to be retrieved in any specific order.\n\nThis endpoint requires the `Telemetry.Shield.Read.All`, or `Telemetry.Shield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/Api/Telemetry/Shield/Tenant/:tenantId/Get", + }, + "patch": { + "description": "Updates (or adds when missing) channel ring configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Patch", "parameters": [ { - "$ref": "#/components/parameters/tenantId" + "$ref": "#/components/parameters/channelName" + }, + { + "$ref": "#/components/parameters/channelRing" } ], + "requestBody": { + "content": { + "application/json": { + "examples": { + "Channel Ring Configuration Details": { + "description": "Example channel ring configuration object.", + "summary": "Channel Ring Configuration", + "value": { + "latest": true + } + } + }, + "schema": { + "type": "object", + "properties": { + "latest": { + "description": "Flag that indicates if the ring should be operating off of the latest version number provided by the channel (`true`) or the previous (`false`).", + "examples": [ + true + ], + "type": "boolean" + } + }, + "examples": [ + { + "latest": false + } + ] + } + } + } + }, "responses": { "200": { "content": { "application/json": { "examples": { - "List of Reports": { - "description": "List of all available SHIELD telemetry reports for the specified tenant.", - "summary": "List of SHIELD telemetry reports", - "value": [ - { - "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", - "enterpriseDeviceCount": 64221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 642219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-08-05T15:25:55.525Z", - "updatedAt": "2024-08-05T15:25:55.525Z" - }, - { - "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", - "enterpriseDeviceCount": 63221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 632219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-07-05T15:25:55.525Z", - "updatedAt": "2024-07-05T15:25:55.525Z" - } - ] + "Channel Ring Configuration Details": { + "description": "Example object returned on creation or update.", + "summary": "Channel Ring Configuration", + "value": { + "latest": true, + "number": 1 + } } }, "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Telemetry.Shield" - }, - "minItems": 0, - "examples": [ - [ - { - "correlationId": "6fe3cd30-931c-439a-b759-1e7f3a73622e", - "enterpriseDeviceCount": 64221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 642219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-08-05T15:25:55.525Z", - "updatedAt": "2024-08-05T15:25:55.525Z" - }, - { - "correlationId": "a57d03c6-8218-4738-b860-ac158e257e27", - "enterpriseDeviceCount": 63221, - "enterpriseInterfaceCount": 523, - "enterpriseIntermediaryCount": 44, - "enterpriseUserCount": 632219, - "monthlyActiveEntUsers": 0, - "monthlyActivePrivUsers": 0, - "monthlyActiveSpecUsers": 0, - "privilegedDeviceCount": 50, - "privilegedInterfaceCount": 2000, - "privilegedIntermediaryCount": 25, - "privilegedUserCount": 50, - "shieldArchitectureVersion": "2", - "shieldCoreVersion": "3.0.0", - "specializedDeviceCount": 0, - "specializedInterfaceCount": 612, - "specializedIntermediaryCount": 2, - "specializedUserCount": 5238, - "tenantId": "46759f55-fb42-49e3-83ab-93de2a39bc1d", - "createdAt": "2024-07-05T15:25:55.525Z", - "updatedAt": "2024-07-05T15:25:55.525Z" - } - ] - ] + "$ref": "#/components/schemas/Update.Shield.Channel.Ring" } } }, @@ -3252,32 +5318,72 @@ "403": { "$ref": "#/components/responses/403" }, - "404": { - "$ref": "#/components/responses/404" + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Retrieves Telemetry for Specified Tenant", + "summary": "Modifies Specific Channel Ring Configuration", "tags": [ - "Telemetry" + "SHIELD - Update" ] - } - }, - "/Api/Telemetry/Shield/Tenant/{tenantId}/Correlation/{correlationId}": { + }, "delete": { - "description": "Deletes the specified telemetry record for the specified tenant.\n\nThis endpoint requires the `Telemetry.Shield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", - "operationId": "/Api/Telemetry/Shield/Tenant/:tenantId/Correlation/:correlationId/Delete", + "description": "Deletes configuration of the specific channel ring.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Delete", "parameters": [ { - "$ref": "#/components/parameters/tenantId" + "$ref": "#/components/parameters/channelName" }, { - "$ref": "#/components/parameters/correlationId" + "$ref": "#/components/parameters/channelRing" } ], "responses": { - "201": { + "204": { "description": "Deleted Successfully" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + } + }, + "summary": "Deletes Specific Channel Ring Configuration", + "tags": [ + "SHIELD - Update" + ] + } + }, + "/Api/Update/Shield/Channel/{channelName}/Version/{version}": { + "post": { + "description": "Uploads new version of the update package for SHIELD in a specific channel.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Channel/:channelName/Version/:version/Post", + "parameters": [ + { + "$ref": "#/components/parameters/channelName" + }, + { + "$ref": "#/components/parameters/version" + } + ], + "requestBody": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "responses": { + "204": { + "description": "OK" + }, "400": { "$ref": "#/components/responses/400" }, @@ -3287,86 +5393,54 @@ "403": { "$ref": "#/components/responses/403" }, - "404": { - "$ref": "#/components/responses/404" + "500": { + "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Delete Specified Telemetry Record", + "summary": "Uploads New Application Package", "tags": [ - "Telemetry" + "SHIELD - Update" ] } }, - "/Api/Update/Shield/Channel": { + "/Api/Update/Shield/Check": { "get": { - "description": "Retrieves all of the channel configurations that are present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/Get", + "description": "Retrieves the latest available version of the package for the running application. Version depends on the channel associated with the current tenant, or channel mentioned in the request, or default channel value. Applicable channel would be calculated on the server for each request.", + "operationId": "/Api/Update/Shield/Check/Get", "responses": { "200": { "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Update.Shield.Channel" - }, - "examples": [ - [ - { - "latest": "1.12.5", - "name": "stable", - "previous": "1.12.4" - } - ] - ] + "$ref": "#/components/schemas/Update.Shield.Check" }, "examples": { - "Channel configuration": { - "summary": "Example all channel configs", - "description": "An example showing the all channel configurations.", - "value": [ - { - "latest": "1.12.5", - "name": "stable", - "previous": "1.12.4" - }, - { - "latest": "1.12.7", - "name": "alpha", - "previous": "1.12.6" - }, - { - "latest": "1.12.6", - "name": "beta", - "previous": "1.12.5" - } - ] + "Latest package version": { + "summary": "Example latest application version", + "description": "An example showing the latest SHIELD package available.", + "value": { + "updateVersion": "1.12.5" + } } } } }, "description": "OK" }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, "500": { "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Retrieves All Channel Configurations", + "summary": "Retrieves Latest Application Version Number", "tags": [ "SHIELD - Update" ] } }, - "/Api/Update/Shield/Channel/{channelName}": { + "/Api/Update/Shield/Check/Channel/{channelName}": { "get": { - "description": "Retrieves configuration for the specific channel from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Get", + "description": "Retrieves the latest available version of the package for the running application for the specific channel.", + "operationId": "/Api/Update/Shield/Check/Channel/:channelName/Get", "parameters": [ { "$ref": "#/components/parameters/channelName" @@ -3377,25 +5451,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Update.Shield.Channel" + "$ref": "#/components/schemas/Update.Shield.Check" }, "examples": { - "Stable channel config": { - "summary": "Example stable channel config", - "description": "An example showing the stable update channel configuration.", - "value": { - "latest": "1.12.5", - "name": "stable", - "previous": "1.12.4" - } - }, - "Alpha channel config": { - "summary": "Example alpha channel config", - "description": "An example showing the alpha update channel configuration.", + "Latest package version": { + "summary": "Example latest application version", + "description": "An example showing the latest SHIELD package available for the specified channel.", "value": { - "latest": "1.12.7", - "name": "alpha", - "previous": "1.12.6" + "updateVersion": "1.12.5" } } } @@ -3403,124 +5466,82 @@ }, "description": "OK" }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, "500": { "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Retrieves Specific Channel Configuration", + "summary": "Retrieves Application Version Number For Specific Channel", "tags": [ "SHIELD - Update" ] - }, - "patch": { - "description": "Updates (or adds when missing) the specified channel configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Patch", - "parameters": [ - { - "$ref": "#/components/parameters/channelName" - } - ], - "requestBody": { - "content": { - "application/json": { - "examples": { - "Channel Configuration Details": { - "description": "Example channel configuration object that will add/update for specified channel.", - "summary": "Channel Configuration", - "value": { - "latest": "1.12.5", - "previous": "1.12.4" - } - } - }, - "schema": { - "type": "object", - "properties": { - "latest": { - "description": "Version number of the latest update available to the chanel.", - "examples": [ - "1.12.5" - ], - "type": "string" - }, - "previous": { - "description": "Version number of the number that is being replaced via ring deployment, available to all rings at the minimum.", - "examples": [ - "1.12.14" - ], - "type": "string" - } - }, - "examples": [ - { - "latest": "1.12.5", - "previous": "1.12.4" - } - ] - } - } - } - }, + } + }, + "/Api/Update/Shield/Download": { + "get": { + "description": "Sends a stream of the ZIP archive content to be saved that represents requested application update package.", + "operationId": "/Api/Update/Shield/Download/Get", "responses": { "200": { + "description": "OK", "content": { - "application/json": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary", + "examples": [ + "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" + ] + }, "examples": { - "Channel Configuration Details": { - "description": "Example object returned on creation or update.", - "summary": "Channel Configuration", - "value": { - "latest": "1.12.5", - "name": "stable", - "previous": "1.12.4" - } + "base64-inline": { + "summary": "Base64-encoded ZIP)", + "description": "Base64 encoding of a small ZIP (truncated) to simulate a update package binary string for the channel specified.", + "value": "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" } - }, - "schema": { - "$ref": "#/components/schemas/Update.Shield.Channel" } } - }, - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" + } }, "500": { "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Upserts Channel Configuration", + "summary": "Streams File Content To Download", "tags": [ "SHIELD - Update" ] - }, - "delete": { - "description": "Deletes the specified channel configuration and associated rings.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Delete", + } + }, + "/Api/Update/Shield/Download/Channel/{channelName}": { + "get": { + "description": "Sends a stream of the ZIP archive content to be saved that represents requested application update package for the specific channel.", + "operationId": "/Api/Update/Shield/Download/Channel/:channelName/Get", "parameters": [ { "$ref": "#/components/parameters/channelName" } ], "responses": { - "204": { - "description": "Deleted Successfully" - }, - "401": { - "$ref": "#/components/responses/401" + "200": { + "description": "OK", + "content": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary", + "examples": [ + "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" + ] + }, + "examples": { + "base64-inline": { + "summary": "Base64-encoded ZIP", + "description": "Base64 encoding of a small ZIP (truncated) to simulate a update package binary string for the channel specified.", + "value": "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" + } + } + } + } }, "403": { "$ref": "#/components/responses/403" @@ -3529,21 +5550,16 @@ "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Deletes the Specified Channel", + "summary": "Streams File Content From Specific Channel To Download", "tags": [ "SHIELD - Update" ] } }, - "/Api/Update/Shield/Channel/{channelName}/Ring": { + "/Api/Update/Shield/Tenant": { "get": { - "description": "Retrieves all of the ring configurations for a channel that are present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/Get", - "parameters": [ - { - "$ref": "#/components/parameters/channelName" - } - ], + "description": "Retrieves all tenant configurations present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Tenant/Get", "responses": { "200": { "content": { @@ -3551,29 +5567,29 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Update.Shield.Channel.Ring" + "$ref": "#/components/schemas/Update.Shield.Tenant" }, "examples": [ [ { - "latest": true, - "number": 1 + "alphaEnabled": false, + "channel": "stable", + "ring": 1, + "tenantId": "1d71e0fe-6e4a-464d-a690-80addf3bda55" } ] ] }, "examples": { - "All ring config": { - "summary": "Example all ring configs", - "description": "An example showing the configurations of all rings of the specified channel.", + "All tenant list": { + "summary": "Example all tenant list", + "description": "A example truncated list of all tenant configurations that present in the update service.", "value": [ { - "latest": true, - "number": 1 - }, - { - "latest": false, - "number": 0 + "alphaEnabled": false, + "channel": "stable", + "ring": 1, + "tenantId": "1d71e0fe-6e4a-464d-a690-80addf3bda55" } ] } @@ -3592,22 +5608,19 @@ "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Retrieves All Ring Configurations", + "summary": "Retrieves All Tenant Configurations", "tags": [ "SHIELD - Update" ] } }, - "/Api/Update/Shield/Channel/{channelName}/Ring/{number}": { + "/Api/Update/Shield/Tenant/{tenantId}": { "get": { - "description": "Retrieves configuration for the specific channel ring from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Get", + "description": "Retrieves configuration for the specific tenant from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Tenant/:tenantId/Get", "parameters": [ { - "$ref": "#/components/parameters/channelName" - }, - { - "$ref": "#/components/parameters/channelRing" + "$ref": "#/components/parameters/tenantId" } ], "responses": { @@ -3615,15 +5628,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Update.Shield.Channel.Ring" + "$ref": "#/components/schemas/Update.Shield.Tenant" }, "examples": { - "Sample ring config": { - "summary": "Example ring configuration", - "description": "An example ring configuration for the specified channel and ring.", + "Tenant config": { + "summary": "Example tenant config", + "description": "A example configurations that present in the update service of the specified tenant.", "value": { - "latest": true, - "number": 1 + "alphaEnabled": false, + "channel": "stable", + "ring": 1, + "tenantId": "1d71e0fe-6e4a-464d-a690-80addf3bda55" } } } @@ -3641,48 +5656,63 @@ "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Retrieves Specific Channel Ring Configuration", + "summary": "Retrieves Specific Tenant Configuration", "tags": [ "SHIELD - Update" ] }, "patch": { - "description": "Updates (or adds when missing) channel ring configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Patch", + "description": "Updates (or adds when missing) tenant configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Tenant/:tenantId/Patch", "parameters": [ { - "$ref": "#/components/parameters/channelName" - }, - { - "$ref": "#/components/parameters/channelRing" + "$ref": "#/components/parameters/tenantId" } ], "requestBody": { "content": { "application/json": { "examples": { - "Channel Ring Configuration Details": { - "description": "Example channel ring configuration object.", - "summary": "Channel Ring Configuration", + "Tenant Configuration Details": { + "description": "Example tenant configuration object.", + "summary": "Tenant Configuration", "value": { - "latest": true + "alphaEnabled": false, + "channel": "stable", + "ring": 1 } } }, "schema": { "type": "object", "properties": { - "latest": { - "description": "Flag that indicates if the ring should be operating off of the latest version number provided by the channel (`true`) or the previous (`false`).", + "alphaEnabled": { + "description": "Flag that indicates if the current tenant is allowed to request alpha builds (`true`) or not (`false`).", "examples": [ - true + false ], "type": "boolean" + }, + "channel": { + "description": "Name of the deploy channel.", + "examples": [ + "stable" + ], + "type": "string" + }, + "ring": { + "description": "Ring number that the client is a member of for the current chanel.", + "examples": [ + 1 + ], + "type": "integer" } }, "examples": [ { - "latest": false + "alphaEnabled": false, + "channel": "stable", + "ring": 1 } ] } @@ -3694,17 +5724,19 @@ "content": { "application/json": { "examples": { - "Channel Ring Configuration Details": { - "description": "Example object returned on creation or update.", - "summary": "Channel Ring Configuration", + "Tenant Configuration Details": { + "description": "Example object returned on creation or update with tenantId set.", + "summary": "Tenant Configuration", "value": { - "latest": true, - "number": 1 + "alphaEnabled": false, + "channel": "stable", + "ring": 1, + "tenantId": "a2a1698d-a3e0-42d3-96a4-47eb3e8f7dd1" } } }, "schema": { - "$ref": "#/components/schemas/Update.Shield.Channel.Ring" + "$ref": "#/components/schemas/Update.Shield.Tenant" } } }, @@ -3723,20 +5755,17 @@ "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Modifies Specific Channel Ring Configuration", + "summary": "Upserts Specific Tenant Configuration", "tags": [ "SHIELD - Update" ] }, "delete": { - "description": "Deletes configuration of the specific channel ring.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Ring/:number/Delete", + "description": "Deletes configuration for the specific tenant.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", + "operationId": "/Api/Update/Shield/Tenant/:tenantId/Delete", "parameters": [ { - "$ref": "#/components/parameters/channelName" - }, - { - "$ref": "#/components/parameters/channelRing" + "$ref": "#/components/parameters/tenantId" } ], "responses": { @@ -3744,302 +5773,285 @@ "description": "Deleted Successfully" }, "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." - } - }, - "summary": "Deletes Specific Channel Ring Configuration", - "tags": [ - "SHIELD - Update" - ] - } - }, - "/Api/Update/Shield/Channel/{channelName}/Version/{version}": { - "post": { - "description": "Uploads new version of the update package for SHIELD in a specific channel.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Channel/:channelName/Version/:version/Post", - "parameters": [ - { - "$ref": "#/components/parameters/channelName" - }, - { - "$ref": "#/components/parameters/version" - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "responses": { - "204": { - "description": "OK" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." - } - }, - "summary": "Uploads New Application Package", - "tags": [ - "SHIELD - Update" - ] - } - }, - "/Api/Update/Shield/Check": { - "get": { - "description": "Retrieves the latest available version of the package for the running application. Version depends on the channel associated with the current tenant, or channel mentioned in the request, or default channel value. Applicable channel would be calculated on the server for each request.", - "operationId": "/Api/Update/Shield/Check/Get", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Update.Shield.Check" - }, - "examples": { - "Latest package version": { - "summary": "Example latest application version", - "description": "An example showing the latest SHIELD package available.", - "value": { - "updateVersion": "1.12.5" - } - } - } - } - }, - "description": "OK" - }, - "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." - } - }, - "summary": "Retrieves Latest Application Version Number", - "tags": [ - "SHIELD - Update" - ] - } - }, - "/Api/Update/Shield/Check/Channel/{channelName}": { - "get": { - "description": "Retrieves the latest available version of the package for the running application for the specific channel.", - "operationId": "/Api/Update/Shield/Check/Channel/:channelName/Get", - "parameters": [ - { - "$ref": "#/components/parameters/channelName" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Update.Shield.Check" - }, - "examples": { - "Latest package version": { - "summary": "Example latest application version", - "description": "An example showing the latest SHIELD package available for the specified channel.", - "value": { - "updateVersion": "1.12.5" - } - } - } - } - }, - "description": "OK" - }, - "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." - } - }, - "summary": "Retrieves Application Version Number For Specific Channel", - "tags": [ - "SHIELD - Update" - ] - } - }, - "/Api/Update/Shield/Download": { - "get": { - "description": "Sends a stream of the ZIP archive content to be saved that represents requested application update package.", - "operationId": "/Api/Update/Shield/Download/Get", - "responses": { - "200": { - "description": "OK", - "content": { - "application/zip": { - "schema": { - "type": "string", - "format": "binary", - "examples": [ - "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" - ] - }, - "examples": { - "base64-inline": { - "summary": "Base64-encoded ZIP)", - "description": "Base64 encoding of a small ZIP (truncated) to simulate a update package binary string for the channel specified.", - "value": "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" - } - } - } - } + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "500": { "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Streams File Content To Download", + "summary": "Deletes Specific Tenant Configuration", "tags": [ "SHIELD - Update" ] } }, - "/Api/Update/Shield/Download/Channel/{channelName}": { + "/Api/Tenant": { "get": { - "description": "Sends a stream of the ZIP archive content to be saved that represents requested application update package for the specific channel.", - "operationId": "/Api/Update/Shield/Download/Channel/:channelName/Get", + "description": "Retrieves the list of tenant records. Can use filter by parent ID limit the results. This endpoint requires the `Tenant.Read.All` or `Tenant.ReadWrite.All` scopes (permissions).", + "operationId": "/Api/Tenant/Get", "parameters": [ { - "$ref": "#/components/parameters/channelName" + "$ref": "#/components/parameters/parentId" } ], "responses": { "200": { - "description": "OK", "content": { - "application/zip": { + "application/json": { "schema": { - "type": "string", - "format": "binary", + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/TenantDetails" + }, "examples": [ - "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" + [ + { + "tenantId": "7e8f9a0b-1c2d-3e4b-5a6c-7d8e9f0a1b2c", + "displayName": "Contoso - R&D", + "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", + "authorizedPrincipalList": [] + } + ] ] }, "examples": { - "base64-inline": { - "summary": "Base64-encoded ZIP", - "description": "Base64 encoding of a small ZIP (truncated) to simulate a update package binary string for the channel specified.", - "value": "UEsDBBQAAAAIAAeLbU0AAAAAAAAAAAAAAAAJAAQATm90ZS50eHRVVAkAA1V2YV... (truncated)" + "Example List Of Multiple Tenant Records": { + "description": "Sample list of multiple tenant records in the database", + "summary": "Multiple Tenant Records", + "value": [ + { + "tenantId": "5d6e7f8a-9b0c-1d2e-3f4a-5b6c7d8e9f0a", + "displayName": "Contoso - Legal", + "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", + "authorizedPrincipalList": [ + "59673771-3b4f-4518-9187-aee8a51c8c07", + "47c42971-2dea-4553-a788-d29a42e3e867" + ] + }, + { + "tenantId": "7e8f9a0b-1c2d-3e4b-5a6c-7d8e9f0a1b2c", + "displayName": "Contoso - R&D", + "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", + "authorizedPrincipalList": [ + "7e9ce415-32b2-4e7a-a920-d4dbaae022e3" + ] + } + ] + }, + "Example List Of Single Tenant Record": { + "description": "Example list of single tenant records which no user is authorized yet.", + "summary": "Single Tenant Records", + "value": [ + { + "tenantId": "7e8f9a0b-1c2d-3e4b-5a6c-7d8e9f0a1b2c", + "displayName": "Contoso - R&D", + "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", + "authorizedPrincipalList": [] + } + ] } } } - } + }, + "description": "OK" }, - "403": { - "$ref": "#/components/responses/403" + "404": { + "$ref": "#/components/responses/404" }, "500": { "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Streams File Content From Specific Channel To Download", + "summary": "Retrieves List of Tenant Records", "tags": [ - "SHIELD - Update" + "Tenant Records" ] } }, - "/Api/Update/Shield/Tenant": { + "/Api/Tenant/{tenantId}": { "get": { - "description": "Retrieves all tenant configurations present in the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Tenant/Get", + "description": "Retrieves details of a specific tenant record. This endpoint requires the `Tenant.Read.All` or `Tenant.ReadWrite.All` scopes (permissions).", + "operationId": "/Api/Tenant/:tenantId/Get", + "parameters": [ + { + "$ref": "#/components/parameters/tenantId" + }, + { + "$ref": "#/components/parameters/parentId" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Update.Shield.Tenant" - }, - "examples": [ - [ - { - "alphaEnabled": false, - "channel": "stable", - "ring": 1, - "tenantId": "1d71e0fe-6e4a-464d-a690-80addf3bda55" - } - ] - ] + "$ref": "#/components/schemas/TenantDetails" }, "examples": { - "All tenant list": { - "summary": "Example all tenant list", - "description": "A example truncated list of all tenant configurations that present in the update service.", - "value": [ - { - "alphaEnabled": false, - "channel": "stable", - "ring": 1, - "tenantId": "1d71e0fe-6e4a-464d-a690-80addf3bda55" - } - ] + "Example Complete Tenant Record": { + "description": "An example showing a single existing tenant record.", + "summary": "Existing Tenant Record", + "value": { + "tenantId": "9f0a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c", + "displayName": "Contoso - Testing", + "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", + "authorizedPrincipalList": [ + "9f0a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c", + "2e3f4a5b-6c7d-8e9f-0a1b-2c3d4e5f6a7b", + "4b5c6d7e-8f9a-0b1c-2d3e-4f5a6b7c8d9e" + ] + } } } } }, "description": "OK" }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" + "404": { + "$ref": "#/components/responses/404" }, "500": { "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Retrieves All Tenant Configurations", + "summary": "Retrieves Tenant Record", "tags": [ - "SHIELD - Update" + "Tenant Records" ] - } - }, - "/Api/Update/Shield/Tenant/{tenantId}": { - "get": { - "description": "Retrieves configuration for the specific tenant from the update service.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Tenant/:tenantId/Get", + }, + "patch": { + "description": "Update tenant record using provided information. Payload could contain any combination of existing properties. To remove a parent, set the parentId to be the same as the tenant ID value. This endpoint requires the `Tenant.ReadWrite.All` scopes (permissions).", + "operationId": "/Api/Tenant/:tenantId/Patch", "parameters": [ { "$ref": "#/components/parameters/tenantId" } - ], + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "tenantDisplayName": { + "description": "Human readable name for the tenant record", + "type": "string", + "examples": [ + "Contoso - R&D East" + ] + }, + "parentId": { + "description": "The object ID of the tenant that is considered a parent to this record", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "type": "string", + "examples": [ + "6a7b8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d" + ] + }, + "authorizedPrincipalList": { + "description": "List of object IDs that are allowed to access this record and related data.", + "type": "array", + "items": { + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "type": "string", + "examples": [ + "4cae3355-0cff-410c-b4f9-69cb5de8f1ac" + ] + }, + "examples": [ + [ + "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", + "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" + ] + ] + } + }, + "anyOf": [ + { + "required": [ + "displayName" + ] + }, + { + "required": [ + "parentId" + ] + }, + { + "required": [ + "authorizedPrincipalList" + ] + } + ], + "examples": [ + { + "tenantDisplayName": "Contoso - R&D East", + "parentId": "6a7b8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d", + "authorizedPrincipalList": [ + "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", + "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" + ] + } + ] + }, + "examples": { + "Example Request to Update Tenant Parent": { + "description": "Sample payload requesting adjustment to the parent value.", + "summary": "Update Parent Information for Tenant", + "value": { + "parentId": "6a7b8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d" + } + }, + "Example Request for Tenant Name and Parent Update": { + "description": "Sample payload requesting to update parent value and display name on the tenant record.", + "summary": "Update Tenant Record Name and Parent Information", + "value": { + "parentId": "8f9a0b1c-2d3e-4f5a-6b7c-8d9e0a1b2c3d", + "displayName": "Contoso - R&D West" + } + }, + "Example Request for Tenant Authorized Principals Update": { + "description": "Sample payload requesting to update authorized principals for the tenant record.", + "summary": "Update Tenant Authorized Principals List", + "value": { + "authorizedPrincipalList": [ + "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", + "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" + ] + } + } + } + } + } + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Update.Shield.Tenant" + "$ref": "#/components/schemas/TenantDetails" }, "examples": { - "Tenant config": { - "summary": "Example tenant config", - "description": "A example configurations that present in the update service of the specified tenant.", + "Example Complete Tenant Record": { + "description": "Sample response after updating a tenant record.", + "summary": "Updated Tenant Record", "value": { - "alphaEnabled": false, - "channel": "stable", - "ring": 1, - "tenantId": "1d71e0fe-6e4a-464d-a690-80addf3bda55" + "tenantId": "c00ffc2c-b6f6-4121-bd8e-4d02e9504eb9", + "displayName": "Contoso - Testing", + "parentId": "8c291062-a4f7-4706-b4df-59e605497f06", + "authorizedPrincipalList": [ + "b856517a-2086-4be4-b63e-d6ca8a5b0ff6" + ] } } } @@ -4047,426 +6059,681 @@ }, "description": "OK" }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, "500": { "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." } }, - "summary": "Retrieves Specific Tenant Configuration", + "summary": "Update Tenant Record", "tags": [ - "SHIELD - Update" + "Tenant Records" ] - }, - "patch": { - "description": "Updates (or adds when missing) tenant configuration.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Tenant/:tenantId/Patch", - "parameters": [ - { - "$ref": "#/components/parameters/tenantId" - } - ], + } + }, + "/Api/V1/ArchitectureReport": { + "post": { + "description": "Stores the results of an Architecture report.\n\nThis endpoint requires the `ArchitectureReport.ReadWrite`, `ArchitectureReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/ArchitectureReport/Post", "requestBody": { + "required": true, "content": { "application/json": { "examples": { - "Tenant Configuration Details": { - "description": "Example tenant configuration object.", - "summary": "Tenant Configuration", + "Architecture Report V1": { + "description": "Sample, truncated report from an example customer environment. This will return the same report as the request input.", + "summary": "Example of license report stored.", "value": { - "alphaEnabled": false, - "channel": "stable", - "ring": 1 + "correlation": { + "auditTenantAccount": "user@example.com" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Full-Time" + } + } + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + }, + "tenantMetadata": { + "totalDeviceCount": 1, + "totalGuestCount": 1, + "totalMemberCount": 1, + "totalUserCount": 1 + }, + "schemaVersion": 1 } } }, "schema": { - "type": "object", - "properties": { - "alphaEnabled": { - "description": "Flag that indicates if the current tenant is allowed to request alpha builds (`true`) or not (`false`).", - "examples": [ - false - ], - "type": "boolean" - }, - "channel": { - "description": "Name of the deploy channel.", - "examples": [ - "stable" - ], - "type": "string" - }, - "ring": { - "description": "Ring number that the client is a member of for the current chanel.", - "examples": [ - 1 - ], - "type": "integer" - } - }, - "examples": [ - { - "alphaEnabled": false, - "channel": "stable", - "ring": 1 - } - ] + "$ref": "#/components/schemas/ArchitectureReportV1" } } } }, "responses": { "200": { + "description": "Architecture Report V1 submitted successfully.", "content": { "application/json": { "examples": { - "Tenant Configuration Details": { - "description": "Example object returned on creation or update with tenantId set.", - "summary": "Tenant Configuration", + "Architecture Report V1": { + "description": "Sample, truncated report from an example customer environment. This will return the same report as the request input.", + "summary": "Example of license report stored.", "value": { - "alphaEnabled": false, - "channel": "stable", - "ring": 1, - "tenantId": "a2a1698d-a3e0-42d3-96a4-47eb3e8f7dd1" + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Full-Time" + } + } + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + }, + "tenantMetadata": { + "totalDeviceCount": 1, + "totalGuestCount": 1, + "totalMemberCount": 1, + "totalUserCount": 1 + }, + "schemaVersion": 1 } } }, "schema": { - "$ref": "#/components/schemas/Update.Shield.Tenant" + "$ref": "#/components/schemas/ArchitectureReportV1" } } - }, - "description": "OK" + } }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + "$ref": "#/components/responses/500" } }, - "summary": "Upserts Specific Tenant Configuration", "tags": [ - "SHIELD - Update" - ] - }, - "delete": { - "description": "Deletes configuration for the specific tenant.\n\nThis endpoint requires the `UpdateShield.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI Lab` tenant. End user access is restricted.", - "operationId": "/Api/Update/Shield/Tenant/:tenantId/Delete", + "Architecture Reporting" + ], + "summary": "Submit Architecture Report V1" + } + }, + "/Api/V1/ArchitectureReport/Correlation": { + "get": { + "description": "Retrieves the list of correlation records for the authenticated tenant. Can use filters targeting creation date to limit results. Correlation records store the metadata for a specific architecture report.\n\nThis endpoint requires the `ArchitectureReport.Read`, `ArchitectureReport.Read.All`, `ArchitectureReport.ReadWrite`, or `ArchitectureReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/ArchitectureReport/Correlation/Get", "parameters": [ { - "$ref": "#/components/parameters/tenantId" + "$ref": "#/components/parameters/dateStart" + }, + { + "$ref": "#/components/parameters/dateEnd" } ], "responses": { - "204": { - "description": "Deleted Successfully" - }, - "401": { - "$ref": "#/components/responses/401" + "200": { + "description": "A list of correlation records.", + "content": { + "application/json": { + "examples": { + "Example Correlation Records": { + "description": "Sample list of correlation records for the current authenticated tenant.", + "summary": "Available Correlation Records", + "value": [ + { + "auditTenantAccount": "user@example.com", + "correlationId": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + { + "auditTenantAccount": "user@example.com", + "correlationId": "5888a922-9f5b-45fd-bd5f-de3283d6a79e", + "createdAt": "2023-12-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + } + ] + } + }, + "schema": { + "examples": [ + [ + { + "auditTenantAccount": "user@example.com", + "correlationId": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + { + "auditTenantAccount": "user@example.com", + "correlationId": "5888a922-9f5b-45fd-bd5f-de3283d6a79e", + "createdAt": "2023-12-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + } + ] + ], + "items": { + "$ref": "#/components/schemas/Report.CorrelationRecord" + }, + "minItems": 0, + "type": "array" + } + } + } }, - "403": { - "$ref": "#/components/responses/403" + "400": { + "$ref": "#/components/responses/400" }, "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + "$ref": "#/components/responses/500" } }, - "summary": "Deletes Specific Tenant Configuration", "tags": [ - "SHIELD - Update" - ] + "Architecture Reporting" + ], + "summary": "Get Correlation Records" } }, - "/Api/Tenant": { + "/Api/V1/ArchitectureReport/Correlation/Tenant/{tenantId}": { "get": { - "description": "Retrieves the list of tenant records. Can use filter by parent ID limit the results. This endpoint requires the `Tenant.Read.All` or `Tenant.ReadWrite.All` scopes (permissions).", - "operationId": "/Api/Tenant/Get", + "description": "Retrieves the list of correlation records for the specified tenant. Can use filters targeting creation date to limit results. Correlation records store the metadata for a specific architecture report.\n\nThis endpoint requires the `ArchitectureReport.Read.All`, or `ArchitectureReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/V1/ArchitectureReport/Correlation/Tenant/:tenantId/Get", "parameters": [ { - "$ref": "#/components/parameters/parentId" + "$ref": "#/components/parameters/tenantId" + }, + { + "$ref": "#/components/parameters/dateStart" + }, + { + "$ref": "#/components/parameters/dateEnd" } ], "responses": { "200": { "content": { "application/json": { - "schema": { - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/TenantDetails" - }, - "examples": [ - [ - { - "tenantId": "7e8f9a0b-1c2d-3e4b-5a6c-7d8e9f0a1b2c", - "displayName": "Contoso - R&D", - "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", - "authorizedPrincipalList": [] - } - ] - ] - }, "examples": { - "Example List Of Multiple Tenant Records": { - "description": "Sample list of multiple tenant records in the database", - "summary": "Multiple Tenant Records", + "Example Correlation Records": { + "description": "Sample list of correlation records for the specified tenant.", + "summary": "Available Correlation Records", "value": [ { - "tenantId": "5d6e7f8a-9b0c-1d2e-3f4a-5b6c7d8e9f0a", - "displayName": "Contoso - Legal", - "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", - "authorizedPrincipalList": [ - "59673771-3b4f-4518-9187-aee8a51c8c07", - "47c42971-2dea-4553-a788-d29a42e3e867" - ] + "auditTenantAccount": "user@example.com", + "correlationId": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" }, { - "tenantId": "7e8f9a0b-1c2d-3e4b-5a6c-7d8e9f0a1b2c", - "displayName": "Contoso - R&D", - "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", - "authorizedPrincipalList": [ - "7e9ce415-32b2-4e7a-a920-d4dbaae022e3" - ] + "auditTenantAccount": "user@example.com", + "correlationId": "e0d101e8-6f1e-40a9-a66f-cad4112c9a59", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" } ] + } + }, + "schema": { + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/Report.CorrelationRecord" }, - "Example List Of Single Tenant Record": { - "description": "Example list of single tenant records which no user is authorized yet.", - "summary": "Single Tenant Records", - "value": [ + "examples": [ + [ { - "tenantId": "7e8f9a0b-1c2d-3e4b-5a6c-7d8e9f0a1b2c", - "displayName": "Contoso - R&D", - "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", - "authorizedPrincipalList": [] + "auditTenantAccount": "user@example.com", + "correlationId": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + { + "auditTenantAccount": "user@example.com", + "correlationId": "e0d101e8-6f1e-40a9-a66f-cad4112c9a59", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" } ] - } + ] } } }, - "description": "OK" + "description": "A list of correlation records for the specified tenant." }, - "404": { - "$ref": "#/components/responses/404" + "400": { + "$ref": "#/components/responses/400" }, "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + "$ref": "#/components/responses/500" } }, - "summary": "Retrieves List of Tenant Records", + "summary": "Get Correlation Records by Tenant", "tags": [ - "Tenant Records" + "Architecture Reporting" ] } }, - "/Api/Tenant/{tenantId}": { - "get": { - "description": "Retrieves details of a specific tenant record. This endpoint requires the `Tenant.Read.All` or `Tenant.ReadWrite.All` scopes (permissions).", - "operationId": "/Api/Tenant/:tenantId/Get", + "/Api/V1/ArchitectureReport/Correlation/{correlationId}/Data": { + "delete": { + "description": "Deletes the full architecture report v1 for the specified correlation ID.\n\nThis endpoint requires the `ArchitectureReport.ReadWrite`, or `ArchitectureReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/ArchitectureReport/Correlation/:correlationId/Data/Delete", "parameters": [ { - "$ref": "#/components/parameters/tenantId" + "$ref": "#/components/parameters/correlationId" + } + ], + "responses": { + "204": { + "description": "Architecture report data deleted successfully." + }, + "400": { + "$ref": "#/components/responses/400" }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "summary": "Delete Architecture Report Data by Correlation ID", + "tags": [ + "Architecture Reporting" + ] + }, + "get": { + "description": "Retrieves the full architecture report v1 for the specified correlation ID in the authenticated tenant. The architecture report v1 contains all of the tenant metadata and user/device data with the required correlation data.\n\nThis endpoint requires the `ArchitectureReport.Read`, `ArchitectureReport.Read.All`, `ArchitectureReport.ReadWrite`, or `ArchitectureReport.ReadWrite.All` scope (permission).", + "operationId": "/Api/V1/ArchitectureReport/Correlation/:correlationId/Data/Get", + "parameters": [ { - "$ref": "#/components/parameters/parentId" + "$ref": "#/components/parameters/correlationId" } ], "responses": { "200": { + "description": "The architecture report data for the specified correlation ID.", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/TenantDetails" - }, "examples": { - "Example Complete Tenant Record": { - "description": "An example showing a single existing tenant record.", - "summary": "Existing Tenant Record", + "Example Architecture Report V1": { + "description": "Sample structure of the valid architecture report along with all relevant metadata retrieved using correlation record ID.", + "summary": "Architecture Report Details", "value": { - "tenantId": "9f0a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c", - "displayName": "Contoso - Testing", - "parentId": "f3ed1efc-4e62-46b8-bf2a-6b59ca9784e5", - "authorizedPrincipalList": [ - "9f0a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c", - "2e3f4a5b-6c7d-8e9f-0a1b-2c3d4e5f6a7b", - "4b5c6d7e-8f9a-0b1c-2d3e-4f5a6b7c8d9e" - ] + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Full-Time" + } + } + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + }, + "tenantMetadata": { + "totalDeviceCount": 1, + "totalGuestCount": 1, + "totalMemberCount": 1, + "totalUserCount": 1 + }, + "schemaVersion": 1 } } + }, + "schema": { + "$ref": "#/components/schemas/ArchitectureReportV1" } } - }, - "description": "OK" + } }, - "404": { - "$ref": "#/components/responses/404" + "400": { + "$ref": "#/components/responses/400" }, "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + "$ref": "#/components/responses/500" } }, - "summary": "Retrieves Tenant Record", + "summary": "Retrieve the specified Architecture Report V1 by Correlation ID", "tags": [ - "Tenant Records" + "Architecture Reporting" ] - }, - "patch": { - "description": "Update tenant record using provided information. Payload could contain any combination of existing properties. To remove a parent, set the parentId to be the same as the tenant ID value. This endpoint requires the `Tenant.ReadWrite.All` scopes (permissions).", - "operationId": "/Api/Tenant/:tenantId/Patch", + } + }, + "/Api/V1/ArchitectureReport/Correlation/{correlationId}/Tenant/{tenantId}/Data": { + "delete": { + "summary": "Delete the specified Architecture Report V1 for specified tenant", + "description": "Deletes the full architecture report v1 for the specified correlation ID and tenant.\n\nThis endpoint requires the `ArchitectureReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/V1/ArchitectureReport/Correlation/:correlationId/Tenant/:tenantId/Data/Delete", "parameters": [ { - "$ref": "#/components/parameters/tenantId" + "$ref": "#/components/parameters/correlationId", + "required": true + }, + { + "$ref": "#/components/parameters/tenantId", + "required": true } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "tenantDisplayName": { - "description": "Human readable name for the tenant record", - "type": "string", - "examples": [ - "Contoso - R&D East" - ] - }, - "parentId": { - "description": "The object ID of the tenant that is considered a parent to this record", - "format": "uuid", - "maxLength": 36, - "minLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", - "type": "string", - "examples": [ - "6a7b8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d" - ] - }, - "authorizedPrincipalList": { - "description": "List of object IDs that are allowed to access this record and related data.", - "type": "array", - "items": { - "format": "uuid", - "maxLength": 36, - "minLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", - "type": "string", - "examples": [ - "4cae3355-0cff-410c-b4f9-69cb5de8f1ac" - ] - }, - "examples": [ - [ - "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", - "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" - ] - ] - } - }, - "anyOf": [ - { - "required": [ - "displayName" - ] - }, - { - "required": [ - "parentId" - ] - }, - { - "required": [ - "authorizedPrincipalList" - ] - } - ], - "examples": [ - { - "tenantDisplayName": "Contoso - R&D East", - "parentId": "6a7b8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d", - "authorizedPrincipalList": [ - "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", - "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" - ] - } - ] - }, - "examples": { - "Example Request to Update Tenant Parent": { - "description": "Sample payload requesting adjustment to the parent value.", - "summary": "Update Parent Information for Tenant", - "value": { - "parentId": "6a7b8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d" - } - }, - "Example Request for Tenant Name and Parent Update": { - "description": "Sample payload requesting to update parent value and display name on the tenant record.", - "summary": "Update Tenant Record Name and Parent Information", - "value": { - "parentId": "8f9a0b1c-2d3e-4f5a-6b7c-8d9e0a1b2c3d", - "displayName": "Contoso - R&D West" - } - }, - "Example Request for Tenant Authorized Principals Update": { - "description": "Sample payload requesting to update authorized principals for the tenant record.", - "summary": "Update Tenant Authorized Principals List", - "value": { - "authorizedPrincipalList": [ - "4cae3355-0cff-410c-b4f9-69cb5de8f1ac", - "0e52e6ac-f8e1-4070-ae2e-9bd0a37507a1" - ] - } - } - } - } + "responses": { + "204": { + "description": "Architecture report data deleted successfully." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" } }, + "tags": [ + "Architecture Reporting" + ] + }, + "get": { + "summary": "Get Architecture Report v1 Data by Correlation ID and Tenant ID", + "description": "Retrieves the architecture report data associated with the specified correlation ID and tenant ID.\n\nThis endpoint requires the `ArchitectureReport.Read.All`, `ArchitectureReport.ReadWrite.All` scope (permission). This endpoint is also only accessible from the `SHI` and `SHI Lab` tenants. End user access is restricted.", + "operationId": "/Api/V1/ArchitectureReport/Correlation/:correlationId/Tenant/:tenantId/Data/Get", + "parameters": [ + { + "$ref": "#/components/parameters/correlationId", + "required": true + }, + { + "$ref": "#/components/parameters/tenantId", + "required": true + } + ], "responses": { "200": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/TenantDetails" - }, "examples": { - "Example Complete Tenant Record": { - "description": "Sample response after updating a tenant record.", - "summary": "Updated Tenant Record", + "Architecture Report V1": { + "description": "Sample structure of the valid architecture report along with all relevant metadata retrieved using correlation record ID and specific tenant ID.", + "summary": "Architecture Report Details", "value": { - "tenantId": "c00ffc2c-b6f6-4121-bd8e-4d02e9504eb9", - "displayName": "Contoso - Testing", - "parentId": "8c291062-a4f7-4706-b4df-59e605497f06", - "authorizedPrincipalList": [ - "b856517a-2086-4be4-b63e-d6ca8a5b0ff6" - ] + "correlation": { + "auditTenantAccount": "user@example.com", + "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "createdAt": "2023-11-19T10:00:00.000Z", + "reportTenantAccount": "user@example.com", + "tenantId": "123e4567-e89b-12d3-a456-426614174000", + "updatedAt": "2023-11-19T10:05:00.000Z" + }, + "principalData": { + "user": { + "e7b8c8a2-1f2e-4c3a-9b6a-2d8e4f8a9b7c": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": { + "featureA": true, + "featureB": false + } + }, + "llmInferred": { + "isServiceAccount": false, + "isFrontlineWorker": true, + "isTempWorker": null + }, + "principalMetadata": { + "sharedMailbox": false + }, + "enhancedData": { + "userPrincipalName": "user@example.com", + "idpJobTitle": "Engineer", + "idpDepartment": "IT", + "idpOfficeLocation": "HQ", + "idpEmployeeType": "Full-Time" + } + } + }, + "device": { + "f1e2d3c4-b5a6-7890-1234-56789abcdef0": { + "assignedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "assignedLicense": [ + { + "id": "3d282045-ec7f-4813-88e2-29b74ee609f7", + "servicePlanList": [ + "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + ] + } + ], + "consumedService": { + "3d282045-ec7f-4813-88e2-29b74ee609f7": 5 + }, + "principalMetadata": { + "sharedComputer": true + } + } + } + }, + "tenantMetadata": { + "totalDeviceCount": 1, + "totalGuestCount": 1, + "totalMemberCount": 1, + "totalUserCount": 1 + }, + "schemaVersion": 1 } } + }, + "schema": { + "$ref": "#/components/schemas/ArchitectureReportV1" } } }, - "description": "OK" + "description": "The architecture report data for the specified correlation ID and tenant ID." + }, + "400": { + "$ref": "#/components/responses/400" }, "500": { - "description": "Request has a failure that cannot be resolved and might require manual intervention or retry." + "$ref": "#/components/responses/500" } }, - "summary": "Update Tenant Record", "tags": [ - "Tenant Records" + "Architecture Reporting" ] } } @@ -4507,6 +6774,10 @@ "description": "Manages and reports the list of purchased licenses for the various SHI Lab Products.", "name": "License Entitlement" }, + { + "description": "Collects and reports data about a tenant's architecture.", + "name": "Architecture Reporting" + }, { "description": "Collects data from the various SHI Lab products.", "name": "Telemetry" diff --git a/specs/SHIELD.json b/specs/SHIELD.json index 1f5116b..4bb4851 100644 --- a/specs/SHIELD.json +++ b/specs/SHIELD.json @@ -118,6 +118,34 @@ } } }, + "operation": { + "description": "Flag to indicate which progress data in the Deploy Engine to retrieve. If invalid value is provided, it would be ignored and result defaulted to deploy operation.", + "in": "query", + "name": "operation", + "schema": { + "examples": [ + "remediate" + ], + "type": "string", + "enum": [ + "deploy", + "remediate", + "analysis" + ] + }, + "examples": { + "valid request": { + "value": "remediate", + "summary": "Example of the request that provides expected value", + "description": "An example of a valid value that indicates the progress bar data to retrieve is for remediation action." + }, + "invalid request": { + "value": "somethingelse", + "summary": "Example of the request that includes unexpected value", + "description": "An example of an incorrect value that would be ignored and defaulted to data for deploy action." + } + } + }, "search": { "description": "Used in object filtering.", "in": "query", @@ -1111,9 +1139,103 @@ } ] }, + "Deploy.RemediationResponse": { + "title": "Deploy - Remediation Response Record", + "description": "Object with the details of the performed remediation action.", + "type": "object", + "properties": { + "errors": { + "type": "array", + "description": "Collection of the configuration items that failed to provision and available details on the error.", + "items": { + "type": "object", + "properties": { + "templateId": { + "type": "string", + "description": "Internal reference identifier of the resource.", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "examples": [ + "7e2b1c3d-4f5a-4a8b-9e6a-1c2b7f3d8e4a" + ] + }, + "message": { + "type": "string", + "description": "Text with the details of the error response.", + "examples": [ + "Failed to create dedicated group for the resource: Unexpected error." + ] + } + }, + "required": [ + "templateId", + "message" + ], + "examples": [ + { + "templateId": "7e2b1c3d-4f5a-4a8b-9e6a-1c2b7f3d8e4a", + "message": "Failed to create dedicated group for the resource: Unexpected error." + } + ] + }, + "examples": [ + [ + { + "templateId": "7e2b1c3d-4f5a-4a8b-9e6a-1c2b7f3d8e4a", + "message": "Failed to create dedicated group for the resource: Unexpected error." + }, + { + "templateId": "2a1c7e3b-5d4f-4a8b-9e6a-7f3d2b1c8e4a", + "message": "Failed to create the resource: invalid value for 'id' reference." + } + ] + ] + }, + "results": { + "type": "object", + "description": "Records in the form of key/value where key is templateId of the configuration item and value is the name of the provisioned resource.", + "additionalProperties": { + "type": "string", + "examples": [ + "CSPM - MDCA" + ] + }, + "examples": [ + { + "4a8b7e1a-2b3c-4d5f-9e6a-1c2b7f3d8e4a": "CSPM - MDCA", + "b3e2c1d4-7f5a-4a8b-9e6a-2c1b7f3d8e4a": "CSPM - Authentication Methods" + } + ] + } + }, + "required": [ + "errors", + "results" + ], + "examples": [ + { + "errors": [ + { + "templateId": "7e2b1c3d-4f5a-4a8b-9e6a-1c2b7f3d8e4a", + "message": "Failed to create dedicated group for the resource: Unexpected error." + }, + { + "templateId": "2a1c7e3b-5d4f-4a8b-9e6a-7f3d2b1c8e4a", + "message": "Failed to create the resource: invalid value for 'id' reference." + } + ], + "results": { + "4a8b7e1a-2b3c-4d5f-9e6a-1c2b7f3d8e4a": "CSPM - MDCA", + "b3e2c1d4-7f5a-4a8b-9e6a-2c1b7f3d8e4a": "CSPM - Authentication Methods" + } + } + ] + }, "Deploy.ConfigurationItem": { "title": "Deploy - Configuration Item List", - "description": "", + "description": "Collection of objects representing the configuration items with curated properties and values in user-friendly format.", "type": "array", "items": { "description": "", @@ -1140,6 +1262,19 @@ ] ] }, + "deployState": { + "type": "string", + "description": "Indicator of the infrastructure configuration item's current state. Mutated means that the item has been modified by the end user outside of SHIELD.", + "enum": [ + "notDeployed", + "deployed", + "Mutated", + "error" + ], + "examples": [ + "deployed" + ] + }, "groupTagList": { "type": "array", "description": "List of metadata tags that indicate which deployment sets the configuration item is compatible with.", @@ -1253,6 +1388,7 @@ }, "required": [ "childDependencies", + "deployState", "groupTagList", "msCloudTypes", "parentDependencies", @@ -1265,6 +1401,7 @@ "7e1a2b3c-4d5f-4a8b-9e6a-1c2b7f3d8e4a", "9c2e7a1b-5d3f-4a8b-2c6e-7f1a3d9e8b5c" ], + "deployState": "deployed", "groupTagList": [ { "description": "Collection of policies covering critical conditional access settings.", @@ -1290,6 +1427,7 @@ "7e1a2b3c-4d5f-4a8b-9e6a-1c2b7f3d8e4a", "9c2e7a1b-5d3f-4a8b-2c6e-7f1a3d9e8b5c" ], + "deployState": "deployed", "groupTagList": [ { "description": "Collection of policies covering critical conditional access settings.", @@ -1310,6 +1448,7 @@ "childDependencies": [ "1c2b5d3f-7a1b-4a8b-9e6a-2e4a3b7e8c5d" ], + "deployState": "notDeployed", "groupTagList": [ { "description": "Principal containers that are used to provide assignments.", @@ -1327,6 +1466,291 @@ ] ] }, + "Deploy.ConfigurationItemMetaData": { + "title": "Deploy - Configuration Item Meta Data", + "description": "Object representing populated information expanding details of the Configuration Item with user friendly information.", + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Human readable short title.", + "examples": [ + "Multi-Factor Authentication (MFA)" + ] + }, + "description": { + "type": "string", + "description": "Lengthier definition for the resource that provides more insight into what is covered or intended.", + "examples": [ + "This policy enforces multi-factor authentication (MFA) for enterprise identities during sign-in to reduce the risk of identity compromise." + ] + }, + "licenseRequirement": { + "type": "string", + "description": "Definition of license requirements to use this resource.", + "examples": [ + "Microsoft Entra ID P1" + ] + }, + "priority": { + "type": "integer", + "description": "Indicator of the priority of the resource implementation. Lower number indicates higher priority.", + "enum": [ + 1, + 50, + 100 + ], + "examples": [ + 1 + ] + }, + "operationalRisk": { + "type": "integer", + "description": "Indicator of the level of possible disruptions if this resource is not implemented. Lower number indicates higher risk.", + "enum": [ + 1, + 50, + 100 + ], + "examples": [ + 50 + ] + }, + "importanceReasonList": { + "type": "array", + "description": "Reasons explaining importance of the implementation of this resource.", + "items": { + "type": "string", + "examples": [ + "MFA adds a layer of protection to the sign-in process." + ] + }, + "examples": [ + [ + "MFA adds a layer of protection to the sign-in process.", + "When accessing accounts or apps, users provide additional identity verification, such as scanning a fingerprint or entering a code." + ] + ] + }, + "deploymentBenefitList": { + "type": "array", + "description": "Benefits gained by implementing the resource.", + "items": { + "type": "string", + "examples": [ + "Reduces the risk of compromised user credentials." + ] + }, + "examples": [ + [ + "Reduces the risk of compromised user credentials.", + "Prevents brute-force attack." + ] + ] + }, + "nonDeploymentRiskList": { + "type": "array", + "description": "Possible risks that could lead to issues if this resource is not implemented.", + "items": { + "type": "string", + "examples": [ + "Dramatically increased risk of account compromise." + ] + }, + "examples": [ + [ + "Dramatically increased risk of account compromise.", + "Higher chance of account compromise through phishing attacks." + ] + ] + }, + "guideStepList": { + "type": "array", + "description": "Collection of steps customer should consider or follow for successful implementation of the resource.", + "items": { + "type": "string", + "examples": [ + "Communicate the restriction to EntraID-joined devices and provide transition guidance." + ] + }, + "examples": [ + [ + "Communicate the restriction to EntraID-joined devices and provide transition guidance.", + "Stage the rollout with a pilot group and exclude critical accounts." + ] + ] + }, + "compliancePositionList": { + "type": "array", + "description": "Statements describing what this resource might help with in the realm of compliance and security.", + "items": { + "type": "string", + "examples": [ + "Deploying MFA helps meet compliance requirements for various industry regulations and standards." + ] + }, + "examples": [ + [ + "Deploying MFA helps meet compliance requirements for various industry regulations and standards." + ] + ] + }, + "compliancePositionStandardList": { + "type": "array", + "description": "Collection of frameworks that this resource addresses when implemented.", + "items": { + "type": "string", + "examples": [ + "ISO 27001" + ] + }, + "examples": [ + [ + "ISO 27001", + "NIST" + ] + ] + }, + "disclaimerList": { + "type": "array", + "description": "Collection of disclaimer statements.", + "items": { + "type": "string", + "examples": [ + "Please be aware that deploying this policy will enforce MFA for all users on their next sign-in." + ] + }, + "examples": [ + [ + "Please be aware that deploying this policy will enforce MFA for all users on their next sign-in." + ] + ] + }, + "baseLink": { + "type": "string", + "description": "Web URL to the Microsoft or Azure service where resource can be found.", + "format": "uri", + "examples": [ + "https://entra.microsoft.com" + ] + }, + "learnLinkList": { + "type": "array", + "description": "Collection of educational URLs for user to explore.", + "items": { + "type": "string", + "format": "uri", + "examples": [ + "https://learn.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks" + ] + }, + "examples": [ + [ + "https://learn.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks", + "https://learn.microsoft.com/en-us/azure/active-directory/authentication/tutorial-enable-azure-mfa" + ] + ] + }, + "manualCreateGuideList": { + "type": "array", + "description": "Collection of strings that make up a manual implementation guide for the associated configuration item.", + "minItems": 0, + "items": { + "type": "string", + "examples": [ + "• First level", + " • Second level", + " • Third level", + "[Go to this link](https://google.com/)" + ] + }, + "examples": [ + [ + "• Name: \"PSM - Token Binding\"", + "• Users", + " • What does this policy apply to: Users and groups", + " • Include", + " • Select: Select users and groups", + " • Select: Users and groups", + " • Select: Users and groups to include", + "• Exclude", + " • Select: Select users and groups", + " • Select: Users and groups", + " • Select: Windows", + "[Go to this link](https://google.com/)" + ] + ] + } + }, + "required": [ + "title", + "description", + "priority", + "operationalRisk", + "importanceReasonList", + "deploymentBenefitList", + "nonDeploymentRiskList", + "guideStepList", + "compliancePositionList", + "compliancePositionStandardList", + "disclaimerList", + "baseLink", + "manualCreateGuideList" + ], + "examples": [ + { + "title": "Multi-Factor Authentication (MFA)", + "description": "This policy enforces multi-factor authentication (MFA) for enterprise identities during sign-in to reduce the risk of identity compromise.", + "licenseRequirement": "Microsoft Entra ID P1", + "priority": 1, + "operationalRisk": 50, + "importanceReasonList": [ + "MFA adds a layer of protection to the sign-in process." + ], + "deploymentBenefitList": [ + "Reduces the risk of compromised user credentials.", + "Prevents brute-force attack." + ], + "nonDeploymentRiskList": [ + "Dramatically increased risk of account compromise.", + "Higher chance of account compromise through phishing attacks." + ], + "guideStepList": [ + "Communicate the restriction to EntraID-joined devices and provide transition guidance.", + "Stage the rollout with a pilot group and exclude critical accounts." + ], + "compliancePositionList": [ + "Deploying MFA helps meet compliance requirements for various industry regulations and standards." + ], + "compliancePositionStandardList": [ + "ISO 27001", + "NIST" + ], + "disclaimerList": [ + "Please be aware that deploying this policy will enforce MFA for all users on their next sign-in." + ], + "baseLink": "https://entra.microsoft.com", + "learnLinkList": [ + "https://learn.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks", + "https://learn.microsoft.com/en-us/azure/active-directory/authentication/tutorial-enable-azure-mfa" + ], + "manualCreateGuideList": [ + "• Name: \"PSM - Token Binding\"", + "• Users", + " • What does this policy apply to: Users and groups", + " • Include", + " • Select: Select users and groups", + " • Select: Users and groups", + " • Select: Users and groups to include", + "• Exclude", + " • Select: Select users and groups", + " • Select: Users and groups", + " • Select: Windows", + "[Go to this link](https://google.com/)" + ] + } + ] + }, "Deploy.PathIndicator": { "title": "Deploy - Path Payload", "description": "Payload with path data used in several endpoints", @@ -1371,27 +1795,287 @@ } ] }, - "ManagedObject.Intermediary": { - "description": "Base template for all intermediary objects to inherit from.", + "Discover.ArchitectureReport.CspmPolicyAssessment": { + "title": "Discover - Architecture Report - Cspm Policy Assessment Result", + "description": "Policy Assessment Result containing coverage calculations for the architecture report", + "type": "object", "properties": { - "id": { - "description": "Read-only.", - "examples": [ - "e097a3f5-9599-44a2-8923-fd3276c83ae1" - ], - "format": "uuid", - "maxLength": 36, - "minLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", - "readOnly": true, - "type": "string" + "policyList": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Discover.ArchitectureReport.CspmPolicyAssessment.PolicyRecord" + }, + "description": "The mapping between ConfigurationItem templateIds and their corresponding policy record" }, - "kind": { - "description": "Type of Intermediary that the properties are describing.", + "reportCreatedDate": { + "type": "string", + "format": "date-time", + "description": "The date the architecture report was created.", "examples": [ - "AVD" - ], - "type": "string" + "2025-11-25T11:00:00Z" + ] + }, + "reportUpdatedDate": { + "type": "string", + "format": "date-time", + "description": "The date the architecture report was last updated.", + "examples": [ + "2025-11-25T11:00:00Z" + ] + } + }, + "required": [ + "policyList" + ], + "examples": [ + { + "policyList": { + "e7b8c2a2-2e4a-4b6a-9c3d-8f1e2a7b6c4d": { + "categoryList": [ + "Access Control", + "Compliance" + ], + "coverageMetricsNormalized": { + "covered": 80, + "noCover": 0, + "partial": 20 + }, + "coverageMetricsRaw": { + "covered": 8, + "noCover": 0, + "partial": 2 + }, + "coverageStatus": "full", + "name": "Sample Policy 1" + }, + "2a1e3c4d-5b6f-4e7a-8c9d-0f1b2a3c4d5e": { + "categoryList": [ + "Data Protection" + ], + "coverageMetricsNormalized": { + "covered": 50, + "noCover": 20, + "partial": 30 + }, + "coverageMetricsRaw": { + "covered": 5, + "noCover": 2, + "partial": 3 + }, + "coverageStatus": "partial", + "name": "Sample Policy 2" + }, + "9f8e7d6c-5b4a-3c2e-1d0f-8a7b6c5d4e3f": { + "categoryList": [ + "Network Security" + ], + "coverageMetricsNormalized": { + "covered": 0, + "noCover": 100, + "partial": 0 + }, + "coverageMetricsRaw": { + "covered": 0, + "noCover": 10, + "partial": 0 + }, + "coverageStatus": "none", + "name": "Sample Policy 3" + }, + "1f0e9d8c-7b6a-5c4d-3e2f-1a0b9c8d7e6f": { + "categoryList": [ + "Identity Management" + ], + "coverageMetricsNormalized": { + "covered": 70, + "noCover": 20, + "partial": 10 + }, + "coverageMetricsRaw": { + "covered": 7, + "noCover": 2, + "partial": 1 + }, + "coverageStatus": "partial", + "name": "Sample Policy 4" + } + }, + "reportCreatedDate": "2025-11-25T11:00:00Z", + "reportUpdatedDate": "2025-11-26T11:00:00Z" + } + ] + }, + "Discover.ArchitectureReport.CspmPolicyAssessment.PolicyRecord": { + "title": "Discover - Architecture Report - Cspm Policy Assessment Policy Record", + "description": "Represents a policy record containing policy details along with user coverage metrics and status", + "type": "object", + "properties": { + "categoryList": { + "description": "Categories that the policy belongs to", + "type": "array", + "items": { + "type": "string", + "description": "category of the policy", + "examples": [ + "Identity Management" + ] + }, + "examples": [ + [ + "Identity Management" + ] + ] + }, + "name": { + "description": "Name of the policy", + "type": "string", + "examples": [ + "Sample Policy Name" + ] + }, + "coverageMetricsRaw": { + "description": "Represents the raw coverage status of the users", + "type": "object", + "properties": { + "covered": { + "description": "The amount of users fully covered", + "type": "number", + "examples": [ + 5 + ] + }, + "partial": { + "description": "The amount of users partially covered", + "type": "number", + "examples": [ + 0, + 5, + 10 + ] + }, + "noCover": { + "description": "The amount of users not covered", + "type": "number", + "examples": [ + 0, + 5, + 10 + ] + } + }, + "examples": [ + { + "covered": 7, + "noCover": 2, + "partial": 1 + } + ], + "required": [ + "covered", + "partial", + "noCover" + ] + }, + "coverageMetricsNormalized": { + "description": "Represents the normalized coverage status of the users", + "type": "object", + "properties": { + "covered": { + "description": "The amount of users fully covered", + "type": "number", + "examples": [ + 70 + ] + }, + "partial": { + "description": "The amount of users partially covered", + "type": "number", + "examples": [ + 20 + ] + }, + "noCover": { + "description": "The amount of users not covered", + "type": "number", + "examples": [ + 10 + ] + } + }, + "examples": [ + { + "covered": 70, + "noCover": 20, + "partial": 10 + } + ], + "required": [ + "covered", + "partial", + "noCover" + ] + }, + "coverageStatus": { + "description": "The summary status for the coverage metrics", + "type": "string", + "enum": [ + "full", + "partial", + "none" + ], + "examples": [ + "partial" + ] + } + }, + "required": [ + "categoryList", + "name", + "coverageMetricsRaw", + "coverageMetricsNormalized", + "coverageStatus" + ], + "examples": [ + { + "categoryList": [ + "Identity Management" + ], + "coverageMetricsNormalized": { + "covered": 70, + "noCover": 20, + "partial": 10 + }, + "coverageMetricsRaw": { + "covered": 7, + "noCover": 2, + "partial": 1 + }, + "coverageStatus": "partial", + "name": "Sample Policy" + } + ] + }, + "ManagedObject.Intermediary": { + "description": "Base template for all intermediary objects to inherit from.", + "properties": { + "id": { + "description": "Read-only.", + "examples": [ + "e097a3f5-9599-44a2-8923-fd3276c83ae1" + ], + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "readOnly": true, + "type": "string" + }, + "kind": { + "description": "Type of Intermediary that the properties are describing.", + "examples": [ + "AVD" + ], + "type": "string" }, "name": { "description": "Human friendly name of the AVD cluster. This will be displayed to end users in the remote desktop app and web portals.", @@ -2568,6 +3252,80 @@ ], "title": "Type of security class the object(s) belongs to", "type": "string" + }, + "ArchitectureReport.CorrelationRecord": { + "description": "Metadata that describes the execution session (run) that is used to tie/relate all of the architecture report together.", + "examples": [ + { + "auditTenantAccount": "first-user@example.com", + "correlationId": "b25f54b3-f30e-4447-9236-24ecac2e9261", + "reportTenantAccount": "other-user@example.com", + "tenantId": "a7159bdc-678d-4726-901e-cd6d018d46e2", + "createdAt": "2025-11-01T00:10:10.821Z", + "updatedAt": "2025-12-01T20:10:12.821Z" + } + ], + "properties": { + "auditTenantAccount": { + "description": "The user principal name used to authenticate into the tenant being audited.", + "examples": [ + "admin-user@example.com" + ], + "format": "email", + "type": "string" + }, + "correlationId": { + "description": "Unique Identifier that represents a single run of architectural analysis. This record is used to identify which architecture report records should be grouped together.", + "examples": [ + "88da2253-758f-4135-9d37-64448c8b65c1" + ], + "type": "string", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$" + }, + "reportTenantAccount": { + "description": "User account used to store/report the architecture report to the SHI Lab cloud service.", + "examples": [ + "generic-user@example.com" + ], + "format": "email", + "type": "string" + }, + "tenantId": { + "description": "Unique identifier of the customer tenant that the report was created for.", + "examples": [ + "0e1fe83f-a33f-4250-8546-225b8d45ae01" + ], + "type": "string", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$" + }, + "createdAt": { + "description": "Timestamp when the record was created.", + "examples": [ + "2024-08-01T21:12:22.148Z" + ], + "format": "date-time", + "type": "string" + }, + "updatedAt": { + "description": "Timestamp when the record was updated last.", + "examples": [ + "2024-08-01T21:12:22.148Z" + ], + "format": "date-time", + "type": "string" + } + }, + "required": [ + "auditTenantAccount" + ], + "title": "Architecture Report - Correlation Record", + "type": "object" } }, "securitySchemes": { @@ -2590,7 +3348,7 @@ }, "description": "Deprive your threats of practical significance. Deploy the Securing Privilege Access architecture. All in a few seconds.", "title": "SHI Environment Lockdown and Defense", - "version": "3.0.8" + "version": "3.1.0" }, "openapi": "3.1.1", "paths": { @@ -3216,7 +3974,7 @@ "tags": [ "Discover" ], - "summary": "Retrieve the List of Correlation Records" + "summary": "Retrieve the List of License Report Correlation Records" } }, "/Api/Discover/LicenseReport/Correlation/{correlationId}/Data": { @@ -3311,83 +4069,268 @@ "summary": "Retrieve the Specified License Report" } }, - "/Api/Deploy": { + "/Api/Discover/ArchitectureReport/Correlation": { "get": { - "summary": "Gets the Current Status of the Infrastructure Deployment", - "description": "Has the core infrastructure engine check if the config engine can initialize properly.\n\nThis endpoint requires the `Deploy.Read`, `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", - "operationId": "/Api/Deploy/Get", + "description": "Retrieves the list of correlation records for the authenticated tenant. Correlation records store the metadata for a specific architecture report.\n\nThis endpoint requires the `Discover.Read`, or the `Everything.ReadWrite` scope (permission).", + "operationId": "/Api/Discover/ArchitectureReport/Correlation/Get", "responses": { "200": { "content": { "application/json": { "examples": { - "Infra deployed": { - "description": "All API calls should be available since the core infrastructure is deployed.", - "summary": "Infrastructure is deployed", - "value": { - "deployedArchitecture": "4a7f2e9c-1b3d-4c6a-9f8e-2d5b3e1a7c9f", - "deployTagInclude": true, - "deployedTags": [ - "5e2a9c1f-8b3d-4f6a-9e7c-2d1f3a6b4c8e", - "9c7f2e1a-3b6d-4a8e-9f5c-1d2a4b7e6c3f" - ], - "isDeploying": true - } - }, - "Infra not deployed": { - "description": "Infrastructure is not deployed. Please run the deployment before attempting different API calls.", - "summary": "Infrastructure is not deployed", - "value": { - "deployedArchitecture": null, - "deployTagInclude": false, - "deployedTags": [], - "isDeploying": false - } + "Typical Response": { + "description": "Sample list of correlation records for the authenticated tenant.", + "summary": "Available Correlation Records for Architecture Report", + "value": [ + { + "auditTenantAccount": "somebody@example.com", + "correlationId": "e0b0ebef-d0bf-4467-80c8-6a3a5f37fb24", + "reportTenantAccount": "tenantUser@example.com", + "tenantId": "79f7e8c4-15fa-4ae2-8f05-74f3c5071798", + "createdAt": "2025-10-01T12:14:45.026Z", + "updatedAt": "2025-11-02T00:14:45.026Z" + }, + { + "auditTenantAccount": "somebodyElse@example.com", + "correlationId": "de4a7293-eed0-4167-b622-efeb764a2148", + "reportTenantAccount": "anotherUser@example.com", + "tenantId": "23317352-da99-4b52-ac1c-ad8e16310296", + "createdAt": "2025-06-20T20:14:45.026Z", + "updatedAt": "2025-07-22T12:10:45.026Z" + } + ] } }, "schema": { - "properties": { - "deployedArchitecture": { - "description": "Reference of the architecture type being deployed that defines what resources could be targeted.", - "type": [ - "string", - "null" - ], - "format": "uuid", - "maxLength": 36, - "minLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", - "examples": [ - "6a2b7e1c-3d4f-4a8b-9e6a-2c1b7f3d8e4a" - ] - }, - "deployTagInclude": { - "description": "Flag that indicates if the tag list has been set to be in inclusion mode (`true`) or exclusion mode (`false`).", - "type": "boolean", - "examples": [ - true - ] - }, - "deployedTags": { - "description": "Collection of references to the groupings that list related or dependent resources to be deployed.", - "type": "array", - "items": { - "type": "string", - "format": "uuid", - "maxLength": 36, - "minLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", - "examples": [ - "9e1c2b7a-5d3f-4a8b-2c6e-7f1a3d9e8b5c" - ] - }, - "minItems": 0 - }, - "isDeploying": { - "description": "Flag to indicate if process has started and ongoing (true) or not (false).", - "type": "boolean", - "examples": [ - true + "type": "array", + "minItems": 0, + "items": { + "$ref": "#/components/schemas/ArchitectureReport.CorrelationRecord" + }, + "examples": [ + [ + { + "auditTenantAccount": "somebody@example.com", + "correlationId": "e0b0ebef-d0bf-4467-80c8-6a3a5f37fb24", + "reportTenantAccount": "tenantUser@example.com", + "tenantId": "79f7e8c4-15fa-4ae2-8f05-74f3c5071798", + "createdAt": "2025-10-01T12:14:45.026Z", + "updatedAt": "2025-11-02T00:14:45.026Z" + } + ] + ] + } + } + }, + "description": "OK" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "tags": [ + "Discover" + ], + "summary": "Retrieve the list of Architecture Report Correlation Records" + } + }, + "/Api/Discover/ArchitectureReport/Correlation/{correlationId}/Data": { + "get": { + "description": "Retrieves the CSPM assessment coverage calculation results on the architecture report for the specified correlation ID in the authenticated tenant.\n\nThis endpoint requires the `Discover.Read`, or the `Everything.ReadWrite` scope (permission).", + "operationId": "/Api/Discover/ArchitectureReport/Correlation/:correlationId/Data/Get", + "parameters": [ + { + "$ref": "#/components/parameters/correlationId" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "CspmPolicyAssessment": { + "description": "Sample CSPM Policy Assessment including a mapping of configuration item template IDs to their corresponding policy records containing coverage status", + "summary": "Example CSPM Policy Assessment Response", + "value": { + "policyList": { + "e7b8c2a2-2e4a-4b6a-9c3d-8f1e2a7b6c4d": { + "categoryList": [ + "Access Control", + "Compliance" + ], + "coverageMetricsNormalized": { + "covered": 80, + "noCover": 0, + "partial": 20 + }, + "coverageMetricsRaw": { + "covered": 8, + "noCover": 0, + "partial": 2 + }, + "coverageStatus": "full", + "name": "Sample Policy 1" + }, + "2a1e3c4d-5b6f-4e7a-8c9d-0f1b2a3c4d5e": { + "categoryList": [ + "Data Protection" + ], + "coverageMetricsNormalized": { + "covered": 50, + "noCover": 20, + "partial": 30 + }, + "coverageMetricsRaw": { + "covered": 5, + "noCover": 2, + "partial": 3 + }, + "coverageStatus": "partial", + "name": "Sample Policy 2" + }, + "9f8e7d6c-5b4a-3c2e-1d0f-8a7b6c5d4e3f": { + "categoryList": [ + "Network Security" + ], + "coverageMetricsNormalized": { + "covered": 0, + "noCover": 100, + "partial": 0 + }, + "coverageMetricsRaw": { + "covered": 0, + "noCover": 10, + "partial": 0 + }, + "coverageStatus": "none", + "name": "Sample Policy 3" + }, + "1f0e9d8c-7b6a-5c4d-3e2f-1a0b9c8d7e6f": { + "categoryList": [ + "Identity Management" + ], + "coverageMetricsNormalized": { + "covered": 70, + "noCover": 20, + "partial": 10 + }, + "coverageMetricsRaw": { + "covered": 7, + "noCover": 2, + "partial": 1 + }, + "coverageStatus": "partial", + "name": "Sample Policy 4" + } + }, + "reportCreatedDate": "2025-11-25T11:00:00Z", + "reportUpdatedDate": "2025-11-26T11:00:00Z" + } + } + }, + "schema": { + "$ref": "#/components/schemas/Discover.ArchitectureReport.CspmPolicyAssessment" + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "tags": [ + "Discover" + ], + "summary": "Retrieve the Specified Architecture Report's CSPM assessment coverage calculations" + } + }, + "/Api/Deploy": { + "get": { + "summary": "Gets the Current Status of the Infrastructure Deployment", + "description": "Has the core infrastructure engine check if the config engine can initialize properly.\n\nThis endpoint requires the `Deploy.Read`, `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", + "operationId": "/Api/Deploy/Get", + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Infra deployed": { + "description": "All API calls should be available since the core infrastructure is deployed.", + "summary": "Infrastructure is deployed", + "value": { + "deployedArchitecture": "4a7f2e9c-1b3d-4c6a-9f8e-2d5b3e1a7c9f", + "deployTagInclude": true, + "deployedTags": [ + "5e2a9c1f-8b3d-4f6a-9e7c-2d1f3a6b4c8e", + "9c7f2e1a-3b6d-4a8e-9f5c-1d2a4b7e6c3f" + ], + "isDeploying": true + } + }, + "Infra not deployed": { + "description": "Infrastructure is not deployed. Please run the deployment before attempting different API calls.", + "summary": "Infrastructure is not deployed", + "value": { + "deployedArchitecture": null, + "deployTagInclude": false, + "deployedTags": [], + "isDeploying": false + } + } + }, + "schema": { + "properties": { + "deployedArchitecture": { + "description": "Reference of the architecture type being deployed that defines what resources could be targeted.", + "type": [ + "string", + "null" + ], + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "examples": [ + "6a2b7e1c-3d4f-4a8b-9e6a-2c1b7f3d8e4a" + ] + }, + "deployTagInclude": { + "description": "Flag that indicates if the tag list has been set to be in inclusion mode (`true`) or exclusion mode (`false`).", + "type": "boolean", + "examples": [ + true + ] + }, + "deployedTags": { + "description": "Collection of references to the groupings that list related or dependent resources to be deployed.", + "type": "array", + "items": { + "type": "string", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "examples": [ + "9e1c2b7a-5d3f-4a8b-2c6e-7f1a3d9e8b5c" + ] + }, + "minItems": 0 + }, + "isDeploying": { + "description": "Flag to indicate if process has started and ongoing (true) or not (false).", + "type": "boolean", + "examples": [ + true ] } }, @@ -3592,6 +4535,92 @@ ] } }, + "/Api/Deploy/BreakGlass": { + "get": { + "summary": "Checks the status of the break glass groups and required users existence.", + "description": "Retrieves the status of required user quantity existence in the break glass group.\n\nThis endpoint requires the `Deploy.Read` scope (permission).", + "operationId": "/Api/Deploy/BreakGlass/Get", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "type": "boolean", + "examples": [ + true + ] + }, + "examples": { + "2 or more users": { + "summary": "2 or more users", + "description": "An example boolean value that represents the existence of 2 or more users in the break glass group.", + "value": true + }, + "Less than 2 users": { + "summary": "Less than 2 users", + "description": "An example boolean value that represents the existence of less than 2 users in the break glass group.", + "value": false + } + } + } + }, + "description": "OK" + } + }, + "tags": [ + "Deploy" + ] + }, + "post": { + "summary": "Request to create BreakGlass security group", + "description": "Attempt to create BreakGlass security group in the tenant. If group has already been provisioned it will return the name of the group to reference.\n\nThis endpoint requires the `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission). ", + "operationId": "/Api/Deploy/BreakGlass/Post", + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Response with data": { + "summary": "Example of the returned data", + "description": "An example of the name of the resource either created or already existing.", + "value": { + "groupName": "SHIELD - BreakGlass" + } + } + }, + "schema": { + "type": "object", + "properties": { + "groupName": { + "type": "string", + "description": "Name of the security group created now or already existing in the tenant.", + "examples": [ + "SHIELD - BreakGlass" + ] + } + }, + "required": [ + "groupName" + ], + "examples": [ + { + "groupName": "SHIELD - BreakGlass" + } + ] + } + } + }, + "description": "OK" + }, + "503": { + "description": "System requirements have not been met!" + } + }, + "tags": [ + "Deploy" + ] + } + }, "/Api/Deploy/Component/Architecture": { "get": { "summary": "Returns List of Available Architectures", @@ -3655,22 +4684,45 @@ "summary": "Available Configuration Items", "value": [ { - "id": "5e2a9c1f-8b3d-4f6a-9e7c-2d1f3a6b4c8e", - "name": "Core Security Group", - "description": "A core security group that contains essential security roles and permissions.", - "type": "SecurityGroup", - "isActive": true, - "createdAt": "2024-02-20T10:00:00Z", - "updatedAt": "2024-05-15T11:30:00Z" + "childDependencies": [ + "7e1a2b3c-4d5f-4a8b-9e6a-1c2b7f3d8e4a", + "9c2e7a1b-5d3f-4a8b-2c6e-7f1a3d9e8b5c" + ], + "deployState": "deployed", + "groupTagList": [ + { + "description": "Collection of policies covering critical conditional access settings.", + "displayName": "Conditional Policy", + "tagId": "3b7e2a1c-4d5f-4a8b-9e6a-2c1b7f3d8e4a" + } + ], + "msCloudTypes": [ + "Public" + ], + "parentDependencies": [ + "8e6a1c2b-7f3d-4a8b-9c2e-5d3f7a1b2e4a" + ], + "templateId": "2a1c7e3b-5d4f-4a8b-9e6a-7f3d2b1c8e4a", + "urlPath": "/identity/conditionalAccess/policies" }, { - "id": "9c7f2e1a-3b6d-4a8e-9f5c-1d2a4b7e6c3f", - "name": "Scope Tag - Confidential Data", - "description": "A scope tag designed to restrict access to confidential data resources.", - "type": "ScopeTag", - "isActive": true, - "createdAt": "2024-04-12T14:20:00Z", - "updatedAt": "2024-07-01T09:50:00Z" + "childDependencies": [ + "1c2b5d3f-7a1b-4a8b-9e6a-2e4a3b7e8c5d" + ], + "deployState": "notDeployed", + "groupTagList": [ + { + "description": "Principal containers that are used to provide assignments.", + "displayName": "Administrative Unit", + "tagId": "5d3f9c2e-7a1b-4a8b-2c6e-1a3d7e8b5c4a" + } + ], + "msCloudTypes": [ + "Public" + ], + "parentDependencies": [], + "templateId": "4a8b7e1a-2b3c-4d5f-9e6a-1c2b7f3d8e4a", + "urlPath": "/directory/administrativeUnits" } ] } @@ -3688,11 +4740,122 @@ ] } }, + "/Api/Deploy/Component/ConfigurationItemMetaData/{templateId}": { + "get": { + "summary": "Returns Result of Retrieving Configuration Item Documentation", + "description": "Retrieves additional metadata from the configuration item if it was entered, or provides a message indicating it is missing.\n\nThis endpoint requires the `Deploy.Read`, `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission). ", + "operationId": "/Api/Deploy/Component/ConfigurationItemMetaData/:templateId/Get", + "parameters": [ + { + "$ref": "#/components/parameters/templateId" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Response With Documentation": { + "description": "Sample response object of the documentation for the specific configuration item.", + "summary": "Configuration Item Documentation", + "value": { + "title": "Multi-Factor Authentication (MFA)", + "description": "This policy enforces multi-factor authentication (MFA) for enterprise identities during sign-in to reduce the risk of identity compromise.", + "licenseRequirement": "Microsoft Entra ID P1", + "priority": 1, + "operationalRisk": 50, + "importanceReasonList": [ + "MFA adds a layer of protection to the sign-in process." + ], + "deploymentBenefitList": [ + "Reduces the risk of compromised user credentials.", + "Prevents brute-force attack." + ], + "nonDeploymentRiskList": [ + "Dramatically increased risk of account compromise.", + "Higher chance of account compromise through phishing attacks." + ], + "guideStepList": [ + "Communicate the restriction to EntraID-joined devices and provide transition guidance.", + "Stage the rollout with a pilot group and exclude critical accounts." + ], + "compliancePositionList": [ + "Deploying MFA helps meet compliance requirements for various industry regulations and standards." + ], + "compliancePositionStandardList": [ + "ISO 27001", + "NIST" + ], + "disclaimerList": [ + "Please be aware that deploying this policy will enforce MFA for all users on their next sign-in." + ], + "baseLink": "https://entra.microsoft.com", + "learnLinkList": [ + "https://learn.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks", + "https://learn.microsoft.com/en-us/azure/active-directory/authentication/tutorial-enable-azure-mfa" + ], + "manualCreateGuideList": [ + "• Name: \"PSM - Token Binding\"", + "• Users", + " • What does this policy apply to: Users and groups", + " • Include", + " • Select: Select users and groups", + " • Select: Users and groups", + " • Select: Users and groups to include", + "• Exclude", + " • Select: Select users and groups", + " • Select: Users and groups", + " • Select: Windows", + "[Go to this link](https://google.com/)" + ] + } + }, + "Response When Documentation is Missing": { + "description": "Sample response with unavailable documentation", + "summary": "Missing Configuration Item Documentation", + "value": "No documentation available yet!" + } + }, + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/Deploy.ConfigurationItemMetaData" + }, + { + "type": "string", + "description": "Indicator that no additional information is available for this configuration item.", + "examples": [ + "No documentation available yet!" + ] + } + ] + } + } + }, + "description": "OK" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + } + }, + "tags": [ + "Deploy" + ] + } + }, "/Api/Deploy/Progress": { "get": { "summary": "Returns Current Execution Progress of the Deploy Module", "description": "Provides a detailed breakdown of the current progress of the deploy module and its sub-components, if any.\n\nThis endpoint requires the `Deploy.Read`, `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", "operationId": "/Api/Deploy/Progress/Get", + "parameters": [ + { + "$ref": "#/components/parameters/operation" + } + ], "responses": { "200": { "content": { @@ -3732,6 +4895,139 @@ ] } }, + "/Api/Deploy/Remediate": { + "get": { + "summary": "Retrieves Collected Remediation Results", + "description": "Returns results of the performed remediation action including any errors that occurred as well as mapping of templateId/name for the created resources.\n\nThis endpoint requires the `Deploy.Read`, or `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", + "operationId": "/Api/Deploy/Remediate/Get", + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "Response with Remediation Data": { + "summary": "Example of the remediation results", + "description": "An example of the current results of the remediation action.", + "value": { + "errors": [ + { + "templateId": "7e2b1c3d-4f5a-4a8b-9e6a-1c2b7f3d8e4a", + "message": "Failed to create dedicated group for the resource: Unexpected error." + }, + { + "templateId": "2a1c7e3b-5d4f-4a8b-9e6a-7f3d2b1c8e4a", + "message": "Failed to create the resource: invalid value for 'id' reference." + } + ], + "results": { + "4a8b7e1a-2b3c-4d5f-9e6a-1c2b7f3d8e4a": "CSPM - MDCA", + "b3e2c1d4-7f5a-4a8b-9e6a-2c1b7f3d8e4a": "CSPM - Authentication Methods" + } + } + } + }, + "schema": { + "$ref": "#/components/schemas/Deploy.RemediationResponse" + } + } + }, + "description": "OK" + } + }, + "tags": [ + "Deploy" + ] + }, + "post": { + "summary": "Perform remediation steps to address discovered gaps in security posture", + "description": "After the user consents, perform necessary steps to deploy resources to cover the security gap.\n\nThis endpoint requires the `Deploy.ReadWrite`, or the `Everything.ReadWrite` scope (permission).", + "operationId": "/Api/Deploy/Remediate/Post", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Insufficient Remediation Request": { + "description": "Someone trying to automate this application without reading the documentation.", + "summary": "Remediation Request Missing Needed Data", + "value": {} + }, + "No User Consent": { + "description": "User did not agree to the terms and conditions. This post should not have been sent.", + "summary": "User Did Not Consent", + "value": { + "remediationConsent": false, + "templateList": [ + "8e2b1c7a-4d5f-4a8b-9e6a-2c1b7f3d8e4a", + "3a7e2b1c-5d4f-4a8b-9e6a-7f2b3d1c9e45" + ] + } + }, + "User Consented": { + "description": "User agreed to the terms and conditions and pressed the remediate button.", + "summary": "User Consented", + "value": { + "remediationConsent": true, + "templateList": [ + "9c1e7a2b-5d3f-4a8b-2c6e-1a7f3d9e8b5c", + "2b3e7a1c-4d5f-4a8b-9e6a-5d1c7e2b3a4f", + "7f1a3d9e-8b5c-4a8b-2c6e-9c2e7a1b5d3f" + ] + } + } + }, + "schema": { + "properties": { + "remediationConsent": { + "description": "Flag that indicates the end user has consented to remediation steps (`true`) or not (`false`).", + "type": "boolean", + "examples": [ + true + ] + }, + "templateList": { + "description": "List of templateIds that indicate configuration items to be applied as part of remediation.", + "type": "array", + "items": { + "type": "string", + "format": "uuid", + "maxLength": 36, + "minLength": 36, + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$", + "examples": [ + "5d1c7e2b-3a4f-4a8b-9e6a-7f2b3d1c9e45" + ] + }, + "minItems": 0 + } + }, + "type": "object", + "required": [ + "remediationConsent", + "templateList" + ] + } + } + } + }, + "responses": { + "202": { + "description": "Request for remediation is accepted and process is running" + }, + "400": { + "description": "User provided information or choice are invalid for the operation" + }, + "409": { + "description": "Operation is already in progress" + }, + "503": { + "description": "System requirements have not been met!" + } + }, + "tags": [ + "Deploy" + ] + } + }, "/Api/Deploy/Compare": { "get": { "summary": "Retrieves Cached Evaluation Results", @@ -3903,6 +5199,32 @@ ] } }, + "/Api/Deploy/Analyze/Invoke": { + "post": { + "summary": "Requests to run the Infrastructure Configuration Analysis", + "description": "Initiates an asynchronous analysis of all deployed configuration items in the infrastructure. It starts the analysis process, to discover any and all inconsistencies at the configuration item level.\n\nThis endpoint requires the `Deploy.ReadWrite` or `Everything.ReadWrite` scope (permission).", + "operationId": "/Api/Analyze/Invoke/Post", + "requestBody": { + "description": "No payload is expected or needed for this operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {} + } + } + } + }, + "responses": { + "202": { + "description": "Request for analyze is accepted and process is initiated" + } + }, + "tags": [ + "Deploy" + ] + } + }, "/Api/Deploy/Skip": { "get": { "summary": "Retrieves List of Existing Override Rules", diff --git a/src/dataGateway/TypeScript/package-lock.json b/src/dataGateway/TypeScript/package-lock.json index 3c0d57c..b9c8595 100644 --- a/src/dataGateway/TypeScript/package-lock.json +++ b/src/dataGateway/TypeScript/package-lock.json @@ -1,12 +1,12 @@ { "name": "@shi-corp/sdk-data-gateway", - "version": "2.3.1", + "version": "2.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@shi-corp/sdk-data-gateway", - "version": "2.3.1", + "version": "2.4.0", "license": "MIT", "dependencies": { "@microsoft/kiota-authentication-azure": "~1.0.0-preview.99", @@ -2883,6 +2883,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", diff --git a/src/dataGateway/TypeScript/package.json b/src/dataGateway/TypeScript/package.json index dc2208b..3a9cfb1 100644 --- a/src/dataGateway/TypeScript/package.json +++ b/src/dataGateway/TypeScript/package.json @@ -1,6 +1,6 @@ { "name": "@shi-corp/sdk-data-gateway", - "version": "2.3.1", + "version": "2.4.0", "type": "module", "main": "bin/index.js", "description": "SDK client used to interface with the SHI Data Gateway service.", diff --git a/src/shield/TypeScript/package-lock.json b/src/shield/TypeScript/package-lock.json index d60f96b..9ab4767 100644 --- a/src/shield/TypeScript/package-lock.json +++ b/src/shield/TypeScript/package-lock.json @@ -1,12 +1,12 @@ { "name": "@shi-corp/sdk-shield", - "version": "3.0.10", + "version": "3.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@shi-corp/sdk-shield", - "version": "3.0.10", + "version": "3.1.0", "license": "MIT", "dependencies": { "@microsoft/kiota-authentication-azure": "~1.0.0-preview.99", diff --git a/src/shield/TypeScript/package.json b/src/shield/TypeScript/package.json index 3c66a57..8292092 100644 --- a/src/shield/TypeScript/package.json +++ b/src/shield/TypeScript/package.json @@ -1,6 +1,6 @@ { "name": "@shi-corp/sdk-shield", - "version": "3.0.10", + "version": "3.1.0", "type": "module", "main": "bin/index.js", "description": "SDK client used to interface with the SHIELD application.",