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-05 | Library v4.4.0b0 | API 1.73.0-beta.0


No Python keyword parameter conflicts detected.


## 2026-07-29 | Library v4.3.0b4 | API 1.72.0-beta.4


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.72.0-beta.4"
__api_version__ = "1.73.0-beta.0"

__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.3.0b4"
__version__ = "4.4.0b0"
39 changes: 39 additions & 0 deletions meraki/aio/api/administered.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,45 @@ def revokeAdministeredIdentitiesMeApiKeys(self, suffix: str):

return self._session.post(metadata, resource)

def resolveAdministeredOrganizationsPermissions(self, organizationIds: list, total_pages=1, direction="next", **kwargs):
"""
**Resolve the authenticated caller admin's permissions across multiple organizations**
https://developer.cisco.com/meraki/api-v1/#!resolve-administered-organizations-permissions

- organizationIds (array): Organization IDs to resolve. Maximum 300 values.
- total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages
- direction (string): direction to paginate, either "next" (default) or "prev" page
- perPage (integer): The number of entries per page returned. Acceptable range is 3 - 300. Default is 100.
- startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it.
- endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it.
"""

kwargs.update(locals())

metadata = {
"tags": ["administered", "configure", "permissions"],
"operation": "resolveAdministeredOrganizationsPermissions",
}
resource = "/administered/organizations/permissions/resolve"

body_params = [
"perPage",
"startingAfter",
"endingBefore",
"organizationIds",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

if self._session._validate_kwargs:
all_params = [] + body_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"resolveAdministeredOrganizationsPermissions: ignoring unrecognized kwargs: {invalid}"
)

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

def getAdministeredSearchLive(self, query: str, organizationId: str, networkId: str, **kwargs):
"""
**List the appropriate results for a given global search utilizing live_search_react**
Expand Down
8 changes: 5 additions & 3 deletions meraki/aio/api/appliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -2139,6 +2139,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s
- subnet (string): Subnet of the route
- gatewayIp (string): Gateway IP address (next hop)
- gatewayVlanId (integer): Gateway VLAN ID
- enabled (boolean): Enable/disable the static route
- vrf (object): VRF settings for the static route.
"""

Expand All @@ -2156,6 +2157,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s
"subnet",
"gatewayIp",
"gatewayVlanId",
"enabled",
"vrf",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}
Expand Down Expand Up @@ -3266,7 +3268,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs):
- ibgpHoldTimer (integer): The iBGP holdtimer in seconds. The iBGP holdtimer must be an integer between 12 and 240. When absent, this field is not updated. If no value exists then it defaults to 240.
- ipv6 (object): Settings for IPv6 configurations on the organization.
- tunnelDownTermination (object): Settings for tunnel down termination on the organization.
- vpnAsNumber (integer): Network specific number of the Autonomous System to which the appliance belongs. This field is only configurable for Independent BGP networks.
- localAsNumber (integer): Network-specific local Autonomous System Number (ASN) to which the appliance belongs. This field is only configurable for Independent BGP networks.
- priorityRoute (string): Sets the priority route between eBGP and Auto VPN.
- routerId (string): The router ID of the appliance
- neighbors (array): List of BGP neighbors. This list replaces the existing set of neighbors. When absent, this field is not updated.
Expand All @@ -3293,7 +3295,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs):
"ibgpHoldTimer",
"ipv6",
"tunnelDownTermination",
"vpnAsNumber",
"localAsNumber",
"priorityRoute",
"routerId",
"neighbors",
Expand Down Expand Up @@ -6215,7 +6217,7 @@ def updateOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId:

def getOrganizationApplianceVpnStats(self, organizationId: str, total_pages=1, direction="next", **kwargs):
"""
**Show VPN history stat for networks in an organization**
**Show VPN history stats for networks in an organization**
https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-stats

- organizationId (string): Organization ID
Expand Down
18 changes: 17 additions & 1 deletion meraki/aio/api/assistant.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,9 +249,16 @@ def createAdministeredAssistantChatThreadMessage(self, threadId: str, content: l

- threadId (string): Thread ID
- content (array): List of message content parts. Supports text, image, audio, and file types. Maximum 8 parts.
- platform (string): Platform identifier. Defaults to MERAKI when omitted. Case-insensitive.
"""

kwargs = locals()
kwargs.update(locals())

if "platform" in kwargs:
options = ["DIGITAL_TWIN", "DNAC", "MERAKI", "digital_twin", "dnac", "meraki"]
assert kwargs["platform"] in options, (
f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}'''
)

metadata = {
"tags": ["assistant", "configure", "chat", "threads", "messages"],
Expand All @@ -262,6 +269,7 @@ def createAdministeredAssistantChatThreadMessage(self, threadId: str, content: l

body_params = [
"content",
"platform",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down Expand Up @@ -575,10 +583,17 @@ def createOrganizationAssistantChatThreadMessage(self, organizationId: str, thre
- content (array): List of message content parts. Supports text, image, audio, and file types. Maximum 8 parts.
- networkName (string): Name of the target network.
- networkId (string): Optional Meraki network ID for thread context.
- platform (string): Platform identifier. Defaults to MERAKI when omitted. Case-insensitive.
"""

kwargs.update(locals())

if "platform" in kwargs:
options = ["DIGITAL_TWIN", "DNAC", "MERAKI", "digital_twin", "dnac", "meraki"]
assert kwargs["platform"] in options, (
f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}'''
)

metadata = {
"tags": ["assistant", "configure", "chat", "threads", "messages"],
"operation": "createOrganizationAssistantChatThreadMessage",
Expand All @@ -591,6 +606,7 @@ def createOrganizationAssistantChatThreadMessage(self, organizationId: str, thre
"content",
"networkName",
"networkId",
"platform",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down
53 changes: 42 additions & 11 deletions meraki/aio/api/nac.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,20 +275,18 @@ def getOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, tot

return self._session.get_pages(metadata, resource, params, total_pages, direction)

def createOrganizationNacCertificatesAuthoritiesCrl(
self, organizationId: str, caId: str, content: str, isDelta: bool, **kwargs
):
def createOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, **kwargs):
"""
**Create a new CRL (either base or delta) for an existing CA**
**Upload a CRL through Certificate Validation**
https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-authorities-crl

- organizationId (string): Organization ID
- caId (string): ID of the CRL issuer
- content (string): CRL content in PEM format
- isDelta (boolean): Whether it's a delta CRL or not
- trustedCertificateId (string): ID of the CRL issuer
- crlBody (string): CRL content in PEM format or base64-encoded DER. Required when the access-manager-crl-ui flag is enabled.
- fileName (string): Original filename supplied by the browser
"""

kwargs = locals()
kwargs.update(locals())

metadata = {
"tags": ["nac", "configure", "certificates", "authorities", "crls"],
Expand All @@ -298,9 +296,9 @@ def createOrganizationNacCertificatesAuthoritiesCrl(
resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls"

body_params = [
"caId",
"content",
"isDelta",
"trustedCertificateId",
"crlBody",
"fileName",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down Expand Up @@ -380,6 +378,39 @@ def getOrganizationNacCertificatesAuthoritiesCrlsDescriptors(

return self._session.get_pages(metadata, resource, params, total_pages, direction)

def retrieveOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, trustedCertificateId: str, **kwargs):
"""
**Retrieve a CRL for an existing CA through Certificate Validation**
https://developer.cisco.com/meraki/api-v1/#!retrieve-organization-nac-certificates-authorities-crls

- organizationId (string): Organization ID
- trustedCertificateId (string): ID of the CRL issuer
"""

kwargs = locals()

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

body_params = [
"trustedCertificateId",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

if self._session._validate_kwargs:
all_params = [] + body_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"retrieveOrganizationNacCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}"
)

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

def deleteOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str):
"""
**Deletes a whole CRL, including all its deltas (in case of base CRL removal)**
Expand Down
12 changes: 9 additions & 3 deletions meraki/aio/api/networks.py
Original file line number Diff line number Diff line change
Expand Up @@ -1068,6 +1068,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs):
- upgradeWindow (object): Upgrade window for devices in network
- timezone (string): The timezone for the network
- products (object): Contains information about the network to update
- featureLossAcknowledgements (array): Acknowledges the target version has removed certain features that the network is currently using.
"""

kwargs.update(locals())
Expand All @@ -1083,6 +1084,7 @@ def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs):
"upgradeWindow",
"timezone",
"products",
"featureLossAcknowledgements",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down Expand Up @@ -2785,7 +2787,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs):
https://developer.cisco.com/meraki/api-v1/#!update-network-settings

- networkId (string): Network ID
- localStatusPageEnabled (boolean): Enables / disables the local device status pages (<a target='_blank' href='http://my.meraki.com/'>my.meraki.com, </a><a target='_blank' href='http://ap.meraki.com/'>ap.meraki.com, </a><a target='_blank' href='http://switch.meraki.com/'>switch.meraki.com, </a><a target='_blank' href='http://wired.meraki.com/'>wired.meraki.com</a>). Optional (defaults to false)
- localStatusPageEnabled (boolean): Enables / disables the local device status pages (<a target='_blank' href='http://my.meraki.com/'>my.meraki.com, </a><a target='_blank' href='http://ap.meraki.com/'>ap.meraki.com, </a><a target='_blank' href='http://switch.meraki.com/'>switch.meraki.com, </a><a target='_blank' href='http://wired.meraki.com/'>wired.meraki.com</a>). Optional (defaults to true)
- remoteStatusPageEnabled (boolean): Enables / disables access to the device status page (<a target='_blank'>http://[device's LAN IP])</a>. Optional. Can only be set if localStatusPageEnabled is set to true
- localStatusPage (object): A hash of Local Status page(s)' authentication options applied to the Network.
- securePort (object): A hash of SecureConnect options applied to the Network.
Expand Down Expand Up @@ -3322,9 +3324,10 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v
- vlanNames (array): An array of named VLANs
- vlanGroups (array): An array of VLAN groups
- iname (string): IName of the profile
- allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs.
"""

kwargs = locals()
kwargs.update(locals())

metadata = {
"tags": ["networks", "configure", "vlanProfiles"],
Expand All @@ -3335,6 +3338,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v

body_params = [
"name",
"allowedVlans",
"vlanNames",
"vlanGroups",
"iname",
Expand Down Expand Up @@ -3470,9 +3474,10 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa
- name (string): Name of the profile, string length must be from 1 to 255 characters
- vlanNames (array): An array of named VLANs
- vlanGroups (array): An array of VLAN groups
- allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs.
"""

kwargs = locals()
kwargs.update(locals())

metadata = {
"tags": ["networks", "configure", "vlanProfiles"],
Expand All @@ -3484,6 +3489,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa

body_params = [
"name",
"allowedVlans",
"vlanNames",
"vlanGroups",
]
Expand Down
37 changes: 37 additions & 0 deletions meraki/aio/api/organizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -3289,6 +3289,43 @@ def getOrganizationAssuranceThousandEyesApplications(self, organizationId: str,

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

def getOrganizationAssuranceWiredExperienceMostImpactedXMs(self, organizationId: str, **kwargs):
"""
**Returns the most impacted wired experience metrics, including client counts, top failure contributor, and most impacted networks for each metric.**
https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-most-impacted-x-ms

- organizationId (string): Organization ID
- 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", "mostImpactedXMs"],
"operation": "getOrganizationAssuranceWiredExperienceMostImpactedXMs",
}
organizationId = urllib.parse.quote(str(organizationId), safe="")
resource = f"/organizations/{organizationId}/assurance/wired/experience/mostImpactedXMs"

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

if self._session._validate_kwargs:
all_params = query_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"getOrganizationAssuranceWiredExperienceMostImpactedXMs: ignoring unrecognized kwargs: {invalid}"
)

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

def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork(
self, organizationId: str, total_pages=1, direction="next", **kwargs
):
Expand Down
4 changes: 0 additions & 4 deletions meraki/aio/api/secureConnect.py
Original file line number Diff line number Diff line change
Expand Up @@ -895,8 +895,6 @@ def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId:
- organizationId (string): Organization ID
- t0 (string): The start of the interval, must be within the past 30 days. Must be provided with t1.
- t1 (string): The end of the interval, must not exceed the current date. Must be provided with t0.
- from (integer): Legacy start of the interval in epoch seconds, must be within the past 30 days. Must be provided with to.
- to (integer): Legacy end of the interval in epoch seconds, must not exceed the current date. Must be provided with from.
"""

kwargs.update(locals())
Expand All @@ -911,8 +909,6 @@ def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId:
body_params = [
"t0",
"t1",
"from",
"to",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down
Loading
Loading