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 CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@ add a news fragment under `changelog.d/` for every user-facing change. See
[CONTRIBUTING.md](CONTRIBUTING.md) for the fragment format.

<!-- towncrier release notes start -->

## 3.3.0 (2026-07-01)

### Added

- On 5xx responses, the SDK now logs the Meraki `X-Request-Id` response header so it can be shared with Meraki to look up the request in server-side logs. If the header is absent, `none` is logged in its place. After retries are exhausted, the request ID is also logged at error level.
1 change: 0 additions & 1 deletion changelog.d/+log-x-request-id-on-5xx.added.md

This file was deleted.

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-07-01 | Library v3.3.0 | API 1.72.0


No Python keyword parameter conflicts detected.


## 2026-06-04 | Library v3.2.0 | API 1.71.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._version import __version__ # noqa: F401
from datetime import datetime

__api_version__ = "1.71.0"
__api_version__ = "1.72.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__ = "3.2.0"
__version__ = "3.3.0"
10 changes: 5 additions & 5 deletions meraki/aio/api/appliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def createDeviceApplianceInterfacesPortsUpdate(self, serial: str, **kwargs):

def getDeviceAppliancePerformance(self, serial: str, **kwargs):
"""
**Return the performance score for a single MX**
**Return the performance score for a single Secure Appliance or Secure Router**
https://developer.cisco.com/meraki/api-v1/#!get-device-appliance-performance

- serial (string): Serial
Expand Down Expand Up @@ -2673,7 +2673,7 @@ def getNetworkApplianceUplinksUsageHistory(self, networkId: str, **kwargs):
https://developer.cisco.com/meraki/api-v1/#!get-network-appliance-uplinks-usage-history

- networkId (string): Network ID
- t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today.
- t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today.
- t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 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 less than or equal to 31 days. The default is 10 minutes.
- resolution (integer): The time resolution in seconds for returned data. The valid resolutions are: 60, 300, 600, 1800, 3600, 86400. The default is 60.
Expand Down Expand Up @@ -2747,7 +2747,7 @@ def createNetworkApplianceVlan(self, networkId: str, id: str, name: str, **kwarg
- dhcpBootFilename (string): DHCP boot option for boot filename
- dhcpOptions (array): The list of DHCP options that will be included in DHCP responses. Each object in the list should have "code", "type", and "value" properties.
- sgt (object): Security Group Tag settings for the VLAN.
- vrf (object): VRF configuration on the VLAN
- vrf (object): VRF configuration on the VLAN.
- uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions.
"""

Expand Down Expand Up @@ -2903,7 +2903,7 @@ def updateNetworkApplianceVlan(self, networkId: str, vlanId: str, **kwargs):
- ipv6 (object): IPv6 configuration on the VLAN
- mandatoryDhcp (object): Mandatory DHCP will enforce that clients connecting to this VLAN must use the IP address assigned by the DHCP server. Clients who use a static IP address won't be able to associate. Only available on firmware versions 17.0 and above
- sgt (object): Security Group Tag settings for the VLAN.
- vrf (object): VRF configuration on the VLAN
- vrf (object): VRF configuration on the VLAN.
- uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions.
"""

Expand Down Expand Up @@ -3011,7 +3011,7 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs):

- networkId (string): Network ID
- enabled (boolean): Boolean value to enable or disable the BGP configuration. When BGP is enabled, the asNumber (ASN) will be autopopulated with the preconfigured ASN at other Hubs or a default value if there is no ASN configured.
- asNumber (integer): An Autonomous System Number (ASN) is required if you are to run BGP and peer with another BGP Speaker outside of the Auto VPN domain. This ASN will be applied to the entire Auto VPN domain. The entire 4-byte ASN range is supported. So, the ASN must be an integer between 1 and 4294967295. When absent, this field is not updated. If no value exists then it defaults to 64512.
- asNumber (integer): An Autonomous System Number (ASN) is required if you are to run BGP and peer with another BGP Speaker outside of the Auto VPN domain. This ASN will be applied to the entire Auto VPN domain and is only configurable for Auto VPN BGP networks. The entire 4-byte ASN range is supported. So, the ASN must be an integer between 1 and 4294967295. When absent, this field is not updated. If no value exists then it defaults to 64512.
- 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.
- 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 Down
4 changes: 2 additions & 2 deletions meraki/aio/api/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def updateDeviceCellularSims(self, serial: str, **kwargs):

- serial (string): Serial
- sims (array): List of SIMs. If a SIM was previously configured and not specified in this request, it will remain unchanged.
- simOrdering (array): Specifies the ordering of all SIMs for an MG: primary, secondary, and not-in-use (when applicable). It's required for devices with 3 or more SIMs and can be used in place of 'isPrimary' for dual-SIM devices. To indicate eSIM, use 'sim3'. Sim failover will occur only between primary and secondary sim slots.
- simOrdering (array): Specifies the ordering of all SIMs for an MG: primary, secondary, and not-in-use (when applicable). It's required for devices with 3 or more SIMs and can be used in place of 'isPrimary' for dual-SIM devices. Use the raw eSIM slot value for the device, such as 'sim2' or 'sim3'. Sim failover will occur only between primary and secondary sim slots.
- simFailover (object): SIM Failover settings.
"""

Expand Down Expand Up @@ -196,7 +196,7 @@ def createDeviceCellularUplinksBandsMasksUpdate(self, serial: str, slot: str, ty
- serial (string): Serial
- slot (string): Required parameter for the SIM slot to update the cellular band mask for
- type (string): Required parameter for the signal type to update the cellular band mask for
- masked (array): Required parameter for the band identifiers to mask for the given SIM slot and signal type. For LTE use bands identifiers like '30' and for 5G use band identifiers like 'n30'. Maximum 256 bands.
- masked (array): Required parameter for the band identifiers to mask for the given SIM slot and signal type. For LTE use bands identifiers like '30', for 5G use band identifiers like 'n30', or use 'all' to mask all bands for that signal type. Maximum 256 bands.
"""

kwargs = locals()
Expand Down
31 changes: 31 additions & 0 deletions meraki/aio/api/networks.py
Original file line number Diff line number Diff line change
Expand Up @@ -886,6 +886,37 @@ def removeNetworkDevices(self, networkId: str, serial: str, **kwargs):

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

def updateNetworkDevicesSyslogServers(self, networkId: str, servers: list, **kwargs):
"""
**Updates the syslog servers configuration for a network.**
https://developer.cisco.com/meraki/api-v1/#!update-network-devices-syslog-servers

- networkId (string): Network ID
- servers (array): A list of the syslog servers for this network; suggested maximum array size is 10
"""

kwargs = locals()

metadata = {
"tags": ["networks", "configure", "devices", "syslog", "servers"],
"operation": "updateNetworkDevicesSyslogServers",
}
networkId = urllib.parse.quote(str(networkId), safe="")
resource = f"/networks/{networkId}/devices/syslog/servers"

body_params = [
"servers",
]
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"updateNetworkDevicesSyslogServers: ignoring unrecognized kwargs: {invalid}")

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

def getNetworkEvents(self, networkId: str, total_pages=1, direction="prev", event_log_end_time=None, **kwargs):
"""
**List the events for the network**
Expand Down
Loading
Loading