Skip to content


python package for interacting with the Redash API

view - Documentation     view - Documentation     GitHub Actions


  • Complete access to all endpoints in the Redash API
  • Pagination by default
  • Duplicate dashboards
  • Manage users and groups
  • Duplicate queries with differerent source tables

Implemented Services

  • Dashboards
  • Queries
  • Data Sources
  • Alerts
  • Users
  • Destinations
  • Groups
  • query_snippets
  • Widgets*

* widgets endpoint does not support GET requests, only update, delete and create.

Getting Started

an API key is required in addition to the instance's host URL.


pip install redash-python


from redash_python import Redash

rd = Redash(base_url="", api_key="")

# get all dashboards
dashboards = rd.dashboards.get_all()

# get specific dashboards by id
dash = rd.dashboards.get(1)

# get by slug or name
query = rd.queries.get_by_name("my-dashboard")

# get by tags
q = rd.queries.get_by_tags(["my-tag"])

# get without tags
dash = rd.dashboards.get_by_tags(["my-tag"], without=True)

# Duplicate query with a different table as source
ques = rd.queries
    table_map={"old_table": "new_table"},
    tags=["admin", "test"],

# get a list of implemented API endpoints

# get a list of implemented endpoints in a service

for a full list of implemented methods in each service, print the service object.

>>> print(client.dashboards)
DashboardsService(attributes: ['endpoint'], methods: ['create', 'create_widget', 'delete', 'duplicate', 'exists', 'favorite', 'favorited', 'get', 'get_all', 'get_by_name', 'get_by_tags', 'get_id', 'get_slug', 'paginate', 'publish', 'refresh', 'share', 'unfavorite', 'unpublish', 'update'])

for more examples on usage, see examples folder on github.


before starting development, install dev depndencies:

pip install redash-python[dev]


this library implements a services based architecture splitting each API endpoint group to its own service, on top of which is the Redash class. all the services share base classes from mixins that make it easier to share common behavior and allows rapid development for any new endpoints. for instance adding query_snippets is as simple as:

from .base import BaseService
from .mixins import CommonMixin, NameMixin, PrintMixin

class QSnipsService(CommonMixin, NameMixin, PrintMixin):
    def __init__(self, base: BaseService) -> None:
        # init mixins
        CommonMixin.__init__(self, base)

        self.__base = base
        self.endpoint = "/api/query_snippets"

Directory Structure

├──               # Services wrapper
└── services                # implemented services
    ├──             # Base service class
    └──           # Mixins for services with shared functionality


Contributions are welcome, please open an issue or PR to propse any changes.


view - Documentation