meraki-dashboard¶
Cisco Meraki Dashboard API v1: device availability, appliance uplinks and wireless clients of every organization the API key can read.
Validation status: simulator only. The package is built from the official documentation and OpenAPI description (v1.75.1, November 2026) and tested against a synthetic simulator in CI; it has not been run against a real Dashboard yet. Reports from users of real organizations are welcome.
Coverage¶
All metric jobs use organization-wide endpoints: one request per organization and job (one page per 1000 items), whatever the number of networks and devices.
| Template | Endpoint | Default interval | Requests | Metrics |
|---|---|---|---|---|
meraki-organizations |
GET /organizations |
1h | 1 per account | meraki_organization_api_enabled, meraki_organization_info; inventory of the other jobs |
meraki-networks |
GET /organizations/{organizationId}/networks |
1h | 1 per organization (per 1000 items) | meraki_network_info (name, product types, time zone) |
meraki-devices |
GET /organizations/{organizationId}/devices |
1h | 1 per organization (per 1000 items) | meraki_device_info (name, model, firmware, product type, network) |
meraki-device-availabilities |
GET /organizations/{organizationId}/devices/availabilities |
5m | 1 per organization (per 1000 items) | meraki_device_up (online or alerting), meraki_device_alerting |
meraki-appliance-uplink-statuses |
GET /organizations/{organizationId}/appliance/uplink/statuses |
5m | 1 per organization (per 1000 items) | meraki_appliance_uplink_active, meraki_appliance_uplink_up (active or ready), per appliance and interface |
meraki-wireless-client-counts |
GET /organizations/{organizationId}/wireless/clients/overview/byDevice |
5m | 1 per organization (per 1000 items) | meraki_wireless_device_clients (clients connected now, per access point) |
meraki-device-availabilitiesreplacesdevices/statuses, deprecated in October 2024 (deprecated operations); Meraki refreshes availabilities every 5 minutes, hence the default interval.- Measures carry
organization_id,network_idandserial, andmeraki_device_upandmeraki_device_alertingalso carryproduct_type(appliance,switch,wireless...); names, models and firmware are in the_infometrics. No client MAC address is collected. - Uplink IP addresses are not exposed.
Auth setup¶
Create an API key in the Dashboard (My profile > API access), ideally for a read-only administrator of the organizations to monitor, and give it to Tapyr as the apiKey secret. It is sent as Authorization: Bearer (authorization). For regional Dashboards, set the baseURL param (https://api.meraki.ca/api/v1, https://api.meraki.cn/api/v1, https://api.meraki.in/api/v1, https://api.gov-meraki.com/api/v1). The Dashboard may redirect a request to the shard of the organization (n123.meraki.com): the package allows redirects to the hosts of the Meraki domains (redirects.hosts), and Tapyr sends the key there too, each redirect being a request reserved in the budget.
Limits¶
| Limit | Value | Source |
|---|---|---|
org-rate |
10 requests per second per organization, burst 20 (10 extra in the first second), on the requests carrying organizationId |
Rate limit: "up to 10 requests per second per organization", "an extra 10 requests in the first second", shared across all API applications of the organization |
ip-rate |
100 requests per second per Tapyr instance | Same page: "up to 100 requests per second from each source IP address" |
ip-concurrency |
10 concurrent requests per Tapyr instance | Assumed: not documented officially, commonly reported by the community |
429 responses carry Retry-After, honored by the budget engine. There is no daily quota: the per-organization rate is the constraint, and it is shared with the other applications using the API on the same organizations (the official SDK keeps 1 request per second for them). The example gives Tapyr half of it (budget: { share: 0.5, scaleRates: true }).
Quota maths with the defaults, one page per 1000 items: each organization costs 3 requests per 5 minutes (meraki-device-availabilities, meraki-appliance-uplink-statuses, meraki-wireless-client-counts), 36 an hour, plus 2 an hour (meraki-networks, meraki-devices); the account adds 1 an hour (meraki-organizations). An account with 2 organizations sends 77 requests an hour, far below the per-organization rate: the rate matters for bursts and for the share left to other applications. tapyr plan shows the projection.
Simulator¶
tapyr sim --provider meraki-dashboard --listen 127.0.0.1:8083
8083 is the port of the simulator under tapyr sim --all --listen-base 127.0.0.1:8081 (portOffset: 2). A synthetic Dashboard of 2 organizations, each with 4 networks of 10 devices (an MX appliance, three MS switches, six MR access points), generated from a seed. Statuses flap every 5 minutes, client counts and appliance uplinks move over simulated time. The simulator accepts the key sim-meraki-key, paginates with Link headers and enforces the limits above.
| Scenario | Effect |
|---|---|
default |
No fault |
quota-tight |
No daily quota on Meraki: other applications spend most of the per-organization rate, a third of the organization requests get 429 |
bad-day |
From 1h, slow responses (p50 600 ms, p99 4 s) for an hour; from 2h, 25% of the organization requests fail with 502 for 30 minutes; at 4h, a 10-minute outage |
Dashboard¶
dashboards/meraki-dashboard.json (Grafana, Prometheus data source, organization and network variables): devices up and down, alerting, appliance uplinks and networks on a backup uplink, wireless clients, API requests and 429 (Tapyr self-metrics). The network names come from meraki_network_info: run the meraki-networks job for the network variable and the joins.
Known caveats¶
- Simulator-validated only (see above).
meraki-wireless-client-countsneeds access points; organizations without wireless return no item.- Networks bound to configuration templates are reported as returned by the API.