Cisco Meraki Dashboard API library
The Meraki Dashboard API Python library provides all current Meraki dashboard API calls to interface with the Cisco Meraki cloud-managed platform. Meraki generates the library based on dashboard API's OpenAPI spec to keep it up to date with the latest API releases, and provides the full source code for the library including the tools used to generate the library, if you are participating in the Early Access program or would like to contribute to the development of the library. Meraki welcomes constructive pull requests that maintain backwards compatibility with prior versions. The library requires Python 3.8+, receives support from the community, and you can install it via PyPI:
pip install --upgrade meraki
If you participate in our Early Access program and would like to use early access features via the library, you'll find instructions in the generator readme.
While you can make direct HTTP requests to dashboard API in any programming language or REST API client, using a client library can make it easier for you to focus on your specific use case, without the overhead of having to write functions to handle the dashboard API calls. The Python library can also take care of error handling, logging, retries, and other convenient processes and options for you automatically.
Retry-After
field within response headersEnable API access in your Meraki dashboard organization and obtain an API key (instructions)
Keep your API key safe and secure, as it is similar to a password for your dashboard. If publishing your Python code to a wider audience, please research secure handling of API keys.
Install the latest version of Python 3
Use pip (or an alternative such as easy_install) to install the library from the Python Package Index:
pip install meraki
pip3
(so pip3 install meraki
) along
with python3
on your systempip install --upgrade meraki
The library supports Meraki dashboard API v1. You can also specify the version of the library when installing with pip:
pip install meraki==
without including a version number to display the list of available versionspip install meraki==1.34.0
pip show meraki
Export your API key as an environment variable, for example:
export MERAKI_DASHBOARD_API_KEY=YOUR_KEY_HERE
Alternatively, define your API key as a variable in your source code; this method is not recommended due to its inherent insecurity.
Single line of code to import and use the library goes at the top of your script:
import meraki
Instantiate the client (API consumer class), optionally specifying any of the parameters available to set:
dashboard = meraki.DashboardAPI()
Make dashboard API calls in your source code, using the format client.scope.operation, where client is the name you defined in the previous step (dashboard above), scope is the corresponding scope that represents the first tag from the OpenAPI spec, and operation is the operation of the API endpoint. For example, to make a call to get the list of organizations accessible by the API key defined in step 1, use this function call:
my_orgs = dashboard.organizations.getOrganizations()
You can find fully working example scripts in the examples folder.
Script | Purpose |
---|---|
org_wide_clients.py | That code collects the clients of all networks, in all orgs to which the key has access. No changes are made, since only GET endpoints are called, and the data is written to local CSV output files. |
asyncio is a library to write concurrent code using the async/await syntax. Special thanks to Heimo Stieg (@coreGreenberet) who has ported the API to asyncio.
If you use a Mac, then you may need to take additional Python installation steps that aren't required on other platforms. This is a limitation of macOS and not the library. This step is not required on Windows.
The usage is similiar to the sequential version above. However it has has some differences.
Export your API key as an environment variable, for example:
export MERAKI_DASHBOARD_API_KEY=YOUR_KEY_HERE
Alternatively, define your API key as a variable in your source code; this method is not recommended due to its inherent insecurity.
Single line of code to import and use the library goes at the top of your script:
import meraki.aio
Instantiate the client (API consumer class), optionally specifying any of the parameters available to set:
async with meraki.aio.AsyncDashboardAPI() as aiomeraki:
The async with statement is important here to make sure, that the client sessions will be closed after using the api.
Make dashboard API calls in your source code, using the format await client.section.operation, where client is the name you defined in the previous step (aiomeraki above), section is the corresponding group (or tag from the OpenAPI spec) from the API docs, and operation is the name (or operation ID from OpenAPI) of the API endpoint. For example, to make a call to get the list of organizations accessible by the API key defined in step 1, use this function call:
my_orgs = await aiomeraki.organizations.getOrganizations()
Run everything inside an event loop.
import asyncio
if __name__ == "__main__":
# replace my_async_entry_point with the name of your entry point method
asyncio.run(my_async_entry_point())
You can find fully working example scripts in the examples folder.
Script | Purpose |
---|---|
aio_org_wide_clients.py | That code is a asyncio port from org_wide_clients.py and collects the clients of all |
networks, in all orgs to which the key has access. No changes are made, since only GET endpoints are called, and the | |
data is written to local CSV output files. | |
aio_ips2firewall.py | That code will collect the source IP of security events and creates L7 firewall rules to |
block them. usage: aio_ips2firewall.py [-h] -o ORGANIZATIONS [ORGANIZATIONS ...] [-f FILTER] [-s] [-d DAYS] |
We're so glad that you're leveraging our Python library. It's best practice to identify your application with every API request that you make. You can easily do this automatically just by following the format defined in config.py and passing the session kwarg:
MERAKI_PYTHON_SDK_CALLER
Unless you are an ecosystem partner, this identifier is optional.