Skip to content

Releases: zscaler/zscaler-sdk-python

v1.9.26

02 May 01:07
197867f

Choose a tag to compare

1.9.26 (May 1, 2026)

Notes

  • Python Versions: v3.9, v3.10, v3.11, v3.12

Bug Fixes

  • PR #502 - Fixed ZCC Forwarding Profile and App Profile models and functions.

v1.9.25

01 May 02:51
1541be8

Choose a tag to compare

1.9.25 (April 30, 2026)

Notes

  • Python Versions: v3.9, v3.10, v3.11, v3.12

Bug Fixes

  • PR #501 - Introduced a new model-driven serializer for the ZCC service (zscaler/zcc/_field_introspect.py + zscaler/zcc/_serialize.py) that converts snake_case user input into the exact wire casing declared by each ZscalerObject subclass's request_format() (e.g. enforceSplitDNS, oneIdMTDeviceAuthEnabled). The serializer is wired into web_policy_edit via a _ZccWireBody marker that RequestExecutor._prepare_body() passes through unchanged, so the existing FIELD_EXCEPTIONS workaround in zscaler/helpers.py is no longer the only line of defence against ZCC's inconsistent attribute casing.

  • PR #501 - Fixed Issue #458: web_policy_edit was returning 400 Bad Request — type mismatch on policyExtension.zccFailCloseSettingsExitUninstallPassword (and three sibling lockdownOn* fields). PolicyExtension.__init__ had four malformed multi-line conditional assignments that bound the entire policyExtension dict to scalar string attributes; the conditionals are now correctly parenthesised so each field receives only its own value.

  • PR #501 - Fixed Issue #500: LegacyZCCClient hardcoded the api-mobile.zscaler.net subdomain, which broke tenants on zscalerten (which require mobile6.zscaler.net). zscaler/zcc/legacy.py now derives the host dynamically from the cloud value via _build_zcc_base_url() and a new _ZCC_CLOUD_SUBDOMAIN_OVERRIDES map (default api-mobile; zscalertenmobile6); both the base URL and the OAuth login URL honour the override automatically.

  • PR #501 - Reworked web_policy_edit to reflect the ZCC API's request/response asymmetry: requests carry flat groupIds: list[int] / userIds: list[str] lists, while responses return nested groups / users objects. The legacy transform_common_id_fields(reformat_params, ...) call was removed and the docstring now documents both shapes (and includes Keyword Args coverage for every WebPolicy attribute and its 10 nested model classes).

  • PR #501 - Fixed TypeError: 'int' object is not iterable in zscaler/utils.py zcc_param_mapper when device_type was passed as a single integer (e.g. device_type=3). The scalar-to-list normalisation now wraps both str and int inputs before iterating.

  • PR #501 - Refactored ZCC integration tests (test_application_profiles.py, test_custom_ip_base_apps.py, test_predefined_ip_based_apps.py, test_process_based_apps.py, test_web_policy.py) to the standard single-method try / except / finally lifecycle pattern. test_web_policy.py adds a self-healing pre-cleanup phase (the /web/policy/edit create endpoint silently rejects duplicate names with success=false, id=0) and asserts only the API's actual contract — success == "true" and a non-zero id parsed eagerly from the raw response body so the finally cleanup is always reachable.

  • PR #501 - Added a unit-test suite (tests/unit/zcc/test_zcc_serialize.py) covering field-map introspection, nested-class detection, round-trip parity against the real ZCC web-policy payloads (android/ios/linux/mac/windows), idempotence of zcc_to_wire, and a regression guard that surfaces top-level keys present in payloads but not yet declared by the SDK model.

v1.9.24

28 Apr 21:20
89a0794

Choose a tag to compare

1.9.24 (2026-04-28)

Bug Fixes

  • Fixed ZIA PAC File function and Added SDKv2 Issue Template (#499) (89a0794)

v1.9.23

27 Apr 22:58
99d191e

Choose a tag to compare

1.9.23 (April 27, 2025) - 🧪 Zscaler Python SDK v2.x — Public Preview / Beta

Notes

  • Python Versions: v3.9, v3.10, v3.11, v3.12

Enhancements

A new data-driven Python SDK — generated from the official Zscaler OpenAPI specifications — is now available as a pre-release (2.0.0bN) on PyPI.

pip install --pre --upgrade "zscaler-sdk-python>=2.0.0b1"

Please read before adopting v2.x:

  • OneAPI only. Legacy per-product authentication (LegacyZIAClient, LegacyZPAClient, etc.) is not supported and will not be added. Your tenant must be on Zidentity.
  • Limited product coverage in the beta: ZIA, ZDX, ZIdentity. ZPA, ZCC, ZTW, ZTB, and ZWA remain on v1.x for now.
  • Breaking changes. Migrating from v1.x will require code changes — import paths, method signatures, models, and error classes all change.
  • v1.x remains the recommended GA release and continues to receive bug fixes and security patches.

📖 Full v2.x docs: Zscaler Automation Hub – Python SDK
🔁 v1.x → v2.x migration guide: UPGRADE_GUIDE.md

v1.9.22

23 Apr 07:27
e2b803c

Choose a tag to compare

1.9.22 (April 23, 2025)

Notes

  • Python Versions: v3.9, v3.10, v3.11, v3.12

Bug Fixes

  • PR #493 - Added a dedicated NetworkServicesLite model (with a nested NetworkServiceExtensions block) for the ZIA /networkServices/lite endpoint, exposing the extensions.tag payload returned by the API. list_network_services_lite() now hydrates this richer model.

  • PR #493 - Fixed Issue #492: camelCase response keys with digit/letter boundaries (e.g. isNameL10nTag, ipV6Enabled) were silently corrupted by APIClient.form_response_body() because pydash.strings.camel_case re-tokenized them (turning L10n into L10N), causing model fields to resolve to None. The normalizer now uses the SDK's own to_lower_camel_case helper, which preserves already-camelCase keys verbatim and consults FIELD_EXCEPTIONS for snake_case input. The fix is applied centrally and benefits every OneAPI endpoint.

v1.9.21

14 Apr 19:27
8d37498

Choose a tag to compare

1.9.21 (April 14, 2025)

Notes

  • Python Versions: v3.9, v3.10, v3.11, v3.12

Enhancements

  • PR #484 - Migrated ZIdentity (zid) service to the new /ziam/admin/api/v1 URL path:
    • Updated request_executor.py base URL resolution to use /ziam/ prefix instead of the legacy /zidentity and /admin/api/v1 patterns
    • Service type for ZIdentity endpoints is now ziam (previously zidentity)
    • Base URL no longer includes /admin/api/v1; the full path is carried by the endpoint, preventing URL duplication
    • Added snake_case body preservation for /ziam/ endpoints in _prepare_body()
    • Updated oneapi_response.py pagination and response parsing to use ziam service type
    • Package name remains zid; client.zid and client.zidentity accessors unchanged

v1.9.20

30 Mar 17:27
e07efe5

Choose a tag to compare

1.9.20 (March 30, 2025)

Notes

  • Python Versions: v3.9, v3.10, v3.11, v3.12

Enhancements

  • PR #478 - Added JMESPath client-side filtering support via resp.search(expression) on all list_ response objects for filtering and projection of API results without additional API calls.

Bug Fixes:

  • PR #478 - Fixed ZIA pagination where has_next() returned False after the first page for flat-list endpoints. Normalized SERVICE_PAGE_LIMITS keys and pageSize parameter resolution to correctly drive page-based iteration.

v1.9.19

27 Mar 21:22

Choose a tag to compare

1.9.19 (2026-03-27)

Bug Fixes

  • Fixed ZPA Service Edge Controller attribute incosistency (#476) (e17b256)

v1.9.18

27 Mar 03:53

Choose a tag to compare

1.9.18 (2026-03-27)

Bug Fixes

  • Added New Services ZINS, ZMS, Business Insights, Updated Documentation (#474) (d239386)

v1.9.17

13 Mar 04:11
ad8c9b9

Choose a tag to compare

1.9.17 (March 12, 2025)

Notes

  • Python Versions: v3.10, v3.11, v3.12

Breaking Changes

  • Python 3.9 no longer supported. Minimum required Python version is now 3.10. This change resolves dependency conflicts with vcrpy and urllib3.

Enhancements

  • PR #467 - Added ZPA Tag Controller resources:

    • tag_namespace - Tag namespaces: list, get, get_by_name, create, update, delete, update_namespace_status
    • tag_key - Tag keys (scoped to namespace): list, get, get_by_name, create, update, delete, bulk_update_status
    • tag_group - Tag groups: list, get, get_by_name, create, update, delete
    • Access via client.zpa.tag_namespace, client.zpa.tag_key, client.zpa.tag_group
  • PR #467 - Added ZTB (Zero Trust Branch) package resources:

    • alarms - Alarms: list_alarms, get_alarm, create_alarm, update_alarm_patch, update_alarm_put, delete_alarm, bulk_acknowledge, bulk_acknowledge_all, bulk_ignore, bulk_ignore_all
    • api_keys - API Key Auth: list_api_keys, create_api_key, revoke_api_key
    • app_connector_config - App Connector Config: get_app_connector_config, create_app_connector_config, delete_app_connector
    • devices - Devices: list_active_devices, list_devices_by_category, get_device_tags, get_group_by_list, list_operating_systems, get_dhcp_history, get_device_details_v2, get_device_details_v3, get_filter_values, list_devices_group_by
    • groups_router - Groups Router: list_groups, get_group, create_group, update_group_patch, update_group_put, delete_group
    • template_router - Template Router: list_templates, get_template, create_template, update_template_put, delete_template, list_template_interfaces, list_template_names
    • Access via client.ztb.alarms, client.ztb.api_keys, client.ztb.app_connector_config, client.ztb.devices, client.ztb.groups_router, client.ztb.template_router, or via LegacyZTBClient for API key authentication