mirror of
https://github.com/grafana/grafana.git
synced 2025-07-28 20:22:30 +08:00

* Use relative aliases for all non-current Grafana aliases Prevents non-latest documentation "stealing" the page away from latest and through permanent redirects for latest pages that no longer exist. The redirected pages are indexed by search engines but our robots.txt forbids them crawling the non-latest page. Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Remove aliases from shared pages Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Rewrite all current latest aliases to be next Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Fix typo in latest alias Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Remove all current page aliases find docs/sources -type f -name '*.md' -exec sed -z -i 's#\n *- /docs/grafana/next/[^\n]*\n#\n#' {} \; find docs/sources -type f -name '*.md' -exec sed -Ez -i 's#\n((aliases:\n *-)|aliases:\n)#\n\2#' {} \; Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Prettier Signed-off-by: Jack Baldry <jack.baldry@grafana.com> Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
675 lines
27 KiB
Markdown
675 lines
27 KiB
Markdown
---
|
||
aliases:
|
||
- ../../http_api/reporting/
|
||
description: Grafana Enterprise APIs
|
||
keywords:
|
||
- grafana
|
||
- enterprise
|
||
- api
|
||
- reporting
|
||
title: Reporting API
|
||
---
|
||
|
||
# Reporting API
|
||
|
||
This API allows you to interact programmatically with the [Reporting]({{< relref "../../dashboards/create-reports/" >}}) feature.
|
||
|
||
> The Reporting API is not stabilized yet, it is still in active development and may change without prior notice.
|
||
|
||
> Reporting is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}).
|
||
|
||
> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information.
|
||
|
||
## List all reports
|
||
|
||
`GET /api/reports`
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ------------ | --------------------------- |
|
||
| reports:read | reports:\*<br>reports:id:\* |
|
||
|
||
### Example request
|
||
|
||
```http
|
||
GET /api/reports HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
```
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 1840
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **500** – Unexpected error or server misconfiguration. Refer to server logs for more details.
|
||
|
||
## Get a report
|
||
|
||
`GET /api/reports/:id`
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ------------ | ---------------------------------------------------------- |
|
||
| reports:read | reports:\*<br>reports:id:\*<br>reports:id:1(single report) |
|
||
|
||
### Example request
|
||
|
||
```http
|
||
GET /api/reports/2 HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
```
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 940
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **400** – Bad request (invalid report ID).
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **403** – Forbidden (access denied to a report or a dashboard used in the report).
|
||
- **404** – Not found (such report does not exist).
|
||
- **500** – Unexpected error or server misconfiguration. Refer to server logs for more details.
|
||
|
||
## Create a report
|
||
|
||
`POST /api/reports`
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| -------------- | ----- |
|
||
| reports:create | n/a |
|
||
|
||
### Example request
|
||
|
||
```http
|
||
POST /api/reports HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
|
||
```
|
||
|
||
#### Config JSON Body Schema
|
||
|
||
| Field name | Data type | Description |
|
||
| ------------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| name | string | Name of the report that is used as an email subject. |
|
||
| recipients | string | Comma-separated list of emails to which to send the report to. |
|
||
| replyTo | string | Comma-separated list of emails used in a reply-to field of the report email. |
|
||
| message | string | Text message used for the body of the report email. |
|
||
| startDate | string | Report distribution starts from this date. |
|
||
| endDate | string | Report distribution ends on this date. |
|
||
| frequency | string | Specifies how often the report should be sent. Can be `once`, `hourly`, `daily`, `weekly`, `monthly`, `last` or `custom`.<br/><br/>`last` - schedules the report for the last day of month.<br/><br/>`custom` - schedules the report to be sent on a custom interval.<br/>It requires `intervalFrequency` and `intervalAmount` to be specified: for example, every 2 weeks, where 2 is an `intervalAmount` and `weeks` is an `intervalFrequency`. |
|
||
| intervalFrequency | string | The type of the `custom` interval: `hours`, `days`, `weeks`, `months`. |
|
||
| intervalAmount | number | `custom` interval amount. |
|
||
| workdaysOnly | string | Send the report only on Monday-Friday. Applicable to `hourly` and `daily` types of schedule. |
|
||
| timeZone | string | Time zone used to schedule report execution. |
|
||
| orientation | string | Can be `portrait` or `landscape`. |
|
||
| layout | string | Can be `grid` or `simple`. |
|
||
| enableDashboardUrl | bool | Adds a dashboard url to the bottom of the report email. |
|
||
| formats | []string | Specified what kind of attachment to generate for the report - `csv`, `pdf`, `image`.<br/>`pdf` is the default one.<br/>`csv` attaches a CSV file for each table panel.<br/>`image` embeds an image of a dashboard into the email's body. |
|
||
| dashboards | []object | Dashboards to generate a report for.<br/> See "Report Dashboard Schema" section below. |
|
||
|
||
#### Report Dashboard Schema
|
||
|
||
| Field name | Data type | Description |
|
||
| ------------------------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| dashboard.uid | string | Dashboard [UID](../dashboard#identifier-id-vs-unique-identifier-uid). |
|
||
| timeRange.from | string | Dashboard time range from. |
|
||
| timeRange.to | string | Dashboard time range to. |
|
||
| reportVariables.<variableName> | string | Key-value pairs containing the template variables for this report, in JSON format. If empty, the template variables from the report's dashboard will be used. |
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 35
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **400** – Bad request (invalid json, missing or invalid fields values, etc.).
|
||
- **403** - Forbidden (access denied to a report or a dashboard used in the report).
|
||
- **500** - Unexpected error or server misconfiguration. Refer to server logs for more details
|
||
|
||
## Update a report
|
||
|
||
`PUT /api/reports/:id`
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ------------- | --------------------------------------------------------- |
|
||
| reports:write | reports:\*</br>reports:id:\*</br>reports:1(single report) |
|
||
|
||
### Example request
|
||
|
||
See [JSON body schema]({{< ref "#config-json-body-schema" >}}) for fields description.
|
||
|
||
```http
|
||
GET /api/reports HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
|
||
```
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 28
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **400** – Bad request (invalid json, missing or invalid fields values, etc.).
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **403** – Forbidden (access denied to a report or a dashboard used in the report).
|
||
- **404** – Not found (such report does not exist).
|
||
- **500** – Unexpected error or server misconfiguration. Refer to server logs for more details.
|
||
|
||
## Delete a report
|
||
|
||
`DELETE /api/reports/:id`
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| -------------- | --------------------------------------------------------- |
|
||
| reports:delete | reports:\*</br>reports:id:\*</br>reports:1(single report) |
|
||
|
||
### Example request
|
||
|
||
```http
|
||
GET /api/reports/6 HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
```
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 39
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **400** – Bad request (invalid report ID).
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **404** - Not found (report with this ID does not exist).
|
||
- **500** - Unexpected error or server misconfiguration. Refer to server logs for more details
|
||
|
||
## Send a report
|
||
|
||
`POST /api/reports/email`
|
||
|
||
Generate and send a report. This API waits for the report to be generated before returning. We recommend that you set the client's timeout to at least 60 seconds.
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ------------ | ----- |
|
||
| reports:send | n/a |
|
||
|
||
### Example request
|
||
|
||
```http
|
||
POST /api/reports/email HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
|
||
```
|
||
|
||
#### JSON Body Schema
|
||
|
||
| Field name | Data type | Description |
|
||
| ------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||
| id | string | ID of the report to send. It is the same as in the URL when editing a report, not to be confused with the ID of the dashboard. Required. |
|
||
| emails | string | Comma-separated list of emails to which to send the report to. Overrides the emails from the report. Required if `useEmailsFromReport` is not present. |
|
||
| useEmailsFromReport | boolean | Send the report to the emails specified in the report. Required if `emails` is not present. |
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 29
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – Report was sent.
|
||
- **400** – Bad request (invalid json, missing content-type, missing or invalid fields, etc.).
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **403** - Forbidden (access denied to a report or a dashboard used in the report).
|
||
- **404** - Report not found.
|
||
- **500** - Unexpected error or server misconfiguration. Refer to server logs for more details.
|
||
|
||
## Get reports branding settings
|
||
|
||
`GET /api/reports/settings`
|
||
|
||
Returns reports branding settings that are global and used across all the reports.
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| --------------------- | ----- |
|
||
| reports.settings:read | n/a |
|
||
|
||
### Example request
|
||
|
||
```http
|
||
GET /api/reports/settings HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
```
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 181
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **500** - Unexpected error or server misconfiguration. Refer to server logs for more detail
|
||
|
||
## Save reports branding settings
|
||
|
||
`POST /api/reports/settings`
|
||
|
||
Creates settings if they don't exist, otherwise updates them. These settings are global and used across all the reports.
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ---------------------- | ----- |
|
||
| reports.settings:write | n/a |
|
||
|
||
### Example request
|
||
|
||
```http
|
||
POST /api/reports/settings HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
|
||
```
|
||
|
||
#### JSON Body Schema
|
||
|
||
| Field name | Data type | Description |
|
||
| ------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| branding.reportLogoUrl | string | URL of an image used as a logo on every page of the report. |
|
||
| branding.emailLogoUrl | string | URL of an image used as a logo in the email. |
|
||
| branding.emailFooterMode | string | Can be `sent-by` or `none`.<br/>`sent-by` adds a "Sent by `branding.emailFooterText`" footer link to the email. Requires specifying values in the `branding.emailFooterText` and `branding.emailFooterLink` fields.<br/>`none` suppresses adding a "Sent by" footer link to the email. |
|
||
| branding.emailFooterText | string | Text of a URL added to the email "Sent by" footer. |
|
||
| branding.emailFooterLink | string | URL address value added to the email "Sent by" footer. |
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 35
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **400** – Bad request (invalid json, missing or invalid fields values, etc.).
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **500** - Unexpected error or server misconfiguration. Refer to server logs for more detail
|
||
|
||
## Send a test email
|
||
|
||
`POST /api/reports/test-email`
|
||
|
||
Sends a test email with a report without persisting it in the database.
|
||
|
||
#### Required permissions
|
||
|
||
See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ------------ | ----- |
|
||
| reports:send | n/a |
|
||
|
||
### Example request
|
||
|
||
See [JSON body schema]({{< ref "#config-json-body-schema" >}}) for fields description.
|
||
|
||
```http
|
||
POST /api/reports/test-email HTTP/1.1
|
||
Accept: application/json
|
||
Content-Type: application/json
|
||
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
|
||
|
||
```
|
||
|
||
### Example response
|
||
|
||
```http
|
||
HTTP/1.1 200 OK
|
||
Content-Type: application/json
|
||
Content-Length: 29
|
||
|
||
```
|
||
|
||
### Status Codes
|
||
|
||
- **200** – OK
|
||
- **400** – Bad request (invalid json, missing or invalid fields values, etc.).
|
||
- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}).
|
||
- **403** - Forbidden (access denied to a report or a dashboard used in the report).
|
||
- **500** - Unexpected error or server misconfiguration. Refer to server logs for more details
|