API
API Authentication
All the API calls support authentication with an API key. Redash has two types of API keys:
- User API Key: has the same permissions as the user who owns it. Can be found on a user profile page.
- Query API Key: has access only to the query and its results. Can be found on the query page.
Whenever possible we recommend using a Query API key.
Accessing with Python
We provide a light wrapper around the Redash API called redash-toolbelt. It’s a work-in-progress. The source code is hosted on Github. The examples folder in that repo includes useful demos, such as:
- Poll for Fresh Query Results (including parameters)
- Refresh an entire Dashboard
- Export all your queries as files
Common Endpoints
Below is an incomplete list of Redash’s API endpoints as of V9. These may change in future versions of Redash.
Each endpoint is appended to your Redash base URL. For example:
https://app.redash.io/<slug>https://redash.example.com
Queries
/api/queries
- GET: Returns a paginated array of query objects.
- Includes the most recent
query_result_idfor non-parameterized queries.
- Includes the most recent
- POST: Create a new query object
/api/queries/<id>
- GET: Returns an individual query object
- POST: Edit an existing query object.
- DELETE: Archive this query.
/api/queries/<id>/results
- GET: Get a cached result for this query ID. - Only works for non parameterized queries. If you attempt to GET results for a parameterized query you’ll receive the error: `no cached result found
for this query`. See POST instructions for this endpoint to get results for parameterized queries.
- POST: Initiates a new query execution or returns a cached result. - The API prefers to return a cached result. If a cached result is not
available then a new execution job begins and the job object is returned. To
bypass a stale cache, include a
max_agekey which is an integer number of seconds. If the cached result is older thanmax_age, the cache is ignored and a new execution begins. If you setmax_ageto0this guarantees a new execution. - If passing parameters, they must be included in the JSON request body as aparametersobject.
Here’s an example JSON object including different parameter types:
{
"parameters": {
"number_param": 100,
"date_param": "2020-01-01",
"date_range_param": {
"start": "2020-01-01",
"end": "2020-12-31"
}
},
"max_age": 1800
}Jobs
/api/jobs/<job_id>
- GET: Returns a query task result (job)
- Possible statuses:
- 1 == PENDING (waiting to be executed)
- 2 == STARTED (executing)
- 3 == SUCCESS
- 4 == FAILURE
- 5 == CANCELLED
- When status is success, the job will include a
query_result_id
- Possible statuses:
Query Results
/api/query_results/<query_result_id>
- GET: Returns a query result
- Appending a filetype of
.csvor.jsonto this request will return a downloadable file. If you append yourapi_keyin the query string, this link will work for non-logged-in users.
- Appending a filetype of
Dashboards
/api/dashboards
- GET: Returns a paginated array of dashboard objects.
- POST: Create a new dashboard object
/api/dashboards/<dashboard_slug>
- GET: Returns an individual dashboard object.
- DELETE: Archive this dashboard
/api/dashboards/<dashboard_id>
- POST: Edit an existing dashboard object.