From cc7e38fa94f04a66e432235291732ab081290891 Mon Sep 17 00:00:00 2001
From: Alex Langhart <alex.langhart@jumpcloud.com>
Date: Wed, 7 Aug 2019 19:17:37 -0600
Subject: [PATCH 1/3] Auto-generate jcapi

---
 jcapiv1/docs/ApplicationsApi.md               |    4 +-
 jcapiv1/docs/Body.md                          |    3 +
 jcapiv1/docs/CommandResultsApi.md             |   10 +-
 jcapiv1/docs/CommandTriggersApi.md            |    2 +-
 jcapiv1/docs/CommandsApi.md                   |   16 +-
 jcapiv1/docs/OrganizationsApi.md              |    4 +-
 jcapiv1/docs/RadiusServersApi.md              |   10 +-
 jcapiv1/docs/Radiusserver.md                  |    3 +
 jcapiv1/docs/Radiusserverpost.md              |    3 +
 jcapiv1/docs/Radiusserverput.md               |    3 +
 jcapiv1/docs/SearchApi.md                     |   12 +-
 jcapiv1/docs/SystemsApi.md                    |   16 +-
 jcapiv1/docs/SystemusersApi.md                |   34 +-
 jcapiv1/docs/TagsApi.md                       |   10 +-
 jcapiv1/lib/jcapiv1/api/applications_api.rb   |    6 +-
 .../lib/jcapiv1/api/command_results_api.rb    |   14 +-
 .../lib/jcapiv1/api/command_triggers_api.rb   |    2 +-
 jcapiv1/lib/jcapiv1/api/commands_api.rb       |   20 +-
 jcapiv1/lib/jcapiv1/api/organizations_api.rb  |    6 +-
 jcapiv1/lib/jcapiv1/api/radius_servers_api.rb |   14 +-
 jcapiv1/lib/jcapiv1/api/search_api.rb         |   18 +-
 jcapiv1/lib/jcapiv1/api/systems_api.rb        |   20 +-
 jcapiv1/lib/jcapiv1/api/systemusers_api.rb    |   44 +-
 jcapiv1/lib/jcapiv1/api/tags_api.rb           |   10 +-
 jcapiv1/lib/jcapiv1/models/body.rb            |   68 +-
 jcapiv1/lib/jcapiv1/models/radiusserver.rb    |   68 +-
 .../lib/jcapiv1/models/radiusserverpost.rb    |   68 +-
 jcapiv1/lib/jcapiv1/models/radiusserverput.rb |   68 +-
 jcapiv1/spec/api/applications_api_spec.rb     |    2 +-
 jcapiv1/spec/api/command_results_api_spec.rb  |    4 +-
 jcapiv1/spec/api/commands_api_spec.rb         |    4 +-
 jcapiv1/spec/api/organizations_api_spec.rb    |    2 +-
 jcapiv1/spec/api/radius_servers_api_spec.rb   |    4 +-
 jcapiv1/spec/api/search_api_spec.rb           |    6 +-
 jcapiv1/spec/api/systems_api_spec.rb          |    4 +-
 jcapiv1/spec/api/systemusers_api_spec.rb      |   10 +-
 jcapiv1/spec/models/body_spec.rb              |   22 +
 jcapiv1/spec/models/radiusserver_spec.rb      |   22 +
 jcapiv1/spec/models/radiusserverpost_spec.rb  |   22 +
 jcapiv1/spec/models/radiusserverput_spec.rb   |   22 +
 jcapiv2/README.md                             |   77 +-
 jcapiv2/docs/ActiveDirectoryAgentGetOutput.md |    9 +
 jcapiv2/docs/ActiveDirectoryAgentInput.md     |    7 +
 .../docs/ActiveDirectoryAgentListOutput.md    |    9 +
 jcapiv2/docs/ActiveDirectoryApi.md            |  263 ++-
 jcapiv2/docs/ApplicationsApi.md               |   12 +-
 jcapiv2/docs/Body.md                          |   10 +
 jcapiv2/docs/CommandsApi.md                   |   12 +-
 jcapiv2/docs/GSuiteApi.md                     |  136 +-
 jcapiv2/docs/GraphApi.md                      |  228 ++-
 jcapiv2/docs/GsuiteOutput.md                  |   10 +
 jcapiv2/docs/GsuitePatchInput.md              |    9 +
 jcapiv2/docs/InlineResponse200.md             |    6 +-
 jcapiv2/docs/InlineResponse2001.md            |    9 +
 ...ineResponse401.md => InlineResponse400.md} |    2 +-
 jcapiv2/docs/LDAPServersApi.md                |   81 +-
 jcapiv2/docs/LdapServerAction.md              |    7 +
 jcapiv2/docs/LdapServerInput.md               |    2 +
 jcapiv2/docs/LdapServerOutput.md              |    2 +
 jcapiv2/docs/Office365Api.md                  |   12 +-
 jcapiv2/docs/OrgCryptoSettings.md             |    8 +
 jcapiv2/docs/OrganizationsApi.md              |  156 ++
 jcapiv2/docs/OrgcryptosettingsSshKeys.md      |   10 +
 jcapiv2/docs/PoliciesApi.md                   |   14 +-
 jcapiv2/docs/ProvidersApi.md                  |    4 +-
 jcapiv2/docs/RADIUSServersApi.md              |   12 +-
 jcapiv2/docs/SystemGroupAssociationsApi.md    |   24 +-
 jcapiv2/docs/SystemGroupsApi.md               |   18 +-
 jcapiv2/docs/SystemInsightsApi.md             | 1316 ++++++++++++
 jcapiv2/docs/SystemInsightsApps.md            |   29 +
 jcapiv2/docs/SystemInsightsBrowserPlugins.md  |   20 +
 .../docs/SystemInsightsChromeExtensions.md    |   21 +
 jcapiv2/docs/SystemInsightsDiskEncryption.md  |   17 +
 jcapiv2/docs/SystemInsightsFirefoxAddons.md   |   24 +
 jcapiv2/docs/SystemInsightsGroups.md          |   15 +
 .../docs/SystemInsightsInterfaceAddresses.md  |   17 +
 jcapiv2/docs/SystemInsightsMounts.md          |   21 +
 jcapiv2/docs/SystemInsightsOsVersion.md       |   20 +
 .../docs/SystemInsightsSafariExtensions.md    |   20 +
 jcapiv2/docs/SystemInsightsSystemInfo.md      |   25 +
 jcapiv2/docs/SystemInsightsUsers.md           |   20 +
 jcapiv2/docs/SystemsApi.md                    |   18 +-
 jcapiv2/docs/UserGroupAssociationsApi.md      |   54 +-
 jcapiv2/docs/UserGroupsApi.md                 |   54 +-
 jcapiv2/docs/UsersApi.md                      |   42 +-
 jcapiv2/lib/jcapiv2.rb                        |   26 +-
 .../lib/jcapiv2/api/active_directory_api.rb   |  333 +++-
 jcapiv2/lib/jcapiv2/api/applications_api.rb   |   26 +-
 .../lib/jcapiv2/api/bulk_job_requests_api.rb  |    8 +
 jcapiv2/lib/jcapiv2/api/commands_api.rb       |   26 +-
 jcapiv2/lib/jcapiv2/api/directories_api.rb    |    4 +
 jcapiv2/lib/jcapiv2/api/g_suite_api.rb        |  180 +-
 jcapiv2/lib/jcapiv2/api/graph_api.rb          |  512 ++++-
 jcapiv2/lib/jcapiv2/api/groups_api.rb         |    4 +
 jcapiv2/lib/jcapiv2/api/ldap_servers_api.rb   |  107 +-
 jcapiv2/lib/jcapiv2/api/office365_api.rb      |   30 +-
 jcapiv2/lib/jcapiv2/api/organizations_api.rb  |  207 ++
 jcapiv2/lib/jcapiv2/api/policies_api.rb       |   54 +-
 .../lib/jcapiv2/api/policytemplates_api.rb    |    4 +
 jcapiv2/lib/jcapiv2/api/providers_api.rb      |   10 +-
 jcapiv2/lib/jcapiv2/api/radius_servers_api.rb |   26 +-
 jcapiv2/lib/jcapiv2/api/samba_domains_api.rb  |    4 +
 .../api/system_group_associations_api.rb      |   48 +-
 .../system_group_members_membership_api.rb    |   12 +
 jcapiv2/lib/jcapiv2/api/system_groups_api.rb  |   53 +-
 .../lib/jcapiv2/api/system_insights_api.rb    | 1775 +++++++++++++++++
 jcapiv2/lib/jcapiv2/api/systems_api.rb        |   47 +-
 .../api/user_group_associations_api.rb        |  103 +-
 .../api/user_group_members_membership_api.rb  |   12 +
 jcapiv2/lib/jcapiv2/api/user_groups_api.rb    |  119 +-
 jcapiv2/lib/jcapiv2/api/users_api.rb          |   89 +-
 jcapiv2/lib/jcapiv2/api/workday_import_api.rb |   12 +
 .../active_directory_agent_get_output.rb      |  204 ++
 .../models/active_directory_agent_input.rb    |  179 ++
 .../active_directory_agent_list_output.rb     |  231 +++
 jcapiv2/lib/jcapiv2/models/body.rb            |  206 ++
 jcapiv2/lib/jcapiv2/models/gsuite_output.rb   |  251 +++
 .../lib/jcapiv2/models/gsuite_patch_input.rb  |  242 +++
 .../lib/jcapiv2/models/inline_response_200.rb |   46 +-
 .../jcapiv2/models/inline_response_200_1.rb   |  199 ++
 ...response_401.rb => inline_response_400.rb} |    2 +-
 .../lib/jcapiv2/models/ldap_server_action.rb  |   31 +
 .../lib/jcapiv2/models/ldap_server_input.rb   |   73 +-
 .../lib/jcapiv2/models/ldap_server_output.rb  |   67 +-
 .../lib/jcapiv2/models/org_crypto_settings.rb |  188 ++
 .../models/orgcryptosettings_ssh_keys.rb      |  206 ++
 .../jcapiv2/models/system_insights_apps.rb    |  377 ++++
 .../models/system_insights_browser_plugins.rb |  296 +++
 .../system_insights_chrome_extensions.rb      |  305 +++
 .../models/system_insights_disk_encryption.rb |  269 +++
 .../models/system_insights_firefox_addons.rb  |  332 +++
 .../jcapiv2/models/system_insights_groups.rb  |  251 +++
 .../system_insights_interface_addresses.rb    |  269 +++
 .../jcapiv2/models/system_insights_mounts.rb  |  305 +++
 .../models/system_insights_os_version.rb      |  296 +++
 .../system_insights_safari_extensions.rb      |  296 +++
 .../models/system_insights_system_info.rb     |  341 ++++
 .../jcapiv2/models/system_insights_users.rb   |  296 +++
 jcapiv2/spec/api/active_directory_api_spec.rb |   69 +-
 jcapiv2/spec/api/applications_api_spec.rb     |    6 +-
 jcapiv2/spec/api/commands_api_spec.rb         |    6 +-
 jcapiv2/spec/api/g_suite_api_spec.rb          |   39 +-
 jcapiv2/spec/api/graph_api_spec.rb            |  114 +-
 jcapiv2/spec/api/ldap_servers_api_spec.rb     |   23 +-
 jcapiv2/spec/api/office365_api_spec.rb        |    6 +-
 jcapiv2/spec/api/organizations_api_spec.rb    |   76 +
 jcapiv2/spec/api/policies_api_spec.rb         |    8 +-
 jcapiv2/spec/api/providers_api_spec.rb        |    2 +-
 jcapiv2/spec/api/radius_servers_api_spec.rb   |    6 +-
 .../api/system_group_associations_api_spec.rb |   12 +-
 jcapiv2/spec/api/system_groups_api_spec.rb    |    9 +-
 jcapiv2/spec/api/system_insights_api_spec.rb  |  383 ++++
 jcapiv2/spec/api/systems_api_spec.rb          |    9 +-
 .../api/user_group_associations_api_spec.rb   |   27 +-
 jcapiv2/spec/api/user_groups_api_spec.rb      |   27 +-
 jcapiv2/spec/api/users_api_spec.rb            |   21 +-
 .../active_directory_agent_get_output_spec.rb |   48 +
 .../active_directory_agent_input_spec.rb      |   36 +
 ...active_directory_agent_list_output_spec.rb |   52 +
 jcapiv2/spec/models/body_spec.rb              |   54 +
 jcapiv2/spec/models/gsuite_output_spec.rb     |   62 +
 .../spec/models/gsuite_patch_input_spec.rb    |   56 +
 .../spec/models/inline_response_200_1_spec.rb |   48 +
 .../spec/models/inline_response_200_spec.rb   |   16 +-
 ...01_spec.rb => inline_response_400_spec.rb} |   12 +-
 .../spec/models/ldap_server_action_spec.rb    |   36 +
 jcapiv2/spec/models/ldap_server_input_spec.rb |   20 +
 .../spec/models/ldap_server_output_spec.rb    |   20 +
 .../spec/models/org_crypto_settings_spec.rb   |   42 +
 .../models/orgcryptosettings_ssh_keys_spec.rb |   54 +
 .../spec/models/system_insights_apps_spec.rb  |  168 ++
 .../system_insights_browser_plugins_spec.rb   |  114 ++
 .../system_insights_chrome_extensions_spec.rb |  120 ++
 .../system_insights_disk_encryption_spec.rb   |   96 +
 .../system_insights_firefox_addons_spec.rb    |  138 ++
 .../models/system_insights_groups_spec.rb     |   84 +
 ...ystem_insights_interface_addresses_spec.rb |   96 +
 .../models/system_insights_mounts_spec.rb     |  120 ++
 .../models/system_insights_os_version_spec.rb |  114 ++
 .../system_insights_safari_extensions_spec.rb |  114 ++
 .../system_insights_system_info_spec.rb       |  144 ++
 .../spec/models/system_insights_users_spec.rb |  114 ++
 182 files changed, 15297 insertions(+), 675 deletions(-)
 create mode 100644 jcapiv2/docs/ActiveDirectoryAgentGetOutput.md
 create mode 100644 jcapiv2/docs/ActiveDirectoryAgentInput.md
 create mode 100644 jcapiv2/docs/ActiveDirectoryAgentListOutput.md
 create mode 100644 jcapiv2/docs/Body.md
 create mode 100644 jcapiv2/docs/GsuiteOutput.md
 create mode 100644 jcapiv2/docs/GsuitePatchInput.md
 create mode 100644 jcapiv2/docs/InlineResponse2001.md
 rename jcapiv2/docs/{InlineResponse401.md => InlineResponse400.md} (84%)
 create mode 100644 jcapiv2/docs/LdapServerAction.md
 create mode 100644 jcapiv2/docs/OrgCryptoSettings.md
 create mode 100644 jcapiv2/docs/OrganizationsApi.md
 create mode 100644 jcapiv2/docs/OrgcryptosettingsSshKeys.md
 create mode 100644 jcapiv2/docs/SystemInsightsApi.md
 create mode 100644 jcapiv2/docs/SystemInsightsApps.md
 create mode 100644 jcapiv2/docs/SystemInsightsBrowserPlugins.md
 create mode 100644 jcapiv2/docs/SystemInsightsChromeExtensions.md
 create mode 100644 jcapiv2/docs/SystemInsightsDiskEncryption.md
 create mode 100644 jcapiv2/docs/SystemInsightsFirefoxAddons.md
 create mode 100644 jcapiv2/docs/SystemInsightsGroups.md
 create mode 100644 jcapiv2/docs/SystemInsightsInterfaceAddresses.md
 create mode 100644 jcapiv2/docs/SystemInsightsMounts.md
 create mode 100644 jcapiv2/docs/SystemInsightsOsVersion.md
 create mode 100644 jcapiv2/docs/SystemInsightsSafariExtensions.md
 create mode 100644 jcapiv2/docs/SystemInsightsSystemInfo.md
 create mode 100644 jcapiv2/docs/SystemInsightsUsers.md
 create mode 100644 jcapiv2/lib/jcapiv2/api/organizations_api.rb
 create mode 100644 jcapiv2/lib/jcapiv2/api/system_insights_api.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/active_directory_agent_get_output.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/active_directory_agent_input.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/active_directory_agent_list_output.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/body.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/gsuite_output.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/gsuite_patch_input.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/inline_response_200_1.rb
 rename jcapiv2/lib/jcapiv2/models/{inline_response_401.rb => inline_response_400.rb} (99%)
 create mode 100644 jcapiv2/lib/jcapiv2/models/ldap_server_action.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/org_crypto_settings.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/orgcryptosettings_ssh_keys.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_apps.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_groups.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb
 create mode 100644 jcapiv2/lib/jcapiv2/models/system_insights_users.rb
 create mode 100644 jcapiv2/spec/api/organizations_api_spec.rb
 create mode 100644 jcapiv2/spec/api/system_insights_api_spec.rb
 create mode 100644 jcapiv2/spec/models/active_directory_agent_get_output_spec.rb
 create mode 100644 jcapiv2/spec/models/active_directory_agent_input_spec.rb
 create mode 100644 jcapiv2/spec/models/active_directory_agent_list_output_spec.rb
 create mode 100644 jcapiv2/spec/models/body_spec.rb
 create mode 100644 jcapiv2/spec/models/gsuite_output_spec.rb
 create mode 100644 jcapiv2/spec/models/gsuite_patch_input_spec.rb
 create mode 100644 jcapiv2/spec/models/inline_response_200_1_spec.rb
 rename jcapiv2/spec/models/{inline_response_401_spec.rb => inline_response_400_spec.rb} (77%)
 create mode 100644 jcapiv2/spec/models/ldap_server_action_spec.rb
 create mode 100644 jcapiv2/spec/models/org_crypto_settings_spec.rb
 create mode 100644 jcapiv2/spec/models/orgcryptosettings_ssh_keys_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_apps_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_browser_plugins_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_disk_encryption_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_firefox_addons_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_groups_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_interface_addresses_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_mounts_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_os_version_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_safari_extensions_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_system_info_spec.rb
 create mode 100644 jcapiv2/spec/models/system_insights_users_spec.rb

diff --git a/jcapiv1/docs/ApplicationsApi.md b/jcapiv1/docs/ApplicationsApi.md
index 2188421..932a130 100644
--- a/jcapiv1/docs/ApplicationsApi.md
+++ b/jcapiv1/docs/ApplicationsApi.md
@@ -12,7 +12,7 @@ Method | HTTP request | Description
 
 Applications
 
-The endpoint returns all your SSO / SAML Applications.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/applications \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+The endpoint returns all your SSO / SAML Applications.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/applications \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
 
 ### Example
 ```ruby
@@ -74,7 +74,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/Body.md b/jcapiv1/docs/Body.md
index b30fe30..adcf77d 100644
--- a/jcapiv1/docs/Body.md
+++ b/jcapiv1/docs/Body.md
@@ -6,5 +6,8 @@ Name | Type | Description | Notes
 **name** | **String** |  | 
 **network_source_ip** | **String** |  | 
 **tags** | **Array&lt;String&gt;** |  | [optional] 
+**user_lockout_action** | **String** |  | [optional] 
+**user_password_expiration_action** | **String** |  | [optional] 
+**mfa** | **String** |  | [optional] 
 
 
diff --git a/jcapiv1/docs/CommandResultsApi.md b/jcapiv1/docs/CommandResultsApi.md
index 8704945..d90d0a0 100644
--- a/jcapiv1/docs/CommandResultsApi.md
+++ b/jcapiv1/docs/CommandResultsApi.md
@@ -14,7 +14,7 @@ Method | HTTP request | Description
 
 Delete a Command result
 
-This endpoint deletes a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ````
+This endpoint deletes a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ````
 
 ### Example
 ```ruby
@@ -69,7 +69,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -78,7 +78,7 @@ Name | Type | Description  | Notes
 
 List an individual Command result
 
-This endpoint returns a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ```
+This endpoint returns a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
 
 ### Example
 ```ruby
@@ -137,7 +137,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -208,7 +208,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/CommandTriggersApi.md b/jcapiv1/docs/CommandTriggersApi.md
index 7e5fea3..81cfdf4 100644
--- a/jcapiv1/docs/CommandTriggersApi.md
+++ b/jcapiv1/docs/CommandTriggersApi.md
@@ -66,7 +66,7 @@ nil (empty response body)
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/CommandsApi.md b/jcapiv1/docs/CommandsApi.md
index 0189c94..a8de0f7 100644
--- a/jcapiv1/docs/CommandsApi.md
+++ b/jcapiv1/docs/CommandsApi.md
@@ -17,7 +17,7 @@ Method | HTTP request | Description
 
 Get a Command File
 
-This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ```
+This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
 
 ### Example
 ```ruby
@@ -78,7 +78,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -141,7 +141,7 @@ nil (empty response body)
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -150,7 +150,7 @@ nil (empty response body)
 
 List an individual Command
 
-This endpoint returns a specific command based on the command ID.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
+This endpoint returns a specific command based on the command ID.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
 
 ### Example
 ```ruby
@@ -209,7 +209,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -280,7 +280,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -343,7 +343,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -409,7 +409,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/OrganizationsApi.md b/jcapiv1/docs/OrganizationsApi.md
index 8356c8a..d0a9bc7 100644
--- a/jcapiv1/docs/OrganizationsApi.md
+++ b/jcapiv1/docs/OrganizationsApi.md
@@ -12,7 +12,7 @@ Method | HTTP request | Description
 
 Get Organization Details
 
-This endpoint returns Organization Details.  #### Sample Request   ``` curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+This endpoint returns Organization Details.  #### Sample Request  ``` curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
 
 ### Example
 ```ruby
@@ -74,7 +74,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/RadiusServersApi.md b/jcapiv1/docs/RadiusServersApi.md
index ad0ce58..c19bee9 100644
--- a/jcapiv1/docs/RadiusServersApi.md
+++ b/jcapiv1/docs/RadiusServersApi.md
@@ -76,7 +76,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -85,7 +85,7 @@ Name | Type | Description  | Notes
 
 Create a Radius Server
 
-This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{test_radius}\",     \"networkSourceIp\": \"{0.0.0.0}\",     \"sharedSecret\":\"{secretpassword}\" }' ```
+This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{test_radius}\",     \"networkSourceIp\": \"{0.0.0.0}\",     \"sharedSecret\":\"{secretpassword}\",     \"userLockoutAction\": \"REMOVE\",     \"userPasswordExpirationAction\": \"MAINTAIN\" }' ```
 
 ### Example
 ```ruby
@@ -139,7 +139,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -148,7 +148,7 @@ Name | Type | Description  | Notes
 
 Update Radius Servers
 
-This endpoint allows you to update RADIUS servers in your organization.  ####  ``` curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{name_update}\",     \"networkSourceIp\": \"{0.0.0.0}\" }' ```
+This endpoint allows you to update RADIUS servers in your organization.  #### ``` curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{name_update}\",     \"networkSourceIp\": \"{0.0.0.0}\",     \"userLockoutAction\": \"REMOVE\",     \"userPasswordExpirationAction\": \"MAINTAIN\" }' ```
 
 ### Example
 ```ruby
@@ -202,7 +202,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/Radiusserver.md b/jcapiv1/docs/Radiusserver.md
index 71f7441..495b229 100644
--- a/jcapiv1/docs/Radiusserver.md
+++ b/jcapiv1/docs/Radiusserver.md
@@ -10,5 +10,8 @@ Name | Type | Description | Notes
 **name** | **String** |  | [optional] 
 **tags** | **Array&lt;String&gt;** |  | [optional] 
 **tag_names** | **Array&lt;String&gt;** |  | [optional] 
+**user_lockout_action** | **String** |  | [optional] 
+**user_password_expiration_action** | **String** |  | [optional] 
+**mfa** | **String** |  | [optional] 
 
 
diff --git a/jcapiv1/docs/Radiusserverpost.md b/jcapiv1/docs/Radiusserverpost.md
index cadc1da..9fa379e 100644
--- a/jcapiv1/docs/Radiusserverpost.md
+++ b/jcapiv1/docs/Radiusserverpost.md
@@ -7,5 +7,8 @@ Name | Type | Description | Notes
 **name** | **String** |  | 
 **tag_names** | **Array&lt;String&gt;** |  | [optional] 
 **shared_secret** | **String** | RADIUS shared secret between the server and client. | 
+**user_lockout_action** | **String** |  | [optional] 
+**user_password_expiration_action** | **String** |  | [optional] 
+**mfa** | **String** |  | [optional] 
 
 
diff --git a/jcapiv1/docs/Radiusserverput.md b/jcapiv1/docs/Radiusserverput.md
index d78d8bb..9bddf26 100644
--- a/jcapiv1/docs/Radiusserverput.md
+++ b/jcapiv1/docs/Radiusserverput.md
@@ -7,5 +7,8 @@ Name | Type | Description | Notes
 **network_source_ip** | **String** |  | [optional] 
 **name** | **String** |  | [optional] 
 **tag_names** | **Array&lt;String&gt;** |  | [optional] 
+**user_lockout_action** | **String** |  | [optional] 
+**user_password_expiration_action** | **String** |  | [optional] 
+**mfa** | **String** |  | [optional] 
 
 
diff --git a/jcapiv1/docs/SearchApi.md b/jcapiv1/docs/SearchApi.md
index c94b7e9..af26cf9 100644
--- a/jcapiv1/docs/SearchApi.md
+++ b/jcapiv1/docs/SearchApi.md
@@ -14,7 +14,7 @@ Method | HTTP request | Description
 
 Search Organizations
 
-This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.   The parameters must be passed as Content-Type application/json.   #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"search\":{     \"fields\" : [\"settings.name\"],     \"searchTerm\": \"Second\"     },   \"fields\": [\"_id\", \"displayName\", \"logoUrl\"],   \"limit\" : 0,   \"skip\" : 0 }' ```
+This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.  The parameters must be passed as Content-Type application/json.   #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"search\":{     \"fields\" : [\"settings.name\"],     \"searchTerm\": \"Second\"     },   \"fields\": [\"_id\", \"displayName\", \"logoUrl\"],   \"limit\" : 0,   \"skip\" : 0 }' ```
 
 ### Example
 ```ruby
@@ -74,7 +74,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -83,7 +83,7 @@ Name | Type | Description  | Notes
 
 Search Systems
 
-Return Systems in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of hostnames ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\": {     \"or\": [       {\"hostname\" : \"my-hostname\"},       {\"hostname\" : \"other-hostname\"}     ]   },   \"fields\" : \"os hostname displayName\" }' ```  Text search for a hostname or display name ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"fields\": \"os hostname displayName\" }' ```  Combining `filter` and `searchFilter` to search for names that match a given OS ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"filter\": {     \"or\": [       {\"os\" : \"Ubuntu\"},       {\"os\" : \"Mac OS X\"}     ]   },   \"fields\": \"os hostname displayName\" }' ```
+Return Systems in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of hostnames ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\": {     \"or\": [       {\"hostname\" : \"my-hostname\"},       {\"hostname\" : \"other-hostname\"}     ]   },   \"fields\" : \"os hostname displayName\" }' ```  Text search for a hostname or display name ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"fields\": \"os hostname displayName\" }' ```  Combining `filter` and `searchFilter` to search for names that match a given OS ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"filter\": {     \"or\": [       {\"os\" : \"Ubuntu\"},       {\"os\" : \"Mac OS X\"}     ]   },   \"fields\": \"os hostname displayName\" }' ```
 
 ### Example
 ```ruby
@@ -145,7 +145,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -154,7 +154,7 @@ Name | Type | Description  | Notes
 
 Search System Users
 
-Return System Users in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of system users in a department ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\" : [{\"department\" : \"IT\"}],   \"fields\" : \"email username sudo\" }' ```  Text search for system users with and email on a domain ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\" : {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"fields\" : \"email username sudo\" }' ```  Combining `filter` and `searchFilter` to text search for system users with and email on a domain who are in a list of departments ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"filter\": {     \"or\": [       {\"department\" : \"IT\"},       {\"department\" : \"Sales\"}     ]   },   \"fields\" : \"email username sudo\" }' ```
+Return System Users in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of system users in a department ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\" : [{\"department\" : \"IT\"}],   \"fields\" : \"email username sudo\" }' ```  Text search for system users with and email on a domain ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\" : {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"fields\" : \"email username sudo\" }' ```  Combining `filter` and `searchFilter` to text search for system users with and email on a domain who are in a list of departments ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"filter\": {     \"or\": [       {\"department\" : \"IT\"},       {\"department\" : \"Sales\"}     ]   },   \"fields\" : \"email username sudo\" }' ```
 
 ### Example
 ```ruby
@@ -216,7 +216,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/SystemsApi.md b/jcapiv1/docs/SystemsApi.md
index 885ce7e..385e2c7 100644
--- a/jcapiv1/docs/SystemsApi.md
+++ b/jcapiv1/docs/SystemsApi.md
@@ -76,7 +76,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -85,7 +85,7 @@ Name | Type | Description  | Notes
 
 List an individual system
 
-This endpoint returns an individual system.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ```
+This endpoint returns an individual system.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
 
 ### Example
 ```ruby
@@ -148,7 +148,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -157,7 +157,7 @@ Name | Type | Description  | Notes
 
 List All Systems
 
-This endpoint returns all Systems.  #### Sample Requests ``` curl -X GET https://console.jumpcloud.com/api/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+This endpoint returns all Systems.  #### Sample Requests ``` curl -X GET https://console.jumpcloud.com/api/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
 
 ### Example
 ```ruby
@@ -221,7 +221,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -290,7 +290,7 @@ nil (empty response body)
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -364,7 +364,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -429,7 +429,7 @@ nil (empty response body)
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/SystemusersApi.md b/jcapiv1/docs/SystemusersApi.md
index 8789e63..b6a54ad 100644
--- a/jcapiv1/docs/SystemusersApi.md
+++ b/jcapiv1/docs/SystemusersApi.md
@@ -77,7 +77,7 @@ nil (empty response body)
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -141,7 +141,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -207,7 +207,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -216,7 +216,7 @@ Name | Type | Description  | Notes
 
 Delete a system user
 
-This endpoint allows you to delete a particular system user.  #### Sample Request ``` curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
+This endpoint allows you to delete a particular system user.  #### Sample Request ``` curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
 
 ### Example
 ```ruby
@@ -271,7 +271,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -339,7 +339,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -348,7 +348,7 @@ Name | Type | Description  | Notes
 
 List all system users
 
-This endpoint returns all systemusers.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
+This endpoint returns all systemusers.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
 
 ### Example
 ```ruby
@@ -412,7 +412,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -475,7 +475,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -541,7 +541,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -550,7 +550,7 @@ Name | Type | Description  | Notes
 
 Reset a system user's MFA token
 
-This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the `exclusionUntil` date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.   #### Sample Request  ``` curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H 'x-api-key: {API_KEY}' \\   -H 'Content-Type: application/json' \\   -d '{\"exclusion\": true, \"exclusionUntil\": \"{date-time}\"}'     ```
+This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the `exclusionUntil` date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.  #### Sample Request ``` curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H 'x-api-key: {API_KEY}' \\   -H 'Content-Type: application/json' \\   -d '{\"exclusion\": true, \"exclusionUntil\": \"{date-time}\"}'   ```
 
 ### Example
 ```ruby
@@ -603,7 +603,7 @@ nil (empty response body)
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -612,7 +612,7 @@ nil (empty response body)
 
 List system user binding
 
-Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  ``` curl \\   -H 'Content-Type: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
+Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  ``` curl \\   -H 'Content-Type: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
 
 ### Example
 ```ruby
@@ -677,7 +677,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -686,7 +686,7 @@ Name | Type | Description  | Notes
 
 Update a system user binding
 
-Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  ``` curl \\   -d '{ \"add\": [\"[SYSTEM_ID_TO_ADD_HERE]\"], \"remove\": [\"[SYSTEM_ID_TO_REMOVE_HERE]\"] }' \\   -X PUT \\   -H 'Content-Type: application/json' \\   -H 'Accept: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
+Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  ``` curl \\   -d '{ \"add\": [\"[SYSTEM_ID_TO_ADD_HERE]\"], \"remove\": [\"[SYSTEM_ID_TO_REMOVE_HERE]\"] }' \\   -X PUT \\   -H 'Content-Type: application/json' \\   -H 'Accept: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
 
 ### Example
 ```ruby
@@ -743,7 +743,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -800,7 +800,7 @@ nil (empty response body)
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/docs/TagsApi.md b/jcapiv1/docs/TagsApi.md
index 87cb92f..cbf78a4 100644
--- a/jcapiv1/docs/TagsApi.md
+++ b/jcapiv1/docs/TagsApi.md
@@ -67,7 +67,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -139,7 +139,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -208,7 +208,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -269,7 +269,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
@@ -333,7 +333,7 @@ Name | Type | Description  | Notes
 ### HTTP request headers
 
  - **Content-Type**: application/json
- - **Accept**: application/json; charset=utf-8
+ - **Accept**: application/json
 
 
 
diff --git a/jcapiv1/lib/jcapiv1/api/applications_api.rb b/jcapiv1/lib/jcapiv1/api/applications_api.rb
index bd0659f..b214a3d 100644
--- a/jcapiv1/lib/jcapiv1/api/applications_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/applications_api.rb
@@ -21,7 +21,7 @@ def initialize(api_client = ApiClient.default)
     end
 
     # Applications
-    # The endpoint returns all your SSO / SAML Applications.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/applications \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+    # The endpoint returns all your SSO / SAML Applications.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/applications \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -38,7 +38,7 @@ def applications_list(content_type, accept, opts = {})
     end
 
     # Applications
-    # The endpoint returns all your SSO / SAML Applications.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/applications \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+    # The endpoint returns all your SSO / SAML Applications.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/applications \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -75,7 +75,7 @@ def applications_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/command_results_api.rb b/jcapiv1/lib/jcapiv1/api/command_results_api.rb
index 5c216e1..b72589e 100644
--- a/jcapiv1/lib/jcapiv1/api/command_results_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/command_results_api.rb
@@ -21,7 +21,7 @@ def initialize(api_client = ApiClient.default)
     end
 
     # Delete a Command result
-    # This endpoint deletes a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ````
+    # This endpoint deletes a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ````
     # @param id 
     # @param content_type 
     # @param accept 
@@ -34,7 +34,7 @@ def command_results_delete(id, content_type, accept, opts = {})
     end
 
     # Delete a Command result
-    # This endpoint deletes a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;&#x60;
+    # This endpoint deletes a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -66,7 +66,7 @@ def command_results_delete_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -93,7 +93,7 @@ def command_results_delete_with_http_info(id, content_type, accept, opts = {})
     end
 
     # List an individual Command result
-    # This endpoint returns a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ```
+    # This endpoint returns a specific command result.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
     # @param id 
     # @param content_type 
     # @param accept 
@@ -108,7 +108,7 @@ def command_results_get(id, content_type, accept, opts = {})
     end
 
     # List an individual Command result
-    # This endpoint returns a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;
+    # This endpoint returns a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -144,7 +144,7 @@ def command_results_get_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -225,7 +225,7 @@ def command_results_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/command_triggers_api.rb b/jcapiv1/lib/jcapiv1/api/command_triggers_api.rb
index fa5d935..413e82b 100644
--- a/jcapiv1/lib/jcapiv1/api/command_triggers_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/command_triggers_api.rb
@@ -66,7 +66,7 @@ def command_trigger_webhook_post_with_http_info(triggername, content_type, accep
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/commands_api.rb b/jcapiv1/lib/jcapiv1/api/commands_api.rb
index ba541cc..0a00982 100644
--- a/jcapiv1/lib/jcapiv1/api/commands_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/commands_api.rb
@@ -21,7 +21,7 @@ def initialize(api_client = ApiClient.default)
     end
 
     # Get a Command File
-    # This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ```
+    # This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
     # @param id 
     # @param content_type 
     # @param accept 
@@ -37,7 +37,7 @@ def command_file_get(id, content_type, accept, opts = {})
     end
 
     # Get a Command File
-    # This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;
+    # This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -75,7 +75,7 @@ def command_file_get_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -147,7 +147,7 @@ def commands_delete_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -173,7 +173,7 @@ def commands_delete_with_http_info(id, content_type, accept, opts = {})
     end
 
     # List an individual Command
-    # This endpoint returns a specific command based on the command ID.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
+    # This endpoint returns a specific command based on the command ID.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
     # @param id 
     # @param content_type 
     # @param accept 
@@ -188,7 +188,7 @@ def commands_get(id, content_type, accept, opts = {})
     end
 
     # List an individual Command
-    # This endpoint returns a specific command based on the command ID.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
+    # This endpoint returns a specific command based on the command ID.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -224,7 +224,7 @@ def commands_get_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -305,7 +305,7 @@ def commands_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -373,7 +373,7 @@ def commands_post_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -447,7 +447,7 @@ def commands_put_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/organizations_api.rb b/jcapiv1/lib/jcapiv1/api/organizations_api.rb
index 51ac4cc..c6fdf88 100644
--- a/jcapiv1/lib/jcapiv1/api/organizations_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/organizations_api.rb
@@ -21,7 +21,7 @@ def initialize(api_client = ApiClient.default)
     end
 
     # Get Organization Details
-    # This endpoint returns Organization Details.  #### Sample Request   ``` curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+    # This endpoint returns Organization Details.  #### Sample Request  ``` curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -38,7 +38,7 @@ def organization_list(content_type, accept, opts = {})
     end
 
     # Get Organization Details
-    # This endpoint returns Organization Details.  #### Sample Request   &#x60;&#x60;&#x60; curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+    # This endpoint returns Organization Details.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -76,7 +76,7 @@ def organization_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/radius_servers_api.rb b/jcapiv1/lib/jcapiv1/api/radius_servers_api.rb
index d4b00de..0b563b8 100644
--- a/jcapiv1/lib/jcapiv1/api/radius_servers_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/radius_servers_api.rb
@@ -75,7 +75,7 @@ def radius_servers_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -102,7 +102,7 @@ def radius_servers_list_with_http_info(content_type, accept, opts = {})
     end
 
     # Create a Radius Server
-    # This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{test_radius}\",     \"networkSourceIp\": \"{0.0.0.0}\",     \"sharedSecret\":\"{secretpassword}\" }' ```
+    # This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{test_radius}\",     \"networkSourceIp\": \"{0.0.0.0}\",     \"sharedSecret\":\"{secretpassword}\",     \"userLockoutAction\": \"REMOVE\",     \"userPasswordExpirationAction\": \"MAINTAIN\" }' ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -115,7 +115,7 @@ def radius_servers_post(content_type, accept, opts = {})
     end
 
     # Create a Radius Server
-    # This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{test_radius}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot;,     \&quot;sharedSecret\&quot;:\&quot;{secretpassword}\&quot; }&#39; &#x60;&#x60;&#x60;
+    # This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{test_radius}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot;,     \&quot;sharedSecret\&quot;:\&quot;{secretpassword}\&quot;,     \&quot;userLockoutAction\&quot;: \&quot;REMOVE\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;MAINTAIN\&quot; }&#39; &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -143,7 +143,7 @@ def radius_servers_post_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -170,7 +170,7 @@ def radius_servers_post_with_http_info(content_type, accept, opts = {})
     end
 
     # Update Radius Servers
-    # This endpoint allows you to update RADIUS servers in your organization.  ####  ``` curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{name_update}\",     \"networkSourceIp\": \"{0.0.0.0}\" }' ```
+    # This endpoint allows you to update RADIUS servers in your organization.  #### ``` curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"name\": \"{name_update}\",     \"networkSourceIp\": \"{0.0.0.0}\",     \"userLockoutAction\": \"REMOVE\",     \"userPasswordExpirationAction\": \"MAINTAIN\" }' ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -183,7 +183,7 @@ def radius_servers_put(content_type, accept, opts = {})
     end
 
     # Update Radius Servers
-    # This endpoint allows you to update RADIUS servers in your organization.  ####  &#x60;&#x60;&#x60; curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{name_update}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot; }&#39; &#x60;&#x60;&#x60;
+    # This endpoint allows you to update RADIUS servers in your organization.  #### &#x60;&#x60;&#x60; curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{name_update}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot;,     \&quot;userLockoutAction\&quot;: \&quot;REMOVE\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;MAINTAIN\&quot; }&#39; &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -211,7 +211,7 @@ def radius_servers_put_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/search_api.rb b/jcapiv1/lib/jcapiv1/api/search_api.rb
index c527a7e..2f7ca8a 100644
--- a/jcapiv1/lib/jcapiv1/api/search_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/search_api.rb
@@ -21,7 +21,7 @@ def initialize(api_client = ApiClient.default)
     end
 
     # Search Organizations
-    # This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.   The parameters must be passed as Content-Type application/json.   #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"search\":{     \"fields\" : [\"settings.name\"],     \"searchTerm\": \"Second\"     },   \"fields\": [\"_id\", \"displayName\", \"logoUrl\"],   \"limit\" : 0,   \"skip\" : 0 }' ```
+    # This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.  The parameters must be passed as Content-Type application/json.   #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"search\":{     \"fields\" : [\"settings.name\"],     \"searchTerm\": \"Second\"     },   \"fields\": [\"_id\", \"displayName\", \"logoUrl\"],   \"limit\" : 0,   \"skip\" : 0 }' ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -37,7 +37,7 @@ def search_organizations_post(content_type, accept, opts = {})
     end
 
     # Search Organizations
-    # This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.   The parameters must be passed as Content-Type application/json.   #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;search\&quot;:{     \&quot;fields\&quot; : [\&quot;settings.name\&quot;],     \&quot;searchTerm\&quot;: \&quot;Second\&quot;     },   \&quot;fields\&quot;: [\&quot;_id\&quot;, \&quot;displayName\&quot;, \&quot;logoUrl\&quot;],   \&quot;limit\&quot; : 0,   \&quot;skip\&quot; : 0 }&#39; &#x60;&#x60;&#x60;
+    # This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.  The parameters must be passed as Content-Type application/json.   #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;search\&quot;:{     \&quot;fields\&quot; : [\&quot;settings.name\&quot;],     \&quot;searchTerm\&quot;: \&quot;Second\&quot;     },   \&quot;fields\&quot;: [\&quot;_id\&quot;, \&quot;displayName\&quot;, \&quot;logoUrl\&quot;],   \&quot;limit\&quot; : 0,   \&quot;skip\&quot; : 0 }&#39; &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -72,7 +72,7 @@ def search_organizations_post_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -98,7 +98,7 @@ def search_organizations_post_with_http_info(content_type, accept, opts = {})
     end
 
     # Search Systems
-    # Return Systems in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of hostnames ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\": {     \"or\": [       {\"hostname\" : \"my-hostname\"},       {\"hostname\" : \"other-hostname\"}     ]   },   \"fields\" : \"os hostname displayName\" }' ```  Text search for a hostname or display name ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"fields\": \"os hostname displayName\" }' ```  Combining `filter` and `searchFilter` to search for names that match a given OS ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"filter\": {     \"or\": [       {\"os\" : \"Ubuntu\"},       {\"os\" : \"Mac OS X\"}     ]   },   \"fields\": \"os hostname displayName\" }' ```
+    # Return Systems in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of hostnames ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\": {     \"or\": [       {\"hostname\" : \"my-hostname\"},       {\"hostname\" : \"other-hostname\"}     ]   },   \"fields\" : \"os hostname displayName\" }' ```  Text search for a hostname or display name ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"fields\": \"os hostname displayName\" }' ```  Combining `filter` and `searchFilter` to search for names that match a given OS ``` curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"my-host\",     \"fields\": [\"hostname\", \"displayName\"]   },   \"filter\": {     \"or\": [       {\"os\" : \"Ubuntu\"},       {\"os\" : \"Mac OS X\"}     ]   },   \"fields\": \"os hostname displayName\" }' ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -115,7 +115,7 @@ def search_systems_post(content_type, accept, opts = {})
     end
 
     # Search Systems
-    # Return Systems in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of hostnames &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;hostname\&quot; : \&quot;my-hostname\&quot;},       {\&quot;hostname\&quot; : \&quot;other-hostname\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for a hostname or display name &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to search for names that match a given OS &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;os\&quot; : \&quot;Ubuntu\&quot;},       {\&quot;os\&quot; : \&quot;Mac OS X\&quot;}     ]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;
+    # Return Systems in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of hostnames &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;hostname\&quot; : \&quot;my-hostname\&quot;},       {\&quot;hostname\&quot; : \&quot;other-hostname\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for a hostname or display name &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to search for names that match a given OS &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;os\&quot; : \&quot;Ubuntu\&quot;},       {\&quot;os\&quot; : \&quot;Mac OS X\&quot;}     ]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -151,7 +151,7 @@ def search_systems_post_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -178,7 +178,7 @@ def search_systems_post_with_http_info(content_type, accept, opts = {})
     end
 
     # Search System Users
-    # Return System Users in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of system users in a department ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\" : [{\"department\" : \"IT\"}],   \"fields\" : \"email username sudo\" }' ```  Text search for system users with and email on a domain ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\" : {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"fields\" : \"email username sudo\" }' ```  Combining `filter` and `searchFilter` to text search for system users with and email on a domain who are in a list of departments ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"filter\": {     \"or\": [       {\"department\" : \"IT\"},       {\"department\" : \"Sales\"}     ]   },   \"fields\" : \"email username sudo\" }' ```
+    # Return System Users in multi-record format allowing for the passing of the `filter` and `searchFilter` parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the `filter` and `searchFilter` parameters that can only be passed in the body of POST /api/search/* routes. The `filter` and `searchFilter` parameters must be passed as Content-Type application/json.  The `filter` parameter is an object with a single property, either `and` or `or` with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the `and` or `or` are not included the default behavior is to match ALL query expressions.  The `searchFilter` parameter allows text searching on supported fields by specifying a `searchTerm` and a list of `fields` to query on. If any `field` has a partial text match on the`searchTerm` the record will be returned.   #### Sample Request  Exact search for a list of system users in a department ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"filter\" : [{\"department\" : \"IT\"}],   \"fields\" : \"email username sudo\" }' ```  Text search for system users with and email on a domain ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\" : {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"fields\" : \"email username sudo\" }' ```  Combining `filter` and `searchFilter` to text search for system users with and email on a domain who are in a list of departments ``` curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{   \"searchFilter\": {     \"searchTerm\": \"@jumpcloud.com\",     \"fields\": [\"email\"]   },   \"filter\": {     \"or\": [       {\"department\" : \"IT\"},       {\"department\" : \"Sales\"}     ]   },   \"fields\" : \"email username sudo\" }' ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -195,7 +195,7 @@ def search_systemusers_post(content_type, accept, opts = {})
     end
 
     # Search System Users
-    # Return System Users in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of system users in a department &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot; : [{\&quot;department\&quot; : \&quot;IT\&quot;}],   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for system users with and email on a domain &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot; : {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to text search for system users with and email on a domain who are in a list of departments &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;department\&quot; : \&quot;IT\&quot;},       {\&quot;department\&quot; : \&quot;Sales\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;
+    # Return System Users in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of system users in a department &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot; : [{\&quot;department\&quot; : \&quot;IT\&quot;}],   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for system users with and email on a domain &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot; : {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to text search for system users with and email on a domain who are in a list of departments &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;department\&quot; : \&quot;IT\&quot;},       {\&quot;department\&quot; : \&quot;Sales\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -231,7 +231,7 @@ def search_systemusers_post_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/systems_api.rb b/jcapiv1/lib/jcapiv1/api/systems_api.rb
index 0084a6b..1ac7a09 100644
--- a/jcapiv1/lib/jcapiv1/api/systems_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/systems_api.rb
@@ -70,7 +70,7 @@ def systems_delete_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -99,7 +99,7 @@ def systems_delete_with_http_info(id, content_type, accept, opts = {})
     end
 
     # List an individual system
-    # This endpoint returns an individual system.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'    ```
+    # This endpoint returns an individual system.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
     # @param id 
     # @param content_type 
     # @param accept 
@@ -116,7 +116,7 @@ def systems_get(id, content_type, accept, opts = {})
     end
 
     # List an individual system
-    # This endpoint returns an individual system.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;
+    # This endpoint returns an individual system.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -154,7 +154,7 @@ def systems_get_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -183,7 +183,7 @@ def systems_get_with_http_info(id, content_type, accept, opts = {})
     end
 
     # List All Systems
-    # This endpoint returns all Systems.  #### Sample Requests ``` curl -X GET https://console.jumpcloud.com/api/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+    # This endpoint returns all Systems.  #### Sample Requests ``` curl -X GET https://console.jumpcloud.com/api/systems \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -201,7 +201,7 @@ def systems_list(content_type, accept, opts = {})
     end
 
     # List All Systems
-    # This endpoint returns all Systems.  #### Sample Requests &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+    # This endpoint returns all Systems.  #### Sample Requests &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -240,7 +240,7 @@ def systems_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -318,7 +318,7 @@ def systems_put_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -406,7 +406,7 @@ def systems_systemusers_binding_list_with_http_info(id, content_type, accept, op
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -480,7 +480,7 @@ def systems_systemusers_binding_put_with_http_info(id, content_type, accept, opt
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/api/systemusers_api.rb b/jcapiv1/lib/jcapiv1/api/systemusers_api.rb
index 3686ec5..7be019c 100644
--- a/jcapiv1/lib/jcapiv1/api/systemusers_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/systemusers_api.rb
@@ -66,7 +66,7 @@ def sshkey_delete_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -137,7 +137,7 @@ def sshkey_list_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -211,7 +211,7 @@ def sshkey_post_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -238,7 +238,7 @@ def sshkey_post_with_http_info(id, content_type, accept, opts = {})
     end
 
     # Delete a system user
-    # This endpoint allows you to delete a particular system user.  #### Sample Request ``` curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
+    # This endpoint allows you to delete a particular system user.  #### Sample Request ``` curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
     # @param id 
     # @param content_type 
     # @param accept 
@@ -251,7 +251,7 @@ def systemusers_delete(id, content_type, accept, opts = {})
     end
 
     # Delete a system user
-    # This endpoint allows you to delete a particular system user.  #### Sample Request &#x60;&#x60;&#x60; curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
+    # This endpoint allows you to delete a particular system user.  #### Sample Request &#x60;&#x60;&#x60; curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -283,7 +283,7 @@ def systemusers_delete_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -361,7 +361,7 @@ def systemusers_get_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -388,7 +388,7 @@ def systemusers_get_with_http_info(id, content_type, accept, opts = {})
     end
 
     # List all system users
-    # This endpoint returns all systemusers.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'  ```
+    # This endpoint returns all systemusers.  #### Sample Request  ``` curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -406,7 +406,7 @@ def systemusers_list(content_type, accept, opts = {})
     end
 
     # List all system users
-    # This endpoint returns all systemusers.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
+    # This endpoint returns all systemusers.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -445,7 +445,7 @@ def systemusers_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -513,7 +513,7 @@ def systemusers_post_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -587,7 +587,7 @@ def systemusers_put_with_http_info(id, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -614,7 +614,7 @@ def systemusers_put_with_http_info(id, content_type, accept, opts = {})
     end
 
     # Reset a system user's MFA token
-    # This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the `exclusionUntil` date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.   #### Sample Request  ``` curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H 'x-api-key: {API_KEY}' \\   -H 'Content-Type: application/json' \\   -d '{\"exclusion\": true, \"exclusionUntil\": \"{date-time}\"}'     ```
+    # This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the `exclusionUntil` date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.  #### Sample Request ``` curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H 'x-api-key: {API_KEY}' \\   -H 'Content-Type: application/json' \\   -d '{\"exclusion\": true, \"exclusionUntil\": \"{date-time}\"}'   ```
     # @param id 
     # @param x_api_key 
     # @param [Hash] opts the optional parameters
@@ -627,7 +627,7 @@ def systemusers_resetmfa(id, x_api_key, opts = {})
     end
 
     # Reset a system user&#39;s MFA token
-    # This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the &#x60;exclusionUntil&#x60; date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.   #### Sample Request  &#x60;&#x60;&#x60; curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -d &#39;{\&quot;exclusion\&quot;: true, \&quot;exclusionUntil\&quot;: \&quot;{date-time}\&quot;}&#39;     &#x60;&#x60;&#x60;
+    # This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the &#x60;exclusionUntil&#x60; date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.  #### Sample Request &#x60;&#x60;&#x60; curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -d &#39;{\&quot;exclusion\&quot;: true, \&quot;exclusionUntil\&quot;: \&quot;{date-time}\&quot;}&#39;   &#x60;&#x60;&#x60;
     # @param id 
     # @param x_api_key 
     # @param [Hash] opts the optional parameters
@@ -655,7 +655,7 @@ def systemusers_resetmfa_with_http_info(id, x_api_key, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'x-api-key'] = x_api_key
@@ -680,7 +680,7 @@ def systemusers_resetmfa_with_http_info(id, x_api_key, opts = {})
     end
 
     # List system user binding
-    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  ``` curl \\   -H 'Content-Type: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
+    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  ``` curl \\   -H 'Content-Type: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
     # @param id 
     # @param content_type 
     # @param accept 
@@ -698,7 +698,7 @@ def systemusers_systems_binding_list(id, content_type, accept, opts = {})
     end
 
     # List system user binding
-    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  &#x60;&#x60;&#x60; curl \\   -H &#39;Content-Type: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
+    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  &#x60;&#x60;&#x60; curl \\   -H &#39;Content-Type: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -740,7 +740,7 @@ def systemusers_systems_binding_list_with_http_info(id, content_type, accept, op
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -767,7 +767,7 @@ def systemusers_systems_binding_list_with_http_info(id, content_type, accept, op
     end
 
     # Update a system user binding
-    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  ``` curl \\   -d '{ \"add\": [\"[SYSTEM_ID_TO_ADD_HERE]\"], \"remove\": [\"[SYSTEM_ID_TO_REMOVE_HERE]\"] }' \\   -X PUT \\   -H 'Content-Type: application/json' \\   -H 'Accept: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
+    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  ``` curl \\   -d '{ \"add\": [\"[SYSTEM_ID_TO_ADD_HERE]\"], \"remove\": [\"[SYSTEM_ID_TO_REMOVE_HERE]\"] }' \\   -X PUT \\   -H 'Content-Type: application/json' \\   -H 'Accept: application/json' \\   -H \"x-api-key: [YOUR_API_KEY_HERE]\" \\   \"https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\" ```
     # @param id 
     # @param content_type 
     # @param accept 
@@ -781,7 +781,7 @@ def systemusers_systems_binding_put(id, content_type, accept, opts = {})
     end
 
     # Update a system user binding
-    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  &#x60;&#x60;&#x60; curl \\   -d &#39;{ \&quot;add\&quot;: [\&quot;[SYSTEM_ID_TO_ADD_HERE]\&quot;], \&quot;remove\&quot;: [\&quot;[SYSTEM_ID_TO_REMOVE_HERE]\&quot;] }&#39; \\   -X PUT \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;Accept: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
+    # Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  &#x60;&#x60;&#x60; curl \\   -d &#39;{ \&quot;add\&quot;: [\&quot;[SYSTEM_ID_TO_ADD_HERE]\&quot;], \&quot;remove\&quot;: [\&quot;[SYSTEM_ID_TO_REMOVE_HERE]\&quot;] }&#39; \\   -X PUT \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;Accept: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
     # @param id 
     # @param content_type 
     # @param accept 
@@ -814,7 +814,7 @@ def systemusers_systems_binding_put_with_http_info(id, content_type, accept, opt
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -874,7 +874,7 @@ def systemusers_unlock_with_http_info(id, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
diff --git a/jcapiv1/lib/jcapiv1/api/tags_api.rb b/jcapiv1/lib/jcapiv1/api/tags_api.rb
index de4faab..bcf03b0 100644
--- a/jcapiv1/lib/jcapiv1/api/tags_api.rb
+++ b/jcapiv1/lib/jcapiv1/api/tags_api.rb
@@ -64,7 +64,7 @@ def tags_delete_with_http_info(name, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -148,7 +148,7 @@ def tags_get_with_http_info(name, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -226,7 +226,7 @@ def tags_list_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -291,7 +291,7 @@ def tags_post_with_http_info(content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
@@ -362,7 +362,7 @@ def tags_put_with_http_info(name, content_type, accept, opts = {})
       # header parameters
       header_params = {}
       # HTTP header 'Accept' (if needed)
-      header_params['Accept'] = @api_client.select_header_accept(['application/json; charset=utf-8'])
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
       # HTTP header 'Content-Type'
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
diff --git a/jcapiv1/lib/jcapiv1/models/body.rb b/jcapiv1/lib/jcapiv1/models/body.rb
index 482836f..b303fd4 100644
--- a/jcapiv1/lib/jcapiv1/models/body.rb
+++ b/jcapiv1/lib/jcapiv1/models/body.rb
@@ -21,13 +21,43 @@ class Body
 
     attr_accessor :tags
 
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
+
+    attr_accessor :mfa
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
       {
         :'name' => :'name',
         :'network_source_ip' => :'networkSourceIp',
-        :'tags' => :'tags'
+        :'tags' => :'tags',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction',
+        :'mfa' => :'mfa'
       }
     end
 
@@ -36,7 +66,10 @@ def self.swagger_types
       {
         :'name' => :'String',
         :'network_source_ip' => :'String',
-        :'tags' => :'Array<String>'
+        :'tags' => :'Array<String>',
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String',
+        :'mfa' => :'String'
       }
     end
 
@@ -62,6 +95,18 @@ def initialize(attributes = {})
         end
       end
 
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
+      if attributes.has_key?(:'mfa')
+        self.mfa = attributes[:'mfa']
+      end
+
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -84,9 +129,21 @@ def list_invalid_properties
     def valid?
       return false if @name.nil?
       return false if @network_source_ip.nil?
+      mfa_validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      return false unless mfa_validator.valid?(@mfa)
       return true
     end
 
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] mfa Object to be assigned
+    def mfa=(mfa)
+      validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      unless validator.valid?(mfa)
+        fail ArgumentError, "invalid value for 'mfa', must be one of #{validator.allowable_values}."
+      end
+      @mfa = mfa
+    end
+
     # Checks equality by comparing each attribute.
     # @param [Object] Object to be compared
     def ==(o)
@@ -94,7 +151,10 @@ def ==(o)
       self.class == o.class &&
           name == o.name &&
           network_source_ip == o.network_source_ip &&
-          tags == o.tags
+          tags == o.tags &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action &&
+          mfa == o.mfa
     end
 
     # @see the `==` method
@@ -106,7 +166,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [name, network_source_ip, tags].hash
+      [name, network_source_ip, tags, user_lockout_action, user_password_expiration_action, mfa].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv1/lib/jcapiv1/models/radiusserver.rb b/jcapiv1/lib/jcapiv1/models/radiusserver.rb
index c1ac4a4..681ebcf 100644
--- a/jcapiv1/lib/jcapiv1/models/radiusserver.rb
+++ b/jcapiv1/lib/jcapiv1/models/radiusserver.rb
@@ -29,6 +29,33 @@ class Radiusserver
 
     attr_accessor :tag_names
 
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
+
+    attr_accessor :mfa
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -39,7 +66,10 @@ def self.attribute_map
         :'shared_secret' => :'sharedSecret',
         :'name' => :'name',
         :'tags' => :'tags',
-        :'tag_names' => :'tagNames'
+        :'tag_names' => :'tagNames',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction',
+        :'mfa' => :'mfa'
       }
     end
 
@@ -52,7 +82,10 @@ def self.swagger_types
         :'shared_secret' => :'String',
         :'name' => :'String',
         :'tags' => :'Array<String>',
-        :'tag_names' => :'Array<String>'
+        :'tag_names' => :'Array<String>',
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String',
+        :'mfa' => :'String'
       }
     end
 
@@ -96,6 +129,18 @@ def initialize(attributes = {})
         end
       end
 
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
+      if attributes.has_key?(:'mfa')
+        self.mfa = attributes[:'mfa']
+      end
+
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -108,9 +153,21 @@ def list_invalid_properties
     # Check to see if the all the properties in the model are valid
     # @return true if the model is valid
     def valid?
+      mfa_validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      return false unless mfa_validator.valid?(@mfa)
       return true
     end
 
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] mfa Object to be assigned
+    def mfa=(mfa)
+      validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      unless validator.valid?(mfa)
+        fail ArgumentError, "invalid value for 'mfa', must be one of #{validator.allowable_values}."
+      end
+      @mfa = mfa
+    end
+
     # Checks equality by comparing each attribute.
     # @param [Object] Object to be compared
     def ==(o)
@@ -122,7 +179,10 @@ def ==(o)
           shared_secret == o.shared_secret &&
           name == o.name &&
           tags == o.tags &&
-          tag_names == o.tag_names
+          tag_names == o.tag_names &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action &&
+          mfa == o.mfa
     end
 
     # @see the `==` method
@@ -134,7 +194,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [_id, organization, network_source_ip, shared_secret, name, tags, tag_names].hash
+      [_id, organization, network_source_ip, shared_secret, name, tags, tag_names, user_lockout_action, user_password_expiration_action, mfa].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv1/lib/jcapiv1/models/radiusserverpost.rb b/jcapiv1/lib/jcapiv1/models/radiusserverpost.rb
index 06f5601..6325208 100644
--- a/jcapiv1/lib/jcapiv1/models/radiusserverpost.rb
+++ b/jcapiv1/lib/jcapiv1/models/radiusserverpost.rb
@@ -24,6 +24,33 @@ class Radiusserverpost
     # RADIUS shared secret between the server and client.
     attr_accessor :shared_secret
 
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
+
+    attr_accessor :mfa
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -31,7 +58,10 @@ def self.attribute_map
         :'network_source_ip' => :'networkSourceIp',
         :'name' => :'name',
         :'tag_names' => :'tagNames',
-        :'shared_secret' => :'sharedSecret'
+        :'shared_secret' => :'sharedSecret',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction',
+        :'mfa' => :'mfa'
       }
     end
 
@@ -41,7 +71,10 @@ def self.swagger_types
         :'network_source_ip' => :'String',
         :'name' => :'String',
         :'tag_names' => :'Array<String>',
-        :'shared_secret' => :'String'
+        :'shared_secret' => :'String',
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String',
+        :'mfa' => :'String'
       }
     end
 
@@ -71,6 +104,18 @@ def initialize(attributes = {})
         self.shared_secret = attributes[:'sharedSecret']
       end
 
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
+      if attributes.has_key?(:'mfa')
+        self.mfa = attributes[:'mfa']
+      end
+
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -98,9 +143,21 @@ def valid?
       return false if @network_source_ip.nil?
       return false if @name.nil?
       return false if @shared_secret.nil?
+      mfa_validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      return false unless mfa_validator.valid?(@mfa)
       return true
     end
 
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] mfa Object to be assigned
+    def mfa=(mfa)
+      validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      unless validator.valid?(mfa)
+        fail ArgumentError, "invalid value for 'mfa', must be one of #{validator.allowable_values}."
+      end
+      @mfa = mfa
+    end
+
     # Checks equality by comparing each attribute.
     # @param [Object] Object to be compared
     def ==(o)
@@ -109,7 +166,10 @@ def ==(o)
           network_source_ip == o.network_source_ip &&
           name == o.name &&
           tag_names == o.tag_names &&
-          shared_secret == o.shared_secret
+          shared_secret == o.shared_secret &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action &&
+          mfa == o.mfa
     end
 
     # @see the `==` method
@@ -121,7 +181,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [network_source_ip, name, tag_names, shared_secret].hash
+      [network_source_ip, name, tag_names, shared_secret, user_lockout_action, user_password_expiration_action, mfa].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv1/lib/jcapiv1/models/radiusserverput.rb b/jcapiv1/lib/jcapiv1/models/radiusserverput.rb
index 6c6e37d..eb3f195 100644
--- a/jcapiv1/lib/jcapiv1/models/radiusserverput.rb
+++ b/jcapiv1/lib/jcapiv1/models/radiusserverput.rb
@@ -23,6 +23,33 @@ class Radiusserverput
 
     attr_accessor :tag_names
 
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
+
+    attr_accessor :mfa
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -30,7 +57,10 @@ def self.attribute_map
         :'_id' => :'_id',
         :'network_source_ip' => :'networkSourceIp',
         :'name' => :'name',
-        :'tag_names' => :'tagNames'
+        :'tag_names' => :'tagNames',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction',
+        :'mfa' => :'mfa'
       }
     end
 
@@ -40,7 +70,10 @@ def self.swagger_types
         :'_id' => :'String',
         :'network_source_ip' => :'String',
         :'name' => :'String',
-        :'tag_names' => :'Array<String>'
+        :'tag_names' => :'Array<String>',
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String',
+        :'mfa' => :'String'
       }
     end
 
@@ -70,6 +103,18 @@ def initialize(attributes = {})
         end
       end
 
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
+      if attributes.has_key?(:'mfa')
+        self.mfa = attributes[:'mfa']
+      end
+
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -82,9 +127,21 @@ def list_invalid_properties
     # Check to see if the all the properties in the model are valid
     # @return true if the model is valid
     def valid?
+      mfa_validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      return false unless mfa_validator.valid?(@mfa)
       return true
     end
 
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] mfa Object to be assigned
+    def mfa=(mfa)
+      validator = EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+      unless validator.valid?(mfa)
+        fail ArgumentError, "invalid value for 'mfa', must be one of #{validator.allowable_values}."
+      end
+      @mfa = mfa
+    end
+
     # Checks equality by comparing each attribute.
     # @param [Object] Object to be compared
     def ==(o)
@@ -93,7 +150,10 @@ def ==(o)
           _id == o._id &&
           network_source_ip == o.network_source_ip &&
           name == o.name &&
-          tag_names == o.tag_names
+          tag_names == o.tag_names &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action &&
+          mfa == o.mfa
     end
 
     # @see the `==` method
@@ -105,7 +165,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [_id, network_source_ip, name, tag_names].hash
+      [_id, network_source_ip, name, tag_names, user_lockout_action, user_password_expiration_action, mfa].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv1/spec/api/applications_api_spec.rb b/jcapiv1/spec/api/applications_api_spec.rb
index 740eeb4..253393c 100644
--- a/jcapiv1/spec/api/applications_api_spec.rb
+++ b/jcapiv1/spec/api/applications_api_spec.rb
@@ -34,7 +34,7 @@
 
   # unit tests for applications_list
   # Applications
-  # The endpoint returns all your SSO / SAML Applications.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/applications \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+  # The endpoint returns all your SSO / SAML Applications.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/applications \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
diff --git a/jcapiv1/spec/api/command_results_api_spec.rb b/jcapiv1/spec/api/command_results_api_spec.rb
index 7baef77..66c09fc 100644
--- a/jcapiv1/spec/api/command_results_api_spec.rb
+++ b/jcapiv1/spec/api/command_results_api_spec.rb
@@ -34,7 +34,7 @@
 
   # unit tests for command_results_delete
   # Delete a Command result
-  # This endpoint deletes a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;&#x60;
+  # This endpoint deletes a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
@@ -49,7 +49,7 @@
 
   # unit tests for command_results_get
   # List an individual Command result
-  # This endpoint returns a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;
+  # This endpoint returns a specific command result.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commandresults/{CommandResultID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
diff --git a/jcapiv1/spec/api/commands_api_spec.rb b/jcapiv1/spec/api/commands_api_spec.rb
index f721ed8..51ad9c5 100644
--- a/jcapiv1/spec/api/commands_api_spec.rb
+++ b/jcapiv1/spec/api/commands_api_spec.rb
@@ -34,7 +34,7 @@
 
   # unit tests for command_file_get
   # Get a Command File
-  # This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;
+  # This endpoint returns the uploaded file(s) associated with a specific command.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/files/command/{commandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
@@ -67,7 +67,7 @@
 
   # unit tests for commands_get
   # List an individual Command
-  # This endpoint returns a specific command based on the command ID.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
+  # This endpoint returns a specific command based on the command ID.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/commands/{CommandID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
diff --git a/jcapiv1/spec/api/organizations_api_spec.rb b/jcapiv1/spec/api/organizations_api_spec.rb
index 58ed9e0..dfaabf9 100644
--- a/jcapiv1/spec/api/organizations_api_spec.rb
+++ b/jcapiv1/spec/api/organizations_api_spec.rb
@@ -34,7 +34,7 @@
 
   # unit tests for organization_list
   # Get Organization Details
-  # This endpoint returns Organization Details.  #### Sample Request   &#x60;&#x60;&#x60; curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+  # This endpoint returns Organization Details.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET \\   https://console.jumpcloud.com/api/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
diff --git a/jcapiv1/spec/api/radius_servers_api_spec.rb b/jcapiv1/spec/api/radius_servers_api_spec.rb
index e445acf..0dbdd58 100644
--- a/jcapiv1/spec/api/radius_servers_api_spec.rb
+++ b/jcapiv1/spec/api/radius_servers_api_spec.rb
@@ -53,7 +53,7 @@
 
   # unit tests for radius_servers_post
   # Create a Radius Server
-  # This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{test_radius}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot;,     \&quot;sharedSecret\&quot;:\&quot;{secretpassword}\&quot; }&#39; &#x60;&#x60;&#x60;
+  # This endpoint allows you to create RADIUS servers in your organization.  #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/radiusservers/ \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{test_radius}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot;,     \&quot;sharedSecret\&quot;:\&quot;{secretpassword}\&quot;,     \&quot;userLockoutAction\&quot;: \&quot;REMOVE\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;MAINTAIN\&quot; }&#39; &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
@@ -68,7 +68,7 @@
 
   # unit tests for radius_servers_put
   # Update Radius Servers
-  # This endpoint allows you to update RADIUS servers in your organization.  ####  &#x60;&#x60;&#x60; curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{name_update}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot; }&#39; &#x60;&#x60;&#x60;
+  # This endpoint allows you to update RADIUS servers in your organization.  #### &#x60;&#x60;&#x60; curl -X PUT https://console.jumpcloud.com/api/radiusservers/{ServerID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;name\&quot;: \&quot;{name_update}\&quot;,     \&quot;networkSourceIp\&quot;: \&quot;{0.0.0.0}\&quot;,     \&quot;userLockoutAction\&quot;: \&quot;REMOVE\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;MAINTAIN\&quot; }&#39; &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
diff --git a/jcapiv1/spec/api/search_api_spec.rb b/jcapiv1/spec/api/search_api_spec.rb
index d024641..30adecd 100644
--- a/jcapiv1/spec/api/search_api_spec.rb
+++ b/jcapiv1/spec/api/search_api_spec.rb
@@ -34,7 +34,7 @@
 
   # unit tests for search_organizations_post
   # Search Organizations
-  # This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.   The parameters must be passed as Content-Type application/json.   #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;search\&quot;:{     \&quot;fields\&quot; : [\&quot;settings.name\&quot;],     \&quot;searchTerm\&quot;: \&quot;Second\&quot;     },   \&quot;fields\&quot;: [\&quot;_id\&quot;, \&quot;displayName\&quot;, \&quot;logoUrl\&quot;],   \&quot;limit\&quot; : 0,   \&quot;skip\&quot; : 0 }&#39; &#x60;&#x60;&#x60;
+  # This endpoint will return Organization data based on your search parameters. This endpoint WILL NOT allow you to add a new Organization.  You can use the supported parameters and pass those in the body of request.  The parameters must be passed as Content-Type application/json.   #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/organizations \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;search\&quot;:{     \&quot;fields\&quot; : [\&quot;settings.name\&quot;],     \&quot;searchTerm\&quot;: \&quot;Second\&quot;     },   \&quot;fields\&quot;: [\&quot;_id\&quot;, \&quot;displayName\&quot;, \&quot;logoUrl\&quot;],   \&quot;limit\&quot; : 0,   \&quot;skip\&quot; : 0 }&#39; &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
@@ -52,7 +52,7 @@
 
   # unit tests for search_systems_post
   # Search Systems
-  # Return Systems in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of hostnames &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;hostname\&quot; : \&quot;my-hostname\&quot;},       {\&quot;hostname\&quot; : \&quot;other-hostname\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for a hostname or display name &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to search for names that match a given OS &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;os\&quot; : \&quot;Ubuntu\&quot;},       {\&quot;os\&quot; : \&quot;Mac OS X\&quot;}     ]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;
+  # Return Systems in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of hostnames &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;hostname\&quot; : \&quot;my-hostname\&quot;},       {\&quot;hostname\&quot; : \&quot;other-hostname\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for a hostname or display name &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to search for names that match a given OS &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;my-host\&quot;,     \&quot;fields\&quot;: [\&quot;hostname\&quot;, \&quot;displayName\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;os\&quot; : \&quot;Ubuntu\&quot;},       {\&quot;os\&quot; : \&quot;Mac OS X\&quot;}     ]   },   \&quot;fields\&quot;: \&quot;os hostname displayName\&quot; }&#39; &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
@@ -71,7 +71,7 @@
 
   # unit tests for search_systemusers_post
   # Search System Users
-  # Return System Users in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.   This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of system users in a department &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot; : [{\&quot;department\&quot; : \&quot;IT\&quot;}],   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for system users with and email on a domain &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot; : {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to text search for system users with and email on a domain who are in a list of departments &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;department\&quot; : \&quot;IT\&quot;},       {\&quot;department\&quot; : \&quot;Sales\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;
+  # Return System Users in multi-record format allowing for the passing of the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters. This WILL NOT allow you to add a new system user.  To support advanced filtering you can use the &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters that can only be passed in the body of POST /api/search/* routes. The &#x60;filter&#x60; and &#x60;searchFilter&#x60; parameters must be passed as Content-Type application/json.  The &#x60;filter&#x60; parameter is an object with a single property, either &#x60;and&#x60; or &#x60;or&#x60; with the value of the property being an array of query expressions.  This allows you to filter records using the logic of matching ALL or ANY records in the array of query expressions. If the &#x60;and&#x60; or &#x60;or&#x60; are not included the default behavior is to match ALL query expressions.  The &#x60;searchFilter&#x60; parameter allows text searching on supported fields by specifying a &#x60;searchTerm&#x60; and a list of &#x60;fields&#x60; to query on. If any &#x60;field&#x60; has a partial text match on the&#x60;searchTerm&#x60; the record will be returned.   #### Sample Request  Exact search for a list of system users in a department &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;filter\&quot; : [{\&quot;department\&quot; : \&quot;IT\&quot;}],   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Text search for system users with and email on a domain &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot; : {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;  Combining &#x60;filter&#x60; and &#x60;searchFilter&#x60; to text search for system users with and email on a domain who are in a list of departments &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/search/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{   \&quot;searchFilter\&quot;: {     \&quot;searchTerm\&quot;: \&quot;@jumpcloud.com\&quot;,     \&quot;fields\&quot;: [\&quot;email\&quot;]   },   \&quot;filter\&quot;: {     \&quot;or\&quot;: [       {\&quot;department\&quot; : \&quot;IT\&quot;},       {\&quot;department\&quot; : \&quot;Sales\&quot;}     ]   },   \&quot;fields\&quot; : \&quot;email username sudo\&quot; }&#39; &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
diff --git a/jcapiv1/spec/api/systems_api_spec.rb b/jcapiv1/spec/api/systems_api_spec.rb
index 5346115..807d4ec 100644
--- a/jcapiv1/spec/api/systems_api_spec.rb
+++ b/jcapiv1/spec/api/systems_api_spec.rb
@@ -51,7 +51,7 @@
 
   # unit tests for systems_get
   # List an individual system
-  # This endpoint returns an individual system.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;    &#x60;&#x60;&#x60;
+  # This endpoint returns an individual system.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems/{SystemID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
@@ -70,7 +70,7 @@
 
   # unit tests for systems_list
   # List All Systems
-  # This endpoint returns all Systems.  #### Sample Requests &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+  # This endpoint returns all Systems.  #### Sample Requests &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systems \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
diff --git a/jcapiv1/spec/api/systemusers_api_spec.rb b/jcapiv1/spec/api/systemusers_api_spec.rb
index 1d18406..1b702c5 100644
--- a/jcapiv1/spec/api/systemusers_api_spec.rb
+++ b/jcapiv1/spec/api/systemusers_api_spec.rb
@@ -80,7 +80,7 @@
 
   # unit tests for systemusers_delete
   # Delete a system user
-  # This endpoint allows you to delete a particular system user.  #### Sample Request &#x60;&#x60;&#x60; curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
+  # This endpoint allows you to delete a particular system user.  #### Sample Request &#x60;&#x60;&#x60; curl -X DELETE https://console.jumpcloud.com/api/systemusers/{UserID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
@@ -112,7 +112,7 @@
 
   # unit tests for systemusers_list
   # List all system users
-  # This endpoint returns all systemusers.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;  &#x60;&#x60;&#x60;
+  # This endpoint returns all systemusers.  #### Sample Request  &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/systemusers \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
@@ -163,7 +163,7 @@
 
   # unit tests for systemusers_resetmfa
   # Reset a system user&#39;s MFA token
-  # This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the &#x60;exclusionUntil&#x60; date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.   #### Sample Request  &#x60;&#x60;&#x60; curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -d &#39;{\&quot;exclusion\&quot;: true, \&quot;exclusionUntil\&quot;: \&quot;{date-time}\&quot;}&#39;     &#x60;&#x60;&#x60;
+  # This endpoint allows you to reset the MFA TOTP token for a specified system user and put them in an MFA enrollment period. This will result in the user being prompted to setup MFA when logging into userportal. Please be aware that if the user does not complete MFA setup before the &#x60;exclusionUntil&#x60; date, they will be locked out of any resources that require MFA.  Please refer to our [Knowledge Base Article](https://support.jumpcloud.com/customer/en/portal/articles/2959138-using-multifactor-authentication-with-jumpcloud) on setting up MFA for more information.  #### Sample Request &#x60;&#x60;&#x60; curl -X POST \\   https://console.jumpcloud.com/api/systemusers/{UserID}/resetmfa \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -d &#39;{\&quot;exclusion\&quot;: true, \&quot;exclusionUntil\&quot;: \&quot;{date-time}\&quot;}&#39;   &#x60;&#x60;&#x60;
   # @param id 
   # @param x_api_key 
   # @param [Hash] opts the optional parameters
@@ -178,7 +178,7 @@
 
   # unit tests for systemusers_systems_binding_list
   # List system user binding
-  # Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  &#x60;&#x60;&#x60; curl \\   -H &#39;Content-Type: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
+  # Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).   List system bindings for a specific system user in a system and user binding format.  ### Examples  #### List system bindings for specific system user  &#x60;&#x60;&#x60; curl \\   -H &#39;Content-Type: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
@@ -198,7 +198,7 @@
 
   # unit tests for systemusers_systems_binding_put
   # Update a system user binding
-  # Hidden as Tags is deprecated  Adds or removes a system binding for a user.   This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  &#x60;&#x60;&#x60; curl \\   -d &#39;{ \&quot;add\&quot;: [\&quot;[SYSTEM_ID_TO_ADD_HERE]\&quot;], \&quot;remove\&quot;: [\&quot;[SYSTEM_ID_TO_REMOVE_HERE]\&quot;] }&#39; \\   -X PUT \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;Accept: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
+  # Hidden as Tags is deprecated  Adds or removes a system binding for a user.  This endpoint is only used for users still using JumpCloud Tags. If you are using JumpCloud Groups please refer to the documentation found [here](https://docs.jumpcloud.com/2.0/systems/manage-associations-of-a-system).  ### Example  #### Add (or remove) system to system user  &#x60;&#x60;&#x60; curl \\   -d &#39;{ \&quot;add\&quot;: [\&quot;[SYSTEM_ID_TO_ADD_HERE]\&quot;], \&quot;remove\&quot;: [\&quot;[SYSTEM_ID_TO_REMOVE_HERE]\&quot;] }&#39; \\   -X PUT \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;Accept: application/json&#39; \\   -H \&quot;x-api-key: [YOUR_API_KEY_HERE]\&quot; \\   \&quot;https://console.jumpcloud.com/api/systemusers/[SYSTEM_USER_ID_HERE]/systems\&quot; &#x60;&#x60;&#x60;
   # @param id 
   # @param content_type 
   # @param accept 
diff --git a/jcapiv1/spec/models/body_spec.rb b/jcapiv1/spec/models/body_spec.rb
index 51b52b5..63f7a6d 100644
--- a/jcapiv1/spec/models/body_spec.rb
+++ b/jcapiv1/spec/models/body_spec.rb
@@ -50,5 +50,27 @@
     end
   end
 
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "mfa"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.mfa = value }.not_to raise_error
+       #end
+    end
+  end
+
 end
 
diff --git a/jcapiv1/spec/models/radiusserver_spec.rb b/jcapiv1/spec/models/radiusserver_spec.rb
index e7807c3..c9fb189 100644
--- a/jcapiv1/spec/models/radiusserver_spec.rb
+++ b/jcapiv1/spec/models/radiusserver_spec.rb
@@ -74,5 +74,27 @@
     end
   end
 
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "mfa"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.mfa = value }.not_to raise_error
+       #end
+    end
+  end
+
 end
 
diff --git a/jcapiv1/spec/models/radiusserverpost_spec.rb b/jcapiv1/spec/models/radiusserverpost_spec.rb
index c68705d..c402457 100644
--- a/jcapiv1/spec/models/radiusserverpost_spec.rb
+++ b/jcapiv1/spec/models/radiusserverpost_spec.rb
@@ -56,5 +56,27 @@
     end
   end
 
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "mfa"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.mfa = value }.not_to raise_error
+       #end
+    end
+  end
+
 end
 
diff --git a/jcapiv1/spec/models/radiusserverput_spec.rb b/jcapiv1/spec/models/radiusserverput_spec.rb
index 3b9c5aa..9611145 100644
--- a/jcapiv1/spec/models/radiusserverput_spec.rb
+++ b/jcapiv1/spec/models/radiusserverput_spec.rb
@@ -56,5 +56,27 @@
     end
   end
 
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "mfa"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["DISABLED", "ENABLED", "REQUIRED", "ALWAYS"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.mfa = value }.not_to raise_error
+       #end
+    end
+  end
+
 end
 
diff --git a/jcapiv2/README.md b/jcapiv2/README.md
index 8194f39..c440c1f 100644
--- a/jcapiv2/README.md
+++ b/jcapiv2/README.md
@@ -54,17 +54,11 @@ Please follow the [installation](#installation) procedure and then run the follo
 # Load the gem
 require 'jcapiv2'
 
-# Setup authorization
-JCAPIv2.configure do |config|
-  # Configure API key authorization: x-api-key
-  config.api_key['x-api-key'] = 'YOUR API KEY'
-  # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
-  #config.api_key_prefix['x-api-key'] = 'Bearer'
-end
-
 api_instance = JCAPIv2::ActiveDirectoryApi.new
 
-id = "id_example" # String | ObjectID of this Active Directory instance.
+activedirectory_id = "activedirectory_id_example" # String | 
+
+agent_id = "agent_id_example" # String | 
 
 content_type = "application/json" # String | 
 
@@ -75,10 +69,10 @@ opts = {
 }
 
 begin
-  #Delete an Active Directory
-  api_instance.activedirectories_delete(id, content_type, accept, opts)
+  #Delete Active Directory Agent
+  api_instance.activedirectories_agents_delete(activedirectory_id, agent_id, content_type, accept, opts)
 rescue JCAPIv2::ApiError => e
-  puts "Exception when calling ActiveDirectoryApi->activedirectories_delete: #{e}"
+  puts "Exception when calling ActiveDirectoryApi->activedirectories_agents_delete: #{e}"
 end
 
 ```
@@ -89,6 +83,10 @@ All URIs are relative to *https://console.jumpcloud.com/api/v2*
 
 Class | Method | HTTP request | Description
 ------------ | ------------- | ------------- | -------------
+*JCAPIv2::ActiveDirectoryApi* | [**activedirectories_agents_delete**](docs/ActiveDirectoryApi.md#activedirectories_agents_delete) | **DELETE** /activedirectories/{activedirectory_id}/agents/{agent_id} | Delete Active Directory Agent
+*JCAPIv2::ActiveDirectoryApi* | [**activedirectories_agents_get**](docs/ActiveDirectoryApi.md#activedirectories_agents_get) | **GET** /activedirectories/{activedirectory_id}/agents/{agent_id} | Get Active Directory Agent
+*JCAPIv2::ActiveDirectoryApi* | [**activedirectories_agents_list**](docs/ActiveDirectoryApi.md#activedirectories_agents_list) | **GET** /activedirectories/{activedirectory_id}/agents | List Active Directory Agents
+*JCAPIv2::ActiveDirectoryApi* | [**activedirectories_agents_post**](docs/ActiveDirectoryApi.md#activedirectories_agents_post) | **POST** /activedirectories/{activedirectory_id}/agents | Create a new Active Directory Agent
 *JCAPIv2::ActiveDirectoryApi* | [**activedirectories_delete**](docs/ActiveDirectoryApi.md#activedirectories_delete) | **DELETE** /activedirectories/{id} | Delete an Active Directory
 *JCAPIv2::ActiveDirectoryApi* | [**activedirectories_get**](docs/ActiveDirectoryApi.md#activedirectories_get) | **GET** /activedirectories/{id} | Get an Active Directory
 *JCAPIv2::ActiveDirectoryApi* | [**activedirectories_list**](docs/ActiveDirectoryApi.md#activedirectories_list) | **GET** /activedirectories | List Active Directories
@@ -115,8 +113,10 @@ Class | Method | HTTP request | Description
 *JCAPIv2::GSuiteApi* | [**graph_g_suite_associations_post**](docs/GSuiteApi.md#graph_g_suite_associations_post) | **POST** /gsuites/{gsuite_id}/associations | Manage the associations of a G Suite instance
 *JCAPIv2::GSuiteApi* | [**graph_g_suite_traverse_user**](docs/GSuiteApi.md#graph_g_suite_traverse_user) | **GET** /gsuites/{gsuite_id}/users | List the Users bound to a G Suite instance
 *JCAPIv2::GSuiteApi* | [**graph_g_suite_traverse_user_group**](docs/GSuiteApi.md#graph_g_suite_traverse_user_group) | **GET** /gsuites/{gsuite_id}/usergroups | List the User Groups bound to a G Suite instance
+*JCAPIv2::GSuiteApi* | [**gsuites_get**](docs/GSuiteApi.md#gsuites_get) | **GET** /gsuites/{id} | Get G Suite
+*JCAPIv2::GSuiteApi* | [**gsuites_patch**](docs/GSuiteApi.md#gsuites_patch) | **PATCH** /gsuites/{id} | Update existing G Suite
 *JCAPIv2::GSuiteApi* | [**translation_rules_g_suite_delete**](docs/GSuiteApi.md#translation_rules_g_suite_delete) | **DELETE** /gsuites/{gsuite_id}/translationrules/{id} | Deletes a G Suite translation rule
-*JCAPIv2::GSuiteApi* | [**translation_rules_g_suite_get**](docs/GSuiteApi.md#translation_rules_g_suite_get) | **GET** /gsuites/{gsuite_id}/translationrules/{id} | Gets a specific g suite translation rule
+*JCAPIv2::GSuiteApi* | [**translation_rules_g_suite_get**](docs/GSuiteApi.md#translation_rules_g_suite_get) | **GET** /gsuites/{gsuite_id}/translationrules/{id} | Gets a specific G Suite translation rule
 *JCAPIv2::GSuiteApi* | [**translation_rules_g_suite_list**](docs/GSuiteApi.md#translation_rules_g_suite_list) | **GET** /gsuites/{gsuite_id}/translationrules | List all the G Suite Translation Rules
 *JCAPIv2::GSuiteApi* | [**translation_rules_g_suite_post**](docs/GSuiteApi.md#translation_rules_g_suite_post) | **POST** /gsuites/{gsuite_id}/translationrules | Create a new G Suite Translation Rule
 *JCAPIv2::GraphApi* | [**graph_active_directory_associations_list**](docs/GraphApi.md#graph_active_directory_associations_list) | **GET** /activedirectories/{activedirectory_id}/associations | List the associations of an Active Directory instance
@@ -201,6 +201,7 @@ Class | Method | HTTP request | Description
 *JCAPIv2::LDAPServersApi* | [**graph_ldap_server_traverse_user_group**](docs/LDAPServersApi.md#graph_ldap_server_traverse_user_group) | **GET** /ldapservers/{ldapserver_id}/usergroups | List the User Groups bound to a LDAP Server
 *JCAPIv2::LDAPServersApi* | [**ldapservers_get**](docs/LDAPServersApi.md#ldapservers_get) | **GET** /ldapservers/{id} | Get LDAP Server
 *JCAPIv2::LDAPServersApi* | [**ldapservers_list**](docs/LDAPServersApi.md#ldapservers_list) | **GET** /ldapservers | List LDAP Servers
+*JCAPIv2::LDAPServersApi* | [**ldapservers_patch**](docs/LDAPServersApi.md#ldapservers_patch) | **PATCH** /ldapservers/{id} | Update existing LDAP server
 *JCAPIv2::Office365Api* | [**graph_office365_associations_list**](docs/Office365Api.md#graph_office365_associations_list) | **GET** /office365s/{office365_id}/associations | List the associations of an Office 365 instance
 *JCAPIv2::Office365Api* | [**graph_office365_associations_post**](docs/Office365Api.md#graph_office365_associations_post) | **POST** /office365s/{office365_id}/associations | Manage the associations of an Office 365 instance
 *JCAPIv2::Office365Api* | [**graph_office365_traverse_user**](docs/Office365Api.md#graph_office365_traverse_user) | **GET** /office365s/{office365_id}/users | List the Users bound to an Office 365 instance
@@ -209,6 +210,8 @@ Class | Method | HTTP request | Description
 *JCAPIv2::Office365Api* | [**translation_rules_office365_get**](docs/Office365Api.md#translation_rules_office365_get) | **GET** /office365s/{office365_id}/translationrules/{id} | Gets a specific Office 365 translation rule
 *JCAPIv2::Office365Api* | [**translation_rules_office365_list**](docs/Office365Api.md#translation_rules_office365_list) | **GET** /office365s/{office365_id}/translationrules | List all the Office 365 Translation Rules
 *JCAPIv2::Office365Api* | [**translation_rules_office365_post**](docs/Office365Api.md#translation_rules_office365_post) | **POST** /office365s/{office365_id}/translationrules | Create a new Office 365 Translation Rule
+*JCAPIv2::OrganizationsApi* | [**org_crypto_get**](docs/OrganizationsApi.md#org_crypto_get) | **GET** /organizations/{id}/crypto | Get Crypto Settings
+*JCAPIv2::OrganizationsApi* | [**org_crypto_put**](docs/OrganizationsApi.md#org_crypto_put) | **PUT** /organizations/{id}/crypto | Edit Crypto Settings
 *JCAPIv2::PoliciesApi* | [**graph_policy_associations_list**](docs/PoliciesApi.md#graph_policy_associations_list) | **GET** /policies/{policy_id}/associations | List the associations of a Policy
 *JCAPIv2::PoliciesApi* | [**graph_policy_associations_post**](docs/PoliciesApi.md#graph_policy_associations_post) | **POST** /policies/{policy_id}/associations | Manage the associations of a Policy
 *JCAPIv2::PoliciesApi* | [**graph_policy_traverse_system**](docs/PoliciesApi.md#graph_policy_traverse_system) | **GET** /policies/{policy_id}/systems | List the Systems bound to a Policy
@@ -263,6 +266,30 @@ Class | Method | HTTP request | Description
 *JCAPIv2::SystemGroupsApi* | [**groups_system_patch**](docs/SystemGroupsApi.md#groups_system_patch) | **PATCH** /systemgroups/{id} | Partial update a System Group
 *JCAPIv2::SystemGroupsApi* | [**groups_system_post**](docs/SystemGroupsApi.md#groups_system_post) | **POST** /systemgroups | Create a new System Group
 *JCAPIv2::SystemGroupsApi* | [**groups_system_put**](docs/SystemGroupsApi.md#groups_system_put) | **PUT** /systemgroups/{id} | Update a System Group
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_apps**](docs/SystemInsightsApi.md#systeminsights_list_apps) | **GET** /systeminsights/apps | List System Insights Apps
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_apps_0**](docs/SystemInsightsApi.md#systeminsights_list_apps_0) | **GET** /systeminsights/{jc_system_id}/apps | List System Insights System Apps
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_browser_plugins**](docs/SystemInsightsApi.md#systeminsights_list_browser_plugins) | **GET** /systeminsights/{jc_system_id}/browser_plugins | List System Insights System Browser Plugins
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_browser_plugins_0**](docs/SystemInsightsApi.md#systeminsights_list_browser_plugins_0) | **GET** /systeminsights/browser_plugins | List System Insights Browser Plugins
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_chrome_extensions**](docs/SystemInsightsApi.md#systeminsights_list_chrome_extensions) | **GET** /systeminsights/{jc_system_id}/chrome_extensions | List System Insights System Chrome Extensions
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_chrome_extensions_0**](docs/SystemInsightsApi.md#systeminsights_list_chrome_extensions_0) | **GET** /systeminsights/chrome_extensions | List System Insights Chrome Extensions
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_disk_encryption**](docs/SystemInsightsApi.md#systeminsights_list_disk_encryption) | **GET** /systeminsights/disk_encryption | List System Insights Disk Encryption
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_disk_encryption_0**](docs/SystemInsightsApi.md#systeminsights_list_disk_encryption_0) | **GET** /systeminsights/{jc_system_id}/disk_encryption | List System Insights System Disk Encryption
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_firefox_addons**](docs/SystemInsightsApi.md#systeminsights_list_firefox_addons) | **GET** /systeminsights/firefox_addons | List System Insights Firefox Addons
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_firefox_addons_0**](docs/SystemInsightsApi.md#systeminsights_list_firefox_addons_0) | **GET** /systeminsights/{jc_system_id}/firefox_addons | List System Insights System Firefox Addons
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_groups**](docs/SystemInsightsApi.md#systeminsights_list_groups) | **GET** /systeminsights/groups | List System Insights Groups
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_groups_0**](docs/SystemInsightsApi.md#systeminsights_list_groups_0) | **GET** /systeminsights/{jc_system_id}/groups | List System Insights System Groups
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_interface_addresses**](docs/SystemInsightsApi.md#systeminsights_list_interface_addresses) | **GET** /systeminsights/interface_addresses | List System Insights Interface Addresses
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_interface_addresses_0**](docs/SystemInsightsApi.md#systeminsights_list_interface_addresses_0) | **GET** /systeminsights/{jc_system_id}/interface_addresses | List System Insights System Interface Addresses
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_mounts**](docs/SystemInsightsApi.md#systeminsights_list_mounts) | **GET** /systeminsights/mounts | List System Insights Mounts
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_mounts_0**](docs/SystemInsightsApi.md#systeminsights_list_mounts_0) | **GET** /systeminsights/{jc_system_id}/mounts | List System Insights System Mounts
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_os_version**](docs/SystemInsightsApi.md#systeminsights_list_os_version) | **GET** /systeminsights/{jc_system_id}/os_version | List System Insights System OS Version
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_os_version_0**](docs/SystemInsightsApi.md#systeminsights_list_os_version_0) | **GET** /systeminsights/os_version | List System Insights OS Version
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_safari_extensions**](docs/SystemInsightsApi.md#systeminsights_list_safari_extensions) | **GET** /systeminsights/{jc_system_id}/safari_extensions | List System Insights System Safari Extensions
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_safari_extensions_0**](docs/SystemInsightsApi.md#systeminsights_list_safari_extensions_0) | **GET** /systeminsights/safari_extensions | List System Insights Safari Extensions
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_system_info**](docs/SystemInsightsApi.md#systeminsights_list_system_info) | **GET** /systeminsights/system_info | List System Insights System Info
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_system_info_0**](docs/SystemInsightsApi.md#systeminsights_list_system_info_0) | **GET** /systeminsights/{jc_system_id}/system_info | List System Insights System System Info
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_users**](docs/SystemInsightsApi.md#systeminsights_list_users) | **GET** /systeminsights/users | List System Insights Users
+*JCAPIv2::SystemInsightsApi* | [**systeminsights_list_users_0**](docs/SystemInsightsApi.md#systeminsights_list_users_0) | **GET** /systeminsights/{jc_system_id}/users | List System Insights System Users
 *JCAPIv2::SystemsApi* | [**graph_system_associations_list**](docs/SystemsApi.md#graph_system_associations_list) | **GET** /systems/{system_id}/associations | List the associations of a System
 *JCAPIv2::SystemsApi* | [**graph_system_associations_post**](docs/SystemsApi.md#graph_system_associations_post) | **POST** /systems/{system_id}/associations | Manage associations of a System
 *JCAPIv2::SystemsApi* | [**graph_system_member_of**](docs/SystemsApi.md#graph_system_member_of) | **GET** /systems/{system_id}/memberof | List the parent Groups of a System
@@ -334,6 +361,9 @@ Class | Method | HTTP request | Description
 
 ## Documentation for Models
 
+ - [JCAPIv2::ActiveDirectoryAgentGetOutput](docs/ActiveDirectoryAgentGetOutput.md)
+ - [JCAPIv2::ActiveDirectoryAgentInput](docs/ActiveDirectoryAgentInput.md)
+ - [JCAPIv2::ActiveDirectoryAgentListOutput](docs/ActiveDirectoryAgentListOutput.md)
  - [JCAPIv2::ActiveDirectoryInput](docs/ActiveDirectoryInput.md)
  - [JCAPIv2::Administrator](docs/Administrator.md)
  - [JCAPIv2::AuthInfo](docs/AuthInfo.md)
@@ -341,6 +371,7 @@ Class | Method | HTTP request | Description
  - [JCAPIv2::AuthInputObject](docs/AuthInputObject.md)
  - [JCAPIv2::AuthinputBasic](docs/AuthinputBasic.md)
  - [JCAPIv2::AuthinputOauth](docs/AuthinputOauth.md)
+ - [JCAPIv2::Body](docs/Body.md)
  - [JCAPIv2::BulkUserCreate](docs/BulkUserCreate.md)
  - [JCAPIv2::BulkUserUpdate](docs/BulkUserUpdate.md)
  - [JCAPIv2::Directory](docs/Directory.md)
@@ -357,17 +388,23 @@ Class | Method | HTTP request | Description
  - [JCAPIv2::GraphType](docs/GraphType.md)
  - [JCAPIv2::Group](docs/Group.md)
  - [JCAPIv2::GroupType](docs/GroupType.md)
+ - [JCAPIv2::GsuiteOutput](docs/GsuiteOutput.md)
+ - [JCAPIv2::GsuitePatchInput](docs/GsuitePatchInput.md)
  - [JCAPIv2::InlineResponse200](docs/InlineResponse200.md)
- - [JCAPIv2::InlineResponse401](docs/InlineResponse401.md)
+ - [JCAPIv2::InlineResponse2001](docs/InlineResponse2001.md)
+ - [JCAPIv2::InlineResponse400](docs/InlineResponse400.md)
  - [JCAPIv2::JobDetails](docs/JobDetails.md)
  - [JCAPIv2::JobId](docs/JobId.md)
  - [JCAPIv2::JobWorkresult](docs/JobWorkresult.md)
+ - [JCAPIv2::LdapServerAction](docs/LdapServerAction.md)
  - [JCAPIv2::LdapServerInput](docs/LdapServerInput.md)
  - [JCAPIv2::Mfa](docs/Mfa.md)
  - [JCAPIv2::OauthCodeInput](docs/OauthCodeInput.md)
  - [JCAPIv2::Office365BuiltinTranslation](docs/Office365BuiltinTranslation.md)
  - [JCAPIv2::Office365TranslationRule](docs/Office365TranslationRule.md)
  - [JCAPIv2::Office365TranslationRuleRequest](docs/Office365TranslationRuleRequest.md)
+ - [JCAPIv2::OrgCryptoSettings](docs/OrgCryptoSettings.md)
+ - [JCAPIv2::OrgcryptosettingsSshKeys](docs/OrgcryptosettingsSshKeys.md)
  - [JCAPIv2::Policy](docs/Policy.md)
  - [JCAPIv2::PolicyRequest](docs/PolicyRequest.md)
  - [JCAPIv2::PolicyRequestTemplate](docs/PolicyRequestTemplate.md)
@@ -391,6 +428,18 @@ Class | Method | HTTP request | Description
  - [JCAPIv2::SystemGroupData](docs/SystemGroupData.md)
  - [JCAPIv2::SystemGroupGraphManagementReq](docs/SystemGroupGraphManagementReq.md)
  - [JCAPIv2::SystemGroupMembersReq](docs/SystemGroupMembersReq.md)
+ - [JCAPIv2::SystemInsightsApps](docs/SystemInsightsApps.md)
+ - [JCAPIv2::SystemInsightsBrowserPlugins](docs/SystemInsightsBrowserPlugins.md)
+ - [JCAPIv2::SystemInsightsChromeExtensions](docs/SystemInsightsChromeExtensions.md)
+ - [JCAPIv2::SystemInsightsDiskEncryption](docs/SystemInsightsDiskEncryption.md)
+ - [JCAPIv2::SystemInsightsFirefoxAddons](docs/SystemInsightsFirefoxAddons.md)
+ - [JCAPIv2::SystemInsightsGroups](docs/SystemInsightsGroups.md)
+ - [JCAPIv2::SystemInsightsInterfaceAddresses](docs/SystemInsightsInterfaceAddresses.md)
+ - [JCAPIv2::SystemInsightsMounts](docs/SystemInsightsMounts.md)
+ - [JCAPIv2::SystemInsightsOsVersion](docs/SystemInsightsOsVersion.md)
+ - [JCAPIv2::SystemInsightsSafariExtensions](docs/SystemInsightsSafariExtensions.md)
+ - [JCAPIv2::SystemInsightsSystemInfo](docs/SystemInsightsSystemInfo.md)
+ - [JCAPIv2::SystemInsightsUsers](docs/SystemInsightsUsers.md)
  - [JCAPIv2::Systemfdekey](docs/Systemfdekey.md)
  - [JCAPIv2::Systemuser](docs/Systemuser.md)
  - [JCAPIv2::Systemuserputpost](docs/Systemuserputpost.md)
diff --git a/jcapiv2/docs/ActiveDirectoryAgentGetOutput.md b/jcapiv2/docs/ActiveDirectoryAgentGetOutput.md
new file mode 100644
index 0000000..8ab13e2
--- /dev/null
+++ b/jcapiv2/docs/ActiveDirectoryAgentGetOutput.md
@@ -0,0 +1,9 @@
+# JCAPIv2::ActiveDirectoryAgentGetOutput
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **String** | ObjectID of this Active Directory Agent. | 
+**connect_key** | **String** | The connect key to use when installing the Agent on a Domain Controller. | [optional] 
+
+
diff --git a/jcapiv2/docs/ActiveDirectoryAgentInput.md b/jcapiv2/docs/ActiveDirectoryAgentInput.md
new file mode 100644
index 0000000..5131716
--- /dev/null
+++ b/jcapiv2/docs/ActiveDirectoryAgentInput.md
@@ -0,0 +1,7 @@
+# JCAPIv2::ActiveDirectoryAgentInput
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
diff --git a/jcapiv2/docs/ActiveDirectoryAgentListOutput.md b/jcapiv2/docs/ActiveDirectoryAgentListOutput.md
new file mode 100644
index 0000000..1052443
--- /dev/null
+++ b/jcapiv2/docs/ActiveDirectoryAgentListOutput.md
@@ -0,0 +1,9 @@
+# JCAPIv2::ActiveDirectoryAgentListOutput
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **String** | ObjectID of this Active Directory Agent. | [optional] 
+**state** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/ActiveDirectoryApi.md b/jcapiv2/docs/ActiveDirectoryApi.md
index f30b370..dbb622e 100644
--- a/jcapiv2/docs/ActiveDirectoryApi.md
+++ b/jcapiv2/docs/ActiveDirectoryApi.md
@@ -4,6 +4,10 @@ All URIs are relative to *https://console.jumpcloud.com/api/v2*
 
 Method | HTTP request | Description
 ------------- | ------------- | -------------
+[**activedirectories_agents_delete**](ActiveDirectoryApi.md#activedirectories_agents_delete) | **DELETE** /activedirectories/{activedirectory_id}/agents/{agent_id} | Delete Active Directory Agent
+[**activedirectories_agents_get**](ActiveDirectoryApi.md#activedirectories_agents_get) | **GET** /activedirectories/{activedirectory_id}/agents/{agent_id} | Get Active Directory Agent
+[**activedirectories_agents_list**](ActiveDirectoryApi.md#activedirectories_agents_list) | **GET** /activedirectories/{activedirectory_id}/agents | List Active Directory Agents
+[**activedirectories_agents_post**](ActiveDirectoryApi.md#activedirectories_agents_post) | **POST** /activedirectories/{activedirectory_id}/agents | Create a new Active Directory Agent
 [**activedirectories_delete**](ActiveDirectoryApi.md#activedirectories_delete) | **DELETE** /activedirectories/{id} | Delete an Active Directory
 [**activedirectories_get**](ActiveDirectoryApi.md#activedirectories_get) | **GET** /activedirectories/{id} | Get an Active Directory
 [**activedirectories_list**](ActiveDirectoryApi.md#activedirectories_list) | **GET** /activedirectories | List Active Directories
@@ -13,6 +17,259 @@ Method | HTTP request | Description
 [**graph_active_directory_traverse_user_group**](ActiveDirectoryApi.md#graph_active_directory_traverse_user_group) | **GET** /activedirectories/{activedirectory_id}/usergroups | List the User Groups bound to an Active Directory instance
 
 
+# **activedirectories_agents_delete**
+> activedirectories_agents_delete(activedirectory_id, agent_id, content_type, accept, opts)
+
+Delete Active Directory Agent
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::ActiveDirectoryApi.new
+
+activedirectory_id = "activedirectory_id_example" # String | 
+
+agent_id = "agent_id_example" # String | 
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  x_org_id: "" # String | 
+}
+
+begin
+  #Delete Active Directory Agent
+  api_instance.activedirectories_agents_delete(activedirectory_id, agent_id, content_type, accept, opts)
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling ActiveDirectoryApi->activedirectories_agents_delete: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **activedirectory_id** | **String**|  | 
+ **agent_id** | **String**|  | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **x_org_id** | **String**|  | [optional] [default to ]
+
+### Return type
+
+nil (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **activedirectories_agents_get**
+> ActiveDirectoryAgentListOutput activedirectories_agents_get(activedirectory_id, agent_id, content_type, accept, opts)
+
+Get Active Directory Agent
+
+This endpoint returns a specific active directory agent.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents/{agent_id} \\   -H 'accept: application/json' \\   -H 'content-type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::ActiveDirectoryApi.new
+
+activedirectory_id = "activedirectory_id_example" # String | 
+
+agent_id = "agent_id_example" # String | 
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  x_org_id: "" # String | 
+}
+
+begin
+  #Get Active Directory Agent
+  result = api_instance.activedirectories_agents_get(activedirectory_id, agent_id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling ActiveDirectoryApi->activedirectories_agents_get: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **activedirectory_id** | **String**|  | 
+ **agent_id** | **String**|  | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **x_org_id** | **String**|  | [optional] [default to ]
+
+### Return type
+
+[**ActiveDirectoryAgentListOutput**](ActiveDirectoryAgentListOutput.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **activedirectories_agents_list**
+> Array&lt;ActiveDirectoryAgentListOutput&gt; activedirectories_agents_list(activedirectory_id, content_type, accept, opts)
+
+List Active Directory Agents
+
+This endpoint allows you to list all your Active Directory Agents for a given Instance.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H 'accept: application/json' \\   -H 'content-type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+# setup authorization
+JCAPIv2.configure do |config|
+  # Configure API key authorization: x-api-key
+  config.api_key['x-api-key'] = 'YOUR API KEY'
+  # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
+  #config.api_key_prefix['x-api-key'] = 'Bearer'
+end
+
+api_instance = JCAPIv2::ActiveDirectoryApi.new
+
+activedirectory_id = "activedirectory_id_example" # String | 
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  limit: 10, # Integer | The number of records to return at once. Limited to 100.
+  skip: 0, # Integer | The offset into the records to return.
+  sort: ["sort_example"], # Array<String> | The comma separated fields used to sort the collection. Default sort is ascending, prefix with `-` to sort descending. 
+  x_org_id: "" # String | 
+}
+
+begin
+  #List Active Directory Agents
+  result = api_instance.activedirectories_agents_list(activedirectory_id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling ActiveDirectoryApi->activedirectories_agents_list: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **activedirectory_id** | **String**|  | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **sort** | [**Array&lt;String&gt;**](String.md)| The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending.  | [optional] 
+ **x_org_id** | **String**|  | [optional] [default to ]
+
+### Return type
+
+[**Array&lt;ActiveDirectoryAgentListOutput&gt;**](ActiveDirectoryAgentListOutput.md)
+
+### Authorization
+
+[x-api-key](../README.md#x-api-key)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **activedirectories_agents_post**
+> ActiveDirectoryAgentGetOutput activedirectories_agents_post(activedirectory_id, content_type, accept, opts)
+
+Create a new Active Directory Agent
+
+This endpoint allows you to create a new Active Directory Agent.   #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H 'accept: application/json' \\   -H 'content-type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{}' ```
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+# setup authorization
+JCAPIv2.configure do |config|
+  # Configure API key authorization: x-api-key
+  config.api_key['x-api-key'] = 'YOUR API KEY'
+  # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
+  #config.api_key_prefix['x-api-key'] = 'Bearer'
+end
+
+api_instance = JCAPIv2::ActiveDirectoryApi.new
+
+activedirectory_id = "activedirectory_id_example" # String | 
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  body: JCAPIv2::ActiveDirectoryAgentInput.new, # ActiveDirectoryAgentInput | 
+  x_org_id: "" # String | 
+}
+
+begin
+  #Create a new Active Directory Agent
+  result = api_instance.activedirectories_agents_post(activedirectory_id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling ActiveDirectoryApi->activedirectories_agents_post: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **activedirectory_id** | **String**|  | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **body** | [**ActiveDirectoryAgentInput**](ActiveDirectoryAgentInput.md)|  | [optional] 
+ **x_org_id** | **String**|  | [optional] [default to ]
+
+### Return type
+
+[**ActiveDirectoryAgentGetOutput**](ActiveDirectoryAgentGetOutput.md)
+
+### Authorization
+
+[x-api-key](../README.md#x-api-key)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
 # **activedirectories_delete**
 > activedirectories_delete(id, content_type, accept, opts)
 
@@ -439,8 +696,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -460,8 +718,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/ApplicationsApi.md b/jcapiv2/docs/ApplicationsApi.md
index d89c967..94fd489 100644
--- a/jcapiv2/docs/ApplicationsApi.md
+++ b/jcapiv2/docs/ApplicationsApi.md
@@ -175,8 +175,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -196,8 +197,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -243,8 +245,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -264,8 +267,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/Body.md b/jcapiv2/docs/Body.md
new file mode 100644
index 0000000..dd53f78
--- /dev/null
+++ b/jcapiv2/docs/Body.md
@@ -0,0 +1,10 @@
+# JCAPIv2::Body
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **String** |  | [optional] 
+**user_lockout_action** | [**LdapServerAction**](LdapServerAction.md) |  | [optional] 
+**user_password_expiration_action** | [**LdapServerAction**](LdapServerAction.md) |  | [optional] 
+
+
diff --git a/jcapiv2/docs/CommandsApi.md b/jcapiv2/docs/CommandsApi.md
index e6ba995..e2f1e76 100644
--- a/jcapiv2/docs/CommandsApi.md
+++ b/jcapiv2/docs/CommandsApi.md
@@ -175,8 +175,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -196,8 +197,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -243,8 +245,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -264,8 +267,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/GSuiteApi.md b/jcapiv2/docs/GSuiteApi.md
index 1ec7d89..ef32ade 100644
--- a/jcapiv2/docs/GSuiteApi.md
+++ b/jcapiv2/docs/GSuiteApi.md
@@ -8,8 +8,10 @@ Method | HTTP request | Description
 [**graph_g_suite_associations_post**](GSuiteApi.md#graph_g_suite_associations_post) | **POST** /gsuites/{gsuite_id}/associations | Manage the associations of a G Suite instance
 [**graph_g_suite_traverse_user**](GSuiteApi.md#graph_g_suite_traverse_user) | **GET** /gsuites/{gsuite_id}/users | List the Users bound to a G Suite instance
 [**graph_g_suite_traverse_user_group**](GSuiteApi.md#graph_g_suite_traverse_user_group) | **GET** /gsuites/{gsuite_id}/usergroups | List the User Groups bound to a G Suite instance
+[**gsuites_get**](GSuiteApi.md#gsuites_get) | **GET** /gsuites/{id} | Get G Suite
+[**gsuites_patch**](GSuiteApi.md#gsuites_patch) | **PATCH** /gsuites/{id} | Update existing G Suite
 [**translation_rules_g_suite_delete**](GSuiteApi.md#translation_rules_g_suite_delete) | **DELETE** /gsuites/{gsuite_id}/translationrules/{id} | Deletes a G Suite translation rule
-[**translation_rules_g_suite_get**](GSuiteApi.md#translation_rules_g_suite_get) | **GET** /gsuites/{gsuite_id}/translationrules/{id} | Gets a specific g suite translation rule
+[**translation_rules_g_suite_get**](GSuiteApi.md#translation_rules_g_suite_get) | **GET** /gsuites/{gsuite_id}/translationrules/{id} | Gets a specific G Suite translation rule
 [**translation_rules_g_suite_list**](GSuiteApi.md#translation_rules_g_suite_list) | **GET** /gsuites/{gsuite_id}/translationrules | List all the G Suite Translation Rules
 [**translation_rules_g_suite_post**](GSuiteApi.md#translation_rules_g_suite_post) | **POST** /gsuites/{gsuite_id}/translationrules | Create a new G Suite Translation Rule
 
@@ -173,8 +175,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -194,8 +197,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -241,8 +245,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -262,8 +267,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -280,6 +286,122 @@ Name | Type | Description  | Notes
 
 
 
+# **gsuites_get**
+> GsuiteOutput gsuites_get(id, content_type, accept, opts)
+
+Get G Suite
+
+This endpoint returns a specific G Suite.  ##### Sample Request  ```  curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::GSuiteApi.new
+
+id = "id_example" # String | Unique identifier of the GSuite.
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  x_org_id: "" # String | 
+}
+
+begin
+  #Get G Suite
+  result = api_instance.gsuites_get(id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling GSuiteApi->gsuites_get: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **String**| Unique identifier of the GSuite. | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **x_org_id** | **String**|  | [optional] [default to ]
+
+### Return type
+
+[**GsuiteOutput**](GsuiteOutput.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **gsuites_patch**
+> GsuiteOutput gsuites_patch(id, content_type, accept, opts)
+
+Update existing G Suite
+
+This endpoint allows updating some attributes of a G Suite.  ##### Sample Request  ``` curl -X PATCH https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"userLockoutAction\": \"remove\",     \"userPasswordExpirationAction\": \"disable\"   }' ```
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::GSuiteApi.new
+
+id = "id_example" # String | Unique identifier of the GSuite.
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  body: JCAPIv2::GsuitePatchInput.new, # GsuitePatchInput | 
+  x_org_id: "" # String | 
+}
+
+begin
+  #Update existing G Suite
+  result = api_instance.gsuites_patch(id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling GSuiteApi->gsuites_patch: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **String**| Unique identifier of the GSuite. | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **body** | [**GsuitePatchInput**](GsuitePatchInput.md)|  | [optional] 
+ **x_org_id** | **String**|  | [optional] [default to ]
+
+### Return type
+
+[**GsuiteOutput**](GsuiteOutput.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
 # **translation_rules_g_suite_delete**
 > translation_rules_g_suite_delete(gsuite_id, id, content_type, accept)
 
@@ -345,7 +467,7 @@ nil (empty response body)
 # **translation_rules_g_suite_get**
 > GSuiteTranslationRule translation_rules_g_suite_get(gsuite_id, id, content_type, accept)
 
-Gets a specific g suite translation rule
+Gets a specific G Suite translation rule
 
 This endpoint returns a specific translation rule for a specific G Suite instance. These rules specify how JumpCloud attributes translate to [G Suite Admin SDK](https://developers.google.com/admin-sdk/directory/) attributes.  ###### Sample Request  ```   curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{gsuite_id}/translationrules/{id} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
 
@@ -373,7 +495,7 @@ accept = "application/json" # String |
 
 
 begin
-  #Gets a specific g suite translation rule
+  #Gets a specific G Suite translation rule
   result = api_instance.translation_rules_g_suite_get(gsuite_id, id, content_type, accept)
   p result
 rescue JCAPIv2::ApiError => e
diff --git a/jcapiv2/docs/GraphApi.md b/jcapiv2/docs/GraphApi.md
index 616d5e6..02e0082 100644
--- a/jcapiv2/docs/GraphApi.md
+++ b/jcapiv2/docs/GraphApi.md
@@ -246,8 +246,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -267,8 +268,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -450,8 +452,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -471,8 +474,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -518,8 +522,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -539,8 +544,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -722,8 +728,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -743,8 +750,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -790,8 +798,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -811,8 +820,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -988,8 +998,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1009,8 +1020,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1056,8 +1068,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1077,8 +1090,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1260,8 +1274,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1281,8 +1296,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1328,8 +1344,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1349,8 +1366,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1532,8 +1550,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1553,8 +1572,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1600,8 +1620,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1621,8 +1642,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1804,8 +1826,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1825,8 +1848,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1872,8 +1896,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1893,8 +1918,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -2076,8 +2102,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -2097,8 +2124,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -2144,8 +2172,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -2165,8 +2194,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -2773,8 +2803,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -2794,8 +2825,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -2841,8 +2873,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -2862,8 +2895,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -2909,8 +2943,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -2930,8 +2965,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -2977,8 +3013,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -2998,8 +3035,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -3121,8 +3159,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -3142,8 +3181,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -3189,8 +3229,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -3210,8 +3251,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -3331,10 +3373,11 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
+  x_org_id: "" # String | 
   skip: 0, # Integer | The offset into the records to return.
   date: "date_example", # String | Current date header for the System Context API
   authorization: "authorization_example", # String | Authorization header for the System Context API
-  x_org_id: "" # String | 
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -3354,10 +3397,11 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
+ **x_org_id** | **String**|  | [optional] [default to ]
  **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **date** | **String**| Current date header for the System Context API | [optional] 
  **authorization** | **String**| Authorization header for the System Context API | [optional] 
- **x_org_id** | **String**|  | [optional] [default to ]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -3952,8 +3996,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -3973,8 +4018,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4020,8 +4066,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4041,8 +4088,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4088,8 +4136,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4109,8 +4158,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4156,8 +4206,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4177,8 +4228,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4224,8 +4276,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4245,8 +4298,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4292,8 +4346,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4313,8 +4368,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4360,8 +4416,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4381,8 +4438,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4428,8 +4486,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4449,8 +4508,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4496,8 +4556,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4517,8 +4578,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4636,8 +4698,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4657,8 +4720,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4704,8 +4768,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4725,8 +4790,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4772,8 +4838,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4793,8 +4860,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4840,8 +4908,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4861,8 +4930,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4908,8 +4978,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4929,8 +5000,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -4976,8 +5048,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -4997,8 +5070,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -5114,8 +5188,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -5135,8 +5210,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/GsuiteOutput.md b/jcapiv2/docs/GsuiteOutput.md
new file mode 100644
index 0000000..3ed0d83
--- /dev/null
+++ b/jcapiv2/docs/GsuiteOutput.md
@@ -0,0 +1,10 @@
+# JCAPIv2::GsuiteOutput
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **String** |  | [optional] 
+**user_lockout_action** | **String** |  | [optional] 
+**user_password_expiration_action** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/GsuitePatchInput.md b/jcapiv2/docs/GsuitePatchInput.md
new file mode 100644
index 0000000..adc47f8
--- /dev/null
+++ b/jcapiv2/docs/GsuitePatchInput.md
@@ -0,0 +1,9 @@
+# JCAPIv2::GsuitePatchInput
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**user_lockout_action** | **String** |  | [optional] 
+**user_password_expiration_action** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/InlineResponse200.md b/jcapiv2/docs/InlineResponse200.md
index a9d5242..ca7e8f1 100644
--- a/jcapiv2/docs/InlineResponse200.md
+++ b/jcapiv2/docs/InlineResponse200.md
@@ -3,7 +3,9 @@
 ## Properties
 Name | Type | Description | Notes
 ------------ | ------------- | ------------- | -------------
-**total_count** | **Integer** |  | [optional] 
-**results** | [**Array&lt;Administrator&gt;**](Administrator.md) |  | [optional] 
+**id** | **String** |  | [optional] 
+**name** | **String** |  | [optional] 
+**user_lockout_action** | [**LdapServerAction**](LdapServerAction.md) |  | [optional] 
+**user_password_expiration_action** | [**LdapServerAction**](LdapServerAction.md) |  | [optional] 
 
 
diff --git a/jcapiv2/docs/InlineResponse2001.md b/jcapiv2/docs/InlineResponse2001.md
new file mode 100644
index 0000000..c4d0cee
--- /dev/null
+++ b/jcapiv2/docs/InlineResponse2001.md
@@ -0,0 +1,9 @@
+# JCAPIv2::InlineResponse2001
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**total_count** | **Integer** |  | [optional] 
+**results** | [**Array&lt;Administrator&gt;**](Administrator.md) |  | [optional] 
+
+
diff --git a/jcapiv2/docs/InlineResponse401.md b/jcapiv2/docs/InlineResponse400.md
similarity index 84%
rename from jcapiv2/docs/InlineResponse401.md
rename to jcapiv2/docs/InlineResponse400.md
index 30a8ef5..5f5caed 100644
--- a/jcapiv2/docs/InlineResponse401.md
+++ b/jcapiv2/docs/InlineResponse400.md
@@ -1,4 +1,4 @@
-# JCAPIv2::InlineResponse401
+# JCAPIv2::InlineResponse400
 
 ## Properties
 Name | Type | Description | Notes
diff --git a/jcapiv2/docs/LDAPServersApi.md b/jcapiv2/docs/LDAPServersApi.md
index 87563d5..db4c89e 100644
--- a/jcapiv2/docs/LDAPServersApi.md
+++ b/jcapiv2/docs/LDAPServersApi.md
@@ -10,6 +10,7 @@ Method | HTTP request | Description
 [**graph_ldap_server_traverse_user_group**](LDAPServersApi.md#graph_ldap_server_traverse_user_group) | **GET** /ldapservers/{ldapserver_id}/usergroups | List the User Groups bound to a LDAP Server
 [**ldapservers_get**](LDAPServersApi.md#ldapservers_get) | **GET** /ldapservers/{id} | Get LDAP Server
 [**ldapservers_list**](LDAPServersApi.md#ldapservers_list) | **GET** /ldapservers | List LDAP Servers
+[**ldapservers_patch**](LDAPServersApi.md#ldapservers_patch) | **PATCH** /ldapservers/{id} | Update existing LDAP server
 
 
 # **graph_ldap_server_associations_list**
@@ -177,8 +178,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -198,8 +200,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -245,8 +248,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -266,8 +270,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -419,3 +424,71 @@ Name | Type | Description  | Notes
 
 
 
+# **ldapservers_patch**
+> InlineResponse200 ldapservers_patch(id, content_type, accept, opts)
+
+Update existing LDAP server
+
+This endpoint allows updating some attributes of an LDAP server.  Sample Request  ``` curl -X PATCH https://console.jumpcloud.com/api/v2/ldapservers/{LDAP_ID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"userLockoutAction\": \"remove\",     \"userPasswordExpirationAction\": \"disable\"   }' ```
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+# setup authorization
+JCAPIv2.configure do |config|
+  # Configure API key authorization: x-api-key
+  config.api_key['x-api-key'] = 'YOUR API KEY'
+  # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
+  #config.api_key_prefix['x-api-key'] = 'Bearer'
+end
+
+api_instance = JCAPIv2::LDAPServersApi.new
+
+id = "id_example" # String | Unique identifier of the LDAP server.
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  body: JCAPIv2::Body.new, # Body | 
+  x_api_key: "x_api_key_example", # String | 
+  x_org_id: "x_org_id_example" # String | 
+}
+
+begin
+  #Update existing LDAP server
+  result = api_instance.ldapservers_patch(id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling LDAPServersApi->ldapservers_patch: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **String**| Unique identifier of the LDAP server. | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **body** | [**Body**](Body.md)|  | [optional] 
+ **x_api_key** | **String**|  | [optional] 
+ **x_org_id** | **String**|  | [optional] 
+
+### Return type
+
+[**InlineResponse200**](InlineResponse200.md)
+
+### Authorization
+
+[x-api-key](../README.md#x-api-key)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
diff --git a/jcapiv2/docs/LdapServerAction.md b/jcapiv2/docs/LdapServerAction.md
new file mode 100644
index 0000000..864ef6c
--- /dev/null
+++ b/jcapiv2/docs/LdapServerAction.md
@@ -0,0 +1,7 @@
+# JCAPIv2::LdapServerAction
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+
diff --git a/jcapiv2/docs/LdapServerInput.md b/jcapiv2/docs/LdapServerInput.md
index c0bd53b..b459611 100644
--- a/jcapiv2/docs/LdapServerInput.md
+++ b/jcapiv2/docs/LdapServerInput.md
@@ -4,5 +4,7 @@
 Name | Type | Description | Notes
 ------------ | ------------- | ------------- | -------------
 **name** | **String** | The name of this LDAP server | [optional] 
+**user_lockout_action** | **String** | action to take; one of &#39;remove&#39; or &#39;disable&#39; | [optional] 
+**user_password_expiration_action** | **String** | action to take; one of &#39;remove&#39; or &#39;disable&#39; | [optional] 
 
 
diff --git a/jcapiv2/docs/LdapServerOutput.md b/jcapiv2/docs/LdapServerOutput.md
index 89519c4..af1630d 100644
--- a/jcapiv2/docs/LdapServerOutput.md
+++ b/jcapiv2/docs/LdapServerOutput.md
@@ -4,6 +4,8 @@
 Name | Type | Description | Notes
 ------------ | ------------- | ------------- | -------------
 **name** | **String** | The name of this LDAP server | [optional] 
+**user_lockout_action** | **String** | action to take; one of &#39;remove&#39; or &#39;disable&#39; | [optional] 
+**user_password_expiration_action** | **String** | action to take; one of &#39;remove&#39; or &#39;disable&#39; | [optional] 
 **id** | **String** | Unique identifier of this LDAP server | 
 
 
diff --git a/jcapiv2/docs/Office365Api.md b/jcapiv2/docs/Office365Api.md
index ee728f1..1eeae32 100644
--- a/jcapiv2/docs/Office365Api.md
+++ b/jcapiv2/docs/Office365Api.md
@@ -179,8 +179,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -200,8 +201,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -247,8 +249,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -268,8 +271,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/OrgCryptoSettings.md b/jcapiv2/docs/OrgCryptoSettings.md
new file mode 100644
index 0000000..3ab0cb6
--- /dev/null
+++ b/jcapiv2/docs/OrgCryptoSettings.md
@@ -0,0 +1,8 @@
+# JCAPIv2::OrgCryptoSettings
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**ssh_keys** | [**OrgcryptosettingsSshKeys**](OrgcryptosettingsSshKeys.md) |  | [optional] 
+
+
diff --git a/jcapiv2/docs/OrganizationsApi.md b/jcapiv2/docs/OrganizationsApi.md
new file mode 100644
index 0000000..44ca5f5
--- /dev/null
+++ b/jcapiv2/docs/OrganizationsApi.md
@@ -0,0 +1,156 @@
+# JCAPIv2::OrganizationsApi
+
+All URIs are relative to *https://console.jumpcloud.com/api/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**org_crypto_get**](OrganizationsApi.md#org_crypto_get) | **GET** /organizations/{id}/crypto | Get Crypto Settings
+[**org_crypto_put**](OrganizationsApi.md#org_crypto_put) | **PUT** /organizations/{id}/crypto | Edit Crypto Settings
+
+
+# **org_crypto_get**
+> OrgCryptoSettings org_crypto_get(id, content_type, accept, opts)
+
+Get Crypto Settings
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+# setup authorization
+JCAPIv2.configure do |config|
+  # Configure API key authorization: x-api-key
+  config.api_key['x-api-key'] = 'YOUR API KEY'
+  # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
+  #config.api_key_prefix['x-api-key'] = 'Bearer'
+end
+
+api_instance = JCAPIv2::OrganizationsApi.new
+
+id = "id_example" # String | 
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  fields: ["fields_example"], # Array<String> | The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+  x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  sort: ["sort_example"], # Array<String> | The comma separated fields used to sort the collection. Default sort is ascending, prefix with `-` to sort descending. 
+  limit: 10, # Integer | The number of records to return at once. Limited to 100.
+}
+
+begin
+  #Get Crypto Settings
+  result = api_instance.org_crypto_get(id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling OrganizationsApi->org_crypto_get: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **String**|  | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **fields** | [**Array&lt;String&gt;**](String.md)| The comma separated fields included in the returned records. If omitted, the default list of fields will be returned.  | [optional] 
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
+ **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **sort** | [**Array&lt;String&gt;**](String.md)| The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending.  | [optional] 
+ **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
+
+### Return type
+
+[**OrgCryptoSettings**](OrgCryptoSettings.md)
+
+### Authorization
+
+[x-api-key](../README.md#x-api-key)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **org_crypto_put**
+> Object org_crypto_put(id, content_type, accept, opts)
+
+Edit Crypto Settings
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+# setup authorization
+JCAPIv2.configure do |config|
+  # Configure API key authorization: x-api-key
+  config.api_key['x-api-key'] = 'YOUR API KEY'
+  # Uncomment the following line to set a prefix for the API key, e.g. 'Bearer' (defaults to nil)
+  #config.api_key_prefix['x-api-key'] = 'Bearer'
+end
+
+api_instance = JCAPIv2::OrganizationsApi.new
+
+id = "id_example" # String | 
+
+content_type = "application/json" # String | 
+
+accept = "application/json" # String | 
+
+opts = { 
+  body: JCAPIv2::OrgCryptoSettings.new, # OrgCryptoSettings | 
+  fields: ["fields_example"], # Array<String> | The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+  x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  sort: ["sort_example"], # Array<String> | The comma separated fields used to sort the collection. Default sort is ascending, prefix with `-` to sort descending. 
+  limit: 10, # Integer | The number of records to return at once. Limited to 100.
+}
+
+begin
+  #Edit Crypto Settings
+  result = api_instance.org_crypto_put(id, content_type, accept, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling OrganizationsApi->org_crypto_put: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **id** | **String**|  | 
+ **content_type** | **String**|  | [default to application/json]
+ **accept** | **String**|  | [default to application/json]
+ **body** | [**OrgCryptoSettings**](OrgCryptoSettings.md)|  | [optional] 
+ **fields** | [**Array&lt;String&gt;**](String.md)| The comma separated fields included in the returned records. If omitted, the default list of fields will be returned.  | [optional] 
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
+ **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **sort** | [**Array&lt;String&gt;**](String.md)| The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending.  | [optional] 
+ **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
+
+### Return type
+
+**Object**
+
+### Authorization
+
+[x-api-key](../README.md#x-api-key)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
diff --git a/jcapiv2/docs/OrgcryptosettingsSshKeys.md b/jcapiv2/docs/OrgcryptosettingsSshKeys.md
new file mode 100644
index 0000000..ecf9ac4
--- /dev/null
+++ b/jcapiv2/docs/OrgcryptosettingsSshKeys.md
@@ -0,0 +1,10 @@
+# JCAPIv2::OrgcryptosettingsSshKeys
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**validate** | **BOOLEAN** |  | [optional] 
+**validate_key_size** | **BOOLEAN** |  | [optional] 
+**key_size** | **Integer** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/PoliciesApi.md b/jcapiv2/docs/PoliciesApi.md
index 68d34ad..0e64752 100644
--- a/jcapiv2/docs/PoliciesApi.md
+++ b/jcapiv2/docs/PoliciesApi.md
@@ -187,8 +187,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -208,8 +209,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -255,8 +257,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -276,8 +279,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -760,7 +764,7 @@ Name | Type | Description  | Notes
 
 Lists all the policy results for an organization.
 
-This endpoint returns all policies results for an Organization.  ##### Sample Request  ```  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+This endpoint returns all policies results for an organization.  ##### Sample Request  ```  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
 
 ### Example
 ```ruby
diff --git a/jcapiv2/docs/ProvidersApi.md b/jcapiv2/docs/ProvidersApi.md
index 4ec3cc2..42776b3 100644
--- a/jcapiv2/docs/ProvidersApi.md
+++ b/jcapiv2/docs/ProvidersApi.md
@@ -9,7 +9,7 @@ Method | HTTP request | Description
 
 
 # **providers_list_administrators**
-> InlineResponse200 providers_list_administrators(provider_id, content_type, accept, opts)
+> InlineResponse2001 providers_list_administrators(provider_id, content_type, accept, opts)
 
 List Provider Administrators
 
@@ -67,7 +67,7 @@ Name | Type | Description  | Notes
 
 ### Return type
 
-[**InlineResponse200**](InlineResponse200.md)
+[**InlineResponse2001**](InlineResponse2001.md)
 
 ### Authorization
 
diff --git a/jcapiv2/docs/RADIUSServersApi.md b/jcapiv2/docs/RADIUSServersApi.md
index 4a6ed69..abe127b 100644
--- a/jcapiv2/docs/RADIUSServersApi.md
+++ b/jcapiv2/docs/RADIUSServersApi.md
@@ -175,8 +175,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -196,8 +197,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -243,8 +245,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -264,8 +267,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/SystemGroupAssociationsApi.md b/jcapiv2/docs/SystemGroupAssociationsApi.md
index 4f75a29..64f402a 100644
--- a/jcapiv2/docs/SystemGroupAssociationsApi.md
+++ b/jcapiv2/docs/SystemGroupAssociationsApi.md
@@ -177,8 +177,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -198,8 +199,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -245,8 +247,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -266,8 +269,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -313,8 +317,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -334,8 +339,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -381,8 +387,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -402,8 +409,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/SystemGroupsApi.md b/jcapiv2/docs/SystemGroupsApi.md
index 96c622b..4a8d235 100644
--- a/jcapiv2/docs/SystemGroupsApi.md
+++ b/jcapiv2/docs/SystemGroupsApi.md
@@ -467,8 +467,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -488,8 +489,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -535,8 +537,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -556,8 +559,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -603,8 +607,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -624,8 +629,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/SystemInsightsApi.md b/jcapiv2/docs/SystemInsightsApi.md
new file mode 100644
index 0000000..6623480
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsApi.md
@@ -0,0 +1,1316 @@
+# JCAPIv2::SystemInsightsApi
+
+All URIs are relative to *https://console.jumpcloud.com/api/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**systeminsights_list_apps**](SystemInsightsApi.md#systeminsights_list_apps) | **GET** /systeminsights/apps | List System Insights Apps
+[**systeminsights_list_apps_0**](SystemInsightsApi.md#systeminsights_list_apps_0) | **GET** /systeminsights/{jc_system_id}/apps | List System Insights System Apps
+[**systeminsights_list_browser_plugins**](SystemInsightsApi.md#systeminsights_list_browser_plugins) | **GET** /systeminsights/{jc_system_id}/browser_plugins | List System Insights System Browser Plugins
+[**systeminsights_list_browser_plugins_0**](SystemInsightsApi.md#systeminsights_list_browser_plugins_0) | **GET** /systeminsights/browser_plugins | List System Insights Browser Plugins
+[**systeminsights_list_chrome_extensions**](SystemInsightsApi.md#systeminsights_list_chrome_extensions) | **GET** /systeminsights/{jc_system_id}/chrome_extensions | List System Insights System Chrome Extensions
+[**systeminsights_list_chrome_extensions_0**](SystemInsightsApi.md#systeminsights_list_chrome_extensions_0) | **GET** /systeminsights/chrome_extensions | List System Insights Chrome Extensions
+[**systeminsights_list_disk_encryption**](SystemInsightsApi.md#systeminsights_list_disk_encryption) | **GET** /systeminsights/disk_encryption | List System Insights Disk Encryption
+[**systeminsights_list_disk_encryption_0**](SystemInsightsApi.md#systeminsights_list_disk_encryption_0) | **GET** /systeminsights/{jc_system_id}/disk_encryption | List System Insights System Disk Encryption
+[**systeminsights_list_firefox_addons**](SystemInsightsApi.md#systeminsights_list_firefox_addons) | **GET** /systeminsights/firefox_addons | List System Insights Firefox Addons
+[**systeminsights_list_firefox_addons_0**](SystemInsightsApi.md#systeminsights_list_firefox_addons_0) | **GET** /systeminsights/{jc_system_id}/firefox_addons | List System Insights System Firefox Addons
+[**systeminsights_list_groups**](SystemInsightsApi.md#systeminsights_list_groups) | **GET** /systeminsights/groups | List System Insights Groups
+[**systeminsights_list_groups_0**](SystemInsightsApi.md#systeminsights_list_groups_0) | **GET** /systeminsights/{jc_system_id}/groups | List System Insights System Groups
+[**systeminsights_list_interface_addresses**](SystemInsightsApi.md#systeminsights_list_interface_addresses) | **GET** /systeminsights/interface_addresses | List System Insights Interface Addresses
+[**systeminsights_list_interface_addresses_0**](SystemInsightsApi.md#systeminsights_list_interface_addresses_0) | **GET** /systeminsights/{jc_system_id}/interface_addresses | List System Insights System Interface Addresses
+[**systeminsights_list_mounts**](SystemInsightsApi.md#systeminsights_list_mounts) | **GET** /systeminsights/mounts | List System Insights Mounts
+[**systeminsights_list_mounts_0**](SystemInsightsApi.md#systeminsights_list_mounts_0) | **GET** /systeminsights/{jc_system_id}/mounts | List System Insights System Mounts
+[**systeminsights_list_os_version**](SystemInsightsApi.md#systeminsights_list_os_version) | **GET** /systeminsights/{jc_system_id}/os_version | List System Insights System OS Version
+[**systeminsights_list_os_version_0**](SystemInsightsApi.md#systeminsights_list_os_version_0) | **GET** /systeminsights/os_version | List System Insights OS Version
+[**systeminsights_list_safari_extensions**](SystemInsightsApi.md#systeminsights_list_safari_extensions) | **GET** /systeminsights/{jc_system_id}/safari_extensions | List System Insights System Safari Extensions
+[**systeminsights_list_safari_extensions_0**](SystemInsightsApi.md#systeminsights_list_safari_extensions_0) | **GET** /systeminsights/safari_extensions | List System Insights Safari Extensions
+[**systeminsights_list_system_info**](SystemInsightsApi.md#systeminsights_list_system_info) | **GET** /systeminsights/system_info | List System Insights System Info
+[**systeminsights_list_system_info_0**](SystemInsightsApi.md#systeminsights_list_system_info_0) | **GET** /systeminsights/{jc_system_id}/system_info | List System Insights System System Info
+[**systeminsights_list_users**](SystemInsightsApi.md#systeminsights_list_users) | **GET** /systeminsights/users | List System Insights Users
+[**systeminsights_list_users_0**](SystemInsightsApi.md#systeminsights_list_users_0) | **GET** /systeminsights/{jc_system_id}/users | List System Insights System Users
+
+
+# **systeminsights_list_apps**
+> Array&lt;SystemInsightsApps&gt; systeminsights_list_apps(opts)
+
+List System Insights Apps
+
+Valid filter fields are `jc_system_id` and `bundle_name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Apps
+  result = api_instance.systeminsights_list_apps(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_apps: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsApps&gt;**](SystemInsightsApps.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_apps_0**
+> Array&lt;SystemInsightsApps&gt; systeminsights_list_apps_0(jc_system_id, opts)
+
+List System Insights System Apps
+
+Valid filter fields are `bundle_name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Apps
+  result = api_instance.systeminsights_list_apps_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_apps_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsApps&gt;**](SystemInsightsApps.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_browser_plugins**
+> Array&lt;SystemInsightsBrowserPlugins&gt; systeminsights_list_browser_plugins(jc_system_id, opts)
+
+List System Insights System Browser Plugins
+
+Valid filter fields are `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Browser Plugins
+  result = api_instance.systeminsights_list_browser_plugins(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_browser_plugins: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsBrowserPlugins&gt;**](SystemInsightsBrowserPlugins.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_browser_plugins_0**
+> Array&lt;SystemInsightsBrowserPlugins&gt; systeminsights_list_browser_plugins_0(opts)
+
+List System Insights Browser Plugins
+
+Valid filter fields are `jc_system_id` and `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Browser Plugins
+  result = api_instance.systeminsights_list_browser_plugins_0(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_browser_plugins_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsBrowserPlugins&gt;**](SystemInsightsBrowserPlugins.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_chrome_extensions**
+> Array&lt;SystemInsightsChromeExtensions&gt; systeminsights_list_chrome_extensions(jc_system_id, opts)
+
+List System Insights System Chrome Extensions
+
+Valid filter fields are `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Chrome Extensions
+  result = api_instance.systeminsights_list_chrome_extensions(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_chrome_extensions: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsChromeExtensions&gt;**](SystemInsightsChromeExtensions.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_chrome_extensions_0**
+> Array&lt;SystemInsightsChromeExtensions&gt; systeminsights_list_chrome_extensions_0(opts)
+
+List System Insights Chrome Extensions
+
+Valid filter fields are `jc_system_id` and `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Chrome Extensions
+  result = api_instance.systeminsights_list_chrome_extensions_0(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_chrome_extensions_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsChromeExtensions&gt;**](SystemInsightsChromeExtensions.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_disk_encryption**
+> Array&lt;SystemInsightsDiskEncryption&gt; systeminsights_list_disk_encryption(opts)
+
+List System Insights Disk Encryption
+
+Valid filter fields are `jc_system_id` and `encryption_status`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Disk Encryption
+  result = api_instance.systeminsights_list_disk_encryption(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_disk_encryption: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsDiskEncryption&gt;**](SystemInsightsDiskEncryption.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_disk_encryption_0**
+> Array&lt;SystemInsightsDiskEncryption&gt; systeminsights_list_disk_encryption_0(jc_system_id, opts)
+
+List System Insights System Disk Encryption
+
+Valid filter fields are `encryption_status`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Disk Encryption
+  result = api_instance.systeminsights_list_disk_encryption_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_disk_encryption_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsDiskEncryption&gt;**](SystemInsightsDiskEncryption.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_firefox_addons**
+> Array&lt;SystemInsightsFirefoxAddons&gt; systeminsights_list_firefox_addons(opts)
+
+List System Insights Firefox Addons
+
+Valid filter fields are `jc_system_id` and `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Firefox Addons
+  result = api_instance.systeminsights_list_firefox_addons(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_firefox_addons: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsFirefoxAddons&gt;**](SystemInsightsFirefoxAddons.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_firefox_addons_0**
+> Array&lt;SystemInsightsFirefoxAddons&gt; systeminsights_list_firefox_addons_0(jc_system_id, opts)
+
+List System Insights System Firefox Addons
+
+Valid filter fields are `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Firefox Addons
+  result = api_instance.systeminsights_list_firefox_addons_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_firefox_addons_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsFirefoxAddons&gt;**](SystemInsightsFirefoxAddons.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_groups**
+> Array&lt;SystemInsightsGroups&gt; systeminsights_list_groups(opts)
+
+List System Insights Groups
+
+Valid filter fields are `jc_system_id` and `groupname`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Groups
+  result = api_instance.systeminsights_list_groups(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_groups: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsGroups&gt;**](SystemInsightsGroups.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_groups_0**
+> Array&lt;SystemInsightsGroups&gt; systeminsights_list_groups_0(jc_system_id, opts)
+
+List System Insights System Groups
+
+Valid filter fields are `groupname`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Groups
+  result = api_instance.systeminsights_list_groups_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_groups_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsGroups&gt;**](SystemInsightsGroups.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_interface_addresses**
+> Array&lt;SystemInsightsInterfaceAddresses&gt; systeminsights_list_interface_addresses(opts)
+
+List System Insights Interface Addresses
+
+Valid filter fields are `jc_system_id` and `address`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Interface Addresses
+  result = api_instance.systeminsights_list_interface_addresses(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_interface_addresses: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsInterfaceAddresses&gt;**](SystemInsightsInterfaceAddresses.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_interface_addresses_0**
+> Array&lt;SystemInsightsInterfaceAddresses&gt; systeminsights_list_interface_addresses_0(jc_system_id, opts)
+
+List System Insights System Interface Addresses
+
+Valid filter fields are `address`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Interface Addresses
+  result = api_instance.systeminsights_list_interface_addresses_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_interface_addresses_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsInterfaceAddresses&gt;**](SystemInsightsInterfaceAddresses.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_mounts**
+> Array&lt;SystemInsightsMounts&gt; systeminsights_list_mounts(opts)
+
+List System Insights Mounts
+
+Valid filter fields are `jc_system_id` and `path`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Mounts
+  result = api_instance.systeminsights_list_mounts(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_mounts: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsMounts&gt;**](SystemInsightsMounts.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_mounts_0**
+> Array&lt;SystemInsightsMounts&gt; systeminsights_list_mounts_0(jc_system_id, opts)
+
+List System Insights System Mounts
+
+Valid filter fields are `path`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Mounts
+  result = api_instance.systeminsights_list_mounts_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_mounts_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsMounts&gt;**](SystemInsightsMounts.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_os_version**
+> Array&lt;SystemInsightsOsVersion&gt; systeminsights_list_os_version(jc_system_id, opts)
+
+List System Insights System OS Version
+
+Valid filter fields are `version`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System OS Version
+  result = api_instance.systeminsights_list_os_version(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_os_version: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsOsVersion&gt;**](SystemInsightsOsVersion.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_os_version_0**
+> Array&lt;SystemInsightsOsVersion&gt; systeminsights_list_os_version_0(opts)
+
+List System Insights OS Version
+
+Valid filter fields are `jc_system_id` and `version`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights OS Version
+  result = api_instance.systeminsights_list_os_version_0(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_os_version_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsOsVersion&gt;**](SystemInsightsOsVersion.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_safari_extensions**
+> Array&lt;SystemInsightsSafariExtensions&gt; systeminsights_list_safari_extensions(jc_system_id, opts)
+
+List System Insights System Safari Extensions
+
+Valid filter fields are `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Safari Extensions
+  result = api_instance.systeminsights_list_safari_extensions(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_safari_extensions: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsSafariExtensions&gt;**](SystemInsightsSafariExtensions.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_safari_extensions_0**
+> Array&lt;SystemInsightsSafariExtensions&gt; systeminsights_list_safari_extensions_0(opts)
+
+List System Insights Safari Extensions
+
+Valid filter fields are `jc_system_id` and `name`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Safari Extensions
+  result = api_instance.systeminsights_list_safari_extensions_0(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_safari_extensions_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsSafariExtensions&gt;**](SystemInsightsSafariExtensions.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_system_info**
+> Array&lt;SystemInsightsSystemInfo&gt; systeminsights_list_system_info(opts)
+
+List System Insights System Info
+
+Valid filter fields are `jc_system_id` and `cpu_subtype`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Info
+  result = api_instance.systeminsights_list_system_info(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_system_info: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsSystemInfo&gt;**](SystemInsightsSystemInfo.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_system_info_0**
+> Array&lt;SystemInsightsSystemInfo&gt; systeminsights_list_system_info_0(jc_system_id, opts)
+
+List System Insights System System Info
+
+Valid filter fields are `cpu_subtype`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System System Info
+  result = api_instance.systeminsights_list_system_info_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_system_info_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsSystemInfo&gt;**](SystemInsightsSystemInfo.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_users**
+> Array&lt;SystemInsightsUsers&gt; systeminsights_list_users(opts)
+
+List System Insights Users
+
+Valid filter fields are `jc_system_id` and `username`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights Users
+  result = api_instance.systeminsights_list_users(opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_users: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsUsers&gt;**](SystemInsightsUsers.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
+# **systeminsights_list_users_0**
+> Array&lt;SystemInsightsUsers&gt; systeminsights_list_users_0(jc_system_id, opts)
+
+List System Insights System Users
+
+Valid filter fields are `username`.
+
+### Example
+```ruby
+# load the gem
+require 'jcapiv2'
+
+api_instance = JCAPIv2::SystemInsightsApi.new
+
+jc_system_id = "jc_system_id_example" # String | 
+
+opts = { 
+  limit: 10, # Integer | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"] # Array<String> | Supported operators are: eq
+}
+
+begin
+  #List System Insights System Users
+  result = api_instance.systeminsights_list_users_0(jc_system_id, opts)
+  p result
+rescue JCAPIv2::ApiError => e
+  puts "Exception when calling SystemInsightsApi->systeminsights_list_users_0: #{e}"
+end
+```
+
+### Parameters
+
+Name | Type | Description  | Notes
+------------- | ------------- | ------------- | -------------
+ **jc_system_id** | **String**|  | 
+ **limit** | **Integer**|  | [optional] [default to 10]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq | [optional] 
+
+### Return type
+
+[**Array&lt;SystemInsightsUsers&gt;**](SystemInsightsUsers.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+
diff --git a/jcapiv2/docs/SystemInsightsApps.md b/jcapiv2/docs/SystemInsightsApps.md
new file mode 100644
index 0000000..c8b7ac1
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsApps.md
@@ -0,0 +1,29 @@
+# JCAPIv2::SystemInsightsApps
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **String** |  | [optional] 
+**path** | **String** |  | [optional] 
+**bundle_executable** | **String** |  | [optional] 
+**bundle_identifier** | **String** |  | [optional] 
+**bundle_name** | **String** |  | [optional] 
+**bundle_short_version** | **String** |  | [optional] 
+**bundle_version** | **String** |  | [optional] 
+**bundle_package_type** | **String** |  | [optional] 
+**environment** | **String** |  | [optional] 
+**element** | **String** |  | [optional] 
+**compiler** | **String** |  | [optional] 
+**development_region** | **String** |  | [optional] 
+**display_name** | **String** |  | [optional] 
+**info_string** | **String** |  | [optional] 
+**minimum_system_version** | **String** |  | [optional] 
+**category** | **String** |  | [optional] 
+**applescript_enabled** | **String** |  | [optional] 
+**copyright** | **String** |  | [optional] 
+**last_opened_time** | **Float** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsBrowserPlugins.md b/jcapiv2/docs/SystemInsightsBrowserPlugins.md
new file mode 100644
index 0000000..8b8af60
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsBrowserPlugins.md
@@ -0,0 +1,20 @@
+# JCAPIv2::SystemInsightsBrowserPlugins
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uid** | **String** |  | [optional] 
+**name** | **String** |  | [optional] 
+**identifier** | **String** |  | [optional] 
+**version** | **String** |  | [optional] 
+**sdk** | **String** |  | [optional] 
+**description** | **String** |  | [optional] 
+**development_region** | **String** |  | [optional] 
+**native** | **Integer** |  | [optional] 
+**path** | **String** |  | [optional] 
+**disabled** | **Integer** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsChromeExtensions.md b/jcapiv2/docs/SystemInsightsChromeExtensions.md
new file mode 100644
index 0000000..4b80445
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsChromeExtensions.md
@@ -0,0 +1,21 @@
+# JCAPIv2::SystemInsightsChromeExtensions
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uid** | **String** |  | [optional] 
+**name** | **String** |  | [optional] 
+**identifier** | **String** |  | [optional] 
+**version** | **String** |  | [optional] 
+**description** | **String** |  | [optional] 
+**locale** | **String** |  | [optional] 
+**update_url** | **String** |  | [optional] 
+**author** | **String** |  | [optional] 
+**persistent** | **Integer** |  | [optional] 
+**path** | **String** |  | [optional] 
+**permissions** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsDiskEncryption.md b/jcapiv2/docs/SystemInsightsDiskEncryption.md
new file mode 100644
index 0000000..0a3c895
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsDiskEncryption.md
@@ -0,0 +1,17 @@
+# JCAPIv2::SystemInsightsDiskEncryption
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **String** |  | [optional] 
+**uuid** | **String** |  | [optional] 
+**encrypted** | **Integer** |  | [optional] 
+**type** | **String** |  | [optional] 
+**uid** | **String** |  | [optional] 
+**user_uuid** | **String** |  | [optional] 
+**encryption_status** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsFirefoxAddons.md b/jcapiv2/docs/SystemInsightsFirefoxAddons.md
new file mode 100644
index 0000000..5675935
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsFirefoxAddons.md
@@ -0,0 +1,24 @@
+# JCAPIv2::SystemInsightsFirefoxAddons
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uid** | **String** |  | [optional] 
+**name** | **String** |  | [optional] 
+**identifier** | **String** |  | [optional] 
+**creator** | **String** |  | [optional] 
+**type** | **String** |  | [optional] 
+**version** | **String** |  | [optional] 
+**description** | **String** |  | [optional] 
+**source_url** | **String** |  | [optional] 
+**visible** | **Integer** |  | [optional] 
+**active** | **Integer** |  | [optional] 
+**disabled** | **Integer** |  | [optional] 
+**autoupdate** | **Integer** |  | [optional] 
+**location** | **String** |  | [optional] 
+**path** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsGroups.md b/jcapiv2/docs/SystemInsightsGroups.md
new file mode 100644
index 0000000..db6a5b3
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsGroups.md
@@ -0,0 +1,15 @@
+# JCAPIv2::SystemInsightsGroups
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**gid** | **String** |  | [optional] 
+**gid_signed** | **String** |  | [optional] 
+**groupname** | **String** |  | [optional] 
+**group_sid** | **String** |  | [optional] 
+**comment** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsInterfaceAddresses.md b/jcapiv2/docs/SystemInsightsInterfaceAddresses.md
new file mode 100644
index 0000000..60a42ca
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsInterfaceAddresses.md
@@ -0,0 +1,17 @@
+# JCAPIv2::SystemInsightsInterfaceAddresses
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**interface** | **String** |  | [optional] 
+**address** | **String** |  | [optional] 
+**mask** | **String** |  | [optional] 
+**broadcast** | **String** |  | [optional] 
+**point_to_point** | **String** |  | [optional] 
+**type** | **String** |  | [optional] 
+**friendly_name** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsMounts.md b/jcapiv2/docs/SystemInsightsMounts.md
new file mode 100644
index 0000000..90fb95c
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsMounts.md
@@ -0,0 +1,21 @@
+# JCAPIv2::SystemInsightsMounts
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**device** | **String** |  | [optional] 
+**device_alias** | **String** |  | [optional] 
+**path** | **String** |  | [optional] 
+**type** | **String** |  | [optional] 
+**blocks_size** | **String** |  | [optional] 
+**blocks** | **String** |  | [optional] 
+**blocks_free** | **String** |  | [optional] 
+**blocks_available** | **String** |  | [optional] 
+**inodes** | **String** |  | [optional] 
+**inodes_free** | **String** |  | [optional] 
+**flags** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsOsVersion.md b/jcapiv2/docs/SystemInsightsOsVersion.md
new file mode 100644
index 0000000..db29a4d
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsOsVersion.md
@@ -0,0 +1,20 @@
+# JCAPIv2::SystemInsightsOsVersion
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**name** | **String** |  | [optional] 
+**version** | **String** |  | [optional] 
+**major** | **Integer** |  | [optional] 
+**minor** | **Integer** |  | [optional] 
+**patch** | **Integer** |  | [optional] 
+**build** | **String** |  | [optional] 
+**platform** | **String** |  | [optional] 
+**platform_like** | **String** |  | [optional] 
+**codename** | **String** |  | [optional] 
+**install_date** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsSafariExtensions.md b/jcapiv2/docs/SystemInsightsSafariExtensions.md
new file mode 100644
index 0000000..a94174a
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsSafariExtensions.md
@@ -0,0 +1,20 @@
+# JCAPIv2::SystemInsightsSafariExtensions
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uid** | **String** |  | [optional] 
+**name** | **String** |  | [optional] 
+**identifier** | **String** |  | [optional] 
+**version** | **String** |  | [optional] 
+**sdk** | **String** |  | [optional] 
+**update_url** | **String** |  | [optional] 
+**author** | **String** |  | [optional] 
+**developer_id** | **String** |  | [optional] 
+**description** | **String** |  | [optional] 
+**path** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsSystemInfo.md b/jcapiv2/docs/SystemInsightsSystemInfo.md
new file mode 100644
index 0000000..2e55d47
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsSystemInfo.md
@@ -0,0 +1,25 @@
+# JCAPIv2::SystemInsightsSystemInfo
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**hostname** | **String** |  | [optional] 
+**uuid** | **String** |  | [optional] 
+**cpu_type** | **String** |  | [optional] 
+**cpu_subtype** | **String** |  | [optional] 
+**cpu_brand** | **String** |  | [optional] 
+**cpu_physical_cores** | **Integer** |  | [optional] 
+**cpu_logical_cores** | **Integer** |  | [optional] 
+**cpu_microcode** | **String** |  | [optional] 
+**physical_memory** | **String** |  | [optional] 
+**hardware_vendor** | **String** |  | [optional] 
+**hardware_model** | **String** |  | [optional] 
+**hardware_version** | **String** |  | [optional] 
+**hardware_serial** | **String** |  | [optional] 
+**computer_name** | **String** |  | [optional] 
+**local_hostname** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemInsightsUsers.md b/jcapiv2/docs/SystemInsightsUsers.md
new file mode 100644
index 0000000..a35b167
--- /dev/null
+++ b/jcapiv2/docs/SystemInsightsUsers.md
@@ -0,0 +1,20 @@
+# JCAPIv2::SystemInsightsUsers
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**uid** | **String** |  | [optional] 
+**gid** | **String** |  | [optional] 
+**uid_signed** | **String** |  | [optional] 
+**gid_signed** | **String** |  | [optional] 
+**username** | **String** |  | [optional] 
+**description** | **String** |  | [optional] 
+**directory** | **String** |  | [optional] 
+**shell** | **String** |  | [optional] 
+**uuid** | **String** |  | [optional] 
+**type** | **String** |  | [optional] 
+**jc_collection_time** | **String** |  | [optional] 
+**jc_system_id** | **String** |  | [optional] 
+**jc_organization_id** | **String** |  | [optional] 
+
+
diff --git a/jcapiv2/docs/SystemsApi.md b/jcapiv2/docs/SystemsApi.md
index 3cd3a02..6445d52 100644
--- a/jcapiv2/docs/SystemsApi.md
+++ b/jcapiv2/docs/SystemsApi.md
@@ -263,8 +263,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -284,8 +285,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -331,8 +333,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -352,8 +355,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -473,10 +477,11 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
+  x_org_id: "" # String | 
   skip: 0, # Integer | The offset into the records to return.
   date: "date_example", # String | Current date header for the System Context API
   authorization: "authorization_example", # String | Authorization header for the System Context API
-  x_org_id: "" # String | 
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -496,10 +501,11 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
+ **x_org_id** | **String**|  | [optional] [default to ]
  **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **date** | **String**| Current date header for the System Context API | [optional] 
  **authorization** | **String**| Authorization header for the System Context API | [optional] 
- **x_org_id** | **String**|  | [optional] [default to ]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/UserGroupAssociationsApi.md b/jcapiv2/docs/UserGroupAssociationsApi.md
index f3f0083..8c96c50 100644
--- a/jcapiv2/docs/UserGroupAssociationsApi.md
+++ b/jcapiv2/docs/UserGroupAssociationsApi.md
@@ -182,8 +182,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -203,8 +204,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -250,8 +252,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -271,8 +274,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -318,8 +322,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -339,8 +344,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -386,8 +392,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -407,8 +414,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -454,8 +462,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -475,8 +484,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -522,8 +532,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -543,8 +554,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -590,8 +602,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -611,8 +624,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -658,8 +672,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -679,8 +694,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -726,8 +742,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -747,8 +764,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/UserGroupsApi.md b/jcapiv2/docs/UserGroupsApi.md
index 9b01b8d..4da88e1 100644
--- a/jcapiv2/docs/UserGroupsApi.md
+++ b/jcapiv2/docs/UserGroupsApi.md
@@ -469,8 +469,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -490,8 +491,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -537,8 +539,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -558,8 +561,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -605,8 +609,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -626,8 +631,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -673,8 +679,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -694,8 +701,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -741,8 +749,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -762,8 +771,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -809,8 +819,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -830,8 +841,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -877,8 +889,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -898,8 +911,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -945,8 +959,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -966,8 +981,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -1013,8 +1029,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -1034,8 +1051,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/docs/UsersApi.md b/jcapiv2/docs/UsersApi.md
index efe24b0..5a86110 100644
--- a/jcapiv2/docs/UsersApi.md
+++ b/jcapiv2/docs/UsersApi.md
@@ -255,8 +255,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -276,8 +277,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -323,8 +325,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -344,8 +347,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -391,8 +395,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -412,8 +417,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -459,8 +465,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -480,8 +487,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -527,8 +535,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -548,8 +557,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -595,8 +605,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -616,8 +627,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
@@ -733,8 +745,9 @@ accept = "application/json" # String |
 
 opts = { 
   limit: 10, # Integer | The number of records to return at once. Limited to 100.
-  skip: 0, # Integer | The offset into the records to return.
   x_org_id: "" # String | 
+  skip: 0, # Integer | The offset into the records to return.
+  filter: ["filter_example"], # Array<String> | Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
 }
 
 begin
@@ -754,8 +767,9 @@ Name | Type | Description  | Notes
  **content_type** | **String**|  | [default to application/json]
  **accept** | **String**|  | [default to application/json]
  **limit** | **Integer**| The number of records to return at once. Limited to 100. | [optional] [default to 10]
- **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
  **x_org_id** | **String**|  | [optional] [default to ]
+ **skip** | **Integer**| The offset into the records to return. | [optional] [default to 0]
+ **filter** | [**Array&lt;String&gt;**](String.md)| Supported operators are: eq, ne, gt, ge, lt, le, between, search, in | [optional] 
 
 ### Return type
 
diff --git a/jcapiv2/lib/jcapiv2.rb b/jcapiv2/lib/jcapiv2.rb
index d209e2b..2f008a3 100644
--- a/jcapiv2/lib/jcapiv2.rb
+++ b/jcapiv2/lib/jcapiv2.rb
@@ -17,6 +17,9 @@
 require 'jcapiv2/configuration'
 
 # Models
+require 'jcapiv2/models/active_directory_agent_get_output'
+require 'jcapiv2/models/active_directory_agent_input'
+require 'jcapiv2/models/active_directory_agent_list_output'
 require 'jcapiv2/models/active_directory_input'
 require 'jcapiv2/models/administrator'
 require 'jcapiv2/models/auth_info'
@@ -24,6 +27,7 @@
 require 'jcapiv2/models/auth_input_object'
 require 'jcapiv2/models/authinput_basic'
 require 'jcapiv2/models/authinput_oauth'
+require 'jcapiv2/models/body'
 require 'jcapiv2/models/bulk_user_create'
 require 'jcapiv2/models/bulk_user_update'
 require 'jcapiv2/models/directory'
@@ -40,17 +44,23 @@
 require 'jcapiv2/models/graph_type'
 require 'jcapiv2/models/group'
 require 'jcapiv2/models/group_type'
+require 'jcapiv2/models/gsuite_output'
+require 'jcapiv2/models/gsuite_patch_input'
 require 'jcapiv2/models/inline_response_200'
-require 'jcapiv2/models/inline_response_401'
+require 'jcapiv2/models/inline_response_200_1'
+require 'jcapiv2/models/inline_response_400'
 require 'jcapiv2/models/job_details'
 require 'jcapiv2/models/job_id'
 require 'jcapiv2/models/job_workresult'
+require 'jcapiv2/models/ldap_server_action'
 require 'jcapiv2/models/ldap_server_input'
 require 'jcapiv2/models/mfa'
 require 'jcapiv2/models/oauth_code_input'
 require 'jcapiv2/models/office365_builtin_translation'
 require 'jcapiv2/models/office365_translation_rule'
 require 'jcapiv2/models/office365_translation_rule_request'
+require 'jcapiv2/models/org_crypto_settings'
+require 'jcapiv2/models/orgcryptosettings_ssh_keys'
 require 'jcapiv2/models/policy'
 require 'jcapiv2/models/policy_request'
 require 'jcapiv2/models/policy_request_template'
@@ -74,6 +84,18 @@
 require 'jcapiv2/models/system_group_data'
 require 'jcapiv2/models/system_group_graph_management_req'
 require 'jcapiv2/models/system_group_members_req'
+require 'jcapiv2/models/system_insights_apps'
+require 'jcapiv2/models/system_insights_browser_plugins'
+require 'jcapiv2/models/system_insights_chrome_extensions'
+require 'jcapiv2/models/system_insights_disk_encryption'
+require 'jcapiv2/models/system_insights_firefox_addons'
+require 'jcapiv2/models/system_insights_groups'
+require 'jcapiv2/models/system_insights_interface_addresses'
+require 'jcapiv2/models/system_insights_mounts'
+require 'jcapiv2/models/system_insights_os_version'
+require 'jcapiv2/models/system_insights_safari_extensions'
+require 'jcapiv2/models/system_insights_system_info'
+require 'jcapiv2/models/system_insights_users'
 require 'jcapiv2/models/systemfdekey'
 require 'jcapiv2/models/systemuser'
 require 'jcapiv2/models/systemuserputpost'
@@ -110,6 +132,7 @@
 require 'jcapiv2/api/groups_api'
 require 'jcapiv2/api/ldap_servers_api'
 require 'jcapiv2/api/office365_api'
+require 'jcapiv2/api/organizations_api'
 require 'jcapiv2/api/policies_api'
 require 'jcapiv2/api/policytemplates_api'
 require 'jcapiv2/api/providers_api'
@@ -118,6 +141,7 @@
 require 'jcapiv2/api/system_group_associations_api'
 require 'jcapiv2/api/system_group_members_membership_api'
 require 'jcapiv2/api/system_groups_api'
+require 'jcapiv2/api/system_insights_api'
 require 'jcapiv2/api/systems_api'
 require 'jcapiv2/api/user_group_associations_api'
 require 'jcapiv2/api/user_group_members_membership_api'
diff --git a/jcapiv2/lib/jcapiv2/api/active_directory_api.rb b/jcapiv2/lib/jcapiv2/api/active_directory_api.rb
index 9dc1dbe..dd1ee24 100644
--- a/jcapiv2/lib/jcapiv2/api/active_directory_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/active_directory_api.rb
@@ -20,6 +20,320 @@ def initialize(api_client = ApiClient.default)
       @api_client = api_client
     end
 
+    # Delete Active Directory Agent
+    # 
+    # @param activedirectory_id 
+    # @param agent_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [String] :x_org_id  (default to )
+    # @return [nil]
+    def activedirectories_agents_delete(activedirectory_id, agent_id, content_type, accept, opts = {})
+      activedirectories_agents_delete_with_http_info(activedirectory_id, agent_id, content_type, accept, opts)
+      return nil
+    end
+
+    # Delete Active Directory Agent
+    # 
+    # @param activedirectory_id 
+    # @param agent_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [String] :x_org_id 
+    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
+    def activedirectories_agents_delete_with_http_info(activedirectory_id, agent_id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: ActiveDirectoryApi.activedirectories_agents_delete ..."
+      end
+      # verify the required parameter 'activedirectory_id' is set
+      if @api_client.config.client_side_validation && activedirectory_id.nil?
+        fail ArgumentError, "Missing the required parameter 'activedirectory_id' when calling ActiveDirectoryApi.activedirectories_agents_delete"
+      end
+      # verify the required parameter 'agent_id' is set
+      if @api_client.config.client_side_validation && agent_id.nil?
+        fail ArgumentError, "Missing the required parameter 'agent_id' when calling ActiveDirectoryApi.activedirectories_agents_delete"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling ActiveDirectoryApi.activedirectories_agents_delete"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling ActiveDirectoryApi.activedirectories_agents_delete"
+      end
+      # resource path
+      local_var_path = "/activedirectories/{activedirectory_id}/agents/{agent_id}".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s).sub('{' + 'agent_id' + '}', agent_id.to_s)
+
+      # query parameters
+      query_params = {}
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:DELETE, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names)
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: ActiveDirectoryApi#activedirectories_agents_delete\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # Get Active Directory Agent
+    # This endpoint returns a specific active directory agent.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents/{agent_id} \\   -H 'accept: application/json' \\   -H 'content-type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+    # @param activedirectory_id 
+    # @param agent_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [String] :x_org_id  (default to )
+    # @return [ActiveDirectoryAgentListOutput]
+    def activedirectories_agents_get(activedirectory_id, agent_id, content_type, accept, opts = {})
+      data, _status_code, _headers = activedirectories_agents_get_with_http_info(activedirectory_id, agent_id, content_type, accept, opts)
+      return data
+    end
+
+    # Get Active Directory Agent
+    # This endpoint returns a specific active directory agent.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents/{agent_id} \\   -H &#39;accept: application/json&#39; \\   -H &#39;content-type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+    # @param activedirectory_id 
+    # @param agent_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [String] :x_org_id 
+    # @return [Array<(ActiveDirectoryAgentListOutput, Fixnum, Hash)>] ActiveDirectoryAgentListOutput data, response status code and response headers
+    def activedirectories_agents_get_with_http_info(activedirectory_id, agent_id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: ActiveDirectoryApi.activedirectories_agents_get ..."
+      end
+      # verify the required parameter 'activedirectory_id' is set
+      if @api_client.config.client_side_validation && activedirectory_id.nil?
+        fail ArgumentError, "Missing the required parameter 'activedirectory_id' when calling ActiveDirectoryApi.activedirectories_agents_get"
+      end
+      # verify the required parameter 'agent_id' is set
+      if @api_client.config.client_side_validation && agent_id.nil?
+        fail ArgumentError, "Missing the required parameter 'agent_id' when calling ActiveDirectoryApi.activedirectories_agents_get"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling ActiveDirectoryApi.activedirectories_agents_get"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling ActiveDirectoryApi.activedirectories_agents_get"
+      end
+      # resource path
+      local_var_path = "/activedirectories/{activedirectory_id}/agents/{agent_id}".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s).sub('{' + 'agent_id' + '}', agent_id.to_s)
+
+      # query parameters
+      query_params = {}
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'ActiveDirectoryAgentListOutput')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: ActiveDirectoryApi#activedirectories_agents_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List Active Directory Agents
+    # This endpoint allows you to list all your Active Directory Agents for a given Instance.  #### Sample Request ``` curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H 'accept: application/json' \\   -H 'content-type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+    # @param activedirectory_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+    # @option opts [String] :x_org_id  (default to )
+    # @return [Array<ActiveDirectoryAgentListOutput>]
+    def activedirectories_agents_list(activedirectory_id, content_type, accept, opts = {})
+      data, _status_code, _headers = activedirectories_agents_list_with_http_info(activedirectory_id, content_type, accept, opts)
+      return data
+    end
+
+    # List Active Directory Agents
+    # This endpoint allows you to list all your Active Directory Agents for a given Instance.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H &#39;accept: application/json&#39; \\   -H &#39;content-type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+    # @param activedirectory_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+    # @option opts [String] :x_org_id 
+    # @return [Array<(Array<ActiveDirectoryAgentListOutput>, Fixnum, Hash)>] Array<ActiveDirectoryAgentListOutput> data, response status code and response headers
+    def activedirectories_agents_list_with_http_info(activedirectory_id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: ActiveDirectoryApi.activedirectories_agents_list ..."
+      end
+      # verify the required parameter 'activedirectory_id' is set
+      if @api_client.config.client_side_validation && activedirectory_id.nil?
+        fail ArgumentError, "Missing the required parameter 'activedirectory_id' when calling ActiveDirectoryApi.activedirectories_agents_list"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling ActiveDirectoryApi.activedirectories_agents_list"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling ActiveDirectoryApi.activedirectories_agents_list"
+      end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ActiveDirectoryApi.activedirectories_agents_list, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/activedirectories/{activedirectory_id}/agents".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'sort'] = @api_client.build_collection_param(opts[:'sort'], :csv) if !opts[:'sort'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = ['x-api-key']
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<ActiveDirectoryAgentListOutput>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: ActiveDirectoryApi#activedirectories_agents_list\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # Create a new Active Directory Agent
+    # This endpoint allows you to create a new Active Directory Agent.   #### Sample Request ``` curl -X POST https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H 'accept: application/json' \\   -H 'content-type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{}' ```
+    # @param activedirectory_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [ActiveDirectoryAgentInput] :body 
+    # @option opts [String] :x_org_id  (default to )
+    # @return [ActiveDirectoryAgentGetOutput]
+    def activedirectories_agents_post(activedirectory_id, content_type, accept, opts = {})
+      data, _status_code, _headers = activedirectories_agents_post_with_http_info(activedirectory_id, content_type, accept, opts)
+      return data
+    end
+
+    # Create a new Active Directory Agent
+    # This endpoint allows you to create a new Active Directory Agent.   #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H &#39;accept: application/json&#39; \\   -H &#39;content-type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{}&#39; &#x60;&#x60;&#x60;
+    # @param activedirectory_id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [ActiveDirectoryAgentInput] :body 
+    # @option opts [String] :x_org_id 
+    # @return [Array<(ActiveDirectoryAgentGetOutput, Fixnum, Hash)>] ActiveDirectoryAgentGetOutput data, response status code and response headers
+    def activedirectories_agents_post_with_http_info(activedirectory_id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: ActiveDirectoryApi.activedirectories_agents_post ..."
+      end
+      # verify the required parameter 'activedirectory_id' is set
+      if @api_client.config.client_side_validation && activedirectory_id.nil?
+        fail ArgumentError, "Missing the required parameter 'activedirectory_id' when calling ActiveDirectoryApi.activedirectories_agents_post"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling ActiveDirectoryApi.activedirectories_agents_post"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling ActiveDirectoryApi.activedirectories_agents_post"
+      end
+      # resource path
+      local_var_path = "/activedirectories/{activedirectory_id}/agents".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s)
+
+      # query parameters
+      query_params = {}
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = @api_client.object_to_http_body(opts[:'body'])
+      auth_names = ['x-api-key']
+      data, status_code, headers = @api_client.call_api(:POST, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'ActiveDirectoryAgentGetOutput')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: ActiveDirectoryApi#activedirectories_agents_post\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
     # Delete an Active Directory
     # This endpoint allows you to delete an Active Directory Instance.  #### Sample Request ``` curl -X DELETE https://console.jumpcloud.com/api/v2/activedirectories/{ActiveDirectory_ID} \\   -H 'accept: application/json' \\   -H 'content-type: application/json' \\   -H 'x-api-key: {API_KEY'   ```
     # @param id ObjectID of this Active Directory instance.
@@ -204,6 +518,10 @@ def activedirectories_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling ActiveDirectoryApi.activedirectories_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ActiveDirectoryApi.activedirectories_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/activedirectories"
 
@@ -359,6 +677,10 @@ def graph_active_directory_associations_list_with_http_info(activedirectory_id,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling ActiveDirectoryApi.graph_active_directory_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ActiveDirectoryApi.graph_active_directory_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/activedirectories/{activedirectory_id}/associations".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s)
 
@@ -477,8 +799,9 @@ def graph_active_directory_associations_post_with_http_info(activedirectory_id,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_active_directory_traverse_user_group(activedirectory_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_active_directory_traverse_user_group_with_http_info(activedirectory_id, content_type, accept, opts)
@@ -492,8 +815,9 @@ def graph_active_directory_traverse_user_group(activedirectory_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_active_directory_traverse_user_group_with_http_info(activedirectory_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -511,6 +835,10 @@ def graph_active_directory_traverse_user_group_with_http_info(activedirectory_id
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling ActiveDirectoryApi.graph_active_directory_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ActiveDirectoryApi.graph_active_directory_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/activedirectories/{activedirectory_id}/usergroups".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s)
 
@@ -518,6 +846,7 @@ def graph_active_directory_traverse_user_group_with_http_info(activedirectory_id
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/applications_api.rb b/jcapiv2/lib/jcapiv2/api/applications_api.rb
index 75ef44f..d926348 100644
--- a/jcapiv2/lib/jcapiv2/api/applications_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/applications_api.rb
@@ -67,6 +67,10 @@ def graph_application_associations_list_with_http_info(application_id, targets,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling ApplicationsApi.graph_application_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ApplicationsApi.graph_application_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/applications/{application_id}/associations".sub('{' + 'application_id' + '}', application_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_application_associations_post_with_http_info(application_id, content_t
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_application_traverse_user(application_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_application_traverse_user_with_http_info(application_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_application_traverse_user(application_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_application_traverse_user_with_http_info(application_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_application_traverse_user_with_http_info(application_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling ApplicationsApi.graph_application_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ApplicationsApi.graph_application_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/applications/{application_id}/users".sub('{' + 'application_id' + '}', application_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_application_traverse_user_with_http_info(application_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_application_traverse_user_with_http_info(application_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_application_traverse_user_group(application_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_application_traverse_user_group_with_http_info(application_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_application_traverse_user_group(application_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_application_traverse_user_group_with_http_info(application_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_application_traverse_user_group_with_http_info(application_id, content
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling ApplicationsApi.graph_application_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ApplicationsApi.graph_application_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/applications/{application_id}/usergroups".sub('{' + 'application_id' + '}', application_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_application_traverse_user_group_with_http_info(application_id, content
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/bulk_job_requests_api.rb b/jcapiv2/lib/jcapiv2/api/bulk_job_requests_api.rb
index 535f95a..0584659 100644
--- a/jcapiv2/lib/jcapiv2/api/bulk_job_requests_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/bulk_job_requests_api.rb
@@ -129,6 +129,10 @@ def bulk_users_create_results_with_http_info(job_id, content_type, accept, opts
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling BulkJobRequestsApi.bulk_users_create_results"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling BulkJobRequestsApi.bulk_users_create_results, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/bulk/users/{job_id}/results".sub('{' + 'job_id' + '}', job_id.to_s)
 
@@ -347,6 +351,10 @@ def jobs_results_with_http_info(id, content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling BulkJobRequestsApi.jobs_results"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling BulkJobRequestsApi.jobs_results, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/jobs/{id}/results".sub('{' + 'id' + '}', id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/api/commands_api.rb b/jcapiv2/lib/jcapiv2/api/commands_api.rb
index 3bd8642..248d107 100644
--- a/jcapiv2/lib/jcapiv2/api/commands_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/commands_api.rb
@@ -67,6 +67,10 @@ def graph_command_associations_list_with_http_info(command_id, targets, content_
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling CommandsApi.graph_command_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling CommandsApi.graph_command_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/commands/{command_id}/associations".sub('{' + 'command_id' + '}', command_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_command_associations_post_with_http_info(command_id, content_type, acc
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_command_traverse_system(command_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_command_traverse_system_with_http_info(command_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_command_traverse_system(command_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_command_traverse_system_with_http_info(command_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_command_traverse_system_with_http_info(command_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling CommandsApi.graph_command_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling CommandsApi.graph_command_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/commands/{command_id}/systems".sub('{' + 'command_id' + '}', command_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_command_traverse_system_with_http_info(command_id, content_type, accep
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_command_traverse_system_with_http_info(command_id, content_type, accep
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_command_traverse_system_group(command_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_command_traverse_system_group_with_http_info(command_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_command_traverse_system_group(command_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_command_traverse_system_group_with_http_info(command_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_command_traverse_system_group_with_http_info(command_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling CommandsApi.graph_command_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling CommandsApi.graph_command_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/commands/{command_id}/systemgroups".sub('{' + 'command_id' + '}', command_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_command_traverse_system_group_with_http_info(command_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/directories_api.rb b/jcapiv2/lib/jcapiv2/api/directories_api.rb
index 43a417a..50efb1f 100644
--- a/jcapiv2/lib/jcapiv2/api/directories_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/directories_api.rb
@@ -59,6 +59,10 @@ def directories_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling DirectoriesApi.directories_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling DirectoriesApi.directories_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/directories"
 
diff --git a/jcapiv2/lib/jcapiv2/api/g_suite_api.rb b/jcapiv2/lib/jcapiv2/api/g_suite_api.rb
index b39f6a3..335d783 100644
--- a/jcapiv2/lib/jcapiv2/api/g_suite_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/g_suite_api.rb
@@ -67,6 +67,10 @@ def graph_g_suite_associations_list_with_http_info(gsuite_id, targets, content_t
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GSuiteApi.graph_g_suite_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GSuiteApi.graph_g_suite_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/gsuites/{gsuite_id}/associations".sub('{' + 'gsuite_id' + '}', gsuite_id.to_s)
 
@@ -171,8 +175,9 @@ def graph_g_suite_associations_post_with_http_info(gsuite_id, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_g_suite_traverse_user(gsuite_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept, opts)
@@ -186,8 +191,9 @@ def graph_g_suite_traverse_user(gsuite_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -205,6 +211,10 @@ def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GSuiteApi.graph_g_suite_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GSuiteApi.graph_g_suite_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/gsuites/{gsuite_id}/users".sub('{' + 'gsuite_id' + '}', gsuite_id.to_s)
 
@@ -212,6 +222,7 @@ def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -249,8 +260,9 @@ def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_g_suite_traverse_user_group(gsuite_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, accept, opts)
@@ -264,8 +276,9 @@ def graph_g_suite_traverse_user_group(gsuite_id, content_type, accept, opts = {}
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -283,6 +296,10 @@ def graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, ac
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GSuiteApi.graph_g_suite_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GSuiteApi.graph_g_suite_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/gsuites/{gsuite_id}/usergroups".sub('{' + 'gsuite_id' + '}', gsuite_id.to_s)
 
@@ -290,6 +307,7 @@ def graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, ac
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -320,6 +338,152 @@ def graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, ac
       return data, status_code, headers
     end
 
+    # Get G Suite
+    # This endpoint returns a specific G Suite.  ##### Sample Request  ```  curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' ```
+    # @param id Unique identifier of the GSuite.
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [String] :x_org_id  (default to )
+    # @return [GsuiteOutput]
+    def gsuites_get(id, content_type, accept, opts = {})
+      data, _status_code, _headers = gsuites_get_with_http_info(id, content_type, accept, opts)
+      return data
+    end
+
+    # Get G Suite
+    # This endpoint returns a specific G Suite.  ##### Sample Request  &#x60;&#x60;&#x60;  curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
+    # @param id Unique identifier of the GSuite.
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [String] :x_org_id 
+    # @return [Array<(GsuiteOutput, Fixnum, Hash)>] GsuiteOutput data, response status code and response headers
+    def gsuites_get_with_http_info(id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: GSuiteApi.gsuites_get ..."
+      end
+      # verify the required parameter 'id' is set
+      if @api_client.config.client_side_validation && id.nil?
+        fail ArgumentError, "Missing the required parameter 'id' when calling GSuiteApi.gsuites_get"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling GSuiteApi.gsuites_get"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling GSuiteApi.gsuites_get"
+      end
+      # resource path
+      local_var_path = "/gsuites/{id}".sub('{' + 'id' + '}', id.to_s)
+
+      # query parameters
+      query_params = {}
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'GsuiteOutput')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: GSuiteApi#gsuites_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # Update existing G Suite
+    # This endpoint allows updating some attributes of a G Suite.  ##### Sample Request  ``` curl -X PATCH https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"userLockoutAction\": \"remove\",     \"userPasswordExpirationAction\": \"disable\"   }' ```
+    # @param id Unique identifier of the GSuite.
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [GsuitePatchInput] :body 
+    # @option opts [String] :x_org_id  (default to )
+    # @return [GsuiteOutput]
+    def gsuites_patch(id, content_type, accept, opts = {})
+      data, _status_code, _headers = gsuites_patch_with_http_info(id, content_type, accept, opts)
+      return data
+    end
+
+    # Update existing G Suite
+    # This endpoint allows updating some attributes of a G Suite.  ##### Sample Request  &#x60;&#x60;&#x60; curl -X PATCH https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;userLockoutAction\&quot;: \&quot;remove\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;disable\&quot;   }&#39; &#x60;&#x60;&#x60;
+    # @param id Unique identifier of the GSuite.
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [GsuitePatchInput] :body 
+    # @option opts [String] :x_org_id 
+    # @return [Array<(GsuiteOutput, Fixnum, Hash)>] GsuiteOutput data, response status code and response headers
+    def gsuites_patch_with_http_info(id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: GSuiteApi.gsuites_patch ..."
+      end
+      # verify the required parameter 'id' is set
+      if @api_client.config.client_side_validation && id.nil?
+        fail ArgumentError, "Missing the required parameter 'id' when calling GSuiteApi.gsuites_patch"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling GSuiteApi.gsuites_patch"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling GSuiteApi.gsuites_patch"
+      end
+      # resource path
+      local_var_path = "/gsuites/{id}".sub('{' + 'id' + '}', id.to_s)
+
+      # query parameters
+      query_params = {}
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = @api_client.object_to_http_body(opts[:'body'])
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'GsuiteOutput')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: GSuiteApi#gsuites_patch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
     # Deletes a G Suite translation rule
     # This endpoint allows you to delete a translation rule for a specific G Suite instance. These rules specify how JumpCloud attributes translate to [G Suite Admin SDK](https://developers.google.com/admin-sdk/directory/) attributes.  #### Sample Request  ``` curl -X DELETE https://console.jumpcloud.com/api/v2/gsuites/{gsuite_id}/translationrules/{id} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
     # @param gsuite_id 
@@ -394,7 +558,7 @@ def translation_rules_g_suite_delete_with_http_info(gsuite_id, id, content_type,
       return data, status_code, headers
     end
 
-    # Gets a specific g suite translation rule
+    # Gets a specific G Suite translation rule
     # This endpoint returns a specific translation rule for a specific G Suite instance. These rules specify how JumpCloud attributes translate to [G Suite Admin SDK](https://developers.google.com/admin-sdk/directory/) attributes.  ###### Sample Request  ```   curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{gsuite_id}/translationrules/{id} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
     # @param gsuite_id 
     # @param id 
@@ -407,7 +571,7 @@ def translation_rules_g_suite_get(gsuite_id, id, content_type, accept, opts = {}
       return data
     end
 
-    # Gets a specific g suite translation rule
+    # Gets a specific G Suite translation rule
     # This endpoint returns a specific translation rule for a specific G Suite instance. These rules specify how JumpCloud attributes translate to [G Suite Admin SDK](https://developers.google.com/admin-sdk/directory/) attributes.  ###### Sample Request  &#x60;&#x60;&#x60;   curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{gsuite_id}/translationrules/{id} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
     # @param gsuite_id 
     # @param id 
@@ -514,6 +678,10 @@ def translation_rules_g_suite_list_with_http_info(gsuite_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GSuiteApi.translation_rules_g_suite_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GSuiteApi.translation_rules_g_suite_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/gsuites/{gsuite_id}/translationrules".sub('{' + 'gsuite_id' + '}', gsuite_id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/api/graph_api.rb b/jcapiv2/lib/jcapiv2/api/graph_api.rb
index 2cc4306..9dd40b1 100644
--- a/jcapiv2/lib/jcapiv2/api/graph_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/graph_api.rb
@@ -67,6 +67,10 @@ def graph_active_directory_associations_list_with_http_info(activedirectory_id,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_active_directory_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_active_directory_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/activedirectories/{activedirectory_id}/associations".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_active_directory_associations_post_with_http_info(activedirectory_id,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_active_directory_traverse_user_group(activedirectory_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_active_directory_traverse_user_group_with_http_info(activedirectory_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_active_directory_traverse_user_group(activedirectory_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_active_directory_traverse_user_group_with_http_info(activedirectory_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_active_directory_traverse_user_group_with_http_info(activedirectory_id
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_active_directory_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_active_directory_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/activedirectories/{activedirectory_id}/usergroups".sub('{' + 'activedirectory_id' + '}', activedirectory_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_active_directory_traverse_user_group_with_http_info(activedirectory_id
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -303,6 +314,10 @@ def graph_application_associations_list_with_http_info(application_id, targets,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_application_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_application_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/applications/{application_id}/associations".sub('{' + 'application_id' + '}', application_id.to_s)
 
@@ -421,8 +436,9 @@ def graph_application_associations_post_with_http_info(application_id, content_t
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_application_traverse_user(application_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_application_traverse_user_with_http_info(application_id, content_type, accept, opts)
@@ -436,8 +452,9 @@ def graph_application_traverse_user(application_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_application_traverse_user_with_http_info(application_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -455,6 +472,10 @@ def graph_application_traverse_user_with_http_info(application_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_application_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_application_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/applications/{application_id}/users".sub('{' + 'application_id' + '}', application_id.to_s)
 
@@ -462,6 +483,7 @@ def graph_application_traverse_user_with_http_info(application_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -499,8 +521,9 @@ def graph_application_traverse_user_with_http_info(application_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_application_traverse_user_group(application_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_application_traverse_user_group_with_http_info(application_id, content_type, accept, opts)
@@ -514,8 +537,9 @@ def graph_application_traverse_user_group(application_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_application_traverse_user_group_with_http_info(application_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -533,6 +557,10 @@ def graph_application_traverse_user_group_with_http_info(application_id, content
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_application_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_application_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/applications/{application_id}/usergroups".sub('{' + 'application_id' + '}', application_id.to_s)
 
@@ -540,6 +568,7 @@ def graph_application_traverse_user_group_with_http_info(application_id, content
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -617,6 +646,10 @@ def graph_command_associations_list_with_http_info(command_id, targets, content_
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_command_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_command_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/commands/{command_id}/associations".sub('{' + 'command_id' + '}', command_id.to_s)
 
@@ -735,8 +768,9 @@ def graph_command_associations_post_with_http_info(command_id, content_type, acc
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_command_traverse_system(command_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_command_traverse_system_with_http_info(command_id, content_type, accept, opts)
@@ -750,8 +784,9 @@ def graph_command_traverse_system(command_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_command_traverse_system_with_http_info(command_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -769,6 +804,10 @@ def graph_command_traverse_system_with_http_info(command_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_command_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_command_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/commands/{command_id}/systems".sub('{' + 'command_id' + '}', command_id.to_s)
 
@@ -776,6 +815,7 @@ def graph_command_traverse_system_with_http_info(command_id, content_type, accep
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -813,8 +853,9 @@ def graph_command_traverse_system_with_http_info(command_id, content_type, accep
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_command_traverse_system_group(command_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_command_traverse_system_group_with_http_info(command_id, content_type, accept, opts)
@@ -828,8 +869,9 @@ def graph_command_traverse_system_group(command_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_command_traverse_system_group_with_http_info(command_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -847,6 +889,10 @@ def graph_command_traverse_system_group_with_http_info(command_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_command_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_command_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/commands/{command_id}/systemgroups".sub('{' + 'command_id' + '}', command_id.to_s)
 
@@ -854,6 +900,7 @@ def graph_command_traverse_system_group_with_http_info(command_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -931,6 +978,10 @@ def graph_g_suite_associations_list_with_http_info(gsuite_id, targets, content_t
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_g_suite_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_g_suite_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/gsuites/{gsuite_id}/associations".sub('{' + 'gsuite_id' + '}', gsuite_id.to_s)
 
@@ -1035,8 +1086,9 @@ def graph_g_suite_associations_post_with_http_info(gsuite_id, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_g_suite_traverse_user(gsuite_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept, opts)
@@ -1050,8 +1102,9 @@ def graph_g_suite_traverse_user(gsuite_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1069,6 +1122,10 @@ def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_g_suite_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_g_suite_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/gsuites/{gsuite_id}/users".sub('{' + 'gsuite_id' + '}', gsuite_id.to_s)
 
@@ -1076,6 +1133,7 @@ def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1113,8 +1171,9 @@ def graph_g_suite_traverse_user_with_http_info(gsuite_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_g_suite_traverse_user_group(gsuite_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, accept, opts)
@@ -1128,8 +1187,9 @@ def graph_g_suite_traverse_user_group(gsuite_id, content_type, accept, opts = {}
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1147,6 +1207,10 @@ def graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, ac
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_g_suite_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_g_suite_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/gsuites/{gsuite_id}/usergroups".sub('{' + 'gsuite_id' + '}', gsuite_id.to_s)
 
@@ -1154,6 +1218,7 @@ def graph_g_suite_traverse_user_group_with_http_info(gsuite_id, content_type, ac
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1231,6 +1296,10 @@ def graph_ldap_server_associations_list_with_http_info(ldapserver_id, targets, c
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_ldap_server_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_ldap_server_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers/{ldapserver_id}/associations".sub('{' + 'ldapserver_id' + '}', ldapserver_id.to_s)
 
@@ -1349,8 +1418,9 @@ def graph_ldap_server_associations_post_with_http_info(ldapserver_id, content_ty
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_ldap_server_traverse_user(ldapserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type, accept, opts)
@@ -1364,8 +1434,9 @@ def graph_ldap_server_traverse_user(ldapserver_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1383,6 +1454,10 @@ def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_ldap_server_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_ldap_server_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers/{ldapserver_id}/users".sub('{' + 'ldapserver_id' + '}', ldapserver_id.to_s)
 
@@ -1390,6 +1465,7 @@ def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1427,8 +1503,9 @@ def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_ldap_server_traverse_user_group(ldapserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_type, accept, opts)
@@ -1442,8 +1519,9 @@ def graph_ldap_server_traverse_user_group(ldapserver_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1461,6 +1539,10 @@ def graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_ldap_server_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_ldap_server_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers/{ldapserver_id}/usergroups".sub('{' + 'ldapserver_id' + '}', ldapserver_id.to_s)
 
@@ -1468,6 +1550,7 @@ def graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1545,6 +1628,10 @@ def graph_office365_associations_list_with_http_info(office365_id, targets, cont
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_office365_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_office365_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/office365s/{office365_id}/associations".sub('{' + 'office365_id' + '}', office365_id.to_s)
 
@@ -1663,8 +1750,9 @@ def graph_office365_associations_post_with_http_info(office365_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_office365_traverse_user(office365_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_office365_traverse_user_with_http_info(office365_id, content_type, accept, opts)
@@ -1678,8 +1766,9 @@ def graph_office365_traverse_user(office365_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_office365_traverse_user_with_http_info(office365_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1697,6 +1786,10 @@ def graph_office365_traverse_user_with_http_info(office365_id, content_type, acc
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_office365_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_office365_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/office365s/{office365_id}/users".sub('{' + 'office365_id' + '}', office365_id.to_s)
 
@@ -1704,6 +1797,7 @@ def graph_office365_traverse_user_with_http_info(office365_id, content_type, acc
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1741,8 +1835,9 @@ def graph_office365_traverse_user_with_http_info(office365_id, content_type, acc
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_office365_traverse_user_group(office365_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_office365_traverse_user_group_with_http_info(office365_id, content_type, accept, opts)
@@ -1756,8 +1851,9 @@ def graph_office365_traverse_user_group(office365_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_office365_traverse_user_group_with_http_info(office365_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1775,6 +1871,10 @@ def graph_office365_traverse_user_group_with_http_info(office365_id, content_typ
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_office365_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_office365_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/office365s/{office365_id}/usergroups".sub('{' + 'office365_id' + '}', office365_id.to_s)
 
@@ -1782,6 +1882,7 @@ def graph_office365_traverse_user_group_with_http_info(office365_id, content_typ
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1859,6 +1960,10 @@ def graph_policy_associations_list_with_http_info(policy_id, targets, content_ty
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_policy_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_policy_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/associations".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -1977,8 +2082,9 @@ def graph_policy_associations_post_with_http_info(policy_id, content_type, accep
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_policy_traverse_system(policy_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_policy_traverse_system_with_http_info(policy_id, content_type, accept, opts)
@@ -1992,8 +2098,9 @@ def graph_policy_traverse_system(policy_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -2011,6 +2118,10 @@ def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_policy_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_policy_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/systems".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -2018,6 +2129,7 @@ def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -2055,8 +2167,9 @@ def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_policy_traverse_system_group(policy_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_policy_traverse_system_group_with_http_info(policy_id, content_type, accept, opts)
@@ -2070,8 +2183,9 @@ def graph_policy_traverse_system_group(policy_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_policy_traverse_system_group_with_http_info(policy_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -2089,6 +2203,10 @@ def graph_policy_traverse_system_group_with_http_info(policy_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_policy_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_policy_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/systemgroups".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -2096,6 +2214,7 @@ def graph_policy_traverse_system_group_with_http_info(policy_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -2173,6 +2292,10 @@ def graph_radius_server_associations_list_with_http_info(radiusserver_id, target
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_radius_server_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_radius_server_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/radiusservers/{radiusserver_id}/associations".sub('{' + 'radiusserver_id' + '}', radiusserver_id.to_s)
 
@@ -2291,8 +2414,9 @@ def graph_radius_server_associations_post_with_http_info(radiusserver_id, conten
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_radius_server_traverse_user(radiusserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_type, accept, opts)
@@ -2306,8 +2430,9 @@ def graph_radius_server_traverse_user(radiusserver_id, content_type, accept, opt
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -2325,6 +2450,10 @@ def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_ty
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_radius_server_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_radius_server_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/radiusservers/{radiusserver_id}/users".sub('{' + 'radiusserver_id' + '}', radiusserver_id.to_s)
 
@@ -2332,6 +2461,7 @@ def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_ty
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -2369,8 +2499,9 @@ def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_ty
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_radius_server_traverse_user_group(radiusserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, content_type, accept, opts)
@@ -2384,8 +2515,9 @@ def graph_radius_server_traverse_user_group(radiusserver_id, content_type, accep
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -2403,6 +2535,10 @@ def graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, cont
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_radius_server_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_radius_server_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/radiusservers/{radiusserver_id}/usergroups".sub('{' + 'radiusserver_id' + '}', radiusserver_id.to_s)
 
@@ -2410,6 +2546,7 @@ def graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, cont
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -2491,6 +2628,10 @@ def graph_system_associations_list_with_http_info(system_id, content_type, accep
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling GraphApi.graph_system_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/associations".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -2657,6 +2798,10 @@ def graph_system_group_associations_list_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling GraphApi.graph_system_group_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/associations".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -2813,6 +2958,10 @@ def graph_system_group_member_of_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_group_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/memberof".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -2893,6 +3042,10 @@ def graph_system_group_members_list_with_http_info(group_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_group_members_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_members_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/members".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -3054,6 +3207,10 @@ def graph_system_group_membership_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_group_membership"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_membership, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/membership".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -3100,8 +3257,9 @@ def graph_system_group_membership_with_http_info(group_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_command(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_command_with_http_info(group_id, content_type, accept, opts)
@@ -3115,8 +3273,9 @@ def graph_system_group_traverse_command(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_command_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -3134,6 +3293,10 @@ def graph_system_group_traverse_command_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_group_traverse_command"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_traverse_command, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/commands".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -3141,6 +3304,7 @@ def graph_system_group_traverse_command_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -3178,8 +3342,9 @@ def graph_system_group_traverse_command_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_policy(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_policy_with_http_info(group_id, content_type, accept, opts)
@@ -3193,8 +3358,9 @@ def graph_system_group_traverse_policy(group_id, content_type, accept, opts = {}
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_policy_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -3212,6 +3378,10 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_group_traverse_policy"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_traverse_policy, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/policies".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -3219,6 +3389,7 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -3256,8 +3427,9 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_user(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_user_with_http_info(group_id, content_type, accept, opts)
@@ -3271,8 +3443,9 @@ def graph_system_group_traverse_user(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_user_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -3290,6 +3463,10 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_group_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/users".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -3297,6 +3474,7 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -3334,8 +3512,9 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_user_group(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_user_group_with_http_info(group_id, content_type, accept, opts)
@@ -3349,8 +3528,9 @@ def graph_system_group_traverse_user_group(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_user_group_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -3368,6 +3548,10 @@ def graph_system_group_traverse_user_group_with_http_info(group_id, content_type
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_group_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_group_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/usergroups".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -3375,6 +3559,7 @@ def graph_system_group_traverse_user_group_with_http_info(group_id, content_type
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -3454,6 +3639,10 @@ def graph_system_member_of_with_http_info(system_id, content_type, accept, opts
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/memberof".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -3502,8 +3691,9 @@ def graph_system_member_of_with_http_info(system_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_traverse_command(system_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_traverse_command_with_http_info(system_id, content_type, accept, opts)
@@ -3517,8 +3707,9 @@ def graph_system_traverse_command(system_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_traverse_command_with_http_info(system_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -3536,6 +3727,10 @@ def graph_system_traverse_command_with_http_info(system_id, content_type, accept
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_traverse_command"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_traverse_command, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/commands".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -3543,6 +3738,7 @@ def graph_system_traverse_command_with_http_info(system_id, content_type, accept
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -3580,8 +3776,9 @@ def graph_system_traverse_command_with_http_info(system_id, content_type, accept
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_traverse_policy(system_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_traverse_policy_with_http_info(system_id, content_type, accept, opts)
@@ -3595,8 +3792,9 @@ def graph_system_traverse_policy(system_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_traverse_policy_with_http_info(system_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -3614,6 +3812,10 @@ def graph_system_traverse_policy_with_http_info(system_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_traverse_policy"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_traverse_policy, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/policies".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -3621,6 +3823,7 @@ def graph_system_traverse_policy_with_http_info(system_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -3698,6 +3901,10 @@ def graph_system_traverse_user_with_http_info(system_id, content_type, accept, o
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/users".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -3745,10 +3952,11 @@ def graph_system_traverse_user_with_http_info(system_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
+    # @option opts [String] :x_org_id  (default to )
     # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :date Current date header for the System Context API
     # @option opts [String] :authorization Authorization header for the System Context API
-    # @option opts [String] :x_org_id  (default to )
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_traverse_user_group(system_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_traverse_user_group_with_http_info(system_id, content_type, accept, opts)
@@ -3762,10 +3970,11 @@ def graph_system_traverse_user_group(system_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+    # @option opts [String] :x_org_id 
     # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :date Current date header for the System Context API
     # @option opts [String] :authorization Authorization header for the System Context API
-    # @option opts [String] :x_org_id 
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_traverse_user_group_with_http_info(system_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -3783,6 +3992,10 @@ def graph_system_traverse_user_group_with_http_info(system_id, content_type, acc
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_system_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_system_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/usergroups".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -3790,6 +4003,7 @@ def graph_system_traverse_user_group_with_http_info(system_id, content_type, acc
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -3799,9 +4013,9 @@ def graph_system_traverse_user_group_with_http_info(system_id, content_type, acc
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
       header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
       header_params[:'Date'] = opts[:'date'] if !opts[:'date'].nil?
       header_params[:'Authorization'] = opts[:'authorization'] if !opts[:'authorization'].nil?
-      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
 
       # form parameters
       form_params = {}
@@ -3869,6 +4083,10 @@ def graph_user_associations_list_with_http_info(user_id, content_type, accept, t
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling GraphApi.graph_user_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/associations".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -4027,6 +4245,10 @@ def graph_user_group_associations_list_with_http_info(group_id, content_type, ac
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling GraphApi.graph_user_group_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/associations".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4183,6 +4405,10 @@ def graph_user_group_member_of_with_http_info(group_id, content_type, accept, op
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/memberof".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4263,6 +4489,10 @@ def graph_user_group_members_list_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_members_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_members_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/members".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4418,6 +4648,10 @@ def graph_user_group_membership_with_http_info(group_id, content_type, accept, o
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_membership"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_membership, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/membership".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4464,8 +4698,9 @@ def graph_user_group_membership_with_http_info(group_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_active_directory(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_active_directory_with_http_info(group_id, content_type, accept, opts)
@@ -4479,8 +4714,9 @@ def graph_user_group_traverse_active_directory(group_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_active_directory_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -4498,6 +4734,10 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_active_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_active_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/activedirectories".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4505,6 +4745,7 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -4542,8 +4783,9 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_application(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_application_with_http_info(group_id, content_type, accept, opts)
@@ -4557,8 +4799,9 @@ def graph_user_group_traverse_application(group_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_application_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -4576,6 +4819,10 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_application"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_application, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/applications".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4583,6 +4830,7 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -4620,8 +4868,9 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_directory(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_directory_with_http_info(group_id, content_type, accept, opts)
@@ -4635,8 +4884,9 @@ def graph_user_group_traverse_directory(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_directory_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -4654,6 +4904,10 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/directories".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4661,6 +4915,7 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -4698,8 +4953,9 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_g_suite(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, accept, opts)
@@ -4713,8 +4969,9 @@ def graph_user_group_traverse_g_suite(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -4732,6 +4989,10 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_g_suite"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_g_suite, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/gsuites".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4739,6 +5000,7 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -4776,8 +5038,9 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_ldap_server(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type, accept, opts)
@@ -4791,8 +5054,9 @@ def graph_user_group_traverse_ldap_server(group_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -4810,6 +5074,10 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_ldap_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_ldap_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/ldapservers".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4817,6 +5085,7 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -4854,8 +5123,9 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_office365(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_office365_with_http_info(group_id, content_type, accept, opts)
@@ -4869,8 +5139,9 @@ def graph_user_group_traverse_office365(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_office365_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -4888,6 +5159,10 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_office365"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_office365, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/office365s".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4895,6 +5170,7 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -4932,8 +5208,9 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_radius_server(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_radius_server_with_http_info(group_id, content_type, accept, opts)
@@ -4947,8 +5224,9 @@ def graph_user_group_traverse_radius_server(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_radius_server_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -4966,6 +5244,10 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_radius_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_radius_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/radiusservers".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -4973,6 +5255,7 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5010,8 +5293,9 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_system(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_system_with_http_info(group_id, content_type, accept, opts)
@@ -5025,8 +5309,9 @@ def graph_user_group_traverse_system(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_system_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5044,6 +5329,10 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/systems".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -5051,6 +5340,7 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5088,8 +5378,9 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_system_group(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_system_group_with_http_info(group_id, content_type, accept, opts)
@@ -5103,8 +5394,9 @@ def graph_user_group_traverse_system_group(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_system_group_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5122,6 +5414,10 @@ def graph_user_group_traverse_system_group_with_http_info(group_id, content_type
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_group_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_group_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/systemgroups".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -5129,6 +5425,7 @@ def graph_user_group_traverse_system_group_with_http_info(group_id, content_type
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5204,6 +5501,10 @@ def graph_user_member_of_with_http_info(user_id, content_type, accept, opts = {}
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/memberof".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5250,8 +5551,9 @@ def graph_user_member_of_with_http_info(user_id, content_type, accept, opts = {}
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_application(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_application_with_http_info(user_id, content_type, accept, opts)
@@ -5265,8 +5567,9 @@ def graph_user_traverse_application(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_application_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5284,6 +5587,10 @@ def graph_user_traverse_application_with_http_info(user_id, content_type, accept
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_application"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_application, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/applications".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5291,6 +5598,7 @@ def graph_user_traverse_application_with_http_info(user_id, content_type, accept
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5328,8 +5636,9 @@ def graph_user_traverse_application_with_http_info(user_id, content_type, accept
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_directory(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_directory_with_http_info(user_id, content_type, accept, opts)
@@ -5343,8 +5652,9 @@ def graph_user_traverse_directory(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_directory_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5362,6 +5672,10 @@ def graph_user_traverse_directory_with_http_info(user_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/directories".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5369,6 +5683,7 @@ def graph_user_traverse_directory_with_http_info(user_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5406,8 +5721,9 @@ def graph_user_traverse_directory_with_http_info(user_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_g_suite(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, opts)
@@ -5421,8 +5737,9 @@ def graph_user_traverse_g_suite(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5440,6 +5757,10 @@ def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, op
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_g_suite"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_g_suite, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/gsuites".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5447,6 +5768,7 @@ def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, op
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5484,8 +5806,9 @@ def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, op
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_ldap_server(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept, opts)
@@ -5499,8 +5822,9 @@ def graph_user_traverse_ldap_server(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5518,6 +5842,10 @@ def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_ldap_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_ldap_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/ldapservers".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5525,6 +5853,7 @@ def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5562,8 +5891,9 @@ def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_office365(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_office365_with_http_info(user_id, content_type, accept, opts)
@@ -5577,8 +5907,9 @@ def graph_user_traverse_office365(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_office365_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5596,6 +5927,10 @@ def graph_user_traverse_office365_with_http_info(user_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_office365"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_office365, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/office365s".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5603,6 +5938,7 @@ def graph_user_traverse_office365_with_http_info(user_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5640,8 +5976,9 @@ def graph_user_traverse_office365_with_http_info(user_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_radius_server(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_radius_server_with_http_info(user_id, content_type, accept, opts)
@@ -5655,8 +5992,9 @@ def graph_user_traverse_radius_server(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_radius_server_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5674,6 +6012,10 @@ def graph_user_traverse_radius_server_with_http_info(user_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_radius_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_radius_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/radiusservers".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5681,6 +6023,7 @@ def graph_user_traverse_radius_server_with_http_info(user_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5754,6 +6097,10 @@ def graph_user_traverse_system_with_http_info(user_id, content_type, accept, opt
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/systems".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5799,8 +6146,9 @@ def graph_user_traverse_system_with_http_info(user_id, content_type, accept, opt
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_system_group(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_system_group_with_http_info(user_id, content_type, accept, opts)
@@ -5814,8 +6162,9 @@ def graph_user_traverse_system_group(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_system_group_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -5833,6 +6182,10 @@ def graph_user_traverse_system_group_with_http_info(user_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.graph_user_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.graph_user_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/systemgroups".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -5840,6 +6193,7 @@ def graph_user_traverse_system_group_with_http_info(user_id, content_type, accep
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -5917,6 +6271,10 @@ def policystatuses_list_with_http_info(system_id, content_type, accept, opts = {
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GraphApi.policystatuses_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GraphApi.policystatuses_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/policystatuses".sub('{' + 'system_id' + '}', system_id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/api/groups_api.rb b/jcapiv2/lib/jcapiv2/api/groups_api.rb
index de32a49..9f6c8ca 100644
--- a/jcapiv2/lib/jcapiv2/api/groups_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/groups_api.rb
@@ -61,6 +61,10 @@ def groups_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling GroupsApi.groups_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling GroupsApi.groups_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/groups"
 
diff --git a/jcapiv2/lib/jcapiv2/api/ldap_servers_api.rb b/jcapiv2/lib/jcapiv2/api/ldap_servers_api.rb
index 12edab9..ac9c8f9 100644
--- a/jcapiv2/lib/jcapiv2/api/ldap_servers_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/ldap_servers_api.rb
@@ -67,6 +67,10 @@ def graph_ldap_server_associations_list_with_http_info(ldapserver_id, targets, c
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling LDAPServersApi.graph_ldap_server_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling LDAPServersApi.graph_ldap_server_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers/{ldapserver_id}/associations".sub('{' + 'ldapserver_id' + '}', ldapserver_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_ldap_server_associations_post_with_http_info(ldapserver_id, content_ty
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_ldap_server_traverse_user(ldapserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_ldap_server_traverse_user(ldapserver_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling LDAPServersApi.graph_ldap_server_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling LDAPServersApi.graph_ldap_server_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers/{ldapserver_id}/users".sub('{' + 'ldapserver_id' + '}', ldapserver_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_ldap_server_traverse_user_with_http_info(ldapserver_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_ldap_server_traverse_user_group(ldapserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_ldap_server_traverse_user_group(ldapserver_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling LDAPServersApi.graph_ldap_server_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling LDAPServersApi.graph_ldap_server_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers/{ldapserver_id}/usergroups".sub('{' + 'ldapserver_id' + '}', ldapserver_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_ldap_server_traverse_user_group_with_http_info(ldapserver_id, content_
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -447,6 +465,10 @@ def ldapservers_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling LDAPServersApi.ldapservers_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling LDAPServersApi.ldapservers_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers"
 
@@ -486,5 +508,82 @@ def ldapservers_list_with_http_info(content_type, accept, opts = {})
       end
       return data, status_code, headers
     end
+
+    # Update existing LDAP server
+    # This endpoint allows updating some attributes of an LDAP server.  Sample Request  ``` curl -X PATCH https://console.jumpcloud.com/api/v2/ldapservers/{LDAP_ID} \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}' \\   -d '{     \"userLockoutAction\": \"remove\",     \"userPasswordExpirationAction\": \"disable\"   }' ```
+    # @param id Unique identifier of the LDAP server.
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Body] :body 
+    # @option opts [String] :x_api_key 
+    # @option opts [String] :x_org_id 
+    # @return [InlineResponse200]
+    def ldapservers_patch(id, content_type, accept, opts = {})
+      data, _status_code, _headers = ldapservers_patch_with_http_info(id, content_type, accept, opts)
+      return data
+    end
+
+    # Update existing LDAP server
+    # This endpoint allows updating some attributes of an LDAP server.  Sample Request  &#x60;&#x60;&#x60; curl -X PATCH https://console.jumpcloud.com/api/v2/ldapservers/{LDAP_ID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;userLockoutAction\&quot;: \&quot;remove\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;disable\&quot;   }&#39; &#x60;&#x60;&#x60;
+    # @param id Unique identifier of the LDAP server.
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Body] :body 
+    # @option opts [String] :x_api_key 
+    # @option opts [String] :x_org_id 
+    # @return [Array<(InlineResponse200, Fixnum, Hash)>] InlineResponse200 data, response status code and response headers
+    def ldapservers_patch_with_http_info(id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: LDAPServersApi.ldapservers_patch ..."
+      end
+      # verify the required parameter 'id' is set
+      if @api_client.config.client_side_validation && id.nil?
+        fail ArgumentError, "Missing the required parameter 'id' when calling LDAPServersApi.ldapservers_patch"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling LDAPServersApi.ldapservers_patch"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling LDAPServersApi.ldapservers_patch"
+      end
+      # resource path
+      local_var_path = "/ldapservers/{id}".sub('{' + 'id' + '}', id.to_s)
+
+      # query parameters
+      query_params = {}
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-api-key'] = opts[:'x_api_key'] if !opts[:'x_api_key'].nil?
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = @api_client.object_to_http_body(opts[:'body'])
+      auth_names = ['x-api-key']
+      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'InlineResponse200')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: LDAPServersApi#ldapservers_patch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
   end
 end
diff --git a/jcapiv2/lib/jcapiv2/api/office365_api.rb b/jcapiv2/lib/jcapiv2/api/office365_api.rb
index 91567b1..0bf3e94 100644
--- a/jcapiv2/lib/jcapiv2/api/office365_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/office365_api.rb
@@ -67,6 +67,10 @@ def graph_office365_associations_list_with_http_info(office365_id, targets, cont
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling Office365Api.graph_office365_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling Office365Api.graph_office365_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/office365s/{office365_id}/associations".sub('{' + 'office365_id' + '}', office365_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_office365_associations_post_with_http_info(office365_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_office365_traverse_user(office365_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_office365_traverse_user_with_http_info(office365_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_office365_traverse_user(office365_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_office365_traverse_user_with_http_info(office365_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_office365_traverse_user_with_http_info(office365_id, content_type, acc
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling Office365Api.graph_office365_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling Office365Api.graph_office365_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/office365s/{office365_id}/users".sub('{' + 'office365_id' + '}', office365_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_office365_traverse_user_with_http_info(office365_id, content_type, acc
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_office365_traverse_user_with_http_info(office365_id, content_type, acc
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_office365_traverse_user_group(office365_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_office365_traverse_user_group_with_http_info(office365_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_office365_traverse_user_group(office365_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_office365_traverse_user_group_with_http_info(office365_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_office365_traverse_user_group_with_http_info(office365_id, content_typ
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling Office365Api.graph_office365_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling Office365Api.graph_office365_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/office365s/{office365_id}/usergroups".sub('{' + 'office365_id' + '}', office365_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_office365_traverse_user_group_with_http_info(office365_id, content_typ
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -528,6 +546,10 @@ def translation_rules_office365_list_with_http_info(office365_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling Office365Api.translation_rules_office365_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling Office365Api.translation_rules_office365_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/office365s/{office365_id}/translationrules".sub('{' + 'office365_id' + '}', office365_id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/api/organizations_api.rb b/jcapiv2/lib/jcapiv2/api/organizations_api.rb
new file mode 100644
index 0000000..f2c36e7
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/api/organizations_api.rb
@@ -0,0 +1,207 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require "uri"
+
+module JCAPIv2
+  class OrganizationsApi
+    attr_accessor :api_client
+
+    def initialize(api_client = ApiClient.default)
+      @api_client = api_client
+    end
+
+    # Get Crypto Settings
+    # 
+    # @param id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Array<String>] :fields The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+    # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+    # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
+    # @return [OrgCryptoSettings]
+    def org_crypto_get(id, content_type, accept, opts = {})
+      data, _status_code, _headers = org_crypto_get_with_http_info(id, content_type, accept, opts)
+      return data
+    end
+
+    # Get Crypto Settings
+    # 
+    # @param id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Array<String>] :fields The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+    # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+    # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+    # @return [Array<(OrgCryptoSettings, Fixnum, Hash)>] OrgCryptoSettings data, response status code and response headers
+    def org_crypto_get_with_http_info(id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: OrganizationsApi.org_crypto_get ..."
+      end
+      # verify the required parameter 'id' is set
+      if @api_client.config.client_side_validation && id.nil?
+        fail ArgumentError, "Missing the required parameter 'id' when calling OrganizationsApi.org_crypto_get"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling OrganizationsApi.org_crypto_get"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling OrganizationsApi.org_crypto_get"
+      end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling OrganizationsApi.org_crypto_get, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/organizations/{id}/crypto".sub('{' + 'id' + '}', id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'fields'] = @api_client.build_collection_param(opts[:'fields'], :csv) if !opts[:'fields'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'sort'] = @api_client.build_collection_param(opts[:'sort'], :csv) if !opts[:'sort'].nil?
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = ['x-api-key']
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'OrgCryptoSettings')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: OrganizationsApi#org_crypto_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # Edit Crypto Settings
+    # 
+    # @param id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [OrgCryptoSettings] :body 
+    # @option opts [Array<String>] :fields The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+    # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+    # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
+    # @return [Object]
+    def org_crypto_put(id, content_type, accept, opts = {})
+      data, _status_code, _headers = org_crypto_put_with_http_info(id, content_type, accept, opts)
+      return data
+    end
+
+    # Edit Crypto Settings
+    # 
+    # @param id 
+    # @param content_type 
+    # @param accept 
+    # @param [Hash] opts the optional parameters
+    # @option opts [OrgCryptoSettings] :body 
+    # @option opts [Array<String>] :fields The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+    # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+    # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+    # @return [Array<(Object, Fixnum, Hash)>] Object data, response status code and response headers
+    def org_crypto_put_with_http_info(id, content_type, accept, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: OrganizationsApi.org_crypto_put ..."
+      end
+      # verify the required parameter 'id' is set
+      if @api_client.config.client_side_validation && id.nil?
+        fail ArgumentError, "Missing the required parameter 'id' when calling OrganizationsApi.org_crypto_put"
+      end
+      # verify the required parameter 'content_type' is set
+      if @api_client.config.client_side_validation && content_type.nil?
+        fail ArgumentError, "Missing the required parameter 'content_type' when calling OrganizationsApi.org_crypto_put"
+      end
+      # verify the required parameter 'accept' is set
+      if @api_client.config.client_side_validation && accept.nil?
+        fail ArgumentError, "Missing the required parameter 'accept' when calling OrganizationsApi.org_crypto_put"
+      end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling OrganizationsApi.org_crypto_put, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/organizations/{id}/crypto".sub('{' + 'id' + '}', id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'fields'] = @api_client.build_collection_param(opts[:'fields'], :csv) if !opts[:'fields'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'sort'] = @api_client.build_collection_param(opts[:'sort'], :csv) if !opts[:'sort'].nil?
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+      header_params[:'Content-Type'] = content_type
+      header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = @api_client.object_to_http_body(opts[:'body'])
+      auth_names = ['x-api-key']
+      data, status_code, headers = @api_client.call_api(:PUT, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Object')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: OrganizationsApi#org_crypto_put\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+  end
+end
diff --git a/jcapiv2/lib/jcapiv2/api/policies_api.rb b/jcapiv2/lib/jcapiv2/api/policies_api.rb
index 238ce7f..c028a41 100644
--- a/jcapiv2/lib/jcapiv2/api/policies_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/policies_api.rb
@@ -67,6 +67,10 @@ def graph_policy_associations_list_with_http_info(policy_id, targets, content_ty
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.graph_policy_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.graph_policy_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/associations".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_policy_associations_post_with_http_info(policy_id, content_type, accep
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_policy_traverse_system(policy_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_policy_traverse_system_with_http_info(policy_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_policy_traverse_system(policy_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.graph_policy_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.graph_policy_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/systems".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_policy_traverse_system_with_http_info(policy_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_policy_traverse_system_group(policy_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_policy_traverse_system_group_with_http_info(policy_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_policy_traverse_system_group(policy_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_policy_traverse_system_group_with_http_info(policy_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_policy_traverse_system_group_with_http_info(policy_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.graph_policy_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.graph_policy_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/systemgroups".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_policy_traverse_system_group_with_http_info(policy_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -518,6 +536,10 @@ def policies_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.policies_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.policies_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies"
 
@@ -807,6 +829,10 @@ def policyresults_list_with_http_info(policy_id, content_type, accept, opts = {}
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.policyresults_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.policyresults_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/policyresults".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -849,7 +875,7 @@ def policyresults_list_with_http_info(policy_id, content_type, accept, opts = {}
     end
 
     # Lists all the policy results for an organization.
-    # This endpoint returns all policies results for an Organization.  ##### Sample Request  ```  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
+    # This endpoint returns all policies results for an organization.  ##### Sample Request  ```  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H 'Accept: application/json' \\   -H 'Content-Type: application/json' \\   -H 'x-api-key: {API_KEY}'   ```
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -867,7 +893,7 @@ def policyresults_list_0(content_type, accept, opts = {})
     end
 
     # Lists all the policy results for an organization.
-    # This endpoint returns all policies results for an Organization.  ##### Sample Request  &#x60;&#x60;&#x60;  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+    # This endpoint returns all policies results for an organization.  ##### Sample Request  &#x60;&#x60;&#x60;  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
     # @param content_type 
     # @param accept 
     # @param [Hash] opts the optional parameters
@@ -891,6 +917,10 @@ def policyresults_list_0_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.policyresults_list_0"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.policyresults_list_0, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policyresults"
 
@@ -979,6 +1009,10 @@ def policystatuses_list_with_http_info(policy_id, content_type, accept, opts = {
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.policystatuses_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.policystatuses_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policies/{policy_id}/policystatuses".sub('{' + 'policy_id' + '}', policy_id.to_s)
 
@@ -1066,6 +1100,10 @@ def policystatuses_list_0_with_http_info(system_id, content_type, accept, opts =
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.policystatuses_list_0"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.policystatuses_list_0, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/policystatuses".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -1219,6 +1257,10 @@ def policytemplates_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PoliciesApi.policytemplates_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PoliciesApi.policytemplates_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policytemplates"
 
diff --git a/jcapiv2/lib/jcapiv2/api/policytemplates_api.rb b/jcapiv2/lib/jcapiv2/api/policytemplates_api.rb
index 1992960..4a5ba84 100644
--- a/jcapiv2/lib/jcapiv2/api/policytemplates_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/policytemplates_api.rb
@@ -133,6 +133,10 @@ def policytemplates_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling PolicytemplatesApi.policytemplates_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling PolicytemplatesApi.policytemplates_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/policytemplates"
 
diff --git a/jcapiv2/lib/jcapiv2/api/providers_api.rb b/jcapiv2/lib/jcapiv2/api/providers_api.rb
index 173fb01..4621669 100644
--- a/jcapiv2/lib/jcapiv2/api/providers_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/providers_api.rb
@@ -31,7 +31,7 @@ def initialize(api_client = ApiClient.default)
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
     # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
-    # @return [InlineResponse200]
+    # @return [InlineResponse2001]
     def providers_list_administrators(provider_id, content_type, accept, opts = {})
       data, _status_code, _headers = providers_list_administrators_with_http_info(provider_id, content_type, accept, opts)
       return data
@@ -48,7 +48,7 @@ def providers_list_administrators(provider_id, content_type, accept, opts = {})
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
     # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
-    # @return [Array<(InlineResponse200, Fixnum, Hash)>] InlineResponse200 data, response status code and response headers
+    # @return [Array<(InlineResponse2001, Fixnum, Hash)>] InlineResponse2001 data, response status code and response headers
     def providers_list_administrators_with_http_info(provider_id, content_type, accept, opts = {})
       if @api_client.config.debugging
         @api_client.config.logger.debug "Calling API: ProvidersApi.providers_list_administrators ..."
@@ -65,6 +65,10 @@ def providers_list_administrators_with_http_info(provider_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling ProvidersApi.providers_list_administrators"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling ProvidersApi.providers_list_administrators, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/providers/{provider_id}/administrators".sub('{' + 'provider_id' + '}', provider_id.to_s)
 
@@ -97,7 +101,7 @@ def providers_list_administrators_with_http_info(provider_id, content_type, acce
         :form_params => form_params,
         :body => post_body,
         :auth_names => auth_names,
-        :return_type => 'InlineResponse200')
+        :return_type => 'InlineResponse2001')
       if @api_client.config.debugging
         @api_client.config.logger.debug "API called: ProvidersApi#providers_list_administrators\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
       end
diff --git a/jcapiv2/lib/jcapiv2/api/radius_servers_api.rb b/jcapiv2/lib/jcapiv2/api/radius_servers_api.rb
index bd48e49..0c5934b 100644
--- a/jcapiv2/lib/jcapiv2/api/radius_servers_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/radius_servers_api.rb
@@ -67,6 +67,10 @@ def graph_radius_server_associations_list_with_http_info(radiusserver_id, target
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling RADIUSServersApi.graph_radius_server_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling RADIUSServersApi.graph_radius_server_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/radiusservers/{radiusserver_id}/associations".sub('{' + 'radiusserver_id' + '}', radiusserver_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_radius_server_associations_post_with_http_info(radiusserver_id, conten
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_radius_server_traverse_user(radiusserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_radius_server_traverse_user(radiusserver_id, content_type, accept, opt
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_ty
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling RADIUSServersApi.graph_radius_server_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling RADIUSServersApi.graph_radius_server_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/radiusservers/{radiusserver_id}/users".sub('{' + 'radiusserver_id' + '}', radiusserver_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_ty
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_radius_server_traverse_user_with_http_info(radiusserver_id, content_ty
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_radius_server_traverse_user_group(radiusserver_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_radius_server_traverse_user_group(radiusserver_id, content_type, accep
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, cont
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling RADIUSServersApi.graph_radius_server_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling RADIUSServersApi.graph_radius_server_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/radiusservers/{radiusserver_id}/usergroups".sub('{' + 'radiusserver_id' + '}', radiusserver_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_radius_server_traverse_user_group_with_http_info(radiusserver_id, cont
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/samba_domains_api.rb b/jcapiv2/lib/jcapiv2/api/samba_domains_api.rb
index 686745e..e729c20 100644
--- a/jcapiv2/lib/jcapiv2/api/samba_domains_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/samba_domains_api.rb
@@ -199,6 +199,10 @@ def ldapservers_samba_domains_list_with_http_info(ldapserver_id, opts = {})
       if @api_client.config.client_side_validation && ldapserver_id.nil?
         fail ArgumentError, "Missing the required parameter 'ldapserver_id' when calling SambaDomainsApi.ldapservers_samba_domains_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SambaDomainsApi.ldapservers_samba_domains_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/ldapservers/{ldapserver_id}/sambadomains".sub('{' + 'ldapserver_id' + '}', ldapserver_id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/api/system_group_associations_api.rb b/jcapiv2/lib/jcapiv2/api/system_group_associations_api.rb
index f3ac41a..23081e1 100644
--- a/jcapiv2/lib/jcapiv2/api/system_group_associations_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/system_group_associations_api.rb
@@ -67,6 +67,10 @@ def graph_system_group_associations_list_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling SystemGroupAssociationsApi.graph_system_group_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupAssociationsApi.graph_system_group_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/associations".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_system_group_associations_post_with_http_info(group_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_command(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_command_with_http_info(group_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_system_group_traverse_command(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_command_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_system_group_traverse_command_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupAssociationsApi.graph_system_group_traverse_command"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupAssociationsApi.graph_system_group_traverse_command, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/commands".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_system_group_traverse_command_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_system_group_traverse_command_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_policy(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_policy_with_http_info(group_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_system_group_traverse_policy(group_id, content_type, accept, opts = {}
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_policy_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupAssociationsApi.graph_system_group_traverse_policy"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupAssociationsApi.graph_system_group_traverse_policy, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/policies".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -341,8 +359,9 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_user(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_user_with_http_info(group_id, content_type, accept, opts)
@@ -356,8 +375,9 @@ def graph_system_group_traverse_user(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_user_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -375,6 +395,10 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupAssociationsApi.graph_system_group_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupAssociationsApi.graph_system_group_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/users".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -382,6 +406,7 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -419,8 +444,9 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_user_group(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_user_group_with_http_info(group_id, content_type, accept, opts)
@@ -434,8 +460,9 @@ def graph_system_group_traverse_user_group(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_user_group_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -453,6 +480,10 @@ def graph_system_group_traverse_user_group_with_http_info(group_id, content_type
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupAssociationsApi.graph_system_group_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupAssociationsApi.graph_system_group_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/usergroups".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -460,6 +491,7 @@ def graph_system_group_traverse_user_group_with_http_info(group_id, content_type
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/system_group_members_membership_api.rb b/jcapiv2/lib/jcapiv2/api/system_group_members_membership_api.rb
index 2181984..6dba15d 100644
--- a/jcapiv2/lib/jcapiv2/api/system_group_members_membership_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/system_group_members_membership_api.rb
@@ -65,6 +65,10 @@ def graph_system_group_member_of_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupMembersMembershipApi.graph_system_group_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupMembersMembershipApi.graph_system_group_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/memberof".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -145,6 +149,10 @@ def graph_system_group_members_list_with_http_info(group_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupMembersMembershipApi.graph_system_group_members_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupMembersMembershipApi.graph_system_group_members_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/members".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -306,6 +314,10 @@ def graph_system_group_membership_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupMembersMembershipApi.graph_system_group_membership"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupMembersMembershipApi.graph_system_group_membership, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/membership".sub('{' + 'group_id' + '}', group_id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/api/system_groups_api.rb b/jcapiv2/lib/jcapiv2/api/system_groups_api.rb
index 11ccd2a..d570591 100644
--- a/jcapiv2/lib/jcapiv2/api/system_groups_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/system_groups_api.rb
@@ -67,6 +67,10 @@ def graph_system_group_associations_list_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling SystemGroupsApi.graph_system_group_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.graph_system_group_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/associations".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -223,6 +227,10 @@ def graph_system_group_member_of_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupsApi.graph_system_group_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.graph_system_group_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/memberof".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -303,6 +311,10 @@ def graph_system_group_members_list_with_http_info(group_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupsApi.graph_system_group_members_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.graph_system_group_members_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/members".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -464,6 +476,10 @@ def graph_system_group_membership_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupsApi.graph_system_group_membership"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.graph_system_group_membership, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/membership".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -510,8 +526,9 @@ def graph_system_group_membership_with_http_info(group_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_policy(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_policy_with_http_info(group_id, content_type, accept, opts)
@@ -525,8 +542,9 @@ def graph_system_group_traverse_policy(group_id, content_type, accept, opts = {}
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_policy_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -544,6 +562,10 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupsApi.graph_system_group_traverse_policy"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.graph_system_group_traverse_policy, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/policies".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -551,6 +573,7 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -588,8 +611,9 @@ def graph_system_group_traverse_policy_with_http_info(group_id, content_type, ac
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_user(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_user_with_http_info(group_id, content_type, accept, opts)
@@ -603,8 +627,9 @@ def graph_system_group_traverse_user(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_user_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -622,6 +647,10 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupsApi.graph_system_group_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.graph_system_group_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/users".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -629,6 +658,7 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -666,8 +696,9 @@ def graph_system_group_traverse_user_with_http_info(group_id, content_type, acce
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_group_traverse_user_group(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_group_traverse_user_group_with_http_info(group_id, content_type, accept, opts)
@@ -681,8 +712,9 @@ def graph_system_group_traverse_user_group(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_group_traverse_user_group_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -700,6 +732,10 @@ def graph_system_group_traverse_user_group_with_http_info(group_id, content_type
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupsApi.graph_system_group_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.graph_system_group_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups/{group_id}/usergroups".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -707,6 +743,7 @@ def graph_system_group_traverse_user_group_with_http_info(group_id, content_type
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -921,6 +958,10 @@ def groups_system_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemGroupsApi.groups_system_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemGroupsApi.groups_system_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systemgroups"
 
diff --git a/jcapiv2/lib/jcapiv2/api/system_insights_api.rb b/jcapiv2/lib/jcapiv2/api/system_insights_api.rb
new file mode 100644
index 0000000..8574878
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/api/system_insights_api.rb
@@ -0,0 +1,1775 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require "uri"
+
+module JCAPIv2
+  class SystemInsightsApi
+    attr_accessor :api_client
+
+    def initialize(api_client = ApiClient.default)
+      @api_client = api_client
+    end
+
+    # List System Insights Apps
+    # Valid filter fields are `jc_system_id` and `bundle_name`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsApps>]
+    def systeminsights_list_apps(opts = {})
+      data, _status_code, _headers = systeminsights_list_apps_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Apps
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;bundle_name&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsApps>, Fixnum, Hash)>] Array<SystemInsightsApps> data, response status code and response headers
+    def systeminsights_list_apps_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_apps ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_apps, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_apps, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_apps, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/apps"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsApps>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_apps\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Apps
+    # Valid filter fields are `bundle_name`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsApps>]
+    def systeminsights_list_apps_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_apps_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Apps
+    # Valid filter fields are &#x60;bundle_name&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsApps>, Fixnum, Hash)>] Array<SystemInsightsApps> data, response status code and response headers
+    def systeminsights_list_apps_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_apps_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_apps_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_apps_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_apps_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_apps_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/apps".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsApps>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_apps_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Browser Plugins
+    # Valid filter fields are `name`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsBrowserPlugins>]
+    def systeminsights_list_browser_plugins(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_browser_plugins_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Browser Plugins
+    # Valid filter fields are &#x60;name&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsBrowserPlugins>, Fixnum, Hash)>] Array<SystemInsightsBrowserPlugins> data, response status code and response headers
+    def systeminsights_list_browser_plugins_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_browser_plugins ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_browser_plugins"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_browser_plugins, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_browser_plugins, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_browser_plugins, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/browser_plugins".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsBrowserPlugins>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_browser_plugins\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Browser Plugins
+    # Valid filter fields are `jc_system_id` and `name`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsBrowserPlugins>]
+    def systeminsights_list_browser_plugins_0(opts = {})
+      data, _status_code, _headers = systeminsights_list_browser_plugins_0_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Browser Plugins
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsBrowserPlugins>, Fixnum, Hash)>] Array<SystemInsightsBrowserPlugins> data, response status code and response headers
+    def systeminsights_list_browser_plugins_0_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_browser_plugins_0 ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_browser_plugins_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_browser_plugins_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_browser_plugins_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/browser_plugins"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsBrowserPlugins>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_browser_plugins_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Chrome Extensions
+    # Valid filter fields are `name`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsChromeExtensions>]
+    def systeminsights_list_chrome_extensions(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_chrome_extensions_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Chrome Extensions
+    # Valid filter fields are &#x60;name&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsChromeExtensions>, Fixnum, Hash)>] Array<SystemInsightsChromeExtensions> data, response status code and response headers
+    def systeminsights_list_chrome_extensions_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_chrome_extensions ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_chrome_extensions"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_chrome_extensions, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_chrome_extensions, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_chrome_extensions, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/chrome_extensions".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsChromeExtensions>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_chrome_extensions\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Chrome Extensions
+    # Valid filter fields are `jc_system_id` and `name`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsChromeExtensions>]
+    def systeminsights_list_chrome_extensions_0(opts = {})
+      data, _status_code, _headers = systeminsights_list_chrome_extensions_0_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Chrome Extensions
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsChromeExtensions>, Fixnum, Hash)>] Array<SystemInsightsChromeExtensions> data, response status code and response headers
+    def systeminsights_list_chrome_extensions_0_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_chrome_extensions_0 ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_chrome_extensions_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_chrome_extensions_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_chrome_extensions_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/chrome_extensions"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsChromeExtensions>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_chrome_extensions_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Disk Encryption
+    # Valid filter fields are `jc_system_id` and `encryption_status`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsDiskEncryption>]
+    def systeminsights_list_disk_encryption(opts = {})
+      data, _status_code, _headers = systeminsights_list_disk_encryption_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Disk Encryption
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;encryption_status&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsDiskEncryption>, Fixnum, Hash)>] Array<SystemInsightsDiskEncryption> data, response status code and response headers
+    def systeminsights_list_disk_encryption_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_disk_encryption ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_disk_encryption, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_disk_encryption, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_disk_encryption, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/disk_encryption"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsDiskEncryption>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_disk_encryption\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Disk Encryption
+    # Valid filter fields are `encryption_status`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsDiskEncryption>]
+    def systeminsights_list_disk_encryption_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_disk_encryption_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Disk Encryption
+    # Valid filter fields are &#x60;encryption_status&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsDiskEncryption>, Fixnum, Hash)>] Array<SystemInsightsDiskEncryption> data, response status code and response headers
+    def systeminsights_list_disk_encryption_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_disk_encryption_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_disk_encryption_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_disk_encryption_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_disk_encryption_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_disk_encryption_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/disk_encryption".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsDiskEncryption>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_disk_encryption_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Firefox Addons
+    # Valid filter fields are `jc_system_id` and `name`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsFirefoxAddons>]
+    def systeminsights_list_firefox_addons(opts = {})
+      data, _status_code, _headers = systeminsights_list_firefox_addons_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Firefox Addons
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsFirefoxAddons>, Fixnum, Hash)>] Array<SystemInsightsFirefoxAddons> data, response status code and response headers
+    def systeminsights_list_firefox_addons_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_firefox_addons ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_firefox_addons, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_firefox_addons, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_firefox_addons, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/firefox_addons"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsFirefoxAddons>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_firefox_addons\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Firefox Addons
+    # Valid filter fields are `name`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsFirefoxAddons>]
+    def systeminsights_list_firefox_addons_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_firefox_addons_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Firefox Addons
+    # Valid filter fields are &#x60;name&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsFirefoxAddons>, Fixnum, Hash)>] Array<SystemInsightsFirefoxAddons> data, response status code and response headers
+    def systeminsights_list_firefox_addons_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_firefox_addons_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_firefox_addons_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_firefox_addons_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_firefox_addons_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_firefox_addons_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/firefox_addons".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsFirefoxAddons>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_firefox_addons_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Groups
+    # Valid filter fields are `jc_system_id` and `groupname`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsGroups>]
+    def systeminsights_list_groups(opts = {})
+      data, _status_code, _headers = systeminsights_list_groups_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Groups
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;groupname&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsGroups>, Fixnum, Hash)>] Array<SystemInsightsGroups> data, response status code and response headers
+    def systeminsights_list_groups_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_groups ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_groups, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_groups, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_groups, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/groups"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsGroups>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_groups\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Groups
+    # Valid filter fields are `groupname`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsGroups>]
+    def systeminsights_list_groups_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_groups_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Groups
+    # Valid filter fields are &#x60;groupname&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsGroups>, Fixnum, Hash)>] Array<SystemInsightsGroups> data, response status code and response headers
+    def systeminsights_list_groups_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_groups_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_groups_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_groups_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_groups_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_groups_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/groups".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsGroups>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_groups_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Interface Addresses
+    # Valid filter fields are `jc_system_id` and `address`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsInterfaceAddresses>]
+    def systeminsights_list_interface_addresses(opts = {})
+      data, _status_code, _headers = systeminsights_list_interface_addresses_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Interface Addresses
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;address&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsInterfaceAddresses>, Fixnum, Hash)>] Array<SystemInsightsInterfaceAddresses> data, response status code and response headers
+    def systeminsights_list_interface_addresses_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_interface_addresses ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_interface_addresses, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_interface_addresses, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_interface_addresses, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/interface_addresses"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsInterfaceAddresses>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_interface_addresses\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Interface Addresses
+    # Valid filter fields are `address`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsInterfaceAddresses>]
+    def systeminsights_list_interface_addresses_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_interface_addresses_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Interface Addresses
+    # Valid filter fields are &#x60;address&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsInterfaceAddresses>, Fixnum, Hash)>] Array<SystemInsightsInterfaceAddresses> data, response status code and response headers
+    def systeminsights_list_interface_addresses_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_interface_addresses_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_interface_addresses_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_interface_addresses_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_interface_addresses_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_interface_addresses_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/interface_addresses".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsInterfaceAddresses>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_interface_addresses_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Mounts
+    # Valid filter fields are `jc_system_id` and `path`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsMounts>]
+    def systeminsights_list_mounts(opts = {})
+      data, _status_code, _headers = systeminsights_list_mounts_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Mounts
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;path&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsMounts>, Fixnum, Hash)>] Array<SystemInsightsMounts> data, response status code and response headers
+    def systeminsights_list_mounts_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_mounts ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_mounts, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_mounts, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_mounts, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/mounts"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsMounts>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_mounts\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Mounts
+    # Valid filter fields are `path`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsMounts>]
+    def systeminsights_list_mounts_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_mounts_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Mounts
+    # Valid filter fields are &#x60;path&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsMounts>, Fixnum, Hash)>] Array<SystemInsightsMounts> data, response status code and response headers
+    def systeminsights_list_mounts_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_mounts_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_mounts_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_mounts_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_mounts_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_mounts_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/mounts".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsMounts>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_mounts_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System OS Version
+    # Valid filter fields are `version`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsOsVersion>]
+    def systeminsights_list_os_version(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_os_version_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System OS Version
+    # Valid filter fields are &#x60;version&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsOsVersion>, Fixnum, Hash)>] Array<SystemInsightsOsVersion> data, response status code and response headers
+    def systeminsights_list_os_version_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_os_version ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_os_version"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_os_version, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_os_version, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_os_version, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/os_version".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsOsVersion>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_os_version\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights OS Version
+    # Valid filter fields are `jc_system_id` and `version`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsOsVersion>]
+    def systeminsights_list_os_version_0(opts = {})
+      data, _status_code, _headers = systeminsights_list_os_version_0_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights OS Version
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;version&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsOsVersion>, Fixnum, Hash)>] Array<SystemInsightsOsVersion> data, response status code and response headers
+    def systeminsights_list_os_version_0_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_os_version_0 ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_os_version_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_os_version_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_os_version_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/os_version"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsOsVersion>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_os_version_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Safari Extensions
+    # Valid filter fields are `name`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsSafariExtensions>]
+    def systeminsights_list_safari_extensions(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_safari_extensions_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Safari Extensions
+    # Valid filter fields are &#x60;name&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsSafariExtensions>, Fixnum, Hash)>] Array<SystemInsightsSafariExtensions> data, response status code and response headers
+    def systeminsights_list_safari_extensions_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_safari_extensions ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_safari_extensions"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_safari_extensions, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_safari_extensions, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_safari_extensions, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/safari_extensions".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsSafariExtensions>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_safari_extensions\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Safari Extensions
+    # Valid filter fields are `jc_system_id` and `name`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsSafariExtensions>]
+    def systeminsights_list_safari_extensions_0(opts = {})
+      data, _status_code, _headers = systeminsights_list_safari_extensions_0_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Safari Extensions
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsSafariExtensions>, Fixnum, Hash)>] Array<SystemInsightsSafariExtensions> data, response status code and response headers
+    def systeminsights_list_safari_extensions_0_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_safari_extensions_0 ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_safari_extensions_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_safari_extensions_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_safari_extensions_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/safari_extensions"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsSafariExtensions>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_safari_extensions_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Info
+    # Valid filter fields are `jc_system_id` and `cpu_subtype`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsSystemInfo>]
+    def systeminsights_list_system_info(opts = {})
+      data, _status_code, _headers = systeminsights_list_system_info_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights System Info
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;cpu_subtype&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsSystemInfo>, Fixnum, Hash)>] Array<SystemInsightsSystemInfo> data, response status code and response headers
+    def systeminsights_list_system_info_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_system_info ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_system_info, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_system_info, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_system_info, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/system_info"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsSystemInfo>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_system_info\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System System Info
+    # Valid filter fields are `cpu_subtype`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsSystemInfo>]
+    def systeminsights_list_system_info_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_system_info_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System System Info
+    # Valid filter fields are &#x60;cpu_subtype&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsSystemInfo>, Fixnum, Hash)>] Array<SystemInsightsSystemInfo> data, response status code and response headers
+    def systeminsights_list_system_info_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_system_info_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_system_info_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_system_info_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_system_info_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_system_info_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/system_info".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsSystemInfo>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_system_info_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights Users
+    # Valid filter fields are `jc_system_id` and `username`.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsUsers>]
+    def systeminsights_list_users(opts = {})
+      data, _status_code, _headers = systeminsights_list_users_with_http_info(opts)
+      return data
+    end
+
+    # List System Insights Users
+    # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;username&#x60;.
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsUsers>, Fixnum, Hash)>] Array<SystemInsightsUsers> data, response status code and response headers
+    def systeminsights_list_users_with_http_info(opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_users ..."
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_users, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_users, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_users, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/users"
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsUsers>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_users\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+
+    # List System Insights System Users
+    # Valid filter fields are `username`.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit  (default to 10)
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<SystemInsightsUsers>]
+    def systeminsights_list_users_0(jc_system_id, opts = {})
+      data, _status_code, _headers = systeminsights_list_users_0_with_http_info(jc_system_id, opts)
+      return data
+    end
+
+    # List System Insights System Users
+    # Valid filter fields are &#x60;username&#x60;.
+    # @param jc_system_id 
+    # @param [Hash] opts the optional parameters
+    # @option opts [Integer] :limit 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq
+    # @return [Array<(Array<SystemInsightsUsers>, Fixnum, Hash)>] Array<SystemInsightsUsers> data, response status code and response headers
+    def systeminsights_list_users_0_with_http_info(jc_system_id, opts = {})
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "Calling API: SystemInsightsApi.systeminsights_list_users_0 ..."
+      end
+      # verify the required parameter 'jc_system_id' is set
+      if @api_client.config.client_side_validation && jc_system_id.nil?
+        fail ArgumentError, "Missing the required parameter 'jc_system_id' when calling SystemInsightsApi.systeminsights_list_users_0"
+      end
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_users_0, must be smaller than or equal to 100.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling SystemInsightsApi.systeminsights_list_users_0, must be greater than or equal to 0.'
+      end
+
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemInsightsApi.systeminsights_list_users_0, must be greater than or equal to 0.'
+      end
+
+      # resource path
+      local_var_path = "/systeminsights/{jc_system_id}/users".sub('{' + 'jc_system_id' + '}', jc_system_id.to_s)
+
+      # query parameters
+      query_params = {}
+      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
+      query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
+
+      # header parameters
+      header_params = {}
+      # HTTP header 'Accept' (if needed)
+      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
+      # HTTP header 'Content-Type'
+      header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
+
+      # form parameters
+      form_params = {}
+
+      # http body (model)
+      post_body = nil
+      auth_names = []
+      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
+        :header_params => header_params,
+        :query_params => query_params,
+        :form_params => form_params,
+        :body => post_body,
+        :auth_names => auth_names,
+        :return_type => 'Array<SystemInsightsUsers>')
+      if @api_client.config.debugging
+        @api_client.config.logger.debug "API called: SystemInsightsApi#systeminsights_list_users_0\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
+      end
+      return data, status_code, headers
+    end
+  end
+end
diff --git a/jcapiv2/lib/jcapiv2/api/systems_api.rb b/jcapiv2/lib/jcapiv2/api/systems_api.rb
index a3c7de1..5cc8daf 100644
--- a/jcapiv2/lib/jcapiv2/api/systems_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/systems_api.rb
@@ -71,6 +71,10 @@ def graph_system_associations_list_with_http_info(system_id, content_type, accep
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling SystemsApi.graph_system_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemsApi.graph_system_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/associations".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -239,6 +243,10 @@ def graph_system_member_of_with_http_info(system_id, content_type, accept, opts
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemsApi.graph_system_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemsApi.graph_system_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/memberof".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -287,8 +295,9 @@ def graph_system_member_of_with_http_info(system_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_traverse_command(system_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_traverse_command_with_http_info(system_id, content_type, accept, opts)
@@ -302,8 +311,9 @@ def graph_system_traverse_command(system_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_traverse_command_with_http_info(system_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -321,6 +331,10 @@ def graph_system_traverse_command_with_http_info(system_id, content_type, accept
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemsApi.graph_system_traverse_command"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemsApi.graph_system_traverse_command, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/commands".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -328,6 +342,7 @@ def graph_system_traverse_command_with_http_info(system_id, content_type, accept
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -365,8 +380,9 @@ def graph_system_traverse_command_with_http_info(system_id, content_type, accept
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_traverse_policy(system_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_traverse_policy_with_http_info(system_id, content_type, accept, opts)
@@ -380,8 +396,9 @@ def graph_system_traverse_policy(system_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_traverse_policy_with_http_info(system_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -399,6 +416,10 @@ def graph_system_traverse_policy_with_http_info(system_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemsApi.graph_system_traverse_policy"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemsApi.graph_system_traverse_policy, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/policies".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -406,6 +427,7 @@ def graph_system_traverse_policy_with_http_info(system_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -483,6 +505,10 @@ def graph_system_traverse_user_with_http_info(system_id, content_type, accept, o
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemsApi.graph_system_traverse_user"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemsApi.graph_system_traverse_user, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/users".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -530,10 +556,11 @@ def graph_system_traverse_user_with_http_info(system_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
+    # @option opts [String] :x_org_id  (default to )
     # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :date Current date header for the System Context API
     # @option opts [String] :authorization Authorization header for the System Context API
-    # @option opts [String] :x_org_id  (default to )
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_system_traverse_user_group(system_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_system_traverse_user_group_with_http_info(system_id, content_type, accept, opts)
@@ -547,10 +574,11 @@ def graph_system_traverse_user_group(system_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+    # @option opts [String] :x_org_id 
     # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :date Current date header for the System Context API
     # @option opts [String] :authorization Authorization header for the System Context API
-    # @option opts [String] :x_org_id 
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_system_traverse_user_group_with_http_info(system_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -568,6 +596,10 @@ def graph_system_traverse_user_group_with_http_info(system_id, content_type, acc
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling SystemsApi.graph_system_traverse_user_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling SystemsApi.graph_system_traverse_user_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/systems/{system_id}/usergroups".sub('{' + 'system_id' + '}', system_id.to_s)
 
@@ -575,6 +607,7 @@ def graph_system_traverse_user_group_with_http_info(system_id, content_type, acc
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -584,9 +617,9 @@ def graph_system_traverse_user_group_with_http_info(system_id, content_type, acc
       header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
       header_params[:'Content-Type'] = content_type
       header_params[:'Accept'] = accept
+      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
       header_params[:'Date'] = opts[:'date'] if !opts[:'date'].nil?
       header_params[:'Authorization'] = opts[:'authorization'] if !opts[:'authorization'].nil?
-      header_params[:'x-org-id'] = opts[:'x_org_id'] if !opts[:'x_org_id'].nil?
 
       # form parameters
       form_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/user_group_associations_api.rb b/jcapiv2/lib/jcapiv2/api/user_group_associations_api.rb
index 0852a2f..50ce227 100644
--- a/jcapiv2/lib/jcapiv2/api/user_group_associations_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/user_group_associations_api.rb
@@ -67,6 +67,10 @@ def graph_user_group_associations_list_with_http_info(group_id, content_type, ac
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling UserGroupAssociationsApi.graph_user_group_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/associations".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -185,8 +189,9 @@ def graph_user_group_associations_post_with_http_info(group_id, content_type, ac
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_active_directory(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_active_directory_with_http_info(group_id, content_type, accept, opts)
@@ -200,8 +205,9 @@ def graph_user_group_traverse_active_directory(group_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_active_directory_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -219,6 +225,10 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_active_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_active_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/activedirectories".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -226,6 +236,7 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -263,8 +274,9 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_application(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_application_with_http_info(group_id, content_type, accept, opts)
@@ -278,8 +290,9 @@ def graph_user_group_traverse_application(group_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_application_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -297,6 +310,10 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_application"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_application, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/applications".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -304,6 +321,7 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -341,8 +359,9 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_directory(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_directory_with_http_info(group_id, content_type, accept, opts)
@@ -356,8 +375,9 @@ def graph_user_group_traverse_directory(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_directory_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -375,6 +395,10 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/directories".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -382,6 +406,7 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -419,8 +444,9 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_g_suite(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, accept, opts)
@@ -434,8 +460,9 @@ def graph_user_group_traverse_g_suite(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -453,6 +480,10 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_g_suite"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_g_suite, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/gsuites".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -460,6 +491,7 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -497,8 +529,9 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_ldap_server(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type, accept, opts)
@@ -512,8 +545,9 @@ def graph_user_group_traverse_ldap_server(group_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -531,6 +565,10 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_ldap_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_ldap_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/ldapservers".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -538,6 +576,7 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -575,8 +614,9 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_office365(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_office365_with_http_info(group_id, content_type, accept, opts)
@@ -590,8 +630,9 @@ def graph_user_group_traverse_office365(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_office365_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -609,6 +650,10 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_office365"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_office365, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/office365s".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -616,6 +661,7 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -653,8 +699,9 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_radius_server(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_radius_server_with_http_info(group_id, content_type, accept, opts)
@@ -668,8 +715,9 @@ def graph_user_group_traverse_radius_server(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_radius_server_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -687,6 +735,10 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_radius_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_radius_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/radiusservers".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -694,6 +746,7 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -731,8 +784,9 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_system(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_system_with_http_info(group_id, content_type, accept, opts)
@@ -746,8 +800,9 @@ def graph_user_group_traverse_system(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_system_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -765,6 +820,10 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/systems".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -772,6 +831,7 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -809,8 +869,9 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_system_group(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_system_group_with_http_info(group_id, content_type, accept, opts)
@@ -824,8 +885,9 @@ def graph_user_group_traverse_system_group(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_system_group_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -843,6 +905,10 @@ def graph_user_group_traverse_system_group_with_http_info(group_id, content_type
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupAssociationsApi.graph_user_group_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupAssociationsApi.graph_user_group_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/systemgroups".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -850,6 +916,7 @@ def graph_user_group_traverse_system_group_with_http_info(group_id, content_type
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/user_group_members_membership_api.rb b/jcapiv2/lib/jcapiv2/api/user_group_members_membership_api.rb
index a607e6e..9900c7f 100644
--- a/jcapiv2/lib/jcapiv2/api/user_group_members_membership_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/user_group_members_membership_api.rb
@@ -65,6 +65,10 @@ def graph_user_group_member_of_with_http_info(group_id, content_type, accept, op
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupMembersMembershipApi.graph_user_group_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupMembersMembershipApi.graph_user_group_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/memberof".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -145,6 +149,10 @@ def graph_user_group_members_list_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupMembersMembershipApi.graph_user_group_members_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupMembersMembershipApi.graph_user_group_members_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/members".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -300,6 +308,10 @@ def graph_user_group_membership_with_http_info(group_id, content_type, accept, o
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupMembersMembershipApi.graph_user_group_membership"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupMembersMembershipApi.graph_user_group_membership, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/membership".sub('{' + 'group_id' + '}', group_id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/api/user_groups_api.rb b/jcapiv2/lib/jcapiv2/api/user_groups_api.rb
index 0f0e897..5a26941 100644
--- a/jcapiv2/lib/jcapiv2/api/user_groups_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/user_groups_api.rb
@@ -67,6 +67,10 @@ def graph_user_group_associations_list_with_http_info(group_id, content_type, ac
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling UserGroupsApi.graph_user_group_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/associations".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -223,6 +227,10 @@ def graph_user_group_member_of_with_http_info(group_id, content_type, accept, op
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/memberof".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -303,6 +311,10 @@ def graph_user_group_members_list_with_http_info(group_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_members_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_members_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/members".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -458,6 +470,10 @@ def graph_user_group_membership_with_http_info(group_id, content_type, accept, o
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_membership"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_membership, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/membership".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -504,8 +520,9 @@ def graph_user_group_membership_with_http_info(group_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_active_directory(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_active_directory_with_http_info(group_id, content_type, accept, opts)
@@ -519,8 +536,9 @@ def graph_user_group_traverse_active_directory(group_id, content_type, accept, o
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_active_directory_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -538,6 +556,10 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_active_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_active_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/activedirectories".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -545,6 +567,7 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -582,8 +605,9 @@ def graph_user_group_traverse_active_directory_with_http_info(group_id, content_
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_application(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_application_with_http_info(group_id, content_type, accept, opts)
@@ -597,8 +621,9 @@ def graph_user_group_traverse_application(group_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_application_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -616,6 +641,10 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_application"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_application, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/applications".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -623,6 +652,7 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -660,8 +690,9 @@ def graph_user_group_traverse_application_with_http_info(group_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_directory(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_directory_with_http_info(group_id, content_type, accept, opts)
@@ -675,8 +706,9 @@ def graph_user_group_traverse_directory(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_directory_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -694,6 +726,10 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/directories".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -701,6 +737,7 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -738,8 +775,9 @@ def graph_user_group_traverse_directory_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_g_suite(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, accept, opts)
@@ -753,8 +791,9 @@ def graph_user_group_traverse_g_suite(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -772,6 +811,10 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_g_suite"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_g_suite, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/gsuites".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -779,6 +822,7 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -816,8 +860,9 @@ def graph_user_group_traverse_g_suite_with_http_info(group_id, content_type, acc
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_ldap_server(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type, accept, opts)
@@ -831,8 +876,9 @@ def graph_user_group_traverse_ldap_server(group_id, content_type, accept, opts =
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -850,6 +896,10 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_ldap_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_ldap_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/ldapservers".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -857,6 +907,7 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -894,8 +945,9 @@ def graph_user_group_traverse_ldap_server_with_http_info(group_id, content_type,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_office365(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_office365_with_http_info(group_id, content_type, accept, opts)
@@ -909,8 +961,9 @@ def graph_user_group_traverse_office365(group_id, content_type, accept, opts = {
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_office365_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -928,6 +981,10 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_office365"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_office365, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/office365s".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -935,6 +992,7 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -972,8 +1030,9 @@ def graph_user_group_traverse_office365_with_http_info(group_id, content_type, a
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_radius_server(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_radius_server_with_http_info(group_id, content_type, accept, opts)
@@ -987,8 +1046,9 @@ def graph_user_group_traverse_radius_server(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_radius_server_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1006,6 +1066,10 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_radius_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_radius_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/radiusservers".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -1013,6 +1077,7 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1050,8 +1115,9 @@ def graph_user_group_traverse_radius_server_with_http_info(group_id, content_typ
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_system(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_system_with_http_info(group_id, content_type, accept, opts)
@@ -1065,8 +1131,9 @@ def graph_user_group_traverse_system(group_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_system_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1084,6 +1151,10 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/systems".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -1091,6 +1162,7 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1128,8 +1200,9 @@ def graph_user_group_traverse_system_with_http_info(group_id, content_type, acce
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_group_traverse_system_group(group_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_group_traverse_system_group_with_http_info(group_id, content_type, accept, opts)
@@ -1143,8 +1216,9 @@ def graph_user_group_traverse_system_group(group_id, content_type, accept, opts
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_group_traverse_system_group_with_http_info(group_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -1162,6 +1236,10 @@ def graph_user_group_traverse_system_group_with_http_info(group_id, content_type
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.graph_user_group_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.graph_user_group_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups/{group_id}/systemgroups".sub('{' + 'group_id' + '}', group_id.to_s)
 
@@ -1169,6 +1247,7 @@ def graph_user_group_traverse_system_group_with_http_info(group_id, content_type
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -1383,6 +1462,10 @@ def groups_user_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UserGroupsApi.groups_user_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UserGroupsApi.groups_user_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/usergroups"
 
diff --git a/jcapiv2/lib/jcapiv2/api/users_api.rb b/jcapiv2/lib/jcapiv2/api/users_api.rb
index d808caf..a9c5a3b 100644
--- a/jcapiv2/lib/jcapiv2/api/users_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/users_api.rb
@@ -67,6 +67,10 @@ def graph_user_associations_list_with_http_info(user_id, content_type, accept, t
       if @api_client.config.client_side_validation && targets.nil?
         fail ArgumentError, "Missing the required parameter 'targets' when calling UsersApi.graph_user_associations_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_associations_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/associations".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -223,6 +227,10 @@ def graph_user_member_of_with_http_info(user_id, content_type, accept, opts = {}
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_member_of"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_member_of, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/memberof".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -269,8 +277,9 @@ def graph_user_member_of_with_http_info(user_id, content_type, accept, opts = {}
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_application(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_application_with_http_info(user_id, content_type, accept, opts)
@@ -284,8 +293,9 @@ def graph_user_traverse_application(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_application_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -303,6 +313,10 @@ def graph_user_traverse_application_with_http_info(user_id, content_type, accept
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_application"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_application, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/applications".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -310,6 +324,7 @@ def graph_user_traverse_application_with_http_info(user_id, content_type, accept
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -347,8 +362,9 @@ def graph_user_traverse_application_with_http_info(user_id, content_type, accept
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_directory(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_directory_with_http_info(user_id, content_type, accept, opts)
@@ -362,8 +378,9 @@ def graph_user_traverse_directory(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_directory_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -381,6 +398,10 @@ def graph_user_traverse_directory_with_http_info(user_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_directory"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_directory, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/directories".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -388,6 +409,7 @@ def graph_user_traverse_directory_with_http_info(user_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -425,8 +447,9 @@ def graph_user_traverse_directory_with_http_info(user_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_g_suite(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, opts)
@@ -440,8 +463,9 @@ def graph_user_traverse_g_suite(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -459,6 +483,10 @@ def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, op
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_g_suite"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_g_suite, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/gsuites".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -466,6 +494,7 @@ def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, op
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -503,8 +532,9 @@ def graph_user_traverse_g_suite_with_http_info(user_id, content_type, accept, op
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_ldap_server(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept, opts)
@@ -518,8 +548,9 @@ def graph_user_traverse_ldap_server(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -537,6 +568,10 @@ def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_ldap_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_ldap_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/ldapservers".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -544,6 +579,7 @@ def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -581,8 +617,9 @@ def graph_user_traverse_ldap_server_with_http_info(user_id, content_type, accept
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_office365(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_office365_with_http_info(user_id, content_type, accept, opts)
@@ -596,8 +633,9 @@ def graph_user_traverse_office365(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_office365_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -615,6 +653,10 @@ def graph_user_traverse_office365_with_http_info(user_id, content_type, accept,
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_office365"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_office365, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/office365s".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -622,6 +664,7 @@ def graph_user_traverse_office365_with_http_info(user_id, content_type, accept,
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -659,8 +702,9 @@ def graph_user_traverse_office365_with_http_info(user_id, content_type, accept,
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_radius_server(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_radius_server_with_http_info(user_id, content_type, accept, opts)
@@ -674,8 +718,9 @@ def graph_user_traverse_radius_server(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_radius_server_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -693,6 +738,10 @@ def graph_user_traverse_radius_server_with_http_info(user_id, content_type, acce
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_radius_server"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_radius_server, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/radiusservers".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -700,6 +749,7 @@ def graph_user_traverse_radius_server_with_http_info(user_id, content_type, acce
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
@@ -773,6 +823,10 @@ def graph_user_traverse_system_with_http_info(user_id, content_type, accept, opt
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_system"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_system, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/systems".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -818,8 +872,9 @@ def graph_user_traverse_system_with_http_info(user_id, content_type, accept, opt
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100. (default to 10)
-    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
     # @option opts [String] :x_org_id  (default to )
+    # @option opts [Integer] :skip The offset into the records to return. (default to 0)
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<GraphObjectWithPaths>]
     def graph_user_traverse_system_group(user_id, content_type, accept, opts = {})
       data, _status_code, _headers = graph_user_traverse_system_group_with_http_info(user_id, content_type, accept, opts)
@@ -833,8 +888,9 @@ def graph_user_traverse_system_group(user_id, content_type, accept, opts = {})
     # @param accept 
     # @param [Hash] opts the optional parameters
     # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-    # @option opts [Integer] :skip The offset into the records to return.
     # @option opts [String] :x_org_id 
+    # @option opts [Integer] :skip The offset into the records to return.
+    # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
     # @return [Array<(Array<GraphObjectWithPaths>, Fixnum, Hash)>] Array<GraphObjectWithPaths> data, response status code and response headers
     def graph_user_traverse_system_group_with_http_info(user_id, content_type, accept, opts = {})
       if @api_client.config.debugging
@@ -852,6 +908,10 @@ def graph_user_traverse_system_group_with_http_info(user_id, content_type, accep
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling UsersApi.graph_user_traverse_system_group"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling UsersApi.graph_user_traverse_system_group, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/users/{user_id}/systemgroups".sub('{' + 'user_id' + '}', user_id.to_s)
 
@@ -859,6 +919,7 @@ def graph_user_traverse_system_group_with_http_info(user_id, content_type, accep
       query_params = {}
       query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
       query_params[:'skip'] = opts[:'skip'] if !opts[:'skip'].nil?
+      query_params[:'filter'] = @api_client.build_collection_param(opts[:'filter'], :csv) if !opts[:'filter'].nil?
 
       # header parameters
       header_params = {}
diff --git a/jcapiv2/lib/jcapiv2/api/workday_import_api.rb b/jcapiv2/lib/jcapiv2/api/workday_import_api.rb
index 664585f..7e78260 100644
--- a/jcapiv2/lib/jcapiv2/api/workday_import_api.rb
+++ b/jcapiv2/lib/jcapiv2/api/workday_import_api.rb
@@ -429,6 +429,10 @@ def workdays_importresults_with_http_info(id, job_id, content_type, accept, opts
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling WorkdayImportApi.workdays_importresults"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling WorkdayImportApi.workdays_importresults, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/workdays/{id}/import/{job_id}/results".sub('{' + 'id' + '}', id.to_s).sub('{' + 'job_id' + '}', job_id.to_s)
 
@@ -507,6 +511,10 @@ def workdays_list_with_http_info(content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling WorkdayImportApi.workdays_list"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling WorkdayImportApi.workdays_list, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/workdays"
 
@@ -799,6 +807,10 @@ def workdays_workers_with_http_info(workday_id, content_type, accept, opts = {})
       if @api_client.config.client_side_validation && accept.nil?
         fail ArgumentError, "Missing the required parameter 'accept' when calling WorkdayImportApi.workdays_workers"
       end
+      if @api_client.config.client_side_validation && !opts[:'skip'].nil? && opts[:'skip'] < 0
+        fail ArgumentError, 'invalid value for "opts[:"skip"]" when calling WorkdayImportApi.workdays_workers, must be greater than or equal to 0.'
+      end
+
       # resource path
       local_var_path = "/workdays/{workday_id}/workers".sub('{' + 'workday_id' + '}', workday_id.to_s)
 
diff --git a/jcapiv2/lib/jcapiv2/models/active_directory_agent_get_output.rb b/jcapiv2/lib/jcapiv2/models/active_directory_agent_get_output.rb
new file mode 100644
index 0000000..212231f
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/active_directory_agent_get_output.rb
@@ -0,0 +1,204 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class ActiveDirectoryAgentGetOutput
+    # ObjectID of this Active Directory Agent.
+    attr_accessor :id
+
+    # The connect key to use when installing the Agent on a Domain Controller.
+    attr_accessor :connect_key
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'id' => :'id',
+        :'connect_key' => :'connectKey'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'id' => :'String',
+        :'connect_key' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'id')
+        self.id = attributes[:'id']
+      end
+
+      if attributes.has_key?(:'connectKey')
+        self.connect_key = attributes[:'connectKey']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      if @id.nil?
+        invalid_properties.push("invalid value for 'id', id cannot be nil.")
+      end
+
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return false if @id.nil?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          id == o.id &&
+          connect_key == o.connect_key
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [id, connect_key].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/active_directory_agent_input.rb b/jcapiv2/lib/jcapiv2/models/active_directory_agent_input.rb
new file mode 100644
index 0000000..d3d8d1e
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/active_directory_agent_input.rb
@@ -0,0 +1,179 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class ActiveDirectoryAgentInput
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/active_directory_agent_list_output.rb b/jcapiv2/lib/jcapiv2/models/active_directory_agent_list_output.rb
new file mode 100644
index 0000000..848f842
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/active_directory_agent_list_output.rb
@@ -0,0 +1,231 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class ActiveDirectoryAgentListOutput
+    # ObjectID of this Active Directory Agent.
+    attr_accessor :id
+
+    attr_accessor :state
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'id' => :'id',
+        :'state' => :'state'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'id' => :'String',
+        :'state' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'id')
+        self.id = attributes[:'id']
+      end
+
+      if attributes.has_key?(:'state')
+        self.state = attributes[:'state']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      state_validator = EnumAttributeValidator.new('String', ["unsealed", "active", "inactive"])
+      return false unless state_validator.valid?(@state)
+      return true
+    end
+
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] state Object to be assigned
+    def state=(state)
+      validator = EnumAttributeValidator.new('String', ["unsealed", "active", "inactive"])
+      unless validator.valid?(state)
+        fail ArgumentError, "invalid value for 'state', must be one of #{validator.allowable_values}."
+      end
+      @state = state
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          id == o.id &&
+          state == o.state
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [id, state].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/body.rb b/jcapiv2/lib/jcapiv2/models/body.rb
new file mode 100644
index 0000000..6b6668b
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/body.rb
@@ -0,0 +1,206 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class Body
+    attr_accessor :id
+
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'id' => :'id',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'id' => :'String',
+        :'user_lockout_action' => :'LdapServerAction',
+        :'user_password_expiration_action' => :'LdapServerAction'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'id')
+        self.id = attributes[:'id']
+      end
+
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          id == o.id &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [id, user_lockout_action, user_password_expiration_action].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/gsuite_output.rb b/jcapiv2/lib/jcapiv2/models/gsuite_output.rb
new file mode 100644
index 0000000..1d68c77
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/gsuite_output.rb
@@ -0,0 +1,251 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class GsuiteOutput
+    attr_accessor :id
+
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'id' => :'id',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'id' => :'String',
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'id')
+        self.id = attributes[:'id']
+      end
+
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      user_lockout_action_validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      return false unless user_lockout_action_validator.valid?(@user_lockout_action)
+      user_password_expiration_action_validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      return false unless user_password_expiration_action_validator.valid?(@user_password_expiration_action)
+      return true
+    end
+
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_lockout_action Object to be assigned
+    def user_lockout_action=(user_lockout_action)
+      validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      unless validator.valid?(user_lockout_action)
+        fail ArgumentError, "invalid value for 'user_lockout_action', must be one of #{validator.allowable_values}."
+      end
+      @user_lockout_action = user_lockout_action
+    end
+
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_password_expiration_action Object to be assigned
+    def user_password_expiration_action=(user_password_expiration_action)
+      validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      unless validator.valid?(user_password_expiration_action)
+        fail ArgumentError, "invalid value for 'user_password_expiration_action', must be one of #{validator.allowable_values}."
+      end
+      @user_password_expiration_action = user_password_expiration_action
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          id == o.id &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [id, user_lockout_action, user_password_expiration_action].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/gsuite_patch_input.rb b/jcapiv2/lib/jcapiv2/models/gsuite_patch_input.rb
new file mode 100644
index 0000000..16e02eb
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/gsuite_patch_input.rb
@@ -0,0 +1,242 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class GsuitePatchInput
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      user_lockout_action_validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      return false unless user_lockout_action_validator.valid?(@user_lockout_action)
+      user_password_expiration_action_validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      return false unless user_password_expiration_action_validator.valid?(@user_password_expiration_action)
+      return true
+    end
+
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_lockout_action Object to be assigned
+    def user_lockout_action=(user_lockout_action)
+      validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      unless validator.valid?(user_lockout_action)
+        fail ArgumentError, "invalid value for 'user_lockout_action', must be one of #{validator.allowable_values}."
+      end
+      @user_lockout_action = user_lockout_action
+    end
+
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_password_expiration_action Object to be assigned
+    def user_password_expiration_action=(user_password_expiration_action)
+      validator = EnumAttributeValidator.new('String', ["suspend", "maintain"])
+      unless validator.valid?(user_password_expiration_action)
+        fail ArgumentError, "invalid value for 'user_password_expiration_action', must be one of #{validator.allowable_values}."
+      end
+      @user_password_expiration_action = user_password_expiration_action
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [user_lockout_action, user_password_expiration_action].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/inline_response_200.rb b/jcapiv2/lib/jcapiv2/models/inline_response_200.rb
index 5086943..a33fdde 100644
--- a/jcapiv2/lib/jcapiv2/models/inline_response_200.rb
+++ b/jcapiv2/lib/jcapiv2/models/inline_response_200.rb
@@ -15,24 +15,32 @@
 module JCAPIv2
 
   class InlineResponse200
-    attr_accessor :total_count
+    attr_accessor :id
 
-    attr_accessor :results
+    attr_accessor :name
+
+    attr_accessor :user_lockout_action
+
+    attr_accessor :user_password_expiration_action
 
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
       {
-        :'total_count' => :'totalCount',
-        :'results' => :'results'
+        :'id' => :'id',
+        :'name' => :'name',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction'
       }
     end
 
     # Attribute type mapping.
     def self.swagger_types
       {
-        :'total_count' => :'Integer',
-        :'results' => :'Array<Administrator>'
+        :'id' => :'String',
+        :'name' => :'String',
+        :'user_lockout_action' => :'LdapServerAction',
+        :'user_password_expiration_action' => :'LdapServerAction'
       }
     end
 
@@ -44,14 +52,20 @@ def initialize(attributes = {})
       # convert string to symbol for hash key
       attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
 
-      if attributes.has_key?(:'totalCount')
-        self.total_count = attributes[:'totalCount']
+      if attributes.has_key?(:'id')
+        self.id = attributes[:'id']
       end
 
-      if attributes.has_key?(:'results')
-        if (value = attributes[:'results']).is_a?(Array)
-          self.results = value
-        end
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
       end
 
     end
@@ -74,8 +88,10 @@ def valid?
     def ==(o)
       return true if self.equal?(o)
       self.class == o.class &&
-          total_count == o.total_count &&
-          results == o.results
+          id == o.id &&
+          name == o.name &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action
     end
 
     # @see the `==` method
@@ -87,7 +103,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [total_count, results].hash
+      [id, name, user_lockout_action, user_password_expiration_action].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/inline_response_200_1.rb b/jcapiv2/lib/jcapiv2/models/inline_response_200_1.rb
new file mode 100644
index 0000000..eb6de3b
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/inline_response_200_1.rb
@@ -0,0 +1,199 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class InlineResponse2001
+    attr_accessor :total_count
+
+    attr_accessor :results
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'total_count' => :'totalCount',
+        :'results' => :'results'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'total_count' => :'Integer',
+        :'results' => :'Array<Administrator>'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'totalCount')
+        self.total_count = attributes[:'totalCount']
+      end
+
+      if attributes.has_key?(:'results')
+        if (value = attributes[:'results']).is_a?(Array)
+          self.results = value
+        end
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          total_count == o.total_count &&
+          results == o.results
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [total_count, results].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/inline_response_401.rb b/jcapiv2/lib/jcapiv2/models/inline_response_400.rb
similarity index 99%
rename from jcapiv2/lib/jcapiv2/models/inline_response_401.rb
rename to jcapiv2/lib/jcapiv2/models/inline_response_400.rb
index 0838eb9..d16ecfa 100644
--- a/jcapiv2/lib/jcapiv2/models/inline_response_401.rb
+++ b/jcapiv2/lib/jcapiv2/models/inline_response_400.rb
@@ -14,7 +14,7 @@
 
 module JCAPIv2
 
-  class InlineResponse401
+  class InlineResponse400
     attr_accessor :message
 
 
diff --git a/jcapiv2/lib/jcapiv2/models/ldap_server_action.rb b/jcapiv2/lib/jcapiv2/models/ldap_server_action.rb
new file mode 100644
index 0000000..048970e
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/ldap_server_action.rb
@@ -0,0 +1,31 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+  class LdapServerAction
+    
+    DISABLE = "disable".freeze
+    REMOVE = "remove".freeze
+
+    # Builds the enum from string
+    # @param [String] The enum value in the form of the string
+    # @return [String] The enum value
+    def build_from_hash(value)
+      constantValues = LdapServerAction.constants.select{|c| LdapServerAction::const_get(c) == value}
+      raise "Invalid ENUM value #{value} for class #LdapServerAction" if constantValues.empty?
+      value
+    end
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/ldap_server_input.rb b/jcapiv2/lib/jcapiv2/models/ldap_server_input.rb
index b7e8db6..6c67b6b 100644
--- a/jcapiv2/lib/jcapiv2/models/ldap_server_input.rb
+++ b/jcapiv2/lib/jcapiv2/models/ldap_server_input.rb
@@ -18,18 +18,49 @@ class LdapServerInput
     # The name of this LDAP server
     attr_accessor :name
 
+    # action to take; one of 'remove' or 'disable'
+    attr_accessor :user_lockout_action
+
+    # action to take; one of 'remove' or 'disable'
+    attr_accessor :user_password_expiration_action
+
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
       {
-        :'name' => :'name'
+        :'name' => :'name',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction'
       }
     end
 
     # Attribute type mapping.
     def self.swagger_types
       {
-        :'name' => :'String'
+        :'name' => :'String',
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String'
       }
     end
 
@@ -45,6 +76,14 @@ def initialize(attributes = {})
         self.name = attributes[:'name']
       end
 
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -57,15 +96,41 @@ def list_invalid_properties
     # Check to see if the all the properties in the model are valid
     # @return true if the model is valid
     def valid?
+      user_lockout_action_validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      return false unless user_lockout_action_validator.valid?(@user_lockout_action)
+      user_password_expiration_action_validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      return false unless user_password_expiration_action_validator.valid?(@user_password_expiration_action)
       return true
     end
 
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_lockout_action Object to be assigned
+    def user_lockout_action=(user_lockout_action)
+      validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      unless validator.valid?(user_lockout_action)
+        fail ArgumentError, "invalid value for 'user_lockout_action', must be one of #{validator.allowable_values}."
+      end
+      @user_lockout_action = user_lockout_action
+    end
+
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_password_expiration_action Object to be assigned
+    def user_password_expiration_action=(user_password_expiration_action)
+      validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      unless validator.valid?(user_password_expiration_action)
+        fail ArgumentError, "invalid value for 'user_password_expiration_action', must be one of #{validator.allowable_values}."
+      end
+      @user_password_expiration_action = user_password_expiration_action
+    end
+
     # Checks equality by comparing each attribute.
     # @param [Object] Object to be compared
     def ==(o)
       return true if self.equal?(o)
       self.class == o.class &&
-          name == o.name
+          name == o.name &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action
     end
 
     # @see the `==` method
@@ -77,7 +142,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [name].hash
+      [name, user_lockout_action, user_password_expiration_action].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/ldap_server_output.rb b/jcapiv2/lib/jcapiv2/models/ldap_server_output.rb
index a80ab46..3e24fc9 100644
--- a/jcapiv2/lib/jcapiv2/models/ldap_server_output.rb
+++ b/jcapiv2/lib/jcapiv2/models/ldap_server_output.rb
@@ -18,14 +18,43 @@ class LdapServerOutput
     # The name of this LDAP server
     attr_accessor :name
 
+    # action to take; one of 'remove' or 'disable'
+    attr_accessor :user_lockout_action
+
+    # action to take; one of 'remove' or 'disable'
+    attr_accessor :user_password_expiration_action
+
     # Unique identifier of this LDAP server
     attr_accessor :id
 
+    class EnumAttributeValidator
+      attr_reader :datatype
+      attr_reader :allowable_values
+
+      def initialize(datatype, allowable_values)
+        @allowable_values = allowable_values.map do |value|
+          case datatype.to_s
+          when /Integer/i
+            value.to_i
+          when /Float/i
+            value.to_f
+          else
+            value
+          end
+        end
+      end
+
+      def valid?(value)
+        !value || allowable_values.include?(value)
+      end
+    end
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
       {
         :'name' => :'name',
+        :'user_lockout_action' => :'userLockoutAction',
+        :'user_password_expiration_action' => :'userPasswordExpirationAction',
         :'id' => :'id'
       }
     end
@@ -34,6 +63,8 @@ def self.attribute_map
     def self.swagger_types
       {
         :'name' => :'String',
+        :'user_lockout_action' => :'String',
+        :'user_password_expiration_action' => :'String',
         :'id' => :'String'
       }
     end
@@ -50,6 +81,14 @@ def initialize(attributes = {})
         self.name = attributes[:'name']
       end
 
+      if attributes.has_key?(:'userLockoutAction')
+        self.user_lockout_action = attributes[:'userLockoutAction']
+      end
+
+      if attributes.has_key?(:'userPasswordExpirationAction')
+        self.user_password_expiration_action = attributes[:'userPasswordExpirationAction']
+      end
+
       if attributes.has_key?(:'id')
         self.id = attributes[:'id']
       end
@@ -70,16 +109,42 @@ def list_invalid_properties
     # Check to see if the all the properties in the model are valid
     # @return true if the model is valid
     def valid?
+      user_lockout_action_validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      return false unless user_lockout_action_validator.valid?(@user_lockout_action)
+      user_password_expiration_action_validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      return false unless user_password_expiration_action_validator.valid?(@user_password_expiration_action)
       return false if @id.nil?
       return true
     end
 
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_lockout_action Object to be assigned
+    def user_lockout_action=(user_lockout_action)
+      validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      unless validator.valid?(user_lockout_action)
+        fail ArgumentError, "invalid value for 'user_lockout_action', must be one of #{validator.allowable_values}."
+      end
+      @user_lockout_action = user_lockout_action
+    end
+
+    # Custom attribute writer method checking allowed values (enum).
+    # @param [Object] user_password_expiration_action Object to be assigned
+    def user_password_expiration_action=(user_password_expiration_action)
+      validator = EnumAttributeValidator.new('String', ["disable", "remove"])
+      unless validator.valid?(user_password_expiration_action)
+        fail ArgumentError, "invalid value for 'user_password_expiration_action', must be one of #{validator.allowable_values}."
+      end
+      @user_password_expiration_action = user_password_expiration_action
+    end
+
     # Checks equality by comparing each attribute.
     # @param [Object] Object to be compared
     def ==(o)
       return true if self.equal?(o)
       self.class == o.class &&
           name == o.name &&
+          user_lockout_action == o.user_lockout_action &&
+          user_password_expiration_action == o.user_password_expiration_action &&
           id == o.id
     end
 
@@ -92,7 +157,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [name, id].hash
+      [name, user_lockout_action, user_password_expiration_action, id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/org_crypto_settings.rb b/jcapiv2/lib/jcapiv2/models/org_crypto_settings.rb
new file mode 100644
index 0000000..3488493
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/org_crypto_settings.rb
@@ -0,0 +1,188 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class OrgCryptoSettings
+    attr_accessor :ssh_keys
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'ssh_keys' => :'sshKeys'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'ssh_keys' => :'OrgcryptosettingsSshKeys'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'sshKeys')
+        self.ssh_keys = attributes[:'sshKeys']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          ssh_keys == o.ssh_keys
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [ssh_keys].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/orgcryptosettings_ssh_keys.rb b/jcapiv2/lib/jcapiv2/models/orgcryptosettings_ssh_keys.rb
new file mode 100644
index 0000000..a7e56f2
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/orgcryptosettings_ssh_keys.rb
@@ -0,0 +1,206 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class OrgcryptosettingsSshKeys
+    attr_accessor :validate
+
+    attr_accessor :validate_key_size
+
+    attr_accessor :key_size
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'validate' => :'validate',
+        :'validate_key_size' => :'validateKeySize',
+        :'key_size' => :'keySize'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'validate' => :'BOOLEAN',
+        :'validate_key_size' => :'BOOLEAN',
+        :'key_size' => :'Integer'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'validate')
+        self.validate = attributes[:'validate']
+      end
+
+      if attributes.has_key?(:'validateKeySize')
+        self.validate_key_size = attributes[:'validateKeySize']
+      end
+
+      if attributes.has_key?(:'keySize')
+        self.key_size = attributes[:'keySize']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          validate == o.validate &&
+          validate_key_size == o.validate_key_size &&
+          key_size == o.key_size
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [validate, validate_key_size, key_size].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_apps.rb b/jcapiv2/lib/jcapiv2/models/system_insights_apps.rb
new file mode 100644
index 0000000..6b77e7d
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_apps.rb
@@ -0,0 +1,377 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsApps
+    attr_accessor :name
+
+    attr_accessor :path
+
+    attr_accessor :bundle_executable
+
+    attr_accessor :bundle_identifier
+
+    attr_accessor :bundle_name
+
+    attr_accessor :bundle_short_version
+
+    attr_accessor :bundle_version
+
+    attr_accessor :bundle_package_type
+
+    attr_accessor :environment
+
+    attr_accessor :element
+
+    attr_accessor :compiler
+
+    attr_accessor :development_region
+
+    attr_accessor :display_name
+
+    attr_accessor :info_string
+
+    attr_accessor :minimum_system_version
+
+    attr_accessor :category
+
+    attr_accessor :applescript_enabled
+
+    attr_accessor :copyright
+
+    attr_accessor :last_opened_time
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'name' => :'name',
+        :'path' => :'path',
+        :'bundle_executable' => :'bundle_executable',
+        :'bundle_identifier' => :'bundle_identifier',
+        :'bundle_name' => :'bundle_name',
+        :'bundle_short_version' => :'bundle_short_version',
+        :'bundle_version' => :'bundle_version',
+        :'bundle_package_type' => :'bundle_package_type',
+        :'environment' => :'environment',
+        :'element' => :'element',
+        :'compiler' => :'compiler',
+        :'development_region' => :'development_region',
+        :'display_name' => :'display_name',
+        :'info_string' => :'info_string',
+        :'minimum_system_version' => :'minimum_system_version',
+        :'category' => :'category',
+        :'applescript_enabled' => :'applescript_enabled',
+        :'copyright' => :'copyright',
+        :'last_opened_time' => :'last_opened_time',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'name' => :'String',
+        :'path' => :'String',
+        :'bundle_executable' => :'String',
+        :'bundle_identifier' => :'String',
+        :'bundle_name' => :'String',
+        :'bundle_short_version' => :'String',
+        :'bundle_version' => :'String',
+        :'bundle_package_type' => :'String',
+        :'environment' => :'String',
+        :'element' => :'String',
+        :'compiler' => :'String',
+        :'development_region' => :'String',
+        :'display_name' => :'String',
+        :'info_string' => :'String',
+        :'minimum_system_version' => :'String',
+        :'category' => :'String',
+        :'applescript_enabled' => :'String',
+        :'copyright' => :'String',
+        :'last_opened_time' => :'Float',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'path')
+        self.path = attributes[:'path']
+      end
+
+      if attributes.has_key?(:'bundle_executable')
+        self.bundle_executable = attributes[:'bundle_executable']
+      end
+
+      if attributes.has_key?(:'bundle_identifier')
+        self.bundle_identifier = attributes[:'bundle_identifier']
+      end
+
+      if attributes.has_key?(:'bundle_name')
+        self.bundle_name = attributes[:'bundle_name']
+      end
+
+      if attributes.has_key?(:'bundle_short_version')
+        self.bundle_short_version = attributes[:'bundle_short_version']
+      end
+
+      if attributes.has_key?(:'bundle_version')
+        self.bundle_version = attributes[:'bundle_version']
+      end
+
+      if attributes.has_key?(:'bundle_package_type')
+        self.bundle_package_type = attributes[:'bundle_package_type']
+      end
+
+      if attributes.has_key?(:'environment')
+        self.environment = attributes[:'environment']
+      end
+
+      if attributes.has_key?(:'element')
+        self.element = attributes[:'element']
+      end
+
+      if attributes.has_key?(:'compiler')
+        self.compiler = attributes[:'compiler']
+      end
+
+      if attributes.has_key?(:'development_region')
+        self.development_region = attributes[:'development_region']
+      end
+
+      if attributes.has_key?(:'display_name')
+        self.display_name = attributes[:'display_name']
+      end
+
+      if attributes.has_key?(:'info_string')
+        self.info_string = attributes[:'info_string']
+      end
+
+      if attributes.has_key?(:'minimum_system_version')
+        self.minimum_system_version = attributes[:'minimum_system_version']
+      end
+
+      if attributes.has_key?(:'category')
+        self.category = attributes[:'category']
+      end
+
+      if attributes.has_key?(:'applescript_enabled')
+        self.applescript_enabled = attributes[:'applescript_enabled']
+      end
+
+      if attributes.has_key?(:'copyright')
+        self.copyright = attributes[:'copyright']
+      end
+
+      if attributes.has_key?(:'last_opened_time')
+        self.last_opened_time = attributes[:'last_opened_time']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          name == o.name &&
+          path == o.path &&
+          bundle_executable == o.bundle_executable &&
+          bundle_identifier == o.bundle_identifier &&
+          bundle_name == o.bundle_name &&
+          bundle_short_version == o.bundle_short_version &&
+          bundle_version == o.bundle_version &&
+          bundle_package_type == o.bundle_package_type &&
+          environment == o.environment &&
+          element == o.element &&
+          compiler == o.compiler &&
+          development_region == o.development_region &&
+          display_name == o.display_name &&
+          info_string == o.info_string &&
+          minimum_system_version == o.minimum_system_version &&
+          category == o.category &&
+          applescript_enabled == o.applescript_enabled &&
+          copyright == o.copyright &&
+          last_opened_time == o.last_opened_time &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [name, path, bundle_executable, bundle_identifier, bundle_name, bundle_short_version, bundle_version, bundle_package_type, environment, element, compiler, development_region, display_name, info_string, minimum_system_version, category, applescript_enabled, copyright, last_opened_time, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb b/jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb
new file mode 100644
index 0000000..39d18b7
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb
@@ -0,0 +1,296 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsBrowserPlugins
+    attr_accessor :uid
+
+    attr_accessor :name
+
+    attr_accessor :identifier
+
+    attr_accessor :version
+
+    attr_accessor :sdk
+
+    attr_accessor :description
+
+    attr_accessor :development_region
+
+    attr_accessor :native
+
+    attr_accessor :path
+
+    attr_accessor :disabled
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'uid' => :'uid',
+        :'name' => :'name',
+        :'identifier' => :'identifier',
+        :'version' => :'version',
+        :'sdk' => :'sdk',
+        :'description' => :'description',
+        :'development_region' => :'development_region',
+        :'native' => :'native',
+        :'path' => :'path',
+        :'disabled' => :'disabled',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'uid' => :'String',
+        :'name' => :'String',
+        :'identifier' => :'String',
+        :'version' => :'String',
+        :'sdk' => :'String',
+        :'description' => :'String',
+        :'development_region' => :'String',
+        :'native' => :'Integer',
+        :'path' => :'String',
+        :'disabled' => :'Integer',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'uid')
+        self.uid = attributes[:'uid']
+      end
+
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'identifier')
+        self.identifier = attributes[:'identifier']
+      end
+
+      if attributes.has_key?(:'version')
+        self.version = attributes[:'version']
+      end
+
+      if attributes.has_key?(:'sdk')
+        self.sdk = attributes[:'sdk']
+      end
+
+      if attributes.has_key?(:'description')
+        self.description = attributes[:'description']
+      end
+
+      if attributes.has_key?(:'development_region')
+        self.development_region = attributes[:'development_region']
+      end
+
+      if attributes.has_key?(:'native')
+        self.native = attributes[:'native']
+      end
+
+      if attributes.has_key?(:'path')
+        self.path = attributes[:'path']
+      end
+
+      if attributes.has_key?(:'disabled')
+        self.disabled = attributes[:'disabled']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          uid == o.uid &&
+          name == o.name &&
+          identifier == o.identifier &&
+          version == o.version &&
+          sdk == o.sdk &&
+          description == o.description &&
+          development_region == o.development_region &&
+          native == o.native &&
+          path == o.path &&
+          disabled == o.disabled &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [uid, name, identifier, version, sdk, description, development_region, native, path, disabled, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb b/jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb
new file mode 100644
index 0000000..5e6a815
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb
@@ -0,0 +1,305 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsChromeExtensions
+    attr_accessor :uid
+
+    attr_accessor :name
+
+    attr_accessor :identifier
+
+    attr_accessor :version
+
+    attr_accessor :description
+
+    attr_accessor :locale
+
+    attr_accessor :update_url
+
+    attr_accessor :author
+
+    attr_accessor :persistent
+
+    attr_accessor :path
+
+    attr_accessor :permissions
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'uid' => :'uid',
+        :'name' => :'name',
+        :'identifier' => :'identifier',
+        :'version' => :'version',
+        :'description' => :'description',
+        :'locale' => :'locale',
+        :'update_url' => :'update_url',
+        :'author' => :'author',
+        :'persistent' => :'persistent',
+        :'path' => :'path',
+        :'permissions' => :'permissions',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'uid' => :'String',
+        :'name' => :'String',
+        :'identifier' => :'String',
+        :'version' => :'String',
+        :'description' => :'String',
+        :'locale' => :'String',
+        :'update_url' => :'String',
+        :'author' => :'String',
+        :'persistent' => :'Integer',
+        :'path' => :'String',
+        :'permissions' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'uid')
+        self.uid = attributes[:'uid']
+      end
+
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'identifier')
+        self.identifier = attributes[:'identifier']
+      end
+
+      if attributes.has_key?(:'version')
+        self.version = attributes[:'version']
+      end
+
+      if attributes.has_key?(:'description')
+        self.description = attributes[:'description']
+      end
+
+      if attributes.has_key?(:'locale')
+        self.locale = attributes[:'locale']
+      end
+
+      if attributes.has_key?(:'update_url')
+        self.update_url = attributes[:'update_url']
+      end
+
+      if attributes.has_key?(:'author')
+        self.author = attributes[:'author']
+      end
+
+      if attributes.has_key?(:'persistent')
+        self.persistent = attributes[:'persistent']
+      end
+
+      if attributes.has_key?(:'path')
+        self.path = attributes[:'path']
+      end
+
+      if attributes.has_key?(:'permissions')
+        self.permissions = attributes[:'permissions']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          uid == o.uid &&
+          name == o.name &&
+          identifier == o.identifier &&
+          version == o.version &&
+          description == o.description &&
+          locale == o.locale &&
+          update_url == o.update_url &&
+          author == o.author &&
+          persistent == o.persistent &&
+          path == o.path &&
+          permissions == o.permissions &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [uid, name, identifier, version, description, locale, update_url, author, persistent, path, permissions, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb b/jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb
new file mode 100644
index 0000000..ed31e12
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb
@@ -0,0 +1,269 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsDiskEncryption
+    attr_accessor :name
+
+    attr_accessor :uuid
+
+    attr_accessor :encrypted
+
+    attr_accessor :type
+
+    attr_accessor :uid
+
+    attr_accessor :user_uuid
+
+    attr_accessor :encryption_status
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'name' => :'name',
+        :'uuid' => :'uuid',
+        :'encrypted' => :'encrypted',
+        :'type' => :'type',
+        :'uid' => :'uid',
+        :'user_uuid' => :'user_uuid',
+        :'encryption_status' => :'encryption_status',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'name' => :'String',
+        :'uuid' => :'String',
+        :'encrypted' => :'Integer',
+        :'type' => :'String',
+        :'uid' => :'String',
+        :'user_uuid' => :'String',
+        :'encryption_status' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'uuid')
+        self.uuid = attributes[:'uuid']
+      end
+
+      if attributes.has_key?(:'encrypted')
+        self.encrypted = attributes[:'encrypted']
+      end
+
+      if attributes.has_key?(:'type')
+        self.type = attributes[:'type']
+      end
+
+      if attributes.has_key?(:'uid')
+        self.uid = attributes[:'uid']
+      end
+
+      if attributes.has_key?(:'user_uuid')
+        self.user_uuid = attributes[:'user_uuid']
+      end
+
+      if attributes.has_key?(:'encryption_status')
+        self.encryption_status = attributes[:'encryption_status']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          name == o.name &&
+          uuid == o.uuid &&
+          encrypted == o.encrypted &&
+          type == o.type &&
+          uid == o.uid &&
+          user_uuid == o.user_uuid &&
+          encryption_status == o.encryption_status &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [name, uuid, encrypted, type, uid, user_uuid, encryption_status, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb b/jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb
new file mode 100644
index 0000000..802a538
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb
@@ -0,0 +1,332 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsFirefoxAddons
+    attr_accessor :uid
+
+    attr_accessor :name
+
+    attr_accessor :identifier
+
+    attr_accessor :creator
+
+    attr_accessor :type
+
+    attr_accessor :version
+
+    attr_accessor :description
+
+    attr_accessor :source_url
+
+    attr_accessor :visible
+
+    attr_accessor :active
+
+    attr_accessor :disabled
+
+    attr_accessor :autoupdate
+
+    attr_accessor :location
+
+    attr_accessor :path
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'uid' => :'uid',
+        :'name' => :'name',
+        :'identifier' => :'identifier',
+        :'creator' => :'creator',
+        :'type' => :'type',
+        :'version' => :'version',
+        :'description' => :'description',
+        :'source_url' => :'source_url',
+        :'visible' => :'visible',
+        :'active' => :'active',
+        :'disabled' => :'disabled',
+        :'autoupdate' => :'autoupdate',
+        :'location' => :'location',
+        :'path' => :'path',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'uid' => :'String',
+        :'name' => :'String',
+        :'identifier' => :'String',
+        :'creator' => :'String',
+        :'type' => :'String',
+        :'version' => :'String',
+        :'description' => :'String',
+        :'source_url' => :'String',
+        :'visible' => :'Integer',
+        :'active' => :'Integer',
+        :'disabled' => :'Integer',
+        :'autoupdate' => :'Integer',
+        :'location' => :'String',
+        :'path' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'uid')
+        self.uid = attributes[:'uid']
+      end
+
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'identifier')
+        self.identifier = attributes[:'identifier']
+      end
+
+      if attributes.has_key?(:'creator')
+        self.creator = attributes[:'creator']
+      end
+
+      if attributes.has_key?(:'type')
+        self.type = attributes[:'type']
+      end
+
+      if attributes.has_key?(:'version')
+        self.version = attributes[:'version']
+      end
+
+      if attributes.has_key?(:'description')
+        self.description = attributes[:'description']
+      end
+
+      if attributes.has_key?(:'source_url')
+        self.source_url = attributes[:'source_url']
+      end
+
+      if attributes.has_key?(:'visible')
+        self.visible = attributes[:'visible']
+      end
+
+      if attributes.has_key?(:'active')
+        self.active = attributes[:'active']
+      end
+
+      if attributes.has_key?(:'disabled')
+        self.disabled = attributes[:'disabled']
+      end
+
+      if attributes.has_key?(:'autoupdate')
+        self.autoupdate = attributes[:'autoupdate']
+      end
+
+      if attributes.has_key?(:'location')
+        self.location = attributes[:'location']
+      end
+
+      if attributes.has_key?(:'path')
+        self.path = attributes[:'path']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          uid == o.uid &&
+          name == o.name &&
+          identifier == o.identifier &&
+          creator == o.creator &&
+          type == o.type &&
+          version == o.version &&
+          description == o.description &&
+          source_url == o.source_url &&
+          visible == o.visible &&
+          active == o.active &&
+          disabled == o.disabled &&
+          autoupdate == o.autoupdate &&
+          location == o.location &&
+          path == o.path &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [uid, name, identifier, creator, type, version, description, source_url, visible, active, disabled, autoupdate, location, path, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_groups.rb b/jcapiv2/lib/jcapiv2/models/system_insights_groups.rb
new file mode 100644
index 0000000..455dd62
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_groups.rb
@@ -0,0 +1,251 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsGroups
+    attr_accessor :gid
+
+    attr_accessor :gid_signed
+
+    attr_accessor :groupname
+
+    attr_accessor :group_sid
+
+    attr_accessor :comment
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'gid' => :'gid',
+        :'gid_signed' => :'gid_signed',
+        :'groupname' => :'groupname',
+        :'group_sid' => :'group_sid',
+        :'comment' => :'comment',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'gid' => :'String',
+        :'gid_signed' => :'String',
+        :'groupname' => :'String',
+        :'group_sid' => :'String',
+        :'comment' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'gid')
+        self.gid = attributes[:'gid']
+      end
+
+      if attributes.has_key?(:'gid_signed')
+        self.gid_signed = attributes[:'gid_signed']
+      end
+
+      if attributes.has_key?(:'groupname')
+        self.groupname = attributes[:'groupname']
+      end
+
+      if attributes.has_key?(:'group_sid')
+        self.group_sid = attributes[:'group_sid']
+      end
+
+      if attributes.has_key?(:'comment')
+        self.comment = attributes[:'comment']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          gid == o.gid &&
+          gid_signed == o.gid_signed &&
+          groupname == o.groupname &&
+          group_sid == o.group_sid &&
+          comment == o.comment &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [gid, gid_signed, groupname, group_sid, comment, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb b/jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb
new file mode 100644
index 0000000..612b4f8
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb
@@ -0,0 +1,269 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsInterfaceAddresses
+    attr_accessor :interface
+
+    attr_accessor :address
+
+    attr_accessor :mask
+
+    attr_accessor :broadcast
+
+    attr_accessor :point_to_point
+
+    attr_accessor :type
+
+    attr_accessor :friendly_name
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'interface' => :'interface',
+        :'address' => :'address',
+        :'mask' => :'mask',
+        :'broadcast' => :'broadcast',
+        :'point_to_point' => :'point_to_point',
+        :'type' => :'type',
+        :'friendly_name' => :'friendly_name',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'interface' => :'String',
+        :'address' => :'String',
+        :'mask' => :'String',
+        :'broadcast' => :'String',
+        :'point_to_point' => :'String',
+        :'type' => :'String',
+        :'friendly_name' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'interface')
+        self.interface = attributes[:'interface']
+      end
+
+      if attributes.has_key?(:'address')
+        self.address = attributes[:'address']
+      end
+
+      if attributes.has_key?(:'mask')
+        self.mask = attributes[:'mask']
+      end
+
+      if attributes.has_key?(:'broadcast')
+        self.broadcast = attributes[:'broadcast']
+      end
+
+      if attributes.has_key?(:'point_to_point')
+        self.point_to_point = attributes[:'point_to_point']
+      end
+
+      if attributes.has_key?(:'type')
+        self.type = attributes[:'type']
+      end
+
+      if attributes.has_key?(:'friendly_name')
+        self.friendly_name = attributes[:'friendly_name']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          interface == o.interface &&
+          address == o.address &&
+          mask == o.mask &&
+          broadcast == o.broadcast &&
+          point_to_point == o.point_to_point &&
+          type == o.type &&
+          friendly_name == o.friendly_name &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [interface, address, mask, broadcast, point_to_point, type, friendly_name, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb b/jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb
new file mode 100644
index 0000000..0a3c065
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb
@@ -0,0 +1,305 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsMounts
+    attr_accessor :device
+
+    attr_accessor :device_alias
+
+    attr_accessor :path
+
+    attr_accessor :type
+
+    attr_accessor :blocks_size
+
+    attr_accessor :blocks
+
+    attr_accessor :blocks_free
+
+    attr_accessor :blocks_available
+
+    attr_accessor :inodes
+
+    attr_accessor :inodes_free
+
+    attr_accessor :flags
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'device' => :'device',
+        :'device_alias' => :'device_alias',
+        :'path' => :'path',
+        :'type' => :'type',
+        :'blocks_size' => :'blocks_size',
+        :'blocks' => :'blocks',
+        :'blocks_free' => :'blocks_free',
+        :'blocks_available' => :'blocks_available',
+        :'inodes' => :'inodes',
+        :'inodes_free' => :'inodes_free',
+        :'flags' => :'flags',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'device' => :'String',
+        :'device_alias' => :'String',
+        :'path' => :'String',
+        :'type' => :'String',
+        :'blocks_size' => :'String',
+        :'blocks' => :'String',
+        :'blocks_free' => :'String',
+        :'blocks_available' => :'String',
+        :'inodes' => :'String',
+        :'inodes_free' => :'String',
+        :'flags' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'device')
+        self.device = attributes[:'device']
+      end
+
+      if attributes.has_key?(:'device_alias')
+        self.device_alias = attributes[:'device_alias']
+      end
+
+      if attributes.has_key?(:'path')
+        self.path = attributes[:'path']
+      end
+
+      if attributes.has_key?(:'type')
+        self.type = attributes[:'type']
+      end
+
+      if attributes.has_key?(:'blocks_size')
+        self.blocks_size = attributes[:'blocks_size']
+      end
+
+      if attributes.has_key?(:'blocks')
+        self.blocks = attributes[:'blocks']
+      end
+
+      if attributes.has_key?(:'blocks_free')
+        self.blocks_free = attributes[:'blocks_free']
+      end
+
+      if attributes.has_key?(:'blocks_available')
+        self.blocks_available = attributes[:'blocks_available']
+      end
+
+      if attributes.has_key?(:'inodes')
+        self.inodes = attributes[:'inodes']
+      end
+
+      if attributes.has_key?(:'inodes_free')
+        self.inodes_free = attributes[:'inodes_free']
+      end
+
+      if attributes.has_key?(:'flags')
+        self.flags = attributes[:'flags']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          device == o.device &&
+          device_alias == o.device_alias &&
+          path == o.path &&
+          type == o.type &&
+          blocks_size == o.blocks_size &&
+          blocks == o.blocks &&
+          blocks_free == o.blocks_free &&
+          blocks_available == o.blocks_available &&
+          inodes == o.inodes &&
+          inodes_free == o.inodes_free &&
+          flags == o.flags &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [device, device_alias, path, type, blocks_size, blocks, blocks_free, blocks_available, inodes, inodes_free, flags, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb b/jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb
new file mode 100644
index 0000000..eb05777
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb
@@ -0,0 +1,296 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsOsVersion
+    attr_accessor :name
+
+    attr_accessor :version
+
+    attr_accessor :major
+
+    attr_accessor :minor
+
+    attr_accessor :patch
+
+    attr_accessor :build
+
+    attr_accessor :platform
+
+    attr_accessor :platform_like
+
+    attr_accessor :codename
+
+    attr_accessor :install_date
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'name' => :'name',
+        :'version' => :'version',
+        :'major' => :'major',
+        :'minor' => :'minor',
+        :'patch' => :'patch',
+        :'build' => :'build',
+        :'platform' => :'platform',
+        :'platform_like' => :'platform_like',
+        :'codename' => :'codename',
+        :'install_date' => :'install_date',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'name' => :'String',
+        :'version' => :'String',
+        :'major' => :'Integer',
+        :'minor' => :'Integer',
+        :'patch' => :'Integer',
+        :'build' => :'String',
+        :'platform' => :'String',
+        :'platform_like' => :'String',
+        :'codename' => :'String',
+        :'install_date' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'version')
+        self.version = attributes[:'version']
+      end
+
+      if attributes.has_key?(:'major')
+        self.major = attributes[:'major']
+      end
+
+      if attributes.has_key?(:'minor')
+        self.minor = attributes[:'minor']
+      end
+
+      if attributes.has_key?(:'patch')
+        self.patch = attributes[:'patch']
+      end
+
+      if attributes.has_key?(:'build')
+        self.build = attributes[:'build']
+      end
+
+      if attributes.has_key?(:'platform')
+        self.platform = attributes[:'platform']
+      end
+
+      if attributes.has_key?(:'platform_like')
+        self.platform_like = attributes[:'platform_like']
+      end
+
+      if attributes.has_key?(:'codename')
+        self.codename = attributes[:'codename']
+      end
+
+      if attributes.has_key?(:'install_date')
+        self.install_date = attributes[:'install_date']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          name == o.name &&
+          version == o.version &&
+          major == o.major &&
+          minor == o.minor &&
+          patch == o.patch &&
+          build == o.build &&
+          platform == o.platform &&
+          platform_like == o.platform_like &&
+          codename == o.codename &&
+          install_date == o.install_date &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [name, version, major, minor, patch, build, platform, platform_like, codename, install_date, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb b/jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb
new file mode 100644
index 0000000..7c5e740
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb
@@ -0,0 +1,296 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsSafariExtensions
+    attr_accessor :uid
+
+    attr_accessor :name
+
+    attr_accessor :identifier
+
+    attr_accessor :version
+
+    attr_accessor :sdk
+
+    attr_accessor :update_url
+
+    attr_accessor :author
+
+    attr_accessor :developer_id
+
+    attr_accessor :description
+
+    attr_accessor :path
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'uid' => :'uid',
+        :'name' => :'name',
+        :'identifier' => :'identifier',
+        :'version' => :'version',
+        :'sdk' => :'sdk',
+        :'update_url' => :'update_url',
+        :'author' => :'author',
+        :'developer_id' => :'developer_id',
+        :'description' => :'description',
+        :'path' => :'path',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'uid' => :'String',
+        :'name' => :'String',
+        :'identifier' => :'String',
+        :'version' => :'String',
+        :'sdk' => :'String',
+        :'update_url' => :'String',
+        :'author' => :'String',
+        :'developer_id' => :'String',
+        :'description' => :'String',
+        :'path' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'uid')
+        self.uid = attributes[:'uid']
+      end
+
+      if attributes.has_key?(:'name')
+        self.name = attributes[:'name']
+      end
+
+      if attributes.has_key?(:'identifier')
+        self.identifier = attributes[:'identifier']
+      end
+
+      if attributes.has_key?(:'version')
+        self.version = attributes[:'version']
+      end
+
+      if attributes.has_key?(:'sdk')
+        self.sdk = attributes[:'sdk']
+      end
+
+      if attributes.has_key?(:'update_url')
+        self.update_url = attributes[:'update_url']
+      end
+
+      if attributes.has_key?(:'author')
+        self.author = attributes[:'author']
+      end
+
+      if attributes.has_key?(:'developer_id')
+        self.developer_id = attributes[:'developer_id']
+      end
+
+      if attributes.has_key?(:'description')
+        self.description = attributes[:'description']
+      end
+
+      if attributes.has_key?(:'path')
+        self.path = attributes[:'path']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          uid == o.uid &&
+          name == o.name &&
+          identifier == o.identifier &&
+          version == o.version &&
+          sdk == o.sdk &&
+          update_url == o.update_url &&
+          author == o.author &&
+          developer_id == o.developer_id &&
+          description == o.description &&
+          path == o.path &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [uid, name, identifier, version, sdk, update_url, author, developer_id, description, path, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb b/jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb
new file mode 100644
index 0000000..d6993a7
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb
@@ -0,0 +1,341 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsSystemInfo
+    attr_accessor :hostname
+
+    attr_accessor :uuid
+
+    attr_accessor :cpu_type
+
+    attr_accessor :cpu_subtype
+
+    attr_accessor :cpu_brand
+
+    attr_accessor :cpu_physical_cores
+
+    attr_accessor :cpu_logical_cores
+
+    attr_accessor :cpu_microcode
+
+    attr_accessor :physical_memory
+
+    attr_accessor :hardware_vendor
+
+    attr_accessor :hardware_model
+
+    attr_accessor :hardware_version
+
+    attr_accessor :hardware_serial
+
+    attr_accessor :computer_name
+
+    attr_accessor :local_hostname
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'hostname' => :'hostname',
+        :'uuid' => :'uuid',
+        :'cpu_type' => :'cpu_type',
+        :'cpu_subtype' => :'cpu_subtype',
+        :'cpu_brand' => :'cpu_brand',
+        :'cpu_physical_cores' => :'cpu_physical_cores',
+        :'cpu_logical_cores' => :'cpu_logical_cores',
+        :'cpu_microcode' => :'cpu_microcode',
+        :'physical_memory' => :'physical_memory',
+        :'hardware_vendor' => :'hardware_vendor',
+        :'hardware_model' => :'hardware_model',
+        :'hardware_version' => :'hardware_version',
+        :'hardware_serial' => :'hardware_serial',
+        :'computer_name' => :'computer_name',
+        :'local_hostname' => :'local_hostname',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'hostname' => :'String',
+        :'uuid' => :'String',
+        :'cpu_type' => :'String',
+        :'cpu_subtype' => :'String',
+        :'cpu_brand' => :'String',
+        :'cpu_physical_cores' => :'Integer',
+        :'cpu_logical_cores' => :'Integer',
+        :'cpu_microcode' => :'String',
+        :'physical_memory' => :'String',
+        :'hardware_vendor' => :'String',
+        :'hardware_model' => :'String',
+        :'hardware_version' => :'String',
+        :'hardware_serial' => :'String',
+        :'computer_name' => :'String',
+        :'local_hostname' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'hostname')
+        self.hostname = attributes[:'hostname']
+      end
+
+      if attributes.has_key?(:'uuid')
+        self.uuid = attributes[:'uuid']
+      end
+
+      if attributes.has_key?(:'cpu_type')
+        self.cpu_type = attributes[:'cpu_type']
+      end
+
+      if attributes.has_key?(:'cpu_subtype')
+        self.cpu_subtype = attributes[:'cpu_subtype']
+      end
+
+      if attributes.has_key?(:'cpu_brand')
+        self.cpu_brand = attributes[:'cpu_brand']
+      end
+
+      if attributes.has_key?(:'cpu_physical_cores')
+        self.cpu_physical_cores = attributes[:'cpu_physical_cores']
+      end
+
+      if attributes.has_key?(:'cpu_logical_cores')
+        self.cpu_logical_cores = attributes[:'cpu_logical_cores']
+      end
+
+      if attributes.has_key?(:'cpu_microcode')
+        self.cpu_microcode = attributes[:'cpu_microcode']
+      end
+
+      if attributes.has_key?(:'physical_memory')
+        self.physical_memory = attributes[:'physical_memory']
+      end
+
+      if attributes.has_key?(:'hardware_vendor')
+        self.hardware_vendor = attributes[:'hardware_vendor']
+      end
+
+      if attributes.has_key?(:'hardware_model')
+        self.hardware_model = attributes[:'hardware_model']
+      end
+
+      if attributes.has_key?(:'hardware_version')
+        self.hardware_version = attributes[:'hardware_version']
+      end
+
+      if attributes.has_key?(:'hardware_serial')
+        self.hardware_serial = attributes[:'hardware_serial']
+      end
+
+      if attributes.has_key?(:'computer_name')
+        self.computer_name = attributes[:'computer_name']
+      end
+
+      if attributes.has_key?(:'local_hostname')
+        self.local_hostname = attributes[:'local_hostname']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          hostname == o.hostname &&
+          uuid == o.uuid &&
+          cpu_type == o.cpu_type &&
+          cpu_subtype == o.cpu_subtype &&
+          cpu_brand == o.cpu_brand &&
+          cpu_physical_cores == o.cpu_physical_cores &&
+          cpu_logical_cores == o.cpu_logical_cores &&
+          cpu_microcode == o.cpu_microcode &&
+          physical_memory == o.physical_memory &&
+          hardware_vendor == o.hardware_vendor &&
+          hardware_model == o.hardware_model &&
+          hardware_version == o.hardware_version &&
+          hardware_serial == o.hardware_serial &&
+          computer_name == o.computer_name &&
+          local_hostname == o.local_hostname &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [hostname, uuid, cpu_type, cpu_subtype, cpu_brand, cpu_physical_cores, cpu_logical_cores, cpu_microcode, physical_memory, hardware_vendor, hardware_model, hardware_version, hardware_serial, computer_name, local_hostname, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_users.rb b/jcapiv2/lib/jcapiv2/models/system_insights_users.rb
new file mode 100644
index 0000000..94b7731
--- /dev/null
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_users.rb
@@ -0,0 +1,296 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'date'
+
+module JCAPIv2
+
+  class SystemInsightsUsers
+    attr_accessor :uid
+
+    attr_accessor :gid
+
+    attr_accessor :uid_signed
+
+    attr_accessor :gid_signed
+
+    attr_accessor :username
+
+    attr_accessor :description
+
+    attr_accessor :directory
+
+    attr_accessor :shell
+
+    attr_accessor :uuid
+
+    attr_accessor :type
+
+    attr_accessor :jc_collection_time
+
+    attr_accessor :jc_system_id
+
+    attr_accessor :jc_organization_id
+
+
+    # Attribute mapping from ruby-style variable name to JSON key.
+    def self.attribute_map
+      {
+        :'uid' => :'uid',
+        :'gid' => :'gid',
+        :'uid_signed' => :'uid_signed',
+        :'gid_signed' => :'gid_signed',
+        :'username' => :'username',
+        :'description' => :'description',
+        :'directory' => :'directory',
+        :'shell' => :'shell',
+        :'uuid' => :'uuid',
+        :'type' => :'type',
+        :'jc_collection_time' => :'jc_collection_time',
+        :'jc_system_id' => :'jc_system_id',
+        :'jc_organization_id' => :'jc_organization_id'
+      }
+    end
+
+    # Attribute type mapping.
+    def self.swagger_types
+      {
+        :'uid' => :'String',
+        :'gid' => :'String',
+        :'uid_signed' => :'String',
+        :'gid_signed' => :'String',
+        :'username' => :'String',
+        :'description' => :'String',
+        :'directory' => :'String',
+        :'shell' => :'String',
+        :'uuid' => :'String',
+        :'type' => :'String',
+        :'jc_collection_time' => :'String',
+        :'jc_system_id' => :'String',
+        :'jc_organization_id' => :'String'
+      }
+    end
+
+    # Initializes the object
+    # @param [Hash] attributes Model attributes in the form of hash
+    def initialize(attributes = {})
+      return unless attributes.is_a?(Hash)
+
+      # convert string to symbol for hash key
+      attributes = attributes.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
+
+      if attributes.has_key?(:'uid')
+        self.uid = attributes[:'uid']
+      end
+
+      if attributes.has_key?(:'gid')
+        self.gid = attributes[:'gid']
+      end
+
+      if attributes.has_key?(:'uid_signed')
+        self.uid_signed = attributes[:'uid_signed']
+      end
+
+      if attributes.has_key?(:'gid_signed')
+        self.gid_signed = attributes[:'gid_signed']
+      end
+
+      if attributes.has_key?(:'username')
+        self.username = attributes[:'username']
+      end
+
+      if attributes.has_key?(:'description')
+        self.description = attributes[:'description']
+      end
+
+      if attributes.has_key?(:'directory')
+        self.directory = attributes[:'directory']
+      end
+
+      if attributes.has_key?(:'shell')
+        self.shell = attributes[:'shell']
+      end
+
+      if attributes.has_key?(:'uuid')
+        self.uuid = attributes[:'uuid']
+      end
+
+      if attributes.has_key?(:'type')
+        self.type = attributes[:'type']
+      end
+
+      if attributes.has_key?(:'jc_collection_time')
+        self.jc_collection_time = attributes[:'jc_collection_time']
+      end
+
+      if attributes.has_key?(:'jc_system_id')
+        self.jc_system_id = attributes[:'jc_system_id']
+      end
+
+      if attributes.has_key?(:'jc_organization_id')
+        self.jc_organization_id = attributes[:'jc_organization_id']
+      end
+
+    end
+
+    # Show invalid properties with the reasons. Usually used together with valid?
+    # @return Array for valid properties with the reasons
+    def list_invalid_properties
+      invalid_properties = Array.new
+      return invalid_properties
+    end
+
+    # Check to see if the all the properties in the model are valid
+    # @return true if the model is valid
+    def valid?
+      return true
+    end
+
+    # Checks equality by comparing each attribute.
+    # @param [Object] Object to be compared
+    def ==(o)
+      return true if self.equal?(o)
+      self.class == o.class &&
+          uid == o.uid &&
+          gid == o.gid &&
+          uid_signed == o.uid_signed &&
+          gid_signed == o.gid_signed &&
+          username == o.username &&
+          description == o.description &&
+          directory == o.directory &&
+          shell == o.shell &&
+          uuid == o.uuid &&
+          type == o.type &&
+          jc_collection_time == o.jc_collection_time &&
+          jc_system_id == o.jc_system_id &&
+          jc_organization_id == o.jc_organization_id
+    end
+
+    # @see the `==` method
+    # @param [Object] Object to be compared
+    def eql?(o)
+      self == o
+    end
+
+    # Calculates hash code according to all attributes.
+    # @return [Fixnum] Hash code
+    def hash
+      [uid, gid, uid_signed, gid_signed, username, description, directory, shell, uuid, type, jc_collection_time, jc_system_id, jc_organization_id].hash
+    end
+
+    # Builds the object from hash
+    # @param [Hash] attributes Model attributes in the form of hash
+    # @return [Object] Returns the model itself
+    def build_from_hash(attributes)
+      return nil unless attributes.is_a?(Hash)
+      self.class.swagger_types.each_pair do |key, type|
+        if type =~ /\AArray<(.*)>/i
+          # check to ensure the input is an array given that the the attribute
+          # is documented as an array but the input is not
+          if attributes[self.class.attribute_map[key]].is_a?(Array)
+            self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
+          end
+        elsif !attributes[self.class.attribute_map[key]].nil?
+          self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
+        end # or else data not found in attributes(hash), not an issue as the data can be optional
+      end
+
+      self
+    end
+
+    # Deserializes the data based on type
+    # @param string type Data type
+    # @param string value Value to be deserialized
+    # @return [Object] Deserialized data
+    def _deserialize(type, value)
+      case type.to_sym
+      when :DateTime
+        DateTime.parse(value)
+      when :Date
+        Date.parse(value)
+      when :String
+        value.to_s
+      when :Integer
+        value.to_i
+      when :Float
+        value.to_f
+      when :BOOLEAN
+        if value.to_s =~ /\A(true|t|yes|y|1)\z/i
+          true
+        else
+          false
+        end
+      when :Object
+        # generic object (usually a Hash), return directly
+        value
+      when /\AArray<(?<inner_type>.+)>\z/
+        inner_type = Regexp.last_match[:inner_type]
+        value.map { |v| _deserialize(inner_type, v) }
+      when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
+        k_type = Regexp.last_match[:k_type]
+        v_type = Regexp.last_match[:v_type]
+        {}.tap do |hash|
+          value.each do |k, v|
+            hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
+          end
+        end
+      else # model
+        temp_model = JCAPIv2.const_get(type).new
+        temp_model.build_from_hash(value)
+      end
+    end
+
+    # Returns the string representation of the object
+    # @return [String] String presentation of the object
+    def to_s
+      to_hash.to_s
+    end
+
+    # to_body is an alias to to_hash (backward compatibility)
+    # @return [Hash] Returns the object in the form of hash
+    def to_body
+      to_hash
+    end
+
+    # Returns the object in the form of hash
+    # @return [Hash] Returns the object in the form of hash
+    def to_hash
+      hash = {}
+      self.class.attribute_map.each_pair do |attr, param|
+        value = self.send(attr)
+        next if value.nil?
+        hash[param] = _to_hash(value)
+      end
+      hash
+    end
+
+    # Outputs non-array value in the form of hash
+    # For object, use to_hash. Otherwise, just return the value
+    # @param [Object] value Any valid value
+    # @return [Hash] Returns the value in the form of hash
+    def _to_hash(value)
+      if value.is_a?(Array)
+        value.compact.map{ |v| _to_hash(v) }
+      elsif value.is_a?(Hash)
+        {}.tap do |hash|
+          value.each { |k, v| hash[k] = _to_hash(v) }
+        end
+      elsif value.respond_to? :to_hash
+        value.to_hash
+      else
+        value
+      end
+    end
+
+  end
+
+end
diff --git a/jcapiv2/spec/api/active_directory_api_spec.rb b/jcapiv2/spec/api/active_directory_api_spec.rb
index 5492eba..55f0770 100644
--- a/jcapiv2/spec/api/active_directory_api_spec.rb
+++ b/jcapiv2/spec/api/active_directory_api_spec.rb
@@ -32,6 +32,72 @@
     end
   end
 
+  # unit tests for activedirectories_agents_delete
+  # Delete Active Directory Agent
+  # 
+  # @param activedirectory_id 
+  # @param agent_id 
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [String] :x_org_id 
+  # @return [nil]
+  describe 'activedirectories_agents_delete test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for activedirectories_agents_get
+  # Get Active Directory Agent
+  # This endpoint returns a specific active directory agent.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents/{agent_id} \\   -H &#39;accept: application/json&#39; \\   -H &#39;content-type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+  # @param activedirectory_id 
+  # @param agent_id 
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [String] :x_org_id 
+  # @return [ActiveDirectoryAgentListOutput]
+  describe 'activedirectories_agents_get test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for activedirectories_agents_list
+  # List Active Directory Agents
+  # This endpoint allows you to list all your Active Directory Agents for a given Instance.  #### Sample Request &#x60;&#x60;&#x60; curl -X GET https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H &#39;accept: application/json&#39; \\   -H &#39;content-type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+  # @param activedirectory_id 
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+  # @option opts [String] :x_org_id 
+  # @return [Array<ActiveDirectoryAgentListOutput>]
+  describe 'activedirectories_agents_list test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for activedirectories_agents_post
+  # Create a new Active Directory Agent
+  # This endpoint allows you to create a new Active Directory Agent.   #### Sample Request &#x60;&#x60;&#x60; curl -X POST https://console.jumpcloud.com/api/v2/activedirectories/{activedirectory_id}/agents \\   -H &#39;accept: application/json&#39; \\   -H &#39;content-type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{}&#39; &#x60;&#x60;&#x60;
+  # @param activedirectory_id 
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [ActiveDirectoryAgentInput] :body 
+  # @option opts [String] :x_org_id 
+  # @return [ActiveDirectoryAgentGetOutput]
+  describe 'activedirectories_agents_post test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
   # unit tests for activedirectories_delete
   # Delete an Active Directory
   # This endpoint allows you to delete an Active Directory Instance.  #### Sample Request &#x60;&#x60;&#x60; curl -X DELETE https://console.jumpcloud.com/api/v2/activedirectories/{ActiveDirectory_ID} \\   -H &#39;accept: application/json&#39; \\   -H &#39;content-type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY&#39;   &#x60;&#x60;&#x60;
@@ -138,8 +204,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_active_directory_traverse_user_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/applications_api_spec.rb b/jcapiv2/spec/api/applications_api_spec.rb
index 563f97b..756d9c2 100644
--- a/jcapiv2/spec/api/applications_api_spec.rb
+++ b/jcapiv2/spec/api/applications_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_application_traverse_user test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_application_traverse_user_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/commands_api_spec.rb b/jcapiv2/spec/api/commands_api_spec.rb
index f0d4183..5828e99 100644
--- a/jcapiv2/spec/api/commands_api_spec.rb
+++ b/jcapiv2/spec/api/commands_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_command_traverse_system test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_command_traverse_system_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/g_suite_api_spec.rb b/jcapiv2/spec/api/g_suite_api_spec.rb
index 1233352..b3dd052 100644
--- a/jcapiv2/spec/api/g_suite_api_spec.rb
+++ b/jcapiv2/spec/api/g_suite_api_spec.rb
@@ -72,8 +72,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_g_suite_traverse_user test' do
     it "should work" do
@@ -89,8 +90,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_g_suite_traverse_user_group test' do
     it "should work" do
@@ -98,6 +100,37 @@
     end
   end
 
+  # unit tests for gsuites_get
+  # Get G Suite
+  # This endpoint returns a specific G Suite.  ##### Sample Request  &#x60;&#x60;&#x60;  curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; &#x60;&#x60;&#x60;
+  # @param id Unique identifier of the GSuite.
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [String] :x_org_id 
+  # @return [GsuiteOutput]
+  describe 'gsuites_get test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for gsuites_patch
+  # Update existing G Suite
+  # This endpoint allows updating some attributes of a G Suite.  ##### Sample Request  &#x60;&#x60;&#x60; curl -X PATCH https://console.jumpcloud.com/api/v2/gsuites/{GSUITE_ID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;userLockoutAction\&quot;: \&quot;remove\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;disable\&quot;   }&#39; &#x60;&#x60;&#x60;
+  # @param id Unique identifier of the GSuite.
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [GsuitePatchInput] :body 
+  # @option opts [String] :x_org_id 
+  # @return [GsuiteOutput]
+  describe 'gsuites_patch test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
   # unit tests for translation_rules_g_suite_delete
   # Deletes a G Suite translation rule
   # This endpoint allows you to delete a translation rule for a specific G Suite instance. These rules specify how JumpCloud attributes translate to [G Suite Admin SDK](https://developers.google.com/admin-sdk/directory/) attributes.  #### Sample Request  &#x60;&#x60;&#x60; curl -X DELETE https://console.jumpcloud.com/api/v2/gsuites/{gsuite_id}/translationrules/{id} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
@@ -114,7 +147,7 @@
   end
 
   # unit tests for translation_rules_g_suite_get
-  # Gets a specific g suite translation rule
+  # Gets a specific G Suite translation rule
   # This endpoint returns a specific translation rule for a specific G Suite instance. These rules specify how JumpCloud attributes translate to [G Suite Admin SDK](https://developers.google.com/admin-sdk/directory/) attributes.  ###### Sample Request  &#x60;&#x60;&#x60;   curl -X GET https://console.jumpcloud.com/api/v2/gsuites/{gsuite_id}/translationrules/{id} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
   # @param gsuite_id 
   # @param id 
diff --git a/jcapiv2/spec/api/graph_api_spec.rb b/jcapiv2/spec/api/graph_api_spec.rb
index 7153a38..b11cc61 100644
--- a/jcapiv2/spec/api/graph_api_spec.rb
+++ b/jcapiv2/spec/api/graph_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_active_directory_traverse_user_group test' do
     it "should work" do
@@ -125,8 +126,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_application_traverse_user test' do
     it "should work" do
@@ -142,8 +144,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_application_traverse_user_group test' do
     it "should work" do
@@ -193,8 +196,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_command_traverse_system test' do
     it "should work" do
@@ -210,8 +214,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_command_traverse_system_group test' do
     it "should work" do
@@ -259,8 +264,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_g_suite_traverse_user test' do
     it "should work" do
@@ -276,8 +282,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_g_suite_traverse_user_group test' do
     it "should work" do
@@ -327,8 +334,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_ldap_server_traverse_user test' do
     it "should work" do
@@ -344,8 +352,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_ldap_server_traverse_user_group test' do
     it "should work" do
@@ -395,8 +404,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_office365_traverse_user test' do
     it "should work" do
@@ -412,8 +422,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_office365_traverse_user_group test' do
     it "should work" do
@@ -463,8 +474,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_policy_traverse_system test' do
     it "should work" do
@@ -480,8 +492,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_policy_traverse_system_group test' do
     it "should work" do
@@ -531,8 +544,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_radius_server_traverse_user test' do
     it "should work" do
@@ -548,8 +562,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_radius_server_traverse_user_group test' do
     it "should work" do
@@ -710,8 +725,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_command test' do
     it "should work" do
@@ -727,8 +743,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_policy test' do
     it "should work" do
@@ -744,8 +761,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_user test' do
     it "should work" do
@@ -761,8 +779,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_user_group test' do
     it "should work" do
@@ -799,8 +818,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_traverse_command test' do
     it "should work" do
@@ -816,8 +836,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_traverse_policy test' do
     it "should work" do
@@ -853,10 +874,11 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+  # @option opts [String] :x_org_id 
   # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :date Current date header for the System Context API
   # @option opts [String] :authorization Authorization header for the System Context API
-  # @option opts [String] :x_org_id 
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_traverse_user_group test' do
     it "should work" do
@@ -1011,8 +1033,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_active_directory test' do
     it "should work" do
@@ -1028,8 +1051,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_application test' do
     it "should work" do
@@ -1045,8 +1069,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_directory test' do
     it "should work" do
@@ -1062,8 +1087,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_g_suite test' do
     it "should work" do
@@ -1079,8 +1105,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_ldap_server test' do
     it "should work" do
@@ -1096,8 +1123,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_office365 test' do
     it "should work" do
@@ -1113,8 +1141,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_radius_server test' do
     it "should work" do
@@ -1130,8 +1159,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_system test' do
     it "should work" do
@@ -1147,8 +1177,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_system_group test' do
     it "should work" do
@@ -1183,8 +1214,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_application test' do
     it "should work" do
@@ -1200,8 +1232,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_directory test' do
     it "should work" do
@@ -1217,8 +1250,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_g_suite test' do
     it "should work" do
@@ -1234,8 +1268,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_ldap_server test' do
     it "should work" do
@@ -1251,8 +1286,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_office365 test' do
     it "should work" do
@@ -1268,8 +1304,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_radius_server test' do
     it "should work" do
@@ -1303,8 +1340,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_system_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/ldap_servers_api_spec.rb b/jcapiv2/spec/api/ldap_servers_api_spec.rb
index 4e20ebe..fff553a 100644
--- a/jcapiv2/spec/api/ldap_servers_api_spec.rb
+++ b/jcapiv2/spec/api/ldap_servers_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_ldap_server_traverse_user test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_ldap_server_traverse_user_group test' do
     it "should work" do
@@ -134,4 +136,21 @@
     end
   end
 
+  # unit tests for ldapservers_patch
+  # Update existing LDAP server
+  # This endpoint allows updating some attributes of an LDAP server.  Sample Request  &#x60;&#x60;&#x60; curl -X PATCH https://console.jumpcloud.com/api/v2/ldapservers/{LDAP_ID} \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39; \\   -d &#39;{     \&quot;userLockoutAction\&quot;: \&quot;remove\&quot;,     \&quot;userPasswordExpirationAction\&quot;: \&quot;disable\&quot;   }&#39; &#x60;&#x60;&#x60;
+  # @param id Unique identifier of the LDAP server.
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Body] :body 
+  # @option opts [String] :x_api_key 
+  # @option opts [String] :x_org_id 
+  # @return [InlineResponse200]
+  describe 'ldapservers_patch test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
 end
diff --git a/jcapiv2/spec/api/office365_api_spec.rb b/jcapiv2/spec/api/office365_api_spec.rb
index d225f73..7c1cdff 100644
--- a/jcapiv2/spec/api/office365_api_spec.rb
+++ b/jcapiv2/spec/api/office365_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_office365_traverse_user test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_office365_traverse_user_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/organizations_api_spec.rb b/jcapiv2/spec/api/organizations_api_spec.rb
new file mode 100644
index 0000000..d55b968
--- /dev/null
+++ b/jcapiv2/spec/api/organizations_api_spec.rb
@@ -0,0 +1,76 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+
+# Unit tests for JCAPIv2::OrganizationsApi
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'OrganizationsApi' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::OrganizationsApi.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of OrganizationsApi' do
+    it 'should create an instance of OrganizationsApi' do
+      expect(@instance).to be_instance_of(JCAPIv2::OrganizationsApi)
+    end
+  end
+
+  # unit tests for org_crypto_get
+  # Get Crypto Settings
+  # 
+  # @param id 
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Array<String>] :fields The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+  # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+  # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+  # @return [OrgCryptoSettings]
+  describe 'org_crypto_get test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for org_crypto_put
+  # Edit Crypto Settings
+  # 
+  # @param id 
+  # @param content_type 
+  # @param accept 
+  # @param [Hash] opts the optional parameters
+  # @option opts [OrgCryptoSettings] :body 
+  # @option opts [Array<String>] :fields The comma separated fields included in the returned records. If omitted, the default list of fields will be returned. 
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
+  # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
+  # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+  # @return [Object]
+  describe 'org_crypto_put test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
diff --git a/jcapiv2/spec/api/policies_api_spec.rb b/jcapiv2/spec/api/policies_api_spec.rb
index c4d921c..370e0d6 100644
--- a/jcapiv2/spec/api/policies_api_spec.rb
+++ b/jcapiv2/spec/api/policies_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_policy_traverse_system test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_policy_traverse_system_group test' do
     it "should work" do
@@ -216,7 +218,7 @@
 
   # unit tests for policyresults_list_0
   # Lists all the policy results for an organization.
-  # This endpoint returns all policies results for an Organization.  ##### Sample Request  &#x60;&#x60;&#x60;  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
+  # This endpoint returns all policies results for an organization.  ##### Sample Request  &#x60;&#x60;&#x60;  curl -X GET https://console.jumpcloud.com/api/v2/policyresults \\   -H &#39;Accept: application/json&#39; \\   -H &#39;Content-Type: application/json&#39; \\   -H &#39;x-api-key: {API_KEY}&#39;   &#x60;&#x60;&#x60;
   # @param content_type 
   # @param accept 
   # @param [Hash] opts the optional parameters
diff --git a/jcapiv2/spec/api/providers_api_spec.rb b/jcapiv2/spec/api/providers_api_spec.rb
index 93441d7..e02ed3c 100644
--- a/jcapiv2/spec/api/providers_api_spec.rb
+++ b/jcapiv2/spec/api/providers_api_spec.rb
@@ -44,7 +44,7 @@
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
   # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [Array<String>] :sort The comma separated fields used to sort the collection. Default sort is ascending, prefix with &#x60;-&#x60; to sort descending. 
-  # @return [InlineResponse200]
+  # @return [InlineResponse2001]
   describe 'providers_list_administrators test' do
     it "should work" do
       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
diff --git a/jcapiv2/spec/api/radius_servers_api_spec.rb b/jcapiv2/spec/api/radius_servers_api_spec.rb
index 48b4aae..ba4b5f4 100644
--- a/jcapiv2/spec/api/radius_servers_api_spec.rb
+++ b/jcapiv2/spec/api/radius_servers_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_radius_server_traverse_user test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_radius_server_traverse_user_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/system_group_associations_api_spec.rb b/jcapiv2/spec/api/system_group_associations_api_spec.rb
index 0bc1601..0de1a9e 100644
--- a/jcapiv2/spec/api/system_group_associations_api_spec.rb
+++ b/jcapiv2/spec/api/system_group_associations_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_command test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_policy test' do
     it "should work" do
@@ -108,8 +110,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_user test' do
     it "should work" do
@@ -125,8 +128,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_user_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/system_groups_api_spec.rb b/jcapiv2/spec/api/system_groups_api_spec.rb
index 6c8d2b2..4880df0 100644
--- a/jcapiv2/spec/api/system_groups_api_spec.rb
+++ b/jcapiv2/spec/api/system_groups_api_spec.rb
@@ -147,8 +147,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_policy test' do
     it "should work" do
@@ -164,8 +165,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_user test' do
     it "should work" do
@@ -181,8 +183,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_group_traverse_user_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/system_insights_api_spec.rb b/jcapiv2/spec/api/system_insights_api_spec.rb
new file mode 100644
index 0000000..36505eb
--- /dev/null
+++ b/jcapiv2/spec/api/system_insights_api_spec.rb
@@ -0,0 +1,383 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+
+# Unit tests for JCAPIv2::SystemInsightsApi
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsApi' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsApi.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsApi' do
+    it 'should create an instance of SystemInsightsApi' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsApi)
+    end
+  end
+
+  # unit tests for systeminsights_list_apps
+  # List System Insights Apps
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;bundle_name&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsApps>]
+  describe 'systeminsights_list_apps test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_apps_0
+  # List System Insights System Apps
+  # Valid filter fields are &#x60;bundle_name&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsApps>]
+  describe 'systeminsights_list_apps_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_browser_plugins
+  # List System Insights System Browser Plugins
+  # Valid filter fields are &#x60;name&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsBrowserPlugins>]
+  describe 'systeminsights_list_browser_plugins test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_browser_plugins_0
+  # List System Insights Browser Plugins
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsBrowserPlugins>]
+  describe 'systeminsights_list_browser_plugins_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_chrome_extensions
+  # List System Insights System Chrome Extensions
+  # Valid filter fields are &#x60;name&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsChromeExtensions>]
+  describe 'systeminsights_list_chrome_extensions test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_chrome_extensions_0
+  # List System Insights Chrome Extensions
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsChromeExtensions>]
+  describe 'systeminsights_list_chrome_extensions_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_disk_encryption
+  # List System Insights Disk Encryption
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;encryption_status&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsDiskEncryption>]
+  describe 'systeminsights_list_disk_encryption test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_disk_encryption_0
+  # List System Insights System Disk Encryption
+  # Valid filter fields are &#x60;encryption_status&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsDiskEncryption>]
+  describe 'systeminsights_list_disk_encryption_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_firefox_addons
+  # List System Insights Firefox Addons
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsFirefoxAddons>]
+  describe 'systeminsights_list_firefox_addons test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_firefox_addons_0
+  # List System Insights System Firefox Addons
+  # Valid filter fields are &#x60;name&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsFirefoxAddons>]
+  describe 'systeminsights_list_firefox_addons_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_groups
+  # List System Insights Groups
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;groupname&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsGroups>]
+  describe 'systeminsights_list_groups test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_groups_0
+  # List System Insights System Groups
+  # Valid filter fields are &#x60;groupname&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsGroups>]
+  describe 'systeminsights_list_groups_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_interface_addresses
+  # List System Insights Interface Addresses
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;address&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsInterfaceAddresses>]
+  describe 'systeminsights_list_interface_addresses test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_interface_addresses_0
+  # List System Insights System Interface Addresses
+  # Valid filter fields are &#x60;address&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsInterfaceAddresses>]
+  describe 'systeminsights_list_interface_addresses_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_mounts
+  # List System Insights Mounts
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;path&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsMounts>]
+  describe 'systeminsights_list_mounts test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_mounts_0
+  # List System Insights System Mounts
+  # Valid filter fields are &#x60;path&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsMounts>]
+  describe 'systeminsights_list_mounts_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_os_version
+  # List System Insights System OS Version
+  # Valid filter fields are &#x60;version&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsOsVersion>]
+  describe 'systeminsights_list_os_version test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_os_version_0
+  # List System Insights OS Version
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;version&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsOsVersion>]
+  describe 'systeminsights_list_os_version_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_safari_extensions
+  # List System Insights System Safari Extensions
+  # Valid filter fields are &#x60;name&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsSafariExtensions>]
+  describe 'systeminsights_list_safari_extensions test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_safari_extensions_0
+  # List System Insights Safari Extensions
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;name&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsSafariExtensions>]
+  describe 'systeminsights_list_safari_extensions_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_system_info
+  # List System Insights System Info
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;cpu_subtype&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsSystemInfo>]
+  describe 'systeminsights_list_system_info test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_system_info_0
+  # List System Insights System System Info
+  # Valid filter fields are &#x60;cpu_subtype&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsSystemInfo>]
+  describe 'systeminsights_list_system_info_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_users
+  # List System Insights Users
+  # Valid filter fields are &#x60;jc_system_id&#x60; and &#x60;username&#x60;.
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsUsers>]
+  describe 'systeminsights_list_users test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  # unit tests for systeminsights_list_users_0
+  # List System Insights System Users
+  # Valid filter fields are &#x60;username&#x60;.
+  # @param jc_system_id 
+  # @param [Hash] opts the optional parameters
+  # @option opts [Integer] :limit 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq
+  # @return [Array<SystemInsightsUsers>]
+  describe 'systeminsights_list_users_0 test' do
+    it "should work" do
+      # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
diff --git a/jcapiv2/spec/api/systems_api_spec.rb b/jcapiv2/spec/api/systems_api_spec.rb
index fb58081..a0ce3a5 100644
--- a/jcapiv2/spec/api/systems_api_spec.rb
+++ b/jcapiv2/spec/api/systems_api_spec.rb
@@ -99,8 +99,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_traverse_command test' do
     it "should work" do
@@ -116,8 +117,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_traverse_policy test' do
     it "should work" do
@@ -153,10 +155,11 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
+  # @option opts [String] :x_org_id 
   # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :date Current date header for the System Context API
   # @option opts [String] :authorization Authorization header for the System Context API
-  # @option opts [String] :x_org_id 
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_system_traverse_user_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/user_group_associations_api_spec.rb b/jcapiv2/spec/api/user_group_associations_api_spec.rb
index db85c9a..17463b4 100644
--- a/jcapiv2/spec/api/user_group_associations_api_spec.rb
+++ b/jcapiv2/spec/api/user_group_associations_api_spec.rb
@@ -74,8 +74,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_active_directory test' do
     it "should work" do
@@ -91,8 +92,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_application test' do
     it "should work" do
@@ -108,8 +110,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_directory test' do
     it "should work" do
@@ -125,8 +128,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_g_suite test' do
     it "should work" do
@@ -142,8 +146,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_ldap_server test' do
     it "should work" do
@@ -159,8 +164,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_office365 test' do
     it "should work" do
@@ -176,8 +182,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_radius_server test' do
     it "should work" do
@@ -193,8 +200,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_system test' do
     it "should work" do
@@ -210,8 +218,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_system_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/user_groups_api_spec.rb b/jcapiv2/spec/api/user_groups_api_spec.rb
index 10043f9..2e63052 100644
--- a/jcapiv2/spec/api/user_groups_api_spec.rb
+++ b/jcapiv2/spec/api/user_groups_api_spec.rb
@@ -145,8 +145,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_active_directory test' do
     it "should work" do
@@ -162,8 +163,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_application test' do
     it "should work" do
@@ -179,8 +181,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_directory test' do
     it "should work" do
@@ -196,8 +199,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_g_suite test' do
     it "should work" do
@@ -213,8 +217,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_ldap_server test' do
     it "should work" do
@@ -230,8 +235,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_office365 test' do
     it "should work" do
@@ -247,8 +253,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_radius_server test' do
     it "should work" do
@@ -264,8 +271,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_system test' do
     it "should work" do
@@ -281,8 +289,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_group_traverse_system_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/api/users_api_spec.rb b/jcapiv2/spec/api/users_api_spec.rb
index 7f14edd..b3101ee 100644
--- a/jcapiv2/spec/api/users_api_spec.rb
+++ b/jcapiv2/spec/api/users_api_spec.rb
@@ -93,8 +93,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_application test' do
     it "should work" do
@@ -110,8 +111,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_directory test' do
     it "should work" do
@@ -127,8 +129,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_g_suite test' do
     it "should work" do
@@ -144,8 +147,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_ldap_server test' do
     it "should work" do
@@ -161,8 +165,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_office365 test' do
     it "should work" do
@@ -178,8 +183,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_radius_server test' do
     it "should work" do
@@ -213,8 +219,9 @@
   # @param accept 
   # @param [Hash] opts the optional parameters
   # @option opts [Integer] :limit The number of records to return at once. Limited to 100.
-  # @option opts [Integer] :skip The offset into the records to return.
   # @option opts [String] :x_org_id 
+  # @option opts [Integer] :skip The offset into the records to return.
+  # @option opts [Array<String>] :filter Supported operators are: eq, ne, gt, ge, lt, le, between, search, in
   # @return [Array<GraphObjectWithPaths>]
   describe 'graph_user_traverse_system_group test' do
     it "should work" do
diff --git a/jcapiv2/spec/models/active_directory_agent_get_output_spec.rb b/jcapiv2/spec/models/active_directory_agent_get_output_spec.rb
new file mode 100644
index 0000000..a974530
--- /dev/null
+++ b/jcapiv2/spec/models/active_directory_agent_get_output_spec.rb
@@ -0,0 +1,48 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::ActiveDirectoryAgentGetOutput
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'ActiveDirectoryAgentGetOutput' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::ActiveDirectoryAgentGetOutput.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of ActiveDirectoryAgentGetOutput' do
+    it 'should create an instance of ActiveDirectoryAgentGetOutput' do
+      expect(@instance).to be_instance_of(JCAPIv2::ActiveDirectoryAgentGetOutput)
+    end
+  end
+  describe 'test attribute "id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "connect_key"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/active_directory_agent_input_spec.rb b/jcapiv2/spec/models/active_directory_agent_input_spec.rb
new file mode 100644
index 0000000..36629c3
--- /dev/null
+++ b/jcapiv2/spec/models/active_directory_agent_input_spec.rb
@@ -0,0 +1,36 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::ActiveDirectoryAgentInput
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'ActiveDirectoryAgentInput' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::ActiveDirectoryAgentInput.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of ActiveDirectoryAgentInput' do
+    it 'should create an instance of ActiveDirectoryAgentInput' do
+      expect(@instance).to be_instance_of(JCAPIv2::ActiveDirectoryAgentInput)
+    end
+  end
+end
+
diff --git a/jcapiv2/spec/models/active_directory_agent_list_output_spec.rb b/jcapiv2/spec/models/active_directory_agent_list_output_spec.rb
new file mode 100644
index 0000000..7d1f327
--- /dev/null
+++ b/jcapiv2/spec/models/active_directory_agent_list_output_spec.rb
@@ -0,0 +1,52 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::ActiveDirectoryAgentListOutput
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'ActiveDirectoryAgentListOutput' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::ActiveDirectoryAgentListOutput.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of ActiveDirectoryAgentListOutput' do
+    it 'should create an instance of ActiveDirectoryAgentListOutput' do
+      expect(@instance).to be_instance_of(JCAPIv2::ActiveDirectoryAgentListOutput)
+    end
+  end
+  describe 'test attribute "id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "state"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["unsealed", "active", "inactive"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.state = value }.not_to raise_error
+       #end
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/body_spec.rb b/jcapiv2/spec/models/body_spec.rb
new file mode 100644
index 0000000..1cab1da
--- /dev/null
+++ b/jcapiv2/spec/models/body_spec.rb
@@ -0,0 +1,54 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::Body
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'Body' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::Body.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of Body' do
+    it 'should create an instance of Body' do
+      expect(@instance).to be_instance_of(JCAPIv2::Body)
+    end
+  end
+  describe 'test attribute "id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/gsuite_output_spec.rb b/jcapiv2/spec/models/gsuite_output_spec.rb
new file mode 100644
index 0000000..9168f72
--- /dev/null
+++ b/jcapiv2/spec/models/gsuite_output_spec.rb
@@ -0,0 +1,62 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::GsuiteOutput
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'GsuiteOutput' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::GsuiteOutput.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of GsuiteOutput' do
+    it 'should create an instance of GsuiteOutput' do
+      expect(@instance).to be_instance_of(JCAPIv2::GsuiteOutput)
+    end
+  end
+  describe 'test attribute "id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["suspend", "maintain"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_lockout_action = value }.not_to raise_error
+       #end
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["suspend", "maintain"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_password_expiration_action = value }.not_to raise_error
+       #end
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/gsuite_patch_input_spec.rb b/jcapiv2/spec/models/gsuite_patch_input_spec.rb
new file mode 100644
index 0000000..a37ae25
--- /dev/null
+++ b/jcapiv2/spec/models/gsuite_patch_input_spec.rb
@@ -0,0 +1,56 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::GsuitePatchInput
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'GsuitePatchInput' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::GsuitePatchInput.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of GsuitePatchInput' do
+    it 'should create an instance of GsuitePatchInput' do
+      expect(@instance).to be_instance_of(JCAPIv2::GsuitePatchInput)
+    end
+  end
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["suspend", "maintain"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_lockout_action = value }.not_to raise_error
+       #end
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["suspend", "maintain"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_password_expiration_action = value }.not_to raise_error
+       #end
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/inline_response_200_1_spec.rb b/jcapiv2/spec/models/inline_response_200_1_spec.rb
new file mode 100644
index 0000000..636c107
--- /dev/null
+++ b/jcapiv2/spec/models/inline_response_200_1_spec.rb
@@ -0,0 +1,48 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::InlineResponse2001
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'InlineResponse2001' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::InlineResponse2001.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of InlineResponse2001' do
+    it 'should create an instance of InlineResponse2001' do
+      expect(@instance).to be_instance_of(JCAPIv2::InlineResponse2001)
+    end
+  end
+  describe 'test attribute "total_count"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "results"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/inline_response_200_spec.rb b/jcapiv2/spec/models/inline_response_200_spec.rb
index 941fd11..53522ed 100644
--- a/jcapiv2/spec/models/inline_response_200_spec.rb
+++ b/jcapiv2/spec/models/inline_response_200_spec.rb
@@ -32,13 +32,25 @@
       expect(@instance).to be_instance_of(JCAPIv2::InlineResponse200)
     end
   end
-  describe 'test attribute "total_count"' do
+  describe 'test attribute "id"' do
     it 'should work' do
        # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
     end
   end
 
-  describe 'test attribute "results"' do
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
     it 'should work' do
        # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
     end
diff --git a/jcapiv2/spec/models/inline_response_401_spec.rb b/jcapiv2/spec/models/inline_response_400_spec.rb
similarity index 77%
rename from jcapiv2/spec/models/inline_response_401_spec.rb
rename to jcapiv2/spec/models/inline_response_400_spec.rb
index f1b2445..bc758c5 100644
--- a/jcapiv2/spec/models/inline_response_401_spec.rb
+++ b/jcapiv2/spec/models/inline_response_400_spec.rb
@@ -14,22 +14,22 @@
 require 'json'
 require 'date'
 
-# Unit tests for JCAPIv2::InlineResponse401
+# Unit tests for JCAPIv2::InlineResponse400
 # Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
 # Please update as you see appropriate
-describe 'InlineResponse401' do
+describe 'InlineResponse400' do
   before do
     # run before each test
-    @instance = JCAPIv2::InlineResponse401.new
+    @instance = JCAPIv2::InlineResponse400.new
   end
 
   after do
     # run after each test
   end
 
-  describe 'test an instance of InlineResponse401' do
-    it 'should create an instance of InlineResponse401' do
-      expect(@instance).to be_instance_of(JCAPIv2::InlineResponse401)
+  describe 'test an instance of InlineResponse400' do
+    it 'should create an instance of InlineResponse400' do
+      expect(@instance).to be_instance_of(JCAPIv2::InlineResponse400)
     end
   end
   describe 'test attribute "message"' do
diff --git a/jcapiv2/spec/models/ldap_server_action_spec.rb b/jcapiv2/spec/models/ldap_server_action_spec.rb
new file mode 100644
index 0000000..6d15f5b
--- /dev/null
+++ b/jcapiv2/spec/models/ldap_server_action_spec.rb
@@ -0,0 +1,36 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::LdapServerAction
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'LdapServerAction' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::LdapServerAction.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of LdapServerAction' do
+    it 'should create an instance of LdapServerAction' do
+      expect(@instance).to be_instance_of(JCAPIv2::LdapServerAction)
+    end
+  end
+end
+
diff --git a/jcapiv2/spec/models/ldap_server_input_spec.rb b/jcapiv2/spec/models/ldap_server_input_spec.rb
index 92970c9..1e5696f 100644
--- a/jcapiv2/spec/models/ldap_server_input_spec.rb
+++ b/jcapiv2/spec/models/ldap_server_input_spec.rb
@@ -38,5 +38,25 @@
     end
   end
 
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["disable", "remove"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_lockout_action = value }.not_to raise_error
+       #end
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["disable", "remove"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_password_expiration_action = value }.not_to raise_error
+       #end
+    end
+  end
+
 end
 
diff --git a/jcapiv2/spec/models/ldap_server_output_spec.rb b/jcapiv2/spec/models/ldap_server_output_spec.rb
index 21b74c4..d5342cf 100644
--- a/jcapiv2/spec/models/ldap_server_output_spec.rb
+++ b/jcapiv2/spec/models/ldap_server_output_spec.rb
@@ -38,6 +38,26 @@
     end
   end
 
+  describe 'test attribute "user_lockout_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["disable", "remove"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_lockout_action = value }.not_to raise_error
+       #end
+    end
+  end
+
+  describe 'test attribute "user_password_expiration_action"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+       #validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["disable", "remove"])
+       #validator.allowable_values.each do |value|
+       #  expect { @instance.user_password_expiration_action = value }.not_to raise_error
+       #end
+    end
+  end
+
   describe 'test attribute "id"' do
     it 'should work' do
        # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
diff --git a/jcapiv2/spec/models/org_crypto_settings_spec.rb b/jcapiv2/spec/models/org_crypto_settings_spec.rb
new file mode 100644
index 0000000..cca80e4
--- /dev/null
+++ b/jcapiv2/spec/models/org_crypto_settings_spec.rb
@@ -0,0 +1,42 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::OrgCryptoSettings
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'OrgCryptoSettings' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::OrgCryptoSettings.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of OrgCryptoSettings' do
+    it 'should create an instance of OrgCryptoSettings' do
+      expect(@instance).to be_instance_of(JCAPIv2::OrgCryptoSettings)
+    end
+  end
+  describe 'test attribute "ssh_keys"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/orgcryptosettings_ssh_keys_spec.rb b/jcapiv2/spec/models/orgcryptosettings_ssh_keys_spec.rb
new file mode 100644
index 0000000..304a8aa
--- /dev/null
+++ b/jcapiv2/spec/models/orgcryptosettings_ssh_keys_spec.rb
@@ -0,0 +1,54 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::OrgcryptosettingsSshKeys
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'OrgcryptosettingsSshKeys' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::OrgcryptosettingsSshKeys.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of OrgcryptosettingsSshKeys' do
+    it 'should create an instance of OrgcryptosettingsSshKeys' do
+      expect(@instance).to be_instance_of(JCAPIv2::OrgcryptosettingsSshKeys)
+    end
+  end
+  describe 'test attribute "validate"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "validate_key_size"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "key_size"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_apps_spec.rb b/jcapiv2/spec/models/system_insights_apps_spec.rb
new file mode 100644
index 0000000..2a81054
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_apps_spec.rb
@@ -0,0 +1,168 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsApps
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsApps' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsApps.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsApps' do
+    it 'should create an instance of SystemInsightsApps' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsApps)
+    end
+  end
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "path"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "bundle_executable"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "bundle_identifier"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "bundle_name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "bundle_short_version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "bundle_version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "bundle_package_type"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "environment"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "element"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "compiler"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "development_region"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "display_name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "info_string"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "minimum_system_version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "category"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "applescript_enabled"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "copyright"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "last_opened_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_browser_plugins_spec.rb b/jcapiv2/spec/models/system_insights_browser_plugins_spec.rb
new file mode 100644
index 0000000..02bd84a
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_browser_plugins_spec.rb
@@ -0,0 +1,114 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsBrowserPlugins
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsBrowserPlugins' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsBrowserPlugins.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsBrowserPlugins' do
+    it 'should create an instance of SystemInsightsBrowserPlugins' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsBrowserPlugins)
+    end
+  end
+  describe 'test attribute "uid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "identifier"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "sdk"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "description"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "development_region"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "native"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "path"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "disabled"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb b/jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb
new file mode 100644
index 0000000..f5d1261
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb
@@ -0,0 +1,120 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsChromeExtensions
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsChromeExtensions' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsChromeExtensions.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsChromeExtensions' do
+    it 'should create an instance of SystemInsightsChromeExtensions' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsChromeExtensions)
+    end
+  end
+  describe 'test attribute "uid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "identifier"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "description"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "locale"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "update_url"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "author"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "persistent"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "path"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "permissions"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_disk_encryption_spec.rb b/jcapiv2/spec/models/system_insights_disk_encryption_spec.rb
new file mode 100644
index 0000000..a13edcd
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_disk_encryption_spec.rb
@@ -0,0 +1,96 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsDiskEncryption
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsDiskEncryption' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsDiskEncryption.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsDiskEncryption' do
+    it 'should create an instance of SystemInsightsDiskEncryption' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsDiskEncryption)
+    end
+  end
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "uuid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "encrypted"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "type"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "uid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "user_uuid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "encryption_status"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_firefox_addons_spec.rb b/jcapiv2/spec/models/system_insights_firefox_addons_spec.rb
new file mode 100644
index 0000000..0caa266
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_firefox_addons_spec.rb
@@ -0,0 +1,138 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsFirefoxAddons
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsFirefoxAddons' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsFirefoxAddons.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsFirefoxAddons' do
+    it 'should create an instance of SystemInsightsFirefoxAddons' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsFirefoxAddons)
+    end
+  end
+  describe 'test attribute "uid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "identifier"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "creator"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "type"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "description"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "source_url"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "visible"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "active"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "disabled"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "autoupdate"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "location"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "path"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_groups_spec.rb b/jcapiv2/spec/models/system_insights_groups_spec.rb
new file mode 100644
index 0000000..c546267
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_groups_spec.rb
@@ -0,0 +1,84 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsGroups
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsGroups' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsGroups.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsGroups' do
+    it 'should create an instance of SystemInsightsGroups' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsGroups)
+    end
+  end
+  describe 'test attribute "gid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "gid_signed"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "groupname"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "group_sid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "comment"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_interface_addresses_spec.rb b/jcapiv2/spec/models/system_insights_interface_addresses_spec.rb
new file mode 100644
index 0000000..2d60d1b
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_interface_addresses_spec.rb
@@ -0,0 +1,96 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsInterfaceAddresses
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsInterfaceAddresses' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsInterfaceAddresses.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsInterfaceAddresses' do
+    it 'should create an instance of SystemInsightsInterfaceAddresses' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsInterfaceAddresses)
+    end
+  end
+  describe 'test attribute "interface"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "address"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "mask"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "broadcast"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "point_to_point"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "type"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "friendly_name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_mounts_spec.rb b/jcapiv2/spec/models/system_insights_mounts_spec.rb
new file mode 100644
index 0000000..3457b9d
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_mounts_spec.rb
@@ -0,0 +1,120 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsMounts
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsMounts' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsMounts.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsMounts' do
+    it 'should create an instance of SystemInsightsMounts' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsMounts)
+    end
+  end
+  describe 'test attribute "device"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "device_alias"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "path"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "type"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "blocks_size"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "blocks"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "blocks_free"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "blocks_available"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "inodes"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "inodes_free"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "flags"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_os_version_spec.rb b/jcapiv2/spec/models/system_insights_os_version_spec.rb
new file mode 100644
index 0000000..df5cba9
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_os_version_spec.rb
@@ -0,0 +1,114 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsOsVersion
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsOsVersion' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsOsVersion.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsOsVersion' do
+    it 'should create an instance of SystemInsightsOsVersion' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsOsVersion)
+    end
+  end
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "major"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "minor"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "patch"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "build"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "platform"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "platform_like"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "codename"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "install_date"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_safari_extensions_spec.rb b/jcapiv2/spec/models/system_insights_safari_extensions_spec.rb
new file mode 100644
index 0000000..dd19673
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_safari_extensions_spec.rb
@@ -0,0 +1,114 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsSafariExtensions
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsSafariExtensions' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsSafariExtensions.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsSafariExtensions' do
+    it 'should create an instance of SystemInsightsSafariExtensions' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsSafariExtensions)
+    end
+  end
+  describe 'test attribute "uid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "identifier"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "sdk"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "update_url"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "author"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "developer_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "description"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "path"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_system_info_spec.rb b/jcapiv2/spec/models/system_insights_system_info_spec.rb
new file mode 100644
index 0000000..0e7ad67
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_system_info_spec.rb
@@ -0,0 +1,144 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsSystemInfo
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsSystemInfo' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsSystemInfo.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsSystemInfo' do
+    it 'should create an instance of SystemInsightsSystemInfo' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsSystemInfo)
+    end
+  end
+  describe 'test attribute "hostname"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "uuid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "cpu_type"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "cpu_subtype"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "cpu_brand"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "cpu_physical_cores"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "cpu_logical_cores"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "cpu_microcode"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "physical_memory"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "hardware_vendor"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "hardware_model"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "hardware_version"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "hardware_serial"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "computer_name"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "local_hostname"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+
diff --git a/jcapiv2/spec/models/system_insights_users_spec.rb b/jcapiv2/spec/models/system_insights_users_spec.rb
new file mode 100644
index 0000000..c27f11c
--- /dev/null
+++ b/jcapiv2/spec/models/system_insights_users_spec.rb
@@ -0,0 +1,114 @@
+=begin
+#JumpCloud APIs
+
+# JumpCloud's V2 API. This set of endpoints allows JumpCloud customers to manage objects, groupings and mappings and interact with the JumpCloud Graph.
+
+OpenAPI spec version: 2.0
+
+Generated by: https://github.com/swagger-api/swagger-codegen.git
+Swagger Codegen version: 2.3.1
+
+=end
+
+require 'spec_helper'
+require 'json'
+require 'date'
+
+# Unit tests for JCAPIv2::SystemInsightsUsers
+# Automatically generated by swagger-codegen (github.com/swagger-api/swagger-codegen)
+# Please update as you see appropriate
+describe 'SystemInsightsUsers' do
+  before do
+    # run before each test
+    @instance = JCAPIv2::SystemInsightsUsers.new
+  end
+
+  after do
+    # run after each test
+  end
+
+  describe 'test an instance of SystemInsightsUsers' do
+    it 'should create an instance of SystemInsightsUsers' do
+      expect(@instance).to be_instance_of(JCAPIv2::SystemInsightsUsers)
+    end
+  end
+  describe 'test attribute "uid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "gid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "uid_signed"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "gid_signed"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "username"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "description"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "directory"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "shell"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "uuid"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "type"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_collection_time"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_system_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+  describe 'test attribute "jc_organization_id"' do
+    it 'should work' do
+       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
+    end
+  end
+
+end
+

From 4224a339ef3cce3936743dcda3f7e451b8ca2972 Mon Sep 17 00:00:00 2001
From: Alex Langhart <alex.langhart@jumpcloud.com>
Date: Thu, 8 Aug 2019 13:36:55 -0600
Subject: [PATCH 2/3] Fix version

---
 config_v1.json                 | 4 ++--
 config_v2.json                 | 4 ++--
 jcapiv1/README.md              | 8 ++++----
 jcapiv1/lib/jcapiv1/version.rb | 2 +-
 jcapiv2/README.md              | 8 ++++----
 jcapiv2/lib/jcapiv2/version.rb | 2 +-
 6 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/config_v1.json b/config_v1.json
index 63ae959..cd2f5d4 100644
--- a/config_v1.json
+++ b/config_v1.json
@@ -1,5 +1,5 @@
 {
   "gemName": "jcapiv1",
   "moduleName": "JCAPIv1",
-  "gemVersion": "2.2.0"
-}
+  "gemVersion": "2.3.0"
+}
\ No newline at end of file
diff --git a/config_v2.json b/config_v2.json
index 1fd3e68..d2148c1 100644
--- a/config_v2.json
+++ b/config_v2.json
@@ -1,5 +1,5 @@
 {
   "gemName": "jcapiv2",
   "moduleName": "JCAPIv2",
-  "gemVersion": "2.2.0"
-}
+  "gemVersion": "2.3.0"
+}
\ No newline at end of file
diff --git a/jcapiv1/README.md b/jcapiv1/README.md
index a0ce60b..adb31a5 100644
--- a/jcapiv1/README.md
+++ b/jcapiv1/README.md
@@ -7,7 +7,7 @@ JCAPIv1 - the Ruby gem for the JumpCloud APIs
 This SDK is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:
 
 - API version: 1.0
-- Package version: 2.2.0
+- Package version: 2.3.0
 - Build package: io.swagger.codegen.languages.RubyClientCodegen
 
 ## Installation
@@ -23,15 +23,15 @@ gem build jcapiv1.gemspec
 Then either install the gem locally:
 
 ```shell
-gem install ./jcapiv1-2.2.0.gem
+gem install ./jcapiv1-2.3.0.gem
 ```
-(for development, run `gem install --dev ./jcapiv1-2.2.0.gem` to install the development dependencies)
+(for development, run `gem install --dev ./jcapiv1-2.3.0.gem` to install the development dependencies)
 
 or publish the gem to a gem hosting service, e.g. [RubyGems](https://rubygems.org/).
 
 Finally add this to the Gemfile:
 
-    gem 'jcapiv1', '~> 2.2.0'
+    gem 'jcapiv1', '~> 2.3.0'
 
 ### Install from Git
 
diff --git a/jcapiv1/lib/jcapiv1/version.rb b/jcapiv1/lib/jcapiv1/version.rb
index 765e2a1..7a0788f 100644
--- a/jcapiv1/lib/jcapiv1/version.rb
+++ b/jcapiv1/lib/jcapiv1/version.rb
@@ -11,5 +11,5 @@
 =end
 
 module JCAPIv1
-  VERSION = "2.2.0"
+  VERSION = "2.3.0"
 end
diff --git a/jcapiv2/README.md b/jcapiv2/README.md
index c440c1f..3c84870 100644
--- a/jcapiv2/README.md
+++ b/jcapiv2/README.md
@@ -7,7 +7,7 @@ JCAPIv2 - the Ruby gem for the JumpCloud APIs
 This SDK is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:
 
 - API version: 2.0
-- Package version: 2.2.0
+- Package version: 2.3.0
 - Build package: io.swagger.codegen.languages.RubyClientCodegen
 
 ## Installation
@@ -23,15 +23,15 @@ gem build jcapiv2.gemspec
 Then either install the gem locally:
 
 ```shell
-gem install ./jcapiv2-2.2.0.gem
+gem install ./jcapiv2-2.3.0.gem
 ```
-(for development, run `gem install --dev ./jcapiv2-2.2.0.gem` to install the development dependencies)
+(for development, run `gem install --dev ./jcapiv2-2.3.0.gem` to install the development dependencies)
 
 or publish the gem to a gem hosting service, e.g. [RubyGems](https://rubygems.org/).
 
 Finally add this to the Gemfile:
 
-    gem 'jcapiv2', '~> 2.2.0'
+    gem 'jcapiv2', '~> 2.3.0'
 
 ### Install from Git
 
diff --git a/jcapiv2/lib/jcapiv2/version.rb b/jcapiv2/lib/jcapiv2/version.rb
index b9ac164..d38d5a8 100644
--- a/jcapiv2/lib/jcapiv2/version.rb
+++ b/jcapiv2/lib/jcapiv2/version.rb
@@ -11,5 +11,5 @@
 =end
 
 module JCAPIv2
-  VERSION = "2.2.0"
+  VERSION = "2.3.0"
 end

From eb3ef22a6160a2d8b37a5a2d2e93748fde39b034 Mon Sep 17 00:00:00 2001
From: Alex Langhart <alex.langhart@jumpcloud.com>
Date: Fri, 9 Aug 2019 10:57:41 -0600
Subject: [PATCH 3/3] Regenerate SDK with updated swagger file

---
 jcapiv2/docs/SystemInsightsApps.md              |  1 -
 jcapiv2/docs/SystemInsightsBrowserPlugins.md    |  1 -
 jcapiv2/docs/SystemInsightsChromeExtensions.md  |  1 -
 jcapiv2/docs/SystemInsightsDiskEncryption.md    |  1 -
 jcapiv2/docs/SystemInsightsFirefoxAddons.md     |  1 -
 jcapiv2/docs/SystemInsightsGroups.md            |  1 -
 .../docs/SystemInsightsInterfaceAddresses.md    |  1 -
 jcapiv2/docs/SystemInsightsMounts.md            |  1 -
 jcapiv2/docs/SystemInsightsOsVersion.md         |  1 -
 jcapiv2/docs/SystemInsightsSafariExtensions.md  |  1 -
 jcapiv2/docs/SystemInsightsSystemInfo.md        |  1 -
 jcapiv2/docs/SystemInsightsUsers.md             |  1 -
 .../lib/jcapiv2/models/system_insights_apps.rb  | 17 ++++-------------
 .../models/system_insights_browser_plugins.rb   | 17 ++++-------------
 .../models/system_insights_chrome_extensions.rb | 17 ++++-------------
 .../models/system_insights_disk_encryption.rb   | 17 ++++-------------
 .../models/system_insights_firefox_addons.rb    | 17 ++++-------------
 .../jcapiv2/models/system_insights_groups.rb    | 17 ++++-------------
 .../system_insights_interface_addresses.rb      | 17 ++++-------------
 .../jcapiv2/models/system_insights_mounts.rb    | 17 ++++-------------
 .../models/system_insights_os_version.rb        | 17 ++++-------------
 .../models/system_insights_safari_extensions.rb | 17 ++++-------------
 .../models/system_insights_system_info.rb       | 17 ++++-------------
 .../lib/jcapiv2/models/system_insights_users.rb | 17 ++++-------------
 .../spec/models/system_insights_apps_spec.rb    |  6 ------
 .../system_insights_browser_plugins_spec.rb     |  6 ------
 .../system_insights_chrome_extensions_spec.rb   |  6 ------
 .../system_insights_disk_encryption_spec.rb     |  6 ------
 .../system_insights_firefox_addons_spec.rb      |  6 ------
 .../spec/models/system_insights_groups_spec.rb  |  6 ------
 .../system_insights_interface_addresses_spec.rb |  6 ------
 .../spec/models/system_insights_mounts_spec.rb  |  6 ------
 .../models/system_insights_os_version_spec.rb   |  6 ------
 .../system_insights_safari_extensions_spec.rb   |  6 ------
 .../models/system_insights_system_info_spec.rb  |  6 ------
 .../spec/models/system_insights_users_spec.rb   |  6 ------
 36 files changed, 48 insertions(+), 240 deletions(-)

diff --git a/jcapiv2/docs/SystemInsightsApps.md b/jcapiv2/docs/SystemInsightsApps.md
index c8b7ac1..3103963 100644
--- a/jcapiv2/docs/SystemInsightsApps.md
+++ b/jcapiv2/docs/SystemInsightsApps.md
@@ -24,6 +24,5 @@ Name | Type | Description | Notes
 **last_opened_time** | **Float** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsBrowserPlugins.md b/jcapiv2/docs/SystemInsightsBrowserPlugins.md
index 8b8af60..bf44886 100644
--- a/jcapiv2/docs/SystemInsightsBrowserPlugins.md
+++ b/jcapiv2/docs/SystemInsightsBrowserPlugins.md
@@ -15,6 +15,5 @@ Name | Type | Description | Notes
 **disabled** | **Integer** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsChromeExtensions.md b/jcapiv2/docs/SystemInsightsChromeExtensions.md
index 4b80445..2df16a8 100644
--- a/jcapiv2/docs/SystemInsightsChromeExtensions.md
+++ b/jcapiv2/docs/SystemInsightsChromeExtensions.md
@@ -16,6 +16,5 @@ Name | Type | Description | Notes
 **permissions** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsDiskEncryption.md b/jcapiv2/docs/SystemInsightsDiskEncryption.md
index 0a3c895..9f2a42d 100644
--- a/jcapiv2/docs/SystemInsightsDiskEncryption.md
+++ b/jcapiv2/docs/SystemInsightsDiskEncryption.md
@@ -12,6 +12,5 @@ Name | Type | Description | Notes
 **encryption_status** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsFirefoxAddons.md b/jcapiv2/docs/SystemInsightsFirefoxAddons.md
index 5675935..feaf609 100644
--- a/jcapiv2/docs/SystemInsightsFirefoxAddons.md
+++ b/jcapiv2/docs/SystemInsightsFirefoxAddons.md
@@ -19,6 +19,5 @@ Name | Type | Description | Notes
 **path** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsGroups.md b/jcapiv2/docs/SystemInsightsGroups.md
index db6a5b3..2028526 100644
--- a/jcapiv2/docs/SystemInsightsGroups.md
+++ b/jcapiv2/docs/SystemInsightsGroups.md
@@ -10,6 +10,5 @@ Name | Type | Description | Notes
 **comment** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsInterfaceAddresses.md b/jcapiv2/docs/SystemInsightsInterfaceAddresses.md
index 60a42ca..9327a31 100644
--- a/jcapiv2/docs/SystemInsightsInterfaceAddresses.md
+++ b/jcapiv2/docs/SystemInsightsInterfaceAddresses.md
@@ -12,6 +12,5 @@ Name | Type | Description | Notes
 **friendly_name** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsMounts.md b/jcapiv2/docs/SystemInsightsMounts.md
index 90fb95c..51294bd 100644
--- a/jcapiv2/docs/SystemInsightsMounts.md
+++ b/jcapiv2/docs/SystemInsightsMounts.md
@@ -16,6 +16,5 @@ Name | Type | Description | Notes
 **flags** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsOsVersion.md b/jcapiv2/docs/SystemInsightsOsVersion.md
index db29a4d..a1dff6a 100644
--- a/jcapiv2/docs/SystemInsightsOsVersion.md
+++ b/jcapiv2/docs/SystemInsightsOsVersion.md
@@ -15,6 +15,5 @@ Name | Type | Description | Notes
 **install_date** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsSafariExtensions.md b/jcapiv2/docs/SystemInsightsSafariExtensions.md
index a94174a..f51b4ab 100644
--- a/jcapiv2/docs/SystemInsightsSafariExtensions.md
+++ b/jcapiv2/docs/SystemInsightsSafariExtensions.md
@@ -15,6 +15,5 @@ Name | Type | Description | Notes
 **path** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsSystemInfo.md b/jcapiv2/docs/SystemInsightsSystemInfo.md
index 2e55d47..2e34069 100644
--- a/jcapiv2/docs/SystemInsightsSystemInfo.md
+++ b/jcapiv2/docs/SystemInsightsSystemInfo.md
@@ -20,6 +20,5 @@ Name | Type | Description | Notes
 **local_hostname** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/docs/SystemInsightsUsers.md b/jcapiv2/docs/SystemInsightsUsers.md
index a35b167..21c852d 100644
--- a/jcapiv2/docs/SystemInsightsUsers.md
+++ b/jcapiv2/docs/SystemInsightsUsers.md
@@ -15,6 +15,5 @@ Name | Type | Description | Notes
 **type** | **String** |  | [optional] 
 **jc_collection_time** | **String** |  | [optional] 
 **jc_system_id** | **String** |  | [optional] 
-**jc_organization_id** | **String** |  | [optional] 
 
 
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_apps.rb b/jcapiv2/lib/jcapiv2/models/system_insights_apps.rb
index 6b77e7d..9970e6f 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_apps.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_apps.rb
@@ -57,8 +57,6 @@ class SystemInsightsApps
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -83,8 +81,7 @@ def self.attribute_map
         :'copyright' => :'copyright',
         :'last_opened_time' => :'last_opened_time',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -111,8 +108,7 @@ def self.swagger_types
         :'copyright' => :'String',
         :'last_opened_time' => :'Float',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -208,10 +204,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -252,8 +244,7 @@ def ==(o)
           copyright == o.copyright &&
           last_opened_time == o.last_opened_time &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -265,7 +256,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [name, path, bundle_executable, bundle_identifier, bundle_name, bundle_short_version, bundle_version, bundle_package_type, environment, element, compiler, development_region, display_name, info_string, minimum_system_version, category, applescript_enabled, copyright, last_opened_time, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [name, path, bundle_executable, bundle_identifier, bundle_name, bundle_short_version, bundle_version, bundle_package_type, environment, element, compiler, development_region, display_name, info_string, minimum_system_version, category, applescript_enabled, copyright, last_opened_time, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb b/jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb
index 39d18b7..465705e 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_browser_plugins.rb
@@ -39,8 +39,6 @@ class SystemInsightsBrowserPlugins
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -56,8 +54,7 @@ def self.attribute_map
         :'path' => :'path',
         :'disabled' => :'disabled',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -75,8 +72,7 @@ def self.swagger_types
         :'path' => :'String',
         :'disabled' => :'Integer',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -136,10 +132,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -171,8 +163,7 @@ def ==(o)
           path == o.path &&
           disabled == o.disabled &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -184,7 +175,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [uid, name, identifier, version, sdk, description, development_region, native, path, disabled, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [uid, name, identifier, version, sdk, description, development_region, native, path, disabled, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb b/jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb
index 5e6a815..e1577e8 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_chrome_extensions.rb
@@ -41,8 +41,6 @@ class SystemInsightsChromeExtensions
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -59,8 +57,7 @@ def self.attribute_map
         :'path' => :'path',
         :'permissions' => :'permissions',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -79,8 +76,7 @@ def self.swagger_types
         :'path' => :'String',
         :'permissions' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -144,10 +140,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -180,8 +172,7 @@ def ==(o)
           path == o.path &&
           permissions == o.permissions &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -193,7 +184,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [uid, name, identifier, version, description, locale, update_url, author, persistent, path, permissions, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [uid, name, identifier, version, description, locale, update_url, author, persistent, path, permissions, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb b/jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb
index ed31e12..a7f0b75 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_disk_encryption.rb
@@ -33,8 +33,6 @@ class SystemInsightsDiskEncryption
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -47,8 +45,7 @@ def self.attribute_map
         :'user_uuid' => :'user_uuid',
         :'encryption_status' => :'encryption_status',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -63,8 +60,7 @@ def self.swagger_types
         :'user_uuid' => :'String',
         :'encryption_status' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -112,10 +108,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -144,8 +136,7 @@ def ==(o)
           user_uuid == o.user_uuid &&
           encryption_status == o.encryption_status &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -157,7 +148,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [name, uuid, encrypted, type, uid, user_uuid, encryption_status, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [name, uuid, encrypted, type, uid, user_uuid, encryption_status, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb b/jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb
index 802a538..510d8da 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_firefox_addons.rb
@@ -47,8 +47,6 @@ class SystemInsightsFirefoxAddons
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -68,8 +66,7 @@ def self.attribute_map
         :'location' => :'location',
         :'path' => :'path',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -91,8 +88,7 @@ def self.swagger_types
         :'location' => :'String',
         :'path' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -168,10 +164,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -207,8 +199,7 @@ def ==(o)
           location == o.location &&
           path == o.path &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -220,7 +211,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [uid, name, identifier, creator, type, version, description, source_url, visible, active, disabled, autoupdate, location, path, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [uid, name, identifier, creator, type, version, description, source_url, visible, active, disabled, autoupdate, location, path, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_groups.rb b/jcapiv2/lib/jcapiv2/models/system_insights_groups.rb
index 455dd62..78e3255 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_groups.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_groups.rb
@@ -29,8 +29,6 @@ class SystemInsightsGroups
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -41,8 +39,7 @@ def self.attribute_map
         :'group_sid' => :'group_sid',
         :'comment' => :'comment',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -55,8 +52,7 @@ def self.swagger_types
         :'group_sid' => :'String',
         :'comment' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -96,10 +92,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -126,8 +118,7 @@ def ==(o)
           group_sid == o.group_sid &&
           comment == o.comment &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -139,7 +130,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [gid, gid_signed, groupname, group_sid, comment, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [gid, gid_signed, groupname, group_sid, comment, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb b/jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb
index 612b4f8..11a0574 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_interface_addresses.rb
@@ -33,8 +33,6 @@ class SystemInsightsInterfaceAddresses
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -47,8 +45,7 @@ def self.attribute_map
         :'type' => :'type',
         :'friendly_name' => :'friendly_name',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -63,8 +60,7 @@ def self.swagger_types
         :'type' => :'String',
         :'friendly_name' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -112,10 +108,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -144,8 +136,7 @@ def ==(o)
           type == o.type &&
           friendly_name == o.friendly_name &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -157,7 +148,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [interface, address, mask, broadcast, point_to_point, type, friendly_name, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [interface, address, mask, broadcast, point_to_point, type, friendly_name, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb b/jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb
index 0a3c065..f774890 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_mounts.rb
@@ -41,8 +41,6 @@ class SystemInsightsMounts
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -59,8 +57,7 @@ def self.attribute_map
         :'inodes_free' => :'inodes_free',
         :'flags' => :'flags',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -79,8 +76,7 @@ def self.swagger_types
         :'inodes_free' => :'String',
         :'flags' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -144,10 +140,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -180,8 +172,7 @@ def ==(o)
           inodes_free == o.inodes_free &&
           flags == o.flags &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -193,7 +184,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [device, device_alias, path, type, blocks_size, blocks, blocks_free, blocks_available, inodes, inodes_free, flags, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [device, device_alias, path, type, blocks_size, blocks, blocks_free, blocks_available, inodes, inodes_free, flags, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb b/jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb
index eb05777..d34edce 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_os_version.rb
@@ -39,8 +39,6 @@ class SystemInsightsOsVersion
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -56,8 +54,7 @@ def self.attribute_map
         :'codename' => :'codename',
         :'install_date' => :'install_date',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -75,8 +72,7 @@ def self.swagger_types
         :'codename' => :'String',
         :'install_date' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -136,10 +132,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -171,8 +163,7 @@ def ==(o)
           codename == o.codename &&
           install_date == o.install_date &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -184,7 +175,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [name, version, major, minor, patch, build, platform, platform_like, codename, install_date, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [name, version, major, minor, patch, build, platform, platform_like, codename, install_date, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb b/jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb
index 7c5e740..80637a0 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_safari_extensions.rb
@@ -39,8 +39,6 @@ class SystemInsightsSafariExtensions
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -56,8 +54,7 @@ def self.attribute_map
         :'description' => :'description',
         :'path' => :'path',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -75,8 +72,7 @@ def self.swagger_types
         :'description' => :'String',
         :'path' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -136,10 +132,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -171,8 +163,7 @@ def ==(o)
           description == o.description &&
           path == o.path &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -184,7 +175,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [uid, name, identifier, version, sdk, update_url, author, developer_id, description, path, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [uid, name, identifier, version, sdk, update_url, author, developer_id, description, path, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb b/jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb
index d6993a7..3279243 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_system_info.rb
@@ -49,8 +49,6 @@ class SystemInsightsSystemInfo
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -71,8 +69,7 @@ def self.attribute_map
         :'computer_name' => :'computer_name',
         :'local_hostname' => :'local_hostname',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -95,8 +92,7 @@ def self.swagger_types
         :'computer_name' => :'String',
         :'local_hostname' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -176,10 +172,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -216,8 +208,7 @@ def ==(o)
           computer_name == o.computer_name &&
           local_hostname == o.local_hostname &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -229,7 +220,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [hostname, uuid, cpu_type, cpu_subtype, cpu_brand, cpu_physical_cores, cpu_logical_cores, cpu_microcode, physical_memory, hardware_vendor, hardware_model, hardware_version, hardware_serial, computer_name, local_hostname, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [hostname, uuid, cpu_type, cpu_subtype, cpu_brand, cpu_physical_cores, cpu_logical_cores, cpu_microcode, physical_memory, hardware_vendor, hardware_model, hardware_version, hardware_serial, computer_name, local_hostname, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/lib/jcapiv2/models/system_insights_users.rb b/jcapiv2/lib/jcapiv2/models/system_insights_users.rb
index 94b7731..c9dfbeb 100644
--- a/jcapiv2/lib/jcapiv2/models/system_insights_users.rb
+++ b/jcapiv2/lib/jcapiv2/models/system_insights_users.rb
@@ -39,8 +39,6 @@ class SystemInsightsUsers
 
     attr_accessor :jc_system_id
 
-    attr_accessor :jc_organization_id
-
 
     # Attribute mapping from ruby-style variable name to JSON key.
     def self.attribute_map
@@ -56,8 +54,7 @@ def self.attribute_map
         :'uuid' => :'uuid',
         :'type' => :'type',
         :'jc_collection_time' => :'jc_collection_time',
-        :'jc_system_id' => :'jc_system_id',
-        :'jc_organization_id' => :'jc_organization_id'
+        :'jc_system_id' => :'jc_system_id'
       }
     end
 
@@ -75,8 +72,7 @@ def self.swagger_types
         :'uuid' => :'String',
         :'type' => :'String',
         :'jc_collection_time' => :'String',
-        :'jc_system_id' => :'String',
-        :'jc_organization_id' => :'String'
+        :'jc_system_id' => :'String'
       }
     end
 
@@ -136,10 +132,6 @@ def initialize(attributes = {})
         self.jc_system_id = attributes[:'jc_system_id']
       end
 
-      if attributes.has_key?(:'jc_organization_id')
-        self.jc_organization_id = attributes[:'jc_organization_id']
-      end
-
     end
 
     # Show invalid properties with the reasons. Usually used together with valid?
@@ -171,8 +163,7 @@ def ==(o)
           uuid == o.uuid &&
           type == o.type &&
           jc_collection_time == o.jc_collection_time &&
-          jc_system_id == o.jc_system_id &&
-          jc_organization_id == o.jc_organization_id
+          jc_system_id == o.jc_system_id
     end
 
     # @see the `==` method
@@ -184,7 +175,7 @@ def eql?(o)
     # Calculates hash code according to all attributes.
     # @return [Fixnum] Hash code
     def hash
-      [uid, gid, uid_signed, gid_signed, username, description, directory, shell, uuid, type, jc_collection_time, jc_system_id, jc_organization_id].hash
+      [uid, gid, uid_signed, gid_signed, username, description, directory, shell, uuid, type, jc_collection_time, jc_system_id].hash
     end
 
     # Builds the object from hash
diff --git a/jcapiv2/spec/models/system_insights_apps_spec.rb b/jcapiv2/spec/models/system_insights_apps_spec.rb
index 2a81054..7d66015 100644
--- a/jcapiv2/spec/models/system_insights_apps_spec.rb
+++ b/jcapiv2/spec/models/system_insights_apps_spec.rb
@@ -158,11 +158,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_browser_plugins_spec.rb b/jcapiv2/spec/models/system_insights_browser_plugins_spec.rb
index 02bd84a..4444140 100644
--- a/jcapiv2/spec/models/system_insights_browser_plugins_spec.rb
+++ b/jcapiv2/spec/models/system_insights_browser_plugins_spec.rb
@@ -104,11 +104,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb b/jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb
index f5d1261..2f20e75 100644
--- a/jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb
+++ b/jcapiv2/spec/models/system_insights_chrome_extensions_spec.rb
@@ -110,11 +110,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_disk_encryption_spec.rb b/jcapiv2/spec/models/system_insights_disk_encryption_spec.rb
index a13edcd..2e638e8 100644
--- a/jcapiv2/spec/models/system_insights_disk_encryption_spec.rb
+++ b/jcapiv2/spec/models/system_insights_disk_encryption_spec.rb
@@ -86,11 +86,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_firefox_addons_spec.rb b/jcapiv2/spec/models/system_insights_firefox_addons_spec.rb
index 0caa266..8254328 100644
--- a/jcapiv2/spec/models/system_insights_firefox_addons_spec.rb
+++ b/jcapiv2/spec/models/system_insights_firefox_addons_spec.rb
@@ -128,11 +128,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_groups_spec.rb b/jcapiv2/spec/models/system_insights_groups_spec.rb
index c546267..edaff5e 100644
--- a/jcapiv2/spec/models/system_insights_groups_spec.rb
+++ b/jcapiv2/spec/models/system_insights_groups_spec.rb
@@ -74,11 +74,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_interface_addresses_spec.rb b/jcapiv2/spec/models/system_insights_interface_addresses_spec.rb
index 2d60d1b..14c66e1 100644
--- a/jcapiv2/spec/models/system_insights_interface_addresses_spec.rb
+++ b/jcapiv2/spec/models/system_insights_interface_addresses_spec.rb
@@ -86,11 +86,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_mounts_spec.rb b/jcapiv2/spec/models/system_insights_mounts_spec.rb
index 3457b9d..34ef9cb 100644
--- a/jcapiv2/spec/models/system_insights_mounts_spec.rb
+++ b/jcapiv2/spec/models/system_insights_mounts_spec.rb
@@ -110,11 +110,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_os_version_spec.rb b/jcapiv2/spec/models/system_insights_os_version_spec.rb
index df5cba9..6cd97d4 100644
--- a/jcapiv2/spec/models/system_insights_os_version_spec.rb
+++ b/jcapiv2/spec/models/system_insights_os_version_spec.rb
@@ -104,11 +104,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_safari_extensions_spec.rb b/jcapiv2/spec/models/system_insights_safari_extensions_spec.rb
index dd19673..0a07494 100644
--- a/jcapiv2/spec/models/system_insights_safari_extensions_spec.rb
+++ b/jcapiv2/spec/models/system_insights_safari_extensions_spec.rb
@@ -104,11 +104,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_system_info_spec.rb b/jcapiv2/spec/models/system_insights_system_info_spec.rb
index 0e7ad67..0394526 100644
--- a/jcapiv2/spec/models/system_insights_system_info_spec.rb
+++ b/jcapiv2/spec/models/system_insights_system_info_spec.rb
@@ -134,11 +134,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end
 
diff --git a/jcapiv2/spec/models/system_insights_users_spec.rb b/jcapiv2/spec/models/system_insights_users_spec.rb
index c27f11c..d2e7148 100644
--- a/jcapiv2/spec/models/system_insights_users_spec.rb
+++ b/jcapiv2/spec/models/system_insights_users_spec.rb
@@ -104,11 +104,5 @@
     end
   end
 
-  describe 'test attribute "jc_organization_id"' do
-    it 'should work' do
-       # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
-    end
-  end
-
 end