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
15 changes: 15 additions & 0 deletions docs/generation-report.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Generation Report

## 2026-05-14 | Library v3.1.0b1 | API 1.70.0-beta.1


### Python keyword parameter conflicts


The following operations have parameters whose names are Python reserved keywords.
The generator renames them with a trailing underscore (e.g., `from` -> `from_`).
These should be reported to the owning teams for resolution in the API spec.


| Scope | Operation | Location | Param |
| --- | --- | --- | --- |
| secureConnect | `createOrganizationSecureConnectRemoteAccessLogsExport` | body | `from` |

## 2026-05-06 | Library v3.1.0b0 | API 1.70.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._version import __version__ # noqa: F401
from datetime import datetime

__api_version__ = "1.70.0-beta.0"
__api_version__ = "1.70.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__ = "3.1.0b0"
__version__ = "3.1.0b1"
91 changes: 91 additions & 0 deletions meraki/aio/api/appliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -2032,6 +2032,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
- vrf (object): VRF settings for the static route.
"""

kwargs.update(locals())
Expand All @@ -2048,6 +2049,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s
"subnet",
"gatewayIp",
"gatewayVlanId",
"vrf",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down Expand Up @@ -2092,6 +2094,7 @@ def updateNetworkApplianceStaticRoute(self, networkId: str, staticRouteId: str,
- enabled (boolean): Whether the route should be enabled or not
- fixedIpAssignments (object): Fixed DHCP IP assignments on the route
- reservedIpRanges (array): DHCP reserved IP ranges
- vrf (object): VRF settings for the static route.
"""

kwargs.update(locals())
Expand All @@ -2112,6 +2115,7 @@ def updateNetworkApplianceStaticRoute(self, networkId: str, staticRouteId: str,
"enabled",
"fixedIpAssignments",
"reservedIpRanges",
"vrf",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down Expand Up @@ -3166,6 +3170,41 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs):

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

def updateNetworkApplianceVpnSiteToSiteHubVrfs(self, networkId: str, hubNetworkId: str, _json: list, **kwargs):
"""
**Update the VRF mappings for a source network and hub pair.**
https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-vpn-site-to-site-hub-vrfs

- networkId (string): Network ID
- hubNetworkId (string): Hub network ID
- _json (array): The list of VRFs for this source and hub mapping.
"""

kwargs = locals()

metadata = {
"tags": ["appliance", "configure", "vpn", "siteToSite", "hubs", "vrfs"],
"operation": "updateNetworkApplianceVpnSiteToSiteHubVrfs",
}
networkId = urllib.parse.quote(str(networkId), safe="")
hubNetworkId = urllib.parse.quote(str(hubNetworkId), safe="")
resource = f"/networks/{networkId}/appliance/vpn/siteToSite/hubs/{hubNetworkId}/vrfs"

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

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

def getNetworkApplianceVpnSiteToSiteVpn(self, networkId: str):
"""
**Return the site-to-site VPN settings of a network**
Expand Down Expand Up @@ -3361,6 +3400,7 @@ def getOrganizationApplianceDevicesInterfacesPortsByDevice(self, organizationId:

- organizationId (string): Organization ID
- serials (array): Parameter to filter the results by device serials
- interfaces (array): Parameter to filter the results by specific interfaces
- numbers (array): Parameter to filter the results by specific ports
"""

Expand All @@ -3375,12 +3415,14 @@ def getOrganizationApplianceDevicesInterfacesPortsByDevice(self, organizationId:

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

array_params = [
"serials",
"interfaces",
"numbers",
]
for k, v in kwargs.items():
Expand Down Expand Up @@ -4893,6 +4935,55 @@ def getOrganizationApplianceVpnRemoteAccessSecureClientTunnelCreationByClient(se

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

def getOrganizationApplianceVpnSiteToSiteHubsVrfs(self, organizationId: str, total_pages=1, direction="next", **kwargs):
"""
**Return source-to-hub VRF mappings for site-to-site VPN within an organization.**
https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-site-to-site-hubs-vrfs

- organizationId (string): Organization ID
- 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 - 500. Default is 50.
- 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.
- networkIds (array): Optional parameter to filter source-to-hub mappings by source network IDs.
"""

kwargs.update(locals())

metadata = {
"tags": ["appliance", "configure", "vpn", "siteToSite", "hubs", "vrfs"],
"operation": "getOrganizationApplianceVpnSiteToSiteHubsVrfs",
}
organizationId = urllib.parse.quote(str(organizationId), safe="")
resource = f"/organizations/{organizationId}/appliance/vpn/siteToSite/hubs/vrfs"

query_params = [
"perPage",
"startingAfter",
"endingBefore",
"networkIds",
]
params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params}

array_params = [
"networkIds",
]
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"getOrganizationApplianceVpnSiteToSiteHubsVrfs: ignoring unrecognized kwargs: {invalid}"
)

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

def getOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId: str):
"""
**Get the list of available IPsec SLA policies for an organization**
Expand Down
51 changes: 49 additions & 2 deletions meraki/aio/api/networks.py
Original file line number Diff line number Diff line change
Expand Up @@ -855,6 +855,23 @@ def vmxNetworkDevicesClaim(self, networkId: str, size: str, **kwargs):

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

def getNetworkDevicesJson(self, networkId: str):
"""
**Extraction of the legacy nodes JSON endpoint for a network**
https://developer.cisco.com/meraki/api-v1/#!get-network-devices-json

- networkId (string): Network ID
"""

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

return self._session.get(metadata, resource)

def removeNetworkDevices(self, networkId: str, serial: str, **kwargs):
"""
**Remove a single device**
Expand Down Expand Up @@ -2210,22 +2227,44 @@ def updateNetworkMerakiAuthUser(self, networkId: str, merakiAuthUserId: str, **k

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

def getNetworkMqttBrokers(self, networkId: str):
def getNetworkMqttBrokers(self, networkId: str, **kwargs):
"""
**List the MQTT brokers for this network**
https://developer.cisco.com/meraki/api-v1/#!get-network-mqtt-brokers

- networkId (string): Network ID
- productTypes (array): Optional parameter to filter MQTT brokers by product type. If multiple types are provided, the query will return brokers that match any of the provided types.
"""

kwargs.update(locals())

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

return self._session.get(metadata, resource)
query_params = [
"productTypes",
]
params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params}

array_params = [
"productTypes",
]
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"getNetworkMqttBrokers: ignoring unrecognized kwargs: {invalid}")

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

def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: int, **kwargs):
"""
Expand All @@ -2238,10 +2277,17 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in
- port (integer): Host port though which the MQTT broker can be reached.
- security (object): Security settings of the MQTT broker.
- authentication (object): Authentication settings of the MQTT broker
- productType (string): The product type for which the MQTT broker is being created.
"""

kwargs.update(locals())

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

metadata = {
"tags": ["networks", "configure", "mqttBrokers"],
"operation": "createNetworkMqttBroker",
Expand All @@ -2255,6 +2301,7 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in
"port",
"security",
"authentication",
"productType",
]
payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params}

Expand Down
Loading