openapi: 3.0.3 info: title: "SaaS: Users" description: API for interacting with SaaS Users. version: 1.1.0 contact: name: Flexera url: https://www.flexera.com servers: - url: https://{region}.snowsoftware.io variables: region: enum: - westeurope - australiasoutheast - eastus2 - uksouth default: westeurope tags: - name: Tasks - name: Users paths: /api/saas/consolidated-view/v1/users: get: summary: Get users description: Returns a collection of users. operationId: getSaasConsolidatedViewV1UsersList parameters: - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/PageNumber" - name: filter description: "For more information on the available operators and which data types those operators work on, see [Filter API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#filter-api-call-results)." in: query schema: type: string example: ?filter=field1 -eq "abc" - name: sort description: "For more information on sorting capability and examples, see [Sort API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#sort-api-call-results)." in: query schema: type: string example: ?sort=field1:asc responses: "200": description: "OK: Your request succeeded." content: application/json: schema: required: - pagination - items properties: pagination: $ref: "#/components/schemas/Pagination" items: description: A collection of users. type: array items: $ref: "#/components/schemas/User" "400": $ref: "#/components/responses/400" "500": $ref: "#/components/responses/500" security: - bearerAuth: - saas.consolidation.view.r tags: - Users /api/saas/consolidated-view/v1/users/kpi: get: summary: Get user KPIs description: Returns a collection of users' key performance indicators. operationId: getUserKpis parameters: - name: fromDate required: true description: "The start date from which the historical key performance indicator data should be returned." in: query schema: type: string example: "2024-05-01T00:00:00Z" - name: toDate required: true description: "The end date to which the historical key performance indicator data should be returned." in: query schema: type: string example: "2024-06-01T00:00:00Z" responses: "200": description: "OK: Your request succeeded." content: application/json: schema: $ref: "#/components/schemas/UsersKPIResponse" "500": $ref: "#/components/responses/500" security: - bearerAuth: - saas.consolidation.view.r tags: - Users /api/saas/consolidated-view/v1/users/{userId}: get: summary: Get user description: Returns the details of a user. operationId: getSaasConsolidatedViewV1UserId responses: "200": description: "OK: Your request succeeded." content: application/json: schema: $ref: "#/components/schemas/User" "400": $ref: "#/components/responses/400" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" parameters: - name: userId in: path required: true schema: type: string example: a7a75b83-2690-4cc9-b652-a0fbe93dba4a description: The unique ID of the user. security: - bearerAuth: - saas.consolidation.view.r tags: - Users patch: summary: Update user description: Modifies is-in-review, is-online and is-qualified user properties. operationId: updateUser responses: "200": description: "OK: Your request succeeded." content: application/json: schema: $ref: "#/components/schemas/User" "400": $ref: "#/components/responses/400" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" parameters: - name: userId example: a7a75b83-2690-4cc9-b652-a0fbe93dba4a description: The unique ID of the user. in: path required: true schema: type: string requestBody: content: { "application/merge-patch+json": { "schema": { $ref: "#/components/schemas/UserRequest" } }, } security: - bearerAuth: - saas.consolidation.view.crud tags: - Users /api/saas/consolidated-view/v1/users/{userId}/applications: get: summary: Get user applications description: Returns a collection of applications that have been detected as being used by the given user. operationId: getUserApplications parameters: - name: userId example: a7a75b83-2690-4cc9-b652-a0fbe93dba4a description: The unique ID of the user. in: path schema: type: string required: true - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/PageNumber" - name: filter description: "For more information on the available operators and which data types those operators work on, see [Filter API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#filter-api-call-results)." in: query schema: type: string example: ?filter=field1 -eq "abc" - name: sort description: "For more information on sorting capability and examples, see [Sort API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#sort-api-call-results)." in: query schema: type: string example: ?sort=field1:asc responses: "200": description: "OK: Your request succeeded." content: application/json: schema: required: - pagination - items properties: pagination: $ref: "#/components/schemas/Pagination" items: description: A collection of user applications. type: array items: $ref: "#/components/schemas/UserApplication" "400": $ref: "#/components/responses/400" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" security: - bearerAuth: - saas.consolidation.view.r tags: - Users /api/saas/consolidated-view/v1/users/{userId}/subscriptions: get: summary: Get user subscriptions description: Returns a collection of subscriptions in use by the given user. operationId: getSaasConsolidatedViewV1UserSubscriptions parameters: - name: userId example: a7a75b83-2690-4cc9-b652-a0fbe93dba4a description: The unique ID of the user. in: path schema: type: string required: true - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/PageNumber" - name: filter description: "For more information on the available operators and which data types those operators work on, see [Filter API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#filter-api-call-results)." in: query schema: type: string example: ?filter=field1 -eq "abc" - name: sort description: "For more information on sorting capability and examples, see [Sort API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#sort-api-call-results)." in: query schema: type: string example: ?sort=field1:asc responses: "200": description: "OK: Your request succeeded." content: application/json: schema: required: - pagination - items properties: pagination: $ref: "#/components/schemas/Pagination" items: description: A collection of user subscriptions. type: array items: $ref: "#/components/schemas/UserSubscription" "400": $ref: "#/components/responses/400" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" security: - bearerAuth: - saas.consolidation.view.r tags: - Users /api/saas/consolidated-view/v1/users/{userId}/discovery-sources: get: x-internal: true summary: Get user discovery sources description: Returns a collection of discovery sources for the given user. operationId: getSaasConsolidatedViewV1UserDiscoverySources parameters: - name: userId example: a7a75b83-2690-4cc9-b652-a0fbe93dba4a description: The unique ID of the user. in: path schema: type: string required: true - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/PageNumber" - name: filter description: "For more information on the available operators and which data types those operators work on, see [Filter API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#filter-api-call-results)." in: query schema: type: string example: ?filter=field1 -eq "abc" - name: sort description: "For more information on sorting capability and examples, see [Sort API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#sort-api-call-results)." in: query schema: type: string example: ?sort=field1:asc responses: "200": description: "OK: Your request succeeded." content: application/json: schema: required: - pagination - items properties: pagination: $ref: "#/components/schemas/Pagination" items: description: A collection of discovery sources. type: array items: $ref: "#/components/schemas/DiscoverySource" "400": $ref: "#/components/responses/400" "404": $ref: "#/components/responses/404" "500": $ref: "#/components/responses/500" security: - bearerAuth: - saas.consolidation.view.r tags: - Users /api/saas/consolidated-view/v1/users/bulk-update: post: summary: Bulk update users description: Modifies a collection of user properties the provided applications. operationId: bulkUpdateUsers requestBody: content: { "application/json": { "schema": { $ref: '#/components/schemas/BulkUpdateUsersRequest' } } } responses: "202": { "description": "Accepted: Your request requires more time for the service to process.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BulkUpdateUsersResponse" } } } } "400": $ref: "#/components/responses/400" "500": $ref: "#/components/responses/500" security: - bearerAuth: - saas.consolidation.view.r - saas.consolidation.view.crud tags: - Users /api/saas/consolidated-view/v1/users/bulk-update/{id}: get: summary: Get bulk update users summary description: Returns the details of a completed async bulk update operation. operationId: getbulkUpdateAsyncOperationUsersSummary parameters: - name: id in: path required: true description: The unique ID of the summary. schema: { "type": "string" } responses: '200': { "description": "OK: Your request succeeded.", "content": { "application/json": { "schema": { $ref: '#/components/schemas/BulkUpdateUsersSummaryResponse' } } } } '400': $ref: '#/components/responses/400' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' security: - bearerAuth: - saas.consolidation.view.r tags: - Users /api/saas/consolidated-view/v1/tasks/{id}: get: parameters: - name: id in: path required: true description: The unique ID of the task. schema: type: string summary: Get task description: Returns the details of the given task. operationId: getTask tags: - Tasks responses: '200': description: 'OK: Your request succeeded.' content: application/json: schema: $ref: '#/components/schemas/Task' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' security: - bearerAuth: - saas.consolidation.view.r components: parameters: PageSize: name: page_size in: query required: false description: The maximum number of items in the response. schema: type: integer default: 100 maximum: 1000 PageNumber: name: page_number in: query required: false description: The page number. schema: type: integer format: int64 default: 1 responses: "400": description: "Bad Request: Your request is invalid or improperly formed. Consequently, the API server could not understand your request." content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" example: error: code: 400 message: Filter field name needs to be formatted as a string. "404": description: "Not Found: The operation you requested failed because a resource associated with your request could not be found." content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" example: error: code: 404 message: Resource with ID '32aeda0a-80dc-475a-907f-2d250a3a8614' not found. "500": description: "Internal Server Error: Your request failed due to an internal error." content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" example: error: code: 500 message: The service encountered an unexpected condition that prevented it from fulfilling the request. schemas: Task: type: object required: - id - name - status - _links properties: id: description: The unique ID of the task. type: string example: 483c67cf-e247-4a82-bef7-b86a29560788 name: description: The system-assigned task name. type: string example: Export users status: description: The status of the task. x-enumDescriptions: Running: The task is currently running. Complete: The task has completed. Failed: The task ended in a failed state. type: string example: Complete description: description: The detailed description of task status. type: string example: The export completed successfully. _links: type: array description: A collection of links to related resources. items: $ref: '#/components/schemas/Link' example: - href: /api/saas/consolidated-view/v1/users/bulk-update/483c67cf-e247-4a82-bef7-b86a29560788 rel: bulk-update-users method: GET ActiveChartData: title: ActiveChartData type: object properties: active: description: "The total number of users in the system that were active on corresponding date." example: 10 type: integer format: int32 date: description: The date this set of data relates to. example: "2024-05-25T00:00:00Z" type: string format: date-time total: description: "The total number of users in the system on corresponding date." example: 10 type: integer format: int32 required: - total - date - active DiscoverySource: title: DiscoverySource type: object properties: created: description: The date the discovery source was created. example: "2024-05-25T00:00:00Z" type: string format: date-time id: description: The unique ID of the discovery source. example: 299febb3-4107-42e9-8121-3df991acaf49 type: string name: description: The name of the discovery source. example: saas.collectors.m365 type: string type: description: The unique identifier of the discovery source type, see https://docs.snowsoftware.io/snow-atlas/user-documentation/saas/saas-discovery#discovery-sources. example: 1 type: integer format: int32 required: - created - type - id - name ErrorResponse: type: object required: - error properties: error: description: The error details. type: object required: - code - message properties: code: type: integer format: int32 description: The HTTP status code. example: 400 message: type: string description: The error message. example: "Filter field name needs to be formatted as a string." InactiveChartData: title: InactiveChartData type: object properties: date: description: The date this set of data relates to. example: "2024-05-25T00:00:00Z" type: string format: date-time inactive: description: "Number of users who have been inactive for the last 30 days on the corresponding date." example: 5 type: integer format: int32 total: description: "The total number of users in the system on corresponding date." example: 10 type: integer format: int32 required: - inactive - total - date NoActivityChartData: title: NoActivityChartData type: object properties: date: description: The date this set of data relates to. example: "2024-05-25T00:00:00Z" type: string format: date-time noActivity: description: "Number of users who have no activity on the corresponding date." example: 5 type: integer format: int32 total: description: "The total number of users in the system on corresponding date." example: 10 type: integer format: int32 required: - noActivity - total - date User: title: User description: "A discovered user in your SaaS estate." type: object properties: country: description: The country of the user. example: Japan type: string createdDate: description: The date the user was created. example: "2024-05-25T00:00:00Z" type: string format: date-time department: description: The department of the user. example: Engineering type: string discoveryTypes: description: The unique IDs of the discovery source types where the user was detected. For information on discovery source types, see https://docs.snowsoftware.io/snow-atlas/user-documentation/saas/saas-discovery#discovery-sources. example: [1, 2] x-enumDescriptions: "0": SaaS connector - Represents integration with SaaS applications for automated data collection and management. "1": Manually added - Indicates resources or applications manually added by users without automated discovery. "2": Browser unverified - Refers to browser-based applications that have not been verified for compliance or usage. "3": SSO - Represents Single Sign-On integrations for centralized user authentication. "4": Device - Refers to physical or virtual devices managed within the IT environment. "7": Browser verified - Denotes browser-based applications that have been verified for compliance or usage. "8": CASB - Represents Cloud Access Security Broker integrations to enhance cloud security and compliance. type: array items: type: integer format: int32 displayName: description: The display name of the user. example: John Doe type: string email: description: The email address of the user. example: john.doe@organization.com type: string id: description: The unique ID of the user. example: 2f86b198-04f3-4770-ad08-b32518206da0 type: string isEnabled: description: "```true``` if the enabled state of the user in the discovery source is true.; otherwise, ```false```." example: true type: boolean isInReview: description: "```true``` if user has been marked as one to be analyzed further, or as a reminder for taking action on their subscriptions; otherwise, ```false```." example: true type: boolean isOnline: description: "```true``` if user has been marked as a SaaS user; who does not have a device that is inventoried in your organization. This is common for, for example, consultants and other temporary staff; otherwise, ```false```." example: true type: boolean isQualified: description: "```true``` if has been marked to be included in Snow's services which incur a cost; otherwise, ```false```." example: true type: boolean lastActive: description: The date of last user activity in relevant applications. example: "2024-06-28T00:00:00Z" type: string format: date-time licenseCount: description: The number of subscription types assigned to the user. example: 5 type: integer format: int32 potentialSavings: description: The monthly subscription costs for users who are inactive or have no activity. example: 500.0 type: number format: double status: description: The activity status of the user in relevant applications. example: "Active" type: string userCostPerMonth: description: The monthly cost of the user's subscription entitlements. example: 1000.0 type: number format: double username: description: The username of the user. example: john.doe_1@org.com type: string required: - id - country - discoveryTypes - isInReview - isQualified - status - email - department - createdDate - lastActive - userCostPerMonth - potentialSavings - displayName - username - licenseCount - isOnline TotalChartData: title: TotalChartData type: object properties: added: description: The number of users added in your SaaS estate on the corresponding date. example: 20 type: integer format: int32 date: description: The date this set of data relates to. example: "2024-04-30T01:00:00Z" type: string format: date-time removed: description: The number of users removed from your SaaS estate on the corresponding date. example: 10 type: integer format: int32 total: description: The total number of users in your SaaS estate on the corresponding date. example: 100 type: integer format: int32 required: - added - removed - total - date UserRequest: title: User description: The properties of a single user that can be updated. type: object properties: isOnline: description: "```true``` if user only exists as SaaS user; who does not have a device that is inventoried in your organization. This is common for, for example, consultants and other temporary staff; otherwise, ```false```." type: boolean isInReview: description: "```true``` if is user is one you need to analyze further, or as a reminder for taking action on their subscriptions; otherwise, ```false```." type: boolean isQualified: description: "```true``` if user is to be included in Snow's services which incur a cost; otherwise, ```false```." type: boolean required: - isOnline - isInReview - isQualified UserApplication: title: UserApplication type: object properties: discoveryTypes: description: The type of discovery sources for the application, For information on discovery source types, see https://docs.snowsoftware.io/snow-atlas/user-documentation/saas/saas-discovery#discovery-sources. type: array example: [1, 2] x-enumDescriptions: "0": SaaS connector - Represents integration with SaaS applications for automated data collection and management. "1": Manually added - Indicates resources or applications manually added by users without automated discovery. "2": Browser unverified - Refers to browser-based applications that have not been verified for compliance or usage. "3": SSO - Represents Single Sign-On integrations for centralized user authentication. "4": Device - Refers to physical or virtual devices managed within the IT environment. "7": Browser verified - Denotes browser-based applications that have been verified for compliance or usage. "8": CASB - Represents Cloud Access Security Broker integrations to enhance cloud security and compliance. items: type: integer format: int32 id: description: The unique ID of the application. example: 77f176da-7640-4889-ba6b-c53fe882b234 type: string lastActive: description: The date of last user activity in relevant applications. example: "2024-06-28T00:00:00Z" type: string format: date-time name: description: The name of the application. example: Microsoft PowerApps type: string vendor: description: The vendor of the application. example: Microsoft Corporation type: string vendorId: description: The unique ID of the vendor of the application. example: 8cab5d46-18fd-462f-9ae8-6cac8ba12054 type: string required: - id - name - discoveryTypes - lastActive - vendorId - vendor UserSubscription: title: UserSubscription type: object properties: applicationId: description: The unique ID of the application for which the subscription is purchased. example: def96bf0-bfd1-4bf9-8b1c-aa78a32bc0ed type: string applicationName: description: The application for which the subscription is purchased. example: Microsoft Copilot type: string discoverySource: description: The discovery source that detected the item. example: "O365 Connector" type: string discoveryType: description: The unique ID of the discovery source type where the user was detected. For information on IDs, see https://docs.snowsoftware.io/snow-atlas/user-documentation/saas/saas-discovery#discovery-sources. example: 0 type: integer format: int32 firstDiscovered: description: The time the item was first detected by a discovery source. example: "2024-07-17T08:21:17.359Z" type: string format: date-time id: description: The unique ID of the subscription. example: ac2c7870-6457-4a99-bafb-467eaf5de8e4 type: string lastActivity: description: The date of the last user activity in relevant applications. example: "2024-06-28T00:00:00Z" type: string format: date-time name: description: The name of the subscription type. example: "Copilot" type: string potentialSavings: description: The monthly subscription costs for users who are inactive or have no activity. example: 100.00 type: number format: double totalCostPerMonth: description: The monthly cost for the subscription. example: 100.00 type: number format: double vendor: description: The vendor of the application for which the subscription is purchased. example: "Microsoft Corporation" type: string vendorId: description: The unique ID of the vendor. example: 8cab5d46-18fd-462f-9ae8-6cac8ba12054 type: string required: - totalCostPerMonth - applicationId - applicationName - id - discoveryType - lastActivity - vendorId - vendor - name - activity - discoverySource - firstDiscovered - potentialSavings UsersKPIResponse: title: UsersKPIResponse description: "The data for the User key performance indicators and chart." type: object properties: active: type: integer format: int32 description: "The number of active users as of today." example: 10 activeChartData: description: "The historical data for active users." type: array items: $ref: "#/components/schemas/ActiveChartData" activeTrend: type: integer format: int32 description: "Number of active users 30 days ago." example: 10 currentActiveChartData: description: "Todays data for active users." type: array items: $ref: "#/components/schemas/ActiveChartData" currentInactiveChartData: description: "Data for users who have been inactive today." type: array items: $ref: "#/components/schemas/InactiveChartData" currentNoActivityChartData: description: "Data for users with no activity today." type: array items: $ref: "#/components/schemas/NoActivityChartData" currentTotalChartData: description: "Data for the total number of discovered users today." type: array items: $ref: "#/components/schemas/TotalChartData" inactive: description: "Number of inactive users today." example: 10 type: integer format: int32 inactiveChartData: description: "The historical data for users who have been inactive in the last 30 days." type: array items: $ref: "#/components/schemas/InactiveChartData" inactiveTrend: type: integer format: int32 description: "The number of inactive users 30 days ago." example: 10 noActivity: type: integer format: int32 description: "The number of users with no activity as of today." example: 10 noActivityChartData: description: "The historical data for users with no activity." type: array items: $ref: "#/components/schemas/NoActivityChartData" noActivityTrend: type: integer format: int32 description: "The number of users with no activity 30 days ago." example: 10 total: description: "The total number of discovered users as of today." example: 10 type: integer format: int32 totalChartData: description: "The historical data for all discovered users." type: array items: $ref: "#/components/schemas/TotalChartData" totalTrend: description: "The total number of discovered users 30 days ago." example: 10 type: integer format: int32 required: - noActivityTrend - activeTrend - inactiveTrend - currentTotalChartData - currentActiveChartData - noActivityChartData - inactive - noActivity - totalTrend - inactiveChartData - currentNoActivityChartData - activeChartData - currentInactiveChartData - total - active - totalChartData Pagination: type: object description: The pagination details. required: - page_size - page_number properties: page_size: type: integer description: The page size you requested. example: 100 page_number: type: integer format: int64 description: The page number you requested. example: 1 total_pages: type: integer format: int64 description: The total number of pages. example: 1 total_items: type: integer format: int64 description: The total number of items. example: 1 BulkUpdateUsersRequest: type: object required: - scope - body properties: filter: description: For more information on the available operators and which data types those operators work on, see [Filter API call results](https://docs.snowsoftware.io/snow-atlas-api/resources/get-started-with-apis/api-conventions#filter-api-call-results). type: string example: "name -eq Per" scope: description: The scope of the update operation. x-enumDescriptions: Only: The operation is performed only on the users whose IDs are specified.. All: The operation is performed on all users. AllExcept: The operation is performed on every user except those who IDs are specified. type: string "enum": [ "Only", "All", "AllExcept" ] example: All ids: description: The IDs that the operation is performed on. type: array items: type: string example: a7a75b83-2690-4cc9-b652-a0fbe93dba4a body: $ref: "#/components/schemas/UserStatus" UserStatus: description: The update to be applied to all IDs. type: object properties: onlineOnly: description: "```true``` if the user is marked as online only; otherwise, ```false```." type: boolean example: true review: description: "```true``` if the user is marked as for review; otherwise, ```false```." type: boolean example: true qualified: description: "```true``` if the user is marked as qualified; otherwise, ```false```." type: boolean example: true BulkUpdateUsersResponse: type: object required: - id - _links properties: id: description: The unique ID of the bulk operation. type: string example: 483c67cf-e247-4a82-bef7-b86a29560788 _links: type: array description: A collection of links to related resources. items: $ref: '#/components/schemas/Link' example: - href: "api/saas/consolidated-view/v1/tasks/483c67cf-e247-4a82-bef7-b86a29560788" rel: self method: GET Link: type: object required: - href - rel - method properties: href: type: string description: The associated relative URL. example: api/saas/consolidated-view/v1/... rel: type: string description: Specifies the relationship between the current document and the linked document/resource. example: self method: type: string description: The method to access related resources. example: GET BulkUpdateUsersSummaryResponse: type: object properties: successCount: description: The number of items that succeeded in the operation. type: integer format: int64 example: 10 failedCount: description: The number of items that failed in the operation. type: integer format: int64 example: 10 failed: description: The IDs of the failed items. type: array items: type: string example: [ e192ea5e-363c-47e4-82e3-d2587afada8c, 07d30e31-3d4b-49e3-8000-4faa0653e7dc ] failureReason: description: The reason the bulk operation failed. type: string example: "These users failed for reasons x and y." required: - successCount - failedCount securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT