Skip to content

Analytics

Redash
API integration

Ship Analytics features without building the integration. Full Redash API access via Proxy and 100+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Talk to us
Redash

Use Cases

Why integrate with Redash

Common scenarios for SaaS companies building Redash integrations for their customers.

01

Power Reverse ETL from customer data warehouses

Marketing, sales, or CRM platforms can let users point to a saved Redash query and sync its results into their product — turning Redash into a universal connector for whatever database the customer runs behind it.

02

Automate access reviews and user offboarding

IAM, HRIS, and compliance platforms can provision, disable, or delete Redash users and manage group membership automatically when employees change roles or leave, enforcing least-privilege access to business data.

03

Route Redash alerts into incident and ChatOps workflows

Incident management and notification platforms can discover configured Redash alerts and register themselves as subscribers, so metric breaches flow directly into on-call rotations and Slack channels.

04

Build data lineage and governance across BI assets

Data catalog and governance tools can ingest every Redash query, dashboard, widget, and data source schema to map lineage from the warehouse to the dashboard, warning teams before upstream changes break reports.

05

Programmatically publish dashboards from a semantic layer

Metric stores and analytics tools can push queries, visualizations, and dashboards into a customer's Redash workspace so teams get pre-built BI assets without manual setup.

What You Can Build

Ship these features with Truto + Redash

Concrete product features your team can ship faster by leveraging Truto’s Redash integration instead of building from scratch.

01

Saved-query audience sync

Let users pick a Redash query, refresh it on a schedule, and pull the latest result set into your app as a live audience or dataset.

02

Automated user lifecycle management

Create, invite, disable, enable, or delete Redash users and manage group membership in response to HRIS or SSO events.

03

Alert subscription webhooks

Discover existing Redash alerts and attach your product as an alert subscription destination to receive real-time threshold breaches.

04

Dashboard and widget provisioning

Programmatically create dashboards, add widgets, and publish visualizations into a customer's Redash instance from templates in your product.

05

BI asset inventory and lineage graph

Pull every query, dashboard, data source, and (for Databricks users) table and column list to build a searchable catalog and lineage map.

06

Data source and ACL management console

Expose a UI inside your product that lets admins add data sources, test connections, pause/resume them, and manage ACLs on Redash objects.

SuperAI

Redash AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

get_single_redash_acl_by_id

Get the access control list of a Redash query or dashboard. Returns an object keyed by access type (e.g. modify), each holding the list of users granted that access. Required: id (object id), object_type.

create_a_redash_acl

Grant a Redash user access to an object. Required: object_type, object_id.

list_all_redash_acls

Check whether the authenticated user has the given access type on a Redash query or dashboard. Returns {response: true|false}; it does not list users. Required: object_type, object_id, access_type.

redash_acls_bulk_delete

Revoke one user's access of one type on a Redash query or dashboard (admin or owner only). Send user_id and access_type in the JSON body. Returns 200 with an empty (null) body. Required: object_type, object_id, user_id, access_type.

list_all_redash_alerts

List Redash alerts. Returns the alert records in the collection: id, created_at, updated_at.

create_a_redash_alert

Create a Redash alert bound to a query. Returns the created alert object: id, created_at, updated_at.

get_single_redash_alert_by_id

Get a Redash alert by id. Returns the alert object: id, created_at, updated_at. Required: id.

update_a_redash_alert_by_id

Update an existing Redash alert by id. Returns the updated alert object: id, created_at, updated_at. Required: id.

delete_a_redash_alert_by_id

Delete a Redash alert by id. Returns a 200 OK response on success; the response body shape is not documented in the upstream OpenAPI spec. Required: id.

list_all_redash_alert_subscriptions

List alert subscriptions attached to an alert in Redash. Returns an array of subscription records; the response body is not enumerated in the discovered source, so each record is documented generically as id plus content-type-specific attributes. Required: alert_id.

create_a_redash_alert_subscription

Subscribe to a Redash alert, either through an alert destination (destination_id) or, when destination_id is omitted, as the calling user by email. A JSON body is always required; send {} at minimum. Returns the created subscription: id, user, alert_id, destination. Required: alert_id.

delete_a_redash_alert_subscription_by_id

Detach a subscription from an alert in Redash. Returns an empty 200 response on success. Required: alert_id and id.

create_a_redash_alert_eval

Trigger evaluation of a Redash alert by id. Returns a 200 OK response with no documented body on success. Required: alert_id. Takes no request body.

create_a_redash_alert_mute

Mute a Redash alert by id. Returns an empty 200 response on success. Required: alert_id. Takes no request body.

redash_alert_mutes_bulk_delete

Unmute a Redash alert by id (DELETE on the mute endpoint). Returns an empty 200 response on success. Required: alert_id.

list_all_redash_dashboards

List Redash dashboards the caller can access. Returns dashboard records with id, slug, name, user, layout, options, tags, is_draft, is_archived, is_favorite, version and timestamps; widgets is always null here (use dashboards.get). Filter with q and tags, sort with order. Max 250 per page.

create_a_redash_dashboard

Create a Redash dashboard. Only name is read; Redash always creates it as a draft with an empty layout (publish with dashboards.update and is_draft false). Returns the created dashboard: id, slug, name, user, layout, options, tags, version and timestamps. Required: name.

get_single_redash_dashboard_by_id

Get a Redash dashboard by id (pass legacy to look up by slug). Returns the dashboard with widgets, layout, options, tags, version, user, can_edit and, when shared, public_url and api_key. Required: id.

update_a_redash_dashboard_by_id

Modify a Redash dashboard. Returns the updated dashboard object including id, name, slug, version, layout, widgets, and options. Required: id.

delete_a_redash_dashboard_by_id

Archive a Redash dashboard. Returns the archived dashboard object including id, name, slug, is_archived, and updated_at. Required: id. Redash archives the record (is_archived=true) rather than removing it.

list_all_redash_dashboards_favorites

List Redash dashboards marked as favorites by the current user. Returns an array of favorited dashboard objects via the `results` envelope.

list_all_redash_dashboards_tags

List all Redash dashboard tags. Returns one record per tag with name and count (number of dashboards carrying it). Not paginated.

create_a_redash_dashboard_fork

Fork a Redash dashboard into a new dashboard owned by the caller. Returns a 200 OK response on success; the OpenAPI does not enumerate response fields. Required: dashboard_id. Takes no request body.

create_a_redash_dashboard_share

Enable anonymous access to a redash dashboard. Returns: public_url, api_key. Required: dashboard_id. Takes no request body.

redash_dashboard_shares_bulk_delete

Disable anonymous access to a redash dashboard. Returns an empty 200 response on success. Required: dashboard_id.

create_a_redash_dashboard_favorite

Mark a Redash dashboard as a favorite. Returns a 200 OK response on success with no documented body. Required: object_id. Takes no request body.

redash_dashboard_favorites_bulk_delete

Remove a Redash dashboard from the user's favorites. Returns a 200 OK response on success with no documented body. Required: object_id.

list_all_redash_my_dashboards

List dashboards created by the authenticated Redash user. Returns dashboard records with id, slug, name, layout, options, tags, is_draft, is_archived, version and timestamps; widgets is always null here. Filter with q (not search) and tags, sort with order. Max 250 per page.

list_all_redash_data_sources

List Redash data sources the caller can access. Returns id, name, type, syntax, paused, pause_reason, supports_auto_limit and view_only for each; options are not included (use data_sources.get as an admin). Not paginated.

create_a_redash_data_source

Create a Redash data source (admin only). options is a JSON object validated against the type configuration_schema from data_sources_types.list; invalid options return 400. Returns the created data source with masked options. Required: name, type, options.

get_single_redash_data_source_by_id

Get a Redash data source by id. Returns id, name, type, syntax, paused, pause_reason, supports_auto_limit and view_only; options (masked), queue names and groups are included only for admins. Required: id.

update_a_redash_data_source_by_id

Replace a Redash data source name, type and options (admin only); all three are required, and the options keys sent are merged into the stored options. Returns the data source with masked options. Required: id, name, type, options.

delete_a_redash_data_source_by_id

Delete a Redash data source by id. Returns an empty 204 response on success. Required: id.

redash_data_sources_pause

Pause a Redash data source. Returns a 200 OK response on success. Required: data_source_id.

redash_data_sources_resume

Resume a paused Redash data source. Returns a 200 OK response on success. Required: data_source_id.

list_all_redash_data_sources_types

List the data source types (query runners) available in this Redash instance, such as PostgreSQL, MySQL and BigQuery (admin only). Returns an array with name, type and configuration_schema (the JSON schema for the data source options) for each type.

get_single_redash_data_source_schema_by_id

Get the table and column schema of a Redash data source. Returns {schema} (list of tables with columns) when a cached schema exists, otherwise {job}: poll jobs.get until status is 3. Pass refresh to force a new fetch. Required: id.

create_a_redash_data_source_test

Test a Redash data source connection. Returns 200 OK on success. Required: data_source_id. Takes no request body.

get_single_redash_databricks_database_by_id

List the databases of a Databricks data source (id = data source id). Returns the cached list when Redash has one; otherwise returns {job}: poll jobs.get until status 3 and read job.result. Fails with 400 for non-Databricks data sources.

list_all_redash_destinations

List Redash alert destinations. Returns id, name, type and icon for each; options are not included here (use destinations.get). Not paginated.

create_a_redash_destination

Create a Redash alert destination (admin only). options is a JSON object validated against the type configuration_schema from destinations_types.list; invalid options return 400. Returns the created destination with id, name, type, icon and masked options. Required: name, type, options.

get_single_redash_destination_by_id

Get a Redash destination by id. Returns the destination object including its id. Required: id.

update_a_redash_destination_by_id

Replace a Redash alert destination name, type and options (admin only); all three are required, and the options keys sent are merged into the stored options. Returns the destination with id, name, type, icon and masked options. Required: id, name, type, options.

delete_a_redash_destination_by_id

Delete a Redash alert destination (admin only). Returns 204 No Content with an empty body. Required: id.

list_all_redash_destinations_types

List the alert destination types available in this Redash instance (admin only), such as email, Slack and webhook. Returns an array with name, type, icon and configuration_schema (the JSON schema for the destination options) for each type.

list_all_redash_events

List audit events recorded in Redash, newest first (admin only). Returns event records with org_id, user_id, user_name, action, object_type, object_id, created_at, browser, location and details. Events have no id. Paginated with page and page_size (max 250) from the results envelope.

create_a_redash_event

Record one or more events in Redash. The body is a JSON array of event objects (action, object_type, object_id, plus any extra keys); Redash overwrites user_id, org_id, user_agent and ip. Returns 200 with an empty (null) body.

list_all_redash_groups

List groups in Redash. Returns each group with id, name, permissions, type and created_at. Not paginated.

create_a_redash_group

Create a group in Redash (admin only). Returns the created group: id, name, permissions, type, created_at. Required: name.

get_single_redash_group_by_id

Get a single group in Redash by id. The Redash API does not document return fields for this endpoint; consult upstream docs for the response shape. Required: id.

update_a_redash_group_by_id

Rename a group in Redash (admin only). Returns the updated group: id, name, permissions, type, created_at. Required: id, name.

delete_a_redash_group_by_id

Delete a group from Redash by id. Required: id.

list_all_redash_group_members

List the members of a Redash group. Returns the group's member list. Required: group_id.

delete_a_redash_group_member_by_id

Remove a member from a Redash group by id. Returns an empty 200 response on success. Required: id, group_id.

create_a_redash_group_member

Add a user to a Redash group (admin only). Returns the added user. Required: group_id, user_id.

list_all_redash_group_data_sources

List data sources attached to a Redash group. The response body shape is not documented in the discovered source. Required: group_id.

create_a_redash_group_data_source

Attach a data source to a Redash group. The request body shape is not documented in the discovered source. Required: group_id.

delete_a_redash_group_data_source_by_id

Detach a data source from a Redash group. The response body shape is not documented in the discovered source. Required: id, group_id.

update_a_redash_group_data_source_by_id

Set whether a Redash group has view-only or full access to a data source that is already attached to it (attach with group_data_sources.create). Returns the data source with view_only. Required: group_id, id (data source id), view_only.

get_single_redash_job_by_id

Retrieve the status of a Redash query execution job. Returns {job} with id, status (1 queued, 2 started, 3 finished, 4 failed or cancelled, 5 cancelled, 6 deferred, 7 scheduled), error, and query_result_id once finished. Required: id.

delete_a_redash_job_by_id

Cancel a query job in progress in Redash. Returns a 200 OK response on success. Required: id.

list_all_redash_queries

List Redash queries ordered by the given column. Returns an array of query objects including id, name, query, data_source_id, schedule, is_archived, is_draft, and timestamps. Pass `q` to filter, `order` to choose the sort column. Max 250 per page.

create_a_redash_query

Create a Redash query. Redash always creates it as a draft (is_draft true); publish it with queries.update and is_draft false. Returns the created query: id, name, query, data_source_id, schedule, options, tags, version, api_key, user, last_modified_by, visualizations and timestamps. Required: data_source_id, query.

redash_queries_search

Search Redash queries by name, description and query text via GET /api/queries?q=. Returns query objects (id, name, query, data_source_id, schedule, tags, user, timestamps) from the paginated results envelope, ordered by search rank. Drafts are included. Required: q. Max 250 per page.

get_single_redash_query_by_id

Retrieve a Redash query. Returns the query with schedule, options, tags, version, user, last_modified_by, visualizations and can_edit; api_key is null when the caller authenticates with an API key. Required: id.

update_a_redash_query_by_id

Modify a Redash query; only the fields sent are changed. tags is a full replacement array and schedule an object. Send version to guard against concurrent edits (409 on mismatch). Returns the updated query with user, last_modified_by and visualizations. Required: id.

delete_a_redash_query_by_id

Archive a Redash query (sets is_archived true; the record is kept). Returns 200 with an empty (null) body. Required: id.

list_all_redash_queries_archives

List archived queries in Redash. Returns an array of query records with content-type-specific fields.

list_all_redash_queries_favorites

List Redash queries the current user has marked as favorite. Returns an array of query objects (each with at minimum an id plus schema-specific attributes). Page-based pagination applies (max 250 per page).

list_all_redash_queries_recents

List the queries recently modified by the current user in Redash. Returns up to 10 query objects whose field shape comes from the upstream API and cannot be enumerated statically.

list_all_redash_queries_tags

List all Redash query tags, including tags used only by draft queries. Returns one record per tag with name and count (number of queries carrying it). Not paginated.

list_all_redash_my_queries

List Redash queries created by the authenticated user. Returns query objects with id, name, query, description, data_source_id, schedule, options, tags, version, user and timestamps. Filter with q (not search) and tags, sort with order. Max 250 per page.

create_a_redash_query_result

Execute an ad-hoc query text against a Redash data source, or return a cached result. All inputs go in the JSON body; p_ query-string params are only a fallback for parameters. Returns either {query_result} when a cached result younger than max_age exists or {job} when the query had to run; poll jobs.get until status is 3, then fetch query_results.get with job.query_result_id. Required: query, data_source_id.

get_single_redash_query_result_by_id

Retrieve a Redash query result by its id. Returns {query_result} with id, query, query_hash, data (columns and rows), data_source_id, runtime and retrieved_at. Required: id.

list_all_redash_query_results_resource

Get the latest cached result of a saved Redash query (GET /api/queries/{query_id}/results). Returns the query_result object: id, query, query_hash, data (columns and rows), data_source_id, runtime, retrieved_at. Returns 404 "No cached result found" when the query has no cached result; parameterized queries are not supported here (use query_results_resource.create). Required: query_id.

create_a_redash_query_results_resource

Execute a saved Redash query, or return its cached result. Send max_age, parameters and apply_auto_limit in the JSON body (max_age omitted or -1 returns any cached result; 0 always executes). Returns either {query_result} when a usable cached result exists or {job} when the query had to run; poll jobs.get until status is 3, then fetch query_results.get with job.query_result_id. Required: query_id.

get_single_redash_query_dropdown_by_id

Get the dropdown values for a Redash query by id. The upstream response body shape is undocumented; Truto returns the raw 200 OK response from the Redash API. Required: id. The dropdown's source query must have a cached result: run it first (query_results_resource.create), otherwise Redash returns 500.

create_a_redash_query_favorite

Mark a Redash query as a favorite. Required: query_id. Takes no request body.

redash_query_favorites_bulk_delete

Unmark a Redash query as a favorite. Required: query_id.

create_a_redash_query_fork

Fork a Redash query by id, creating a new query that copies the source query's text. Required: query_id. Takes no request body.

get_single_redash_query_job_by_id

Retrieve the status of a Redash query execution job (query_id is accepted but not used for the lookup). Returns {job} with id, status (1 queued, 2 started, 3 finished, 4 failed or cancelled, 6 deferred, 7 scheduled), error, and query_result_id once finished. Required: query_id, id.

create_a_redash_query_refresh

Execute a saved Redash query now, ignoring the cache. Parameter values are read only from p_ query-string params, so a parameterized query needs those added to the request. Returns {job}; poll jobs.get until status is 3, then fetch query_results.get with job.query_result_id. Query API keys are rejected with 403; use a user API key. Required: query_id. Takes no request body.

create_a_redash_query_regenerate_api_key

Regenerate the API key attached to a saved Redash query by query id. The endpoint rotates the query's existing API key and returns a 200 OK on success. Required: query_id. Takes no request body.

list_all_redash_query_snippets

List query snippets in Redash. Returns each snippet with id, trigger, description, snippet, user and timestamps. Not paginated.

create_a_redash_query_snippet

Create a query snippet in Redash. Returns the created snippet record including its id and content-type-specific fields.

get_single_redash_query_snippet_by_id

Get a single query snippet by id in Redash. Returns the snippet record including its id and content-type-specific fields. Required: id.

update_a_redash_query_snippet_by_id

Update a Redash query snippet; only trigger, description and snippet are read. Returns the updated snippet with id, trigger, description, snippet, user and timestamps. Required: id.

delete_a_redash_query_snippet_by_id

Delete a Redash query snippet permanently. Returns 200 with an empty (null) body. Required: id.

list_all_redash_settings_organizations

Get the Redash organization settings (admin only). Returns a single settings object (date_format, time_format, integer_format, float_format, null_value, disable_public_urls, auth_* settings, auth_google_apps_domains and similar); it has no id.

create_a_redash_settings_organization

Update Redash organization settings (admin only). Send only the keys to change; any setting key is accepted, and auth_google_apps_domains takes an array of domains. Returns {settings} with every organization setting after the update.

list_all_redash_users

List Redash users. By default returns enabled users (active and pending), newest first; filter with q, disabled and pending, sort with order. Each record has id, name, email, groups ({id, name}), is_disabled, is_invitation_pending, active_at and timestamps. Max 250 per page.

create_a_redash_user

Create and invite a Redash user (admin only). Sends an invite email unless no_invite is passed or no mail server is configured; in those cases the response includes invite_link. Returns the created user. Rate-limited to 200 per day and 50 per hour (429). Required: name, email.

get_single_redash_user_by_id

Get a Redash user by id. Returns the user object including its id and upstream-defined attributes. Required: id.

update_a_redash_user_by_id

Update a Redash user. Only email, name, password, old_password and group_ids are read; changing password always requires old_password, and group_ids (a full replacement integer array) is admin only. Returns the updated user. Rate-limited to 50 per hour (429). Required: id.

delete_a_redash_user_by_id

Delete a Redash user who has not yet accepted their invite (admin only); activated users return 403 and must be disabled instead. Returns the deleted user. Required: id.

redash_users_disable

Disable a Redash user (admin only; you cannot disable yourself). Returns the updated user. Required: user_id. Takes no request body.

redash_users_enable

Re-enable a disabled Redash user (admin only). Returns the updated user. Required: user_id.

redash_users_invite

Re-send the invite email to a Redash user (admin only). Returns the user; invite_link is included when Redash has no mail server configured. Required: user_id. Takes no request body.

create_a_redash_user_regenerate_api_key

Regenerate the API key for a Redash user. Returns a 200 OK response on success. Required: user_id. Takes no request body.

create_a_redash_user_reset_password

Reset a user's password in Redash. Required: user_id. Takes no request body.

create_a_redash_visualization

Create a Redash visualization. Returns a 200 OK confirmation.

update_a_redash_visualization_by_id

Update a Redash visualization by id. Returns a 200 OK confirmation. Required: id.

delete_a_redash_visualization_by_id

Delete a Redash visualization by id. Returns a 200 OK confirmation with no body. Required: id.

create_a_redash_widget

Create a widget on a Redash dashboard with a visualization reference, custom options, and a display width. Returns the created widget object. Always send visualization_id (null for a text widget); Redash fails with 500 if it is missing.

update_a_redash_widget_by_id

Update a Redash dashboard widget. Redash overwrites both text and options on every call, so send both (the current value of whichever is not changing). Returns the updated widget: id, width, options, dashboard_id, text, visualization and timestamps. Required: id, text, options.

delete_a_redash_widget_by_id

Remove a widget from a Redash dashboard. Returns an empty 200 response on success. Required: id.

get_single_redash_query_dropdown_option_by_id

Get a single dropdown's values from a Redash query by query id and dropdown id. The upstream response body shape is undocumented; Truto returns the raw 200 OK response from the Redash API. Required: query_id, dropdown_id. The dropdown's source query must have a cached result: run it first (query_results_resource.create), otherwise Redash returns 500.

list_all_redash_databricks_tables

List the tables of a database in a Databricks data source. Returns {schema, has_columns} when cached; otherwise {job}: poll jobs.get and read job.result. Pass refresh to also load each table's columns. Fails with 400 for non-Databricks data sources.

list_all_redash_databricks_columns

List the columns of a Databricks table. Always returns {job}: poll jobs.get until status 3 and read job.result. Fails with 400 for non-Databricks data sources.

Why Truto

Why use Truto’s MCP server for Redash

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 1000+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Start with Redash in a free sandbox, usually ready within one business day. No boilerplate, no maintenance burden.

01

Link your customer’s Redash account

Use Truto’s frontend SDK to connect your customer’s Redash account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Redash

Truto’s Proxy API is a 1-to-1 mapping of the Redash API. You call us, we call Redash, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Redash’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Redash on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How do end users authenticate their Redash account?

Redash uses per-user API keys (and per-query API keys) against a self-hosted or managed Redash host. Through Truto, your users supply their Redash base URL and API key during connection, and Truto handles storing and injecting the credential on every call.

Does this work with self-hosted Redash instances?

Yes. Most Redash deployments are self-hosted, so the integration is designed around a customer-provided host URL plus API key. Any reachable Redash instance running a standard API version is supported.

Can we fetch live query results, or only cached ones?

Both. You can read the latest cached result via the query results endpoints, or trigger a fresh execution using the query refresh and query results resource endpoints and then poll the job endpoint until the new result is ready.

Are Databricks-specific metadata endpoints supported?

Yes. For Redash instances connected to Databricks, you can list databases, tables, and columns, which is useful for building schema pickers or lineage tools on top of the Databricks + Redash stack.

What alerting operations are available?

You can list, create, update, and delete alerts, manage alert subscriptions (to register your app as a destination), evaluate alerts on demand, and create or bulk-delete alert mutes.

How does Truto handle rate limits and pagination?

Truto normalizes Redash's list endpoints with consistent pagination parameters and transparently manages retries and backoff when Redash returns rate-limit responses, so you can iterate large sets of queries, dashboards, or users without writing that logic yourself.

Redash

Get Redash integrated into your app

Our team understands what it takes to make a Redash integration successful. A short, crisp 30 minute call with folks who understand the problem.