Any better documentation than https://developer.cisco.com/meraki/api-v1 ?

Solved
david_n_m_bond
Building a reputation

Any better documentation than https://developer.cisco.com/meraki/api-v1 ?

The V1 return values are simply not documented.

 

As an example, the endpoint /networks/{networkId}/wireless/connectionStats returns an object:

 

{
    "assoc": 0,
    "auth": 0,
    "dhcp": 0,
    "dns": 0,
    "success": 0
}
 
Documentation: "Description: Aggregated connectivity info for this network"
King George: "Awesome.  Wow."
 
Surely this is documented properly somewhere? 
Author, https://www.nuget.org/packages/Meraki.Api/
1 Accepted Solution
RaphaelL
Kind of a big deal
Kind of a big deal

Yes that is what I ended up discovering. But this still reinforce the main point : the documentation is way too vague and doesn't contain the right info or correct info. 

 

If you look at the documentation for : /networks/{networkId}/events/eventTypes it only shows 1 event versus 60++ that you just showed. It wouln't be that hard to include the complete list into the body of the example.  

For eventtypes we are luck to have this call that returns all the possible values, but for certain calls we don't have that luxury 

View solution in original post

9 Replies 9
david_n_m_bond
Building a reputation

On the specific endpoint, I'm guessing that the API returns values referenced here: https://documentation.meraki.com/General_Administration/Cross-Platform_Content/Meraki_Health_Overvie... 

However, the point remains - the V1 documentation is VERY poor when it comes to documenting return classes.

Author, https://www.nuget.org/packages/Meraki.Api/
RaphaelL
Kind of a big deal
Kind of a big deal

Unfortunately, no.  It is indeed frustrating because you have to test individual calls to know the expected values that are returned. Eg : Event Logs ( /networks/{networkId}/events ) . Parameter : includedEventTypesArray

A list of event types. A yes a list. A list of what values?  You now have to filter thousands lines of logs to find it. 
david_n_m_bond
Building a reputation

Heh - it's 1:30 in the morning here and I'm working on precisely that 😒

 

Nothing, NOTHING is documented and I'm losing sleep trying to reverse engineer this $#!@.

Author, https://www.nuget.org/packages/Meraki.Api/
Greenberet
Head in the Cloud

You might want to look at this endpoint: /networks/{networkId}/events/eventTypes

 

 

[
    {
        "category": "Status",
        "type": "carrier_event",
        "description": "Ethernet port carrier change"
    },
    {
        "category": "Switch status",
        "type": "poe_budget_change",
        "description": "PoE budget change"
    },
    {
        "category": "Switch status",
        "type": "psu_insert",
        "description": "Power supply inserted"
    },
    {
        "category": "Switch status",
        "type": "psu_remove",
        "description": "Power supply removed"
    },
    {
        "category": "Switch status",
        "type": "temp_critical",
        "description": "Temperature Alert"
    },
    {
        "category": "Events dropped",
        "type": "events_dropped2",
        "description": "Events dropped"
    },
    {
        "category": "802.1X",
        "type": "8021x_auth",
        "description": "802.1X authentication"
    },
    {
        "category": "802.1X",
        "type": "8021x_guest_auth",
        "description": "802.1X guest authentication"
    },
    {
        "category": "802.1X",
        "type": "8021x_critical_auth",
        "description": "802.1X critical authentication"
    },
    {
        "category": "802.1X",
        "type": "8021x_deauth",
        "description": "802.1X deauthentication"
    },
    {
        "category": "802.1X",
        "type": "8021x_client_deauth",
        "description": "802.1X client deauthentication"
    },
    {
        "category": "802.1X",
        "type": "8021x_eap_success",
        "description": "802.1X EAP success"
    },
    {
        "category": "802.1X",
        "type": "8021x_canned_eap_success",
        "description": "802.1X Canned EAP success"
    },
    {
        "category": "802.1X",
        "type": "8021x_eap_failure",
        "description": "802.1X EAP failure"
    },
    {
        "category": "802.1X",
        "type": "8021x_radius_timeout",
        "description": "802.1X RADIUS timeout"
    },
    {
        "category": "802.1X",
        "type": "8021x_client_timeout",
        "description": "802.1X client timeout"
    },
    {
        "category": "802.1X",
        "type": "cli_set_rad_parms",
        "description": "RADIUS response"
    },
    {
        "category": "802.1X",
        "type": "cli_set_rad_okc_parms",
        "description": "OKC match"
    },
    {
        "category": "802.1X",
        "type": "cli_set_rad_pmksa_parms",
        "description": "PMKSA cache match"
    },
    {
        "category": "802.1X",
        "type": "8021x_server_err_msg",
        "description": "802.1X server error message"
    },
    {
        "category": "802.1X",
        "type": "multi_auth_vlan_restriction",
        "description": "Multi-Auth VLAN Restriction"
    },
    {
        "category": "Auth",
        "type": "splash_auth",
        "description": "Splash authentication"
    },
    {
        "category": "Auth",
        "type": "ad_auth",
        "description": "Domain authentication"
    },
    {
        "category": "Auth",
        "type": "ad_connect",
        "description": "Connected to Domain Controller"
    },
    {
        "category": "Auth",
        "type": "ad_failure",
        "description": "Unable to connect to Domain Controller"
    },
    {
        "category": "Auth",
        "type": "radius_mac_auth",
        "description": "RADIUS authentication"
    },
    {
        "category": "Auth",
        "type": "radius_mab_timeout",
        "description": "RADIUS MAB timeout"
    },
    {
        "category": "Auth",
        "type": "radius_mac_auth_failover",
        "description": "RADIUS authentication failover to Guest VLAN"
    },
    {
        "category": "Auth",
        "type": "radius_dynamic_vlan_assignment",
        "description": "RADIUS dynamic VLAN assignment"
    },
    {
        "category": "Auth",
        "type": "radius_invalid_vlan_name",
        "description": "RADIUS server returned an invalid VLAN name"
    },
    {
        "category": "Auth",
        "type": "radius_server_attribute_mismatch",
        "description": "RADIUS authentication attribute mismatch"
    },
    {
        "category": "DHCP",
        "type": "dhcp_lease",
        "description": "DHCP lease"
    },
    {
        "category": "DHCP",
        "type": "dhcp_release",
        "description": "DHCP release"
    },
    {
        "category": "DHCP",
        "type": "dhcp_nak",
        "description": "DHCP NAK"
    },
    {
        "category": "DHCP",
        "type": "dhcp_problem",
        "description": "DHCP problem"
    },
    {
        "category": "DHCP",
        "type": "multiple_dhcp_servers_detected",
        "description": "Multiple DHCP servers detected"
    },
    {
        "category": "DHCP",
        "type": "dhcp_no_leases",
        "description": "No DHCP lease available"
    },
    {
        "category": "DHCP",
        "type": "rogue_dhcp",
        "description": "Rogue DHCP server detected"
    },
    {
        "category": "DHCP",
        "type": "dhcp_blocked",
        "description": "DHCP blocked"
    },
    {
        "category": "DHCP",
        "type": "dai_blocked",
        "description": "DAI blocked"
    },
    {
        "category": "Switch port",
        "type": "stp_port_role_change",
        "description": "Port STP change"
    },
    {
        "category": "Switch port",
        "type": "stp_port_delay_monitor",
        "description": "STP BPDU delay monitor"
    },
    {
        "category": "Switch port",
        "type": "stp_bpdu_guard",
        "description": "STP BPDU guard activated"
    },
    {
        "category": "Switch port",
        "type": "stp_root_guard",
        "description": "STP root guard activated"
    },
    {
        "category": "Switch port",
        "type": "stp_loop_guard",
        "description": "STP loop guard activated"
    },
    {
        "category": "Switch port",
        "type": "cable_test_started",
        "description": "Cable test"
    },
    {
        "category": "Switch port",
        "type": "port_bounce",
        "description": "Port bounce"
    },
    {
        "category": "Switch port",
        "type": "sfp_insert",
        "description": "SFP module inserted"
    },
    {
        "category": "Switch port",
        "type": "sfp_remove",
        "description": "SFP module removed"
    },
    {
        "category": "Switch port",
        "type": "port_status",
        "description": "Port status change"
    },
    {
        "category": "Switch port",
        "type": "whitelist_error",
        "description": "Client is not on whitelist"
    },
    {
        "category": "Switch port",
        "type": "sticky_mac_limit",
        "description": "Sticky MAC whitelist limit reached"
    },
    {
        "category": "Switch port",
        "type": "stp_bpdu_conflict",
        "description": "STP BPDU sender conflict"
    },
    {
        "category": "Switch port",
        "type": "udld_alert",
        "description": "UDLD alert"
    },
    {
        "category": "Switch Health",
        "type": "loop_detected",
        "description": "Loop detected"
    },
    {
        "category": "Switch Health",
        "type": "mac_flap_detected",
        "description": "MAC address flapping"
    },
    {
        "category": "Switch Health",
        "type": "stp_elected_root",
        "description": "STP root bridge elected"
    },
    {
        "category": "Switch Health",
        "type": "stp_no_longer_root",
        "description": "STP root status released"
    },
    {
        "category": "VRRP",
        "type": "vrrp",
        "description": "VRRP transition"
    },
    {
        "category": "VRRP",
        "type": "vrrp_state_change",
        "description": "VRRP transition"
    },
    {
        "category": "VRRP",
        "type": "vrrp_vrid_collision",
        "description": "Virtual router collision"
    },
    {
        "category": "ECMP",
        "type": "ecmp_add_failure",
        "description": "ECMP route add failed"
    },
    {
        "category": "ECMP",
        "type": "ecmp_removed",
        "description": "ECMP route removed"
    },
    {
        "category": "OSPF",
        "type": "ospf_neighbor_init",
        "description": "OSPF neighbor init"
    },
    {
        "category": "OSPF",
        "type": "ospf_neighbor_full",
        "description": "OSPF neighbor up"
    },
    {
        "category": "OSPF",
        "type": "ospf_neighbor_down",
        "description": "OSPF neighbor down"
    },
    {
        "category": "OSPF",
        "type": "ospf_route_iface_overlap",
        "description": "OSPF route interface overlap"
    },
    {
        "category": "OSPF",
        "type": "ospf_route_overflow",
        "description": "OSPF route table overflow"
    },
    {
        "category": "DFS",
        "type": "dfs_event",
        "description": "DFS event detected"
    },
    {
        "category": "802.11",
        "type": "association",
        "description": "802.11 association"
    },
    {
        "category": "802.11",
        "type": "disassociation",
        "description": "802.11 disassociation"
    },
    {
        "category": "802.11",
        "type": "aps_association_reject",
        "description": "802.11 association rejected for client balancing"
    },
    {
        "category": "802.11",
        "type": "11r_association",
        "description": "802.11r association"
    },
    {
        "category": "802.11",
        "type": "11r_fast_roam",
        "description": "802.11r roaming reassociation"
    },
    {
        "category": "WPA",
        "type": "wpa_auth",
        "description": "WPA authentication"
    },
    {
        "category": "WPA",
        "type": "wpa_deauth",
        "description": "WPA deauthentication"
    },
    {
        "category": "WPA",
        "type": "wpa_client_deauth",
        "description": "WPA client deauthentication"
    },
    {
        "category": "IP conflict",
        "type": "uplink_ip6_conflict",
        "description": "IPv6 uplink duplicate address detection"
    },
    {
        "category": "IP conflict",
        "type": "uplink_ip6_slaac_failover",
        "description": "IPv6 uplink auto configuration failover"
    },
    {
        "category": "IP conflict",
        "type": "uplink_ip6_static_failover",
        "description": "IPv6 uplink static configuration failover"
    },
    {
        "category": "AutoRF",
        "type": "noise_avoid_begin",
        "description": "Auto RF interference avoidance begin"
    },
    {
        "category": "AutoRF",
        "type": "noise_avoid_end",
        "description": "Auto RF interference avoidance end"
    },
    {
        "category": "AutoRF",
        "type": "channel_scan",
        "description": "Channel scan"
    },
    {
        "category": "AutoRF",
        "type": "spectrum_scan_start",
        "description": "Spectrum analysis"
    },
    {
        "category": "AutoRF",
        "type": "auto_rf_channel_change",
        "description": "Auto RF channel change"
    },
    {
        "category": "AutoRF",
        "type": "auto_tx_power_change",
        "description": "Auto Tx power change"
    },
    {
        "category": "AutoRF",
        "type": "auto_rx_sop_change",
        "description": "Auto Rx sop change"
    },
    {
        "category": "Meraki VPN",
        "type": "vpn_connectivity_change",
        "description": "VPN tunnel connectivity change"
    },
    {
        "category": "Meraki VPN",
        "type": "vpn_registry_change",
        "description": "VPN registry connectivity change"
    },
    {
        "category": "L3 roaming",
        "type": "l3roaming_start_set_anchor",
        "description": "Sent anchor request to anchor AP"
    },
    {
        "category": "L3 roaming",
        "type": "l3roaming_set_anchor_done",
        "description": "Received SetAnchor reply or timed out"
    },
    {
        "category": "L3 roaming",
        "type": "l3roaming_set_anchor_success",
        "description": "Received anchor reply"
    },
    {
        "category": "L3 roaming",
        "type": "l3roaming_set_anchor_fail",
        "description": "Anchor reply not received"
    },
    {
        "category": "L3 roaming",
        "type": "l3roaming_assign_anchor",
        "description": "Assigned anchor AP to client"
    },
    {
        "category": "L3 roaming",
        "type": "l3roaming_lost_anchor",
        "description": "Working anchor AP became unresponsive"
    },
    {
        "category": "L3 roaming",
        "type": "l3roaming_assign_hosting",
        "description": "Received anchor request; sent reply"
    },
    {
        "category": "Air Marshal",
        "type": "device_packet_flood",
        "description": "Single device packet flood"
    },
    {
        "category": "Air Marshal",
        "type": "packet_flood",
        "description": "AP / client flood"
    },
    {
        "category": "Air Marshal",
        "type": "bcast_deauth",
        "description": "Broadcasted deauthorizations"
    },
    {
        "category": "Air Marshal",
        "type": "mac_spoofing_attack",
        "description": "AP spoof"
    },
    {
        "category": "Air Marshal",
        "type": "bcast_deauth_attack",
        "description": "Under containment"
    },
    {
        "category": "Air Marshal",
        "type": "bcast_disassoc_attack",
        "description": "Under containment"
    },
    {
        "category": "Air Marshal",
        "type": "bcast_disassoc",
        "description": "Broadcasted disassociations"
    },
    {
        "category": "Air Marshal",
        "type": "rogue_ap_association",
        "description": "Rogue AP association"
    },
    {
        "category": "Adaptive Policy",
        "type": "adaptive_policy_state_change",
        "description": "Adaptive Policy state change"
    },
    {
        "category": "Appliance status",
        "type": "failover_event",
        "description": "Primary uplink status change"
    },
    {
        "category": "Client status",
        "type": "client_connectivity",
        "description": "Client connectivity status change"
    },
    {
        "category": "IP conflict",
        "type": "ip_conflict",
        "description": "Client IP conflict"
    },
    {
        "category": "IP conflict",
        "type": "ip6_conflict",
        "description": "IPv6 duplicate address detection"
    },
    {
        "category": "IP conflict",
        "type": "martian_vlan",
        "description": "Source IP and/or VLAN mismatch"
    },
    {
        "category": "IP conflict",
        "type": "martian_src",
        "description": "Internet martian"
    },
    {
        "category": "Non-Meraki / Client VPN",
        "type": "vpn",
        "description": "Non-Meraki / Client VPN negotiation"
    },
    {
        "category": "Non-Meraki / Client VPN",
        "type": "client_vpn_connect",
        "description": "VPN client connected"
    },
    {
        "category": "Non-Meraki / Client VPN",
        "type": "client_vpn_disconnect",
        "description": "VPN client disconnected"
    },
    {
        "category": "Non-Meraki / Client VPN",
        "type": "client_vpn_address_pool_empty",
        "description": "VPN client address pool empty"
    },
    {
        "category": "Cellular",
        "type": "cellular_up",
        "description": "Cellular connection up"
    },
    {
        "category": "Cellular",
        "type": "cellular_down",
        "description": "Cellular connection down"
    },
    {
        "category": "Web caching",
        "type": "web_cache_stopped",
        "description": "Web cache stopped"
    },
    {
        "category": "Web caching",
        "type": "web_cache_started",
        "description": "Web cache started"
    },
    {
        "category": "Route tracking",
        "type": "route_connection_change",
        "description": "Route connection change"
    },
    {
        "category": "Route tracking",
        "type": "network_test",
        "description": "Network test"
    },
    {
        "category": "BGP",
        "type": "bgp_received_notification",
        "description": "BGP received notification"
    },
    {
        "category": "BGP",
        "type": "bgp_sent_notification",
        "description": "BGP sent notification"
    },
    {
        "category": "BGP",
        "type": "bgp_session_established",
        "description": "BGP session established"
    },
    {
        "category": "BGP",
        "type": "bgp_session_unestablished",
        "description": "BGP session no longer established"
    },
    {
        "category": "Filtering",
        "type": "cf_block",
        "description": "Content filtering blocked URL"
    },
    {
        "category": "Filtering",
        "type": "sf_url_block",
        "description": "Security blocked URL"
    },
    {
        "category": "Filtering",
        "type": "sf_binary_block",
        "description": "Security blocked file"
    },
    {
        "category": "Filtering",
        "type": "nbar_block",
        "description": "NBAR blocked"
    },
    {
        "category": "Intrusion Detection",
        "type": "ids_start",
        "description": "Intrusion detection started"
    },
    {
        "category": "Intrusion Detection",
        "type": "ids_error",
        "description": "Intrusion detection error"
    },
    {
        "category": "Intrusion Detection",
        "type": "ids_update",
        "description": "Intrusion detection rules update"
    }
]

 

RaphaelL
Kind of a big deal
Kind of a big deal

Yes that is what I ended up discovering. But this still reinforce the main point : the documentation is way too vague and doesn't contain the right info or correct info. 

 

If you look at the documentation for : /networks/{networkId}/events/eventTypes it only shows 1 event versus 60++ that you just showed. It wouln't be that hard to include the complete list into the body of the example.  

For eventtypes we are luck to have this call that returns all the possible values, but for certain calls we don't have that luxury 

david_n_m_bond
Building a reputation

Accepted as solution: "the documentation is way too vague and doesn't contain the right info or correct info." ...as well as providing a solution to the specific nightmare I was suffering!

 

Thanks, @RaphaelL 🙂

Author, https://www.nuget.org/packages/Meraki.Api/
AutomationDude
Building a reputation

I agree, it doesn't seem that hard to let us know what the possible return values for an API call are!

rhbirkelund
Kind of a big deal
Kind of a big deal

There's also the API documentation where you click Help at the top right corner in your Dashboard, and select API Docs. While it does reference developer.cisco.com, it may show some additional info.

In your case, with the example above, the API Docs, also shows an example response.

 

Not sure if that helps.

LinkedIn ::: https://blog.rhbirkelund.dk/

Like what you see? - Give a Kudo ## Did it answer your question? - Mark it as a Solution 🙂

All code examples are provided as is. Responsibility for Code execution lies solely your own.
daniel_abbatt
Getting noticed

Yes, that's all we can go on. Unfortunately it's not very comprehensive in terms of possible return values for things like enums etc.

Get notified when there are additional replies to this discussion.