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-10-14 | Library v4.6.0b1 | API 1.75.0-beta.1


No Python keyword parameter conflicts detected.


## 2026-10-07 | Library v4.6.0b0 | API 1.75.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 @@ -57,7 +57,7 @@
from meraki.exceptions import APIError, APIKeyError, APIResponseError, AsyncAPIError
from meraki.rest_session import RestSession

__api_version__ = "1.75.0-beta.0"
__api_version__ = "1.75.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.6.0b0"
__version__ = "4.6.0b1"
158 changes: 158 additions & 0 deletions meraki/aio/api/appliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -1155,6 +1155,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg

- networkId (string): Network ID
- ipv4 (object): IPv4 configuration
- name (string): User-friendly name for the L3 interface
- port (object): Port configuration
- vrf (object): VRF assignment for the L3 interface
"""
Expand All @@ -1169,6 +1170,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg
resource = f"/networks/{networkId}/appliance/interfaces/l3"

body_params = [
"name",
"port",
"ipv4",
"vrf",
Expand All @@ -1190,6 +1192,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, *

- networkId (string): Network ID
- interfaceId (string): Interface ID
- name (string): User-friendly name for the L3 interface
- port (object): Port configuration. Set to null to remove the port association.
- ipv4 (object): IPv4 configuration
- vrf (object): VRF assignment for the L3 interface
Expand All @@ -1206,6 +1209,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, *
resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}"

body_params = [
"name",
"port",
"ipv4",
"vrf",
Expand Down Expand Up @@ -1765,6 +1769,41 @@ def getNetworkApplianceSecurityEvents(self, networkId: str, total_pages=1, direc

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

def updateNetworkApplianceSecurityHttpsInspection(self, networkId: str, enabled: bool, **kwargs):
"""
**Update HTTPS inspection configuration for a network.**
https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-security-https-inspection

- networkId (string): Network ID
- enabled (boolean): Whether HTTPS inspection is enabled.
- allowLists (object): Allow lists for HTTPS inspection exclusions.
"""

kwargs.update(locals())

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

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

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

def getNetworkApplianceSecurityIntrusion(self, networkId: str):
"""
**Returns all supported intrusion settings for an MX network**
Expand Down Expand Up @@ -4738,6 +4777,57 @@ def getOrganizationApplianceSecurityEvents(self, organizationId: str, total_page

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

def getOrganizationApplianceSecurityHttpsInspectionByNetwork(
self, organizationId: str, total_pages=1, direction="next", **kwargs
):
"""
**List HTTPS inspection status and configuration for appliances in the organization.**
https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-security-https-inspection-by-network

- 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 - 1000. 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.
- networkIds (array): A list of network IDs. The returned list will be filtered to only include these networks.
"""

kwargs.update(locals())

metadata = {
"tags": ["appliance", "configure", "security", "httpsInspection", "byNetwork"],
"operation": "getOrganizationApplianceSecurityHttpsInspectionByNetwork",
}
organizationId = urllib.parse.quote(str(organizationId), safe="")
resource = f"/organizations/{organizationId}/appliance/security/httpsInspection/byNetwork"

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"getOrganizationApplianceSecurityHttpsInspectionByNetwork: ignoring unrecognized kwargs: {invalid}"
)

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

def httpsiOrganizationApplianceSecurity(self, organizationId: str):
"""
**Retrieve the HTTPS Inspection state for all security appliances in an organization.**
Expand Down Expand Up @@ -6223,6 +6313,74 @@ def updateOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId:

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

def getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval(
self, organizationId: str, total_pages=1, direction="next", **kwargs
):
"""
**Returns Site-to-site VPN stats (loss, latency, jitter, MOS) for all VPN connections in an organization**
https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-site-to-site-vpn-performance-by-tunnel-by-interval

- 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
- t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today.
- t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 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 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated.
- interval (integer): The time interval in seconds for returned data. The valid intervals are: 600, 3600, 7200, 14400, 21600, 43200, 86400. The default is 3600. Interval is calculated if time params are provided.
- perPage (integer): The number of entries per page returned. Acceptable range is 1000 - 10000. Default is 5000.
- 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): Filter results by network
- peerNetworkIds (array): Filter results by peer network
- interfaces (array): Filter results by uplink interface
- peerInterfaces (array): Filter results by peer uplink interface
"""

kwargs.update(locals())

metadata = {
"tags": ["appliance", "monitor", "vpn", "siteToSiteVpn", "performance", "byTunnel", "byInterval"],
"operation": "getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval",
}
organizationId = urllib.parse.quote(str(organizationId), safe="")
resource = f"/organizations/{organizationId}/appliance/vpn/siteToSiteVpn/performance/byTunnel/byInterval"

query_params = [
"t0",
"t1",
"timespan",
"interval",
"perPage",
"startingAfter",
"endingBefore",
"networkIds",
"peerNetworkIds",
"interfaces",
"peerInterfaces",
]
params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params}

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

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

def getOrganizationApplianceVpnStats(self, organizationId: str, total_pages=1, direction="next", **kwargs):
"""
**Show VPN history stats for networks in an organization**
Expand Down
4 changes: 2 additions & 2 deletions meraki/aio/api/campusGateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -1117,7 +1117,7 @@ def createOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str,
https://developer.cisco.com/meraki/api-v1/#!create-organization-campus-gateway-mdns-services-custom

- organizationId (string): Organization ID
- name (string): Display name of the custom mDNS service.
- name (string): Display name; unique ignoring case across the organization and its networks.
- types (array): DNS-SD service types. Accepted shorthand is normalized by the API.
"""

Expand Down Expand Up @@ -1153,7 +1153,7 @@ def updateOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str,

- organizationId (string): Organization ID
- key (string): Key
- name (string): Updated display name of the custom mDNS service.
- name (string): Display name; unique ignoring case across the organization and its networks.
- types (array): Replacement ordered list of DNS-SD service types.
"""

Expand Down
62 changes: 62 additions & 0 deletions meraki/aio/api/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -1052,6 +1052,68 @@ def getDeviceLiveToolsReboot(self, serial: str, rebootId: str):

return self._session.get(metadata, resource)

def createDeviceLiveToolsRouteDetail(self, serial: str, type: str, vrf: dict, destination: dict, nextHop: dict, **kwargs):
"""
**Enqueue a live tool job to fetch route details from a device.**
https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-route-detail

- serial (string): Serial
- type (string): The type of the route provided. The only supported value for now is 'BGP'.
- vrf (object): The route VRF to inspect.
- destination (object): The destination of the route provided
- nextHop (object): The next-hop-IP of the route provided.
- callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret
"""

kwargs.update(locals())

if "type" in kwargs:
options = ["BGP"]
assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}'''

metadata = {
"tags": ["devices", "liveTools", "route", "details"],
"operation": "createDeviceLiveToolsRouteDetail",
}
serial = urllib.parse.quote(str(serial), safe="")
resource = f"/devices/{serial}/liveTools/route/details"

body_params = [
"type",
"vrf",
"destination",
"nextHop",
"callback",
]
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"createDeviceLiveToolsRouteDetail: ignoring unrecognized kwargs: {invalid}")

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

def getDeviceLiveToolsRouteDetail(self, serial: str, jobId: str):
"""
**Return a route details live tool job for a device.**
https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-route-detail

- serial (string): Serial
- jobId (string): Job ID
"""

metadata = {
"tags": ["devices", "liveTools", "route", "details"],
"operation": "getDeviceLiveToolsRouteDetail",
}
serial = urllib.parse.quote(str(serial), safe="")
jobId = urllib.parse.quote(str(jobId), safe="")
resource = f"/devices/{serial}/liveTools/route/details/{jobId}"

return self._session.get(metadata, resource)

def createDeviceLiveToolsRoutingTable(self, serial: str, **kwargs):
"""
**Enqueue a job to perform a routing table request for the device**
Expand Down
4 changes: 4 additions & 0 deletions meraki/aio/api/organizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -12294,6 +12294,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule(
- enabled (boolean): Whether the rule is enabled
- priority (integer): Rule priority (lower numbers = higher priority)
- description (string): Description of the firewall rule
- logging (object): Logging settings for the rule
"""

kwargs.update(locals())
Expand All @@ -12318,6 +12319,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule(
"enabled",
"priority",
"description",
"logging",
"sources",
"destinations",
]
Expand Down Expand Up @@ -12419,6 +12421,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s
- enabled (boolean): Whether the rule is enabled
- priority (integer): Rule priority (lower numbers = higher priority)
- description (string): Description of the firewall rule
- logging (object): Logging settings for the rule
- sources (object): Source traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100.
- destinations (object): Destination traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100.
"""
Expand Down Expand Up @@ -12446,6 +12449,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s
"enabled",
"priority",
"description",
"logging",
"sources",
"destinations",
]
Expand Down
2 changes: 1 addition & 1 deletion meraki/aio/api/wireless.py
Original file line number Diff line number Diff line change
Expand Up @@ -2942,7 +2942,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs):
- radiusProxyEnabled (boolean): If true, Meraki devices will proxy RADIUS messages through the Meraki cloud to the configured RADIUS auth and accounting servers.
- radiusTestingEnabled (boolean): If true, Meraki devices will periodically send Access-Request messages to configured RADIUS servers using identity 'meraki_8021x_test' to ensure that the RADIUS servers are reachable.
- radiusCalledStationId (string): The template of the called station identifier to be used for RADIUS (ex. $NODE_MAC$:$VAP_NUM$).
- radiusAuthenticationNasId (string): The template of the NAS identifier to be used for RADIUS authentication (ex. $NODE_MAC$:$VAP_NUM$).
- radiusAuthenticationNasId (string): The NAS identifier to use for RADIUS authentication. With 802.11r enabled or adaptive, custom text is available only to organizations enabled for this feature; otherwise, use only $NODE_MAC$, $VAP_NUM$, and $VAP_NAME$. When this feature is enabled, the complete rendered NAS identifier must be 1–48 bytes.
- radiusServerTimeout (integer): The amount of time for which a RADIUS client waits for a reply from the RADIUS server (must be between 1-10 seconds).
- radiusServerAttemptsLimit (integer): The maximum number of transmit attempts after which a RADIUS server is failed over (must be between 1-5).
- radiusFallbackEnabled (boolean): Whether or not higher priority RADIUS servers should be retried after 60 seconds.
Expand Down
Loading
Loading