Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/generation-report.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Generation Report

## 2026-08-12 | Library v4.4.0b1 | API 1.73.0-beta.1


No Python keyword parameter conflicts detected.


## 2026-08-05 | Library v4.4.0b0 | API 1.73.0-beta.0


Expand Down
2 changes: 1 addition & 1 deletion meraki/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
from meraki.exceptions import APIError, APIKeyError, APIResponseError, AsyncAPIError
from meraki.rest_session import RestSession

__api_version__ = "1.73.0-beta.0"
__api_version__ = "1.73.0-beta.1"

__all__ = [
"APIError",
Expand Down
2 changes: 1 addition & 1 deletion meraki/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "4.4.0b0"
__version__ = "4.4.0b1"
6 changes: 3 additions & 3 deletions meraki/aio/api/appliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -2053,11 +2053,11 @@ def updateNetworkApplianceSsid(self, networkId: str, number: str, **kwargs):
- name (string): The name of the SSID.
- enabled (boolean): Whether or not the SSID is enabled.
- defaultVlanId (integer): The VLAN ID of the VLAN associated to this SSID. This parameter is only valid if the network is in routed mode.
- authMode (string): The association control method for the SSID ('open', 'psk', '8021x-meraki' or '8021x-radius').
- authMode (string): The association control method for the SSID ('open', 'psk', '8021x-meraki', '8021x-radius' or '8021x-nac').
- psk (string): The passkey for the SSID. This param is only valid if the authMode is 'psk'.
- radiusServers (array): The RADIUS 802.1x servers to be used for authentication. This param is only valid if the authMode is '8021x-radius'.
- encryptionMode (string): The psk encryption mode for the SSID ('wep' or 'wpa'). This param is only valid if the authMode is 'psk'.
- wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode' or 'WPA3 only'). This param is only valid if (1) the authMode is 'psk' & the encryptionMode is 'wpa' OR (2) the authMode is '8021x-meraki' OR (3) the authMode is '8021x-radius'
- wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode' or 'WPA3 only'). This param is only valid if (1) the authMode is 'psk' & the encryptionMode is 'wpa' OR (2) the authMode is '8021x-meraki' OR (3) the authMode is '8021x-radius' OR (4) the authMode is '8021x-nac'
- visible (boolean): Boolean indicating whether the MX should advertise or hide this SSID.
- dhcpEnforcedDeauthentication (object): DHCP Enforced Deauthentication enables the disassociation of wireless clients in addition to Mandatory DHCP. This param is only valid on firmware versions >= MX 17.0 where the associated LAN has Mandatory DHCP Enabled
- dot11w (object): The current setting for Protected Management Frames (802.11w).
Expand All @@ -2066,7 +2066,7 @@ def updateNetworkApplianceSsid(self, networkId: str, number: str, **kwargs):
kwargs.update(locals())

if "authMode" in kwargs:
options = ["8021x-meraki", "8021x-radius", "open", "psk"]
options = ["8021x-meraki", "8021x-nac", "8021x-radius", "open", "psk"]
assert kwargs["authMode"] in options, (
f'''"authMode" cannot be "{kwargs["authMode"]}", & must be set to one of: {options}'''
)
Expand Down
2 changes: 2 additions & 0 deletions meraki/aio/api/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -1093,6 +1093,7 @@ def createDeviceLiveToolsRoutingTableLookup(self, serial: str, **kwargs):
- destination (object): The destination IP or subnet to lookup
- nextHop (object): The next hop to lookup
- vpn (object): VPN related search criteria
- vrf (object): Virtual routing and forwarding (VRF) search criteria
- callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret
"""

Expand Down Expand Up @@ -1130,6 +1131,7 @@ def createDeviceLiveToolsRoutingTableLookup(self, serial: str, **kwargs):
"destination",
"nextHop",
"vpn",
"vrf",
"callback",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}
Expand Down
8 changes: 8 additions & 0 deletions meraki/aio/api/licensing.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,17 @@ def getAdministeredLicensingSubscriptionEntitlements(self, **kwargs):
https://developer.cisco.com/meraki/api-v1/#!get-administered-licensing-subscription-entitlements

- skus (array): Filter to entitlements with the specified SKUs
- subscriptionType (string): Filter entitlements by subscription type
"""

kwargs.update(locals())

if "subscriptionType" in kwargs:
options = ["termed", "unified"]
assert kwargs["subscriptionType"] in options, (
f'''"subscriptionType" cannot be "{kwargs["subscriptionType"]}", & must be set to one of: {options}'''
)

metadata = {
"tags": ["licensing", "configure", "subscription", "entitlements"],
"operation": "getAdministeredLicensingSubscriptionEntitlements",
Expand All @@ -24,6 +31,7 @@ def getAdministeredLicensingSubscriptionEntitlements(self, **kwargs):

query_params = [
"skus",
"subscriptionType",
]
params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params}

Expand Down
31 changes: 29 additions & 2 deletions meraki/aio/api/nac.py
Original file line number Diff line number Diff line change
Expand Up @@ -411,9 +411,28 @@ def retrieveOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str

return self._session.post(metadata, resource, payload)

def getOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str):
"""
**Get a CRL, including its revoked serial numbers**
https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates-authorities-crl

- organizationId (string): Organization ID
- crlId (string): Crl ID
"""

metadata = {
"tags": ["nac", "configure", "certificates", "authorities", "crls"],
"operation": "getOrganizationNacCertificatesAuthoritiesCrl",
}
organizationId = urllib.parse.quote(str(organizationId), safe="")
crlId = urllib.parse.quote(str(crlId), safe="")
resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/{crlId}"

return self._session.get(metadata, resource)

def deleteOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str):
"""
**Deletes a whole CRL, including all its deltas (in case of base CRL removal)**
**Deletes a CRL**
https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-certificates-authorities-crl

- organizationId (string): Organization ID
Expand Down Expand Up @@ -536,6 +555,7 @@ def getOrganizationNacClients(self, organizationId: str, total_pages=1, directio
- lastNetworkName (array): List of network names for client retrieval by last login network name
- ssid (array): List of SSID's to filter
- classification (object): Classification filters for client retrieval
- ipskConfigured (boolean): Filter clients by Identity Pre-Shared Key (iPSK) configuration status. true returns only clients with a per-client iPSK passphrase set; false returns only clients without one. Omit to return all clients regardless of iPSK status. When combined with other filters (clientIds, groupIds, search, classification, ssid, lastNetworkName), all conditions are applied together (logical AND).
"""

kwargs.update(locals())
Expand Down Expand Up @@ -570,6 +590,7 @@ def getOrganizationNacClients(self, organizationId: str, total_pages=1, directio
"lastNetworkName",
"ssid",
"classification",
"ipskConfigured",
]
params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params}

Expand Down Expand Up @@ -606,6 +627,7 @@ def createOrganizationNacClient(self, organizationId: str, mac: str, **kwargs):
- userDetails (array): List of users of this network client
- oui (object): Organizationally unique identifier assigned to a vendor of the client
- groups (array): List of group members associated with the client
- ipsk (string): Per-client Identity Pre-Shared Key (iPSK) passphrase (8-63 printable ASCII characters). Only accepted when the access-manager-ipsk-per-client feature flag is enabled; omit when the flag is disabled. Omit to create the client without a passphrase.
"""

kwargs.update(locals())
Expand All @@ -630,6 +652,7 @@ def createOrganizationNacClient(self, organizationId: str, mac: str, **kwargs):
"userDetails",
"oui",
"groups",
"ipsk",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down Expand Up @@ -680,6 +703,7 @@ def createOrganizationNacClientsBulkEdit(self, organizationId: str, clientIds: l
- organizationId (string): Organization ID
- clientIds (array): List of clients ids to apply the bulk edit operation on.
- description (string): User provided description to be applied on the list of clients provided
- ipsk (string): Per-client Identity Pre-Shared Key (iPSK) passphrase to apply to all selected clients (8-63 printable ASCII characters). Only accepted when the access-manager-ipsk-per-client feature flag is enabled; omit when the flag is disabled. Send an empty string to clear the passphrase. Omit the field to leave existing passphrases unchanged.
- groups (object): Client group information to be applied on the list of clients provided
"""

Expand All @@ -695,6 +719,7 @@ def createOrganizationNacClientsBulkEdit(self, organizationId: str, clientIds: l
body_params = [
"clientIds",
"description",
"ipsk",
"groups",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}
Expand All @@ -715,7 +740,7 @@ def createOrganizationNacClientsBulkUpload(
https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-bulk-upload

- organizationId (string): Organization ID
- contents (string): CSV file content in Base64 encoded string format
- contents (string): CSV file content in Base64 encoded string format. Example CSV includes headers MAC Address, Endpoint device group, Description, IPSK.
- updateClients (boolean): The updateClients indicates whether existing clients must be updated with new data from the CSV
- createClientGroups (boolean): The createClientGroups indicates whether new client groups must be created or not
"""
Expand Down Expand Up @@ -932,6 +957,7 @@ def updateOrganizationNacClient(self, organizationId: str, clientId: str, mac: s
- uuid (string): Universally unique identifier of the client
- userDetails (array): List of users of this network client
- oui (object): Organizationally unique identifier assigned to a vendor of the client
- ipsk (string): Per-client Identity Pre-Shared Key (iPSK) passphrase (8-63 printable ASCII characters). Only accepted when the access-manager-ipsk-per-client feature flag is enabled; omit when the flag is disabled. Send an empty string to clear the passphrase. Omit the field to leave any existing passphrase unchanged.
- groups (object): Client group membership changes
"""

Expand All @@ -957,6 +983,7 @@ def updateOrganizationNacClient(self, organizationId: str, clientId: str, mac: s
"uuid",
"userDetails",
"oui",
"ipsk",
"groups",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}
Expand Down
65 changes: 63 additions & 2 deletions meraki/aio/api/organizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -3716,6 +3716,60 @@ def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByServe

return self._session.get(metadata, resource, params)

def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsInsightsByNetwork(self, organizationId: str, **kwargs):
"""
**Provides insights into wired successful connections experience by network.**
https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-insights-by-network

- organizationId (string): Organization ID
- networkIds (array): Filter results by network.
- serials (array): Filter results by device serial.
- contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights.
- subContributor (string): Sub-contributor for which to retrieve insights. If not specified, returns all sub-contributor insights.
- t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today.
- t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0.
- timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours.
"""

kwargs.update(locals())

metadata = {
"tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "insights", "byNetwork"],
"operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsInsightsByNetwork",
}
organizationId = urllib.parse.quote(str(organizationId), safe="")
resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/insights/byNetwork"

query_params = [
"networkIds",
"serials",
"contributor",
"subContributor",
"t0",
"t1",
"timespan",
]
params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params}

array_params = [
"networkIds",
"serials",
]
for k, v in kwargs.items():
if k.strip() in array_params:
params[f"{k.strip()}[]"] = kwargs[f"{k}"]
params.pop(k.strip())

if self._session._validate_kwargs:
all_params = query_params + array_params
invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"]
if invalid and self._session._logger:
self._session._logger.warning(
f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsInsightsByNetwork: ignoring unrecognized kwargs: {invalid}"
)

return self._session.get(metadata, resource, params)

def getOrganizationAssuranceWorkflows(self, organizationId: str, total_pages=1, direction="next", **kwargs):
"""
**Return workflows filtered by organization ID, network ID, type, and category**
Expand Down Expand Up @@ -7250,7 +7304,8 @@ def getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork(
- firmwareStatus (string): Limit the list of networks to those whose current firmware version has the specified end-of-support status.
- firmwareType (string): Limit the list of networks to those whose current firmware version has the specified release type.
- upgradeDependencyIds (array): Limit the list of networks to those that belong to one of the provided upgrade dependencies.
- upgradeAvailable (boolean): Limit the list of networks by upgrade availability.
- updateAvailable (boolean): Limit the list of networks by update availability.
- updateStatus (string): Limit the list of networks to those whose latest software update has the specified status.
- templateRole (string): Limit the list of networks by config template role: non-template only, templates only, or templates and bound networks.
"""

Expand Down Expand Up @@ -7293,6 +7348,11 @@ def getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork(
assert kwargs["firmwareType"] in options, (
f'''"firmwareType" cannot be "{kwargs["firmwareType"]}", & must be set to one of: {options}'''
)
if "updateStatus" in kwargs:
options = ["completed", "completed recently", "in progress", "not yet scheduled", "pending"]
assert kwargs["updateStatus"] in options, (
f'''"updateStatus" cannot be "{kwargs["updateStatus"]}", & must be set to one of: {options}'''
)
if "templateRole" in kwargs:
options = ["bound-templates", "non-template", "templates"]
assert kwargs["templateRole"] in options, (
Expand Down Expand Up @@ -7321,7 +7381,8 @@ def getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork(
"firmwareStatus",
"firmwareType",
"upgradeDependencyIds",
"upgradeAvailable",
"updateAvailable",
"updateStatus",
"templateRole",
]
params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params}
Expand Down
Loading
Loading