mirror of
https://github.com/grafana/grafana.git
synced 2025-07-28 01:32:06 +08:00

* manually replce all shared relrefs * relref replace - grafana next * Merge branch 'master' into robbymilo/relref-replace-grafana-next * manual fixes * remove ref shortcode * Merge branch 'master' into robbymilo/relref-replace-grafana-next * prettier * fix test * update readme
680 lines
27 KiB
Markdown
680 lines
27 KiB
Markdown
---
|
||
aliases:
|
||
- ../../http_api/reporting/
|
||
canonical: /docs/grafana/latest/developers/http_api/reporting/
|
||
description: Grafana Enterprise APIs
|
||
keywords:
|
||
- grafana
|
||
- enterprise
|
||
- api
|
||
- reporting
|
||
labels:
|
||
products:
|
||
- enterprise
|
||
- oss
|
||
title: Reporting API
|
||
---
|
||
|
||
# Reporting API
|
||
|
||
This API allows you to interact programmatically with the [Reporting](/docs/grafana/latest/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](/docs/grafana/latest/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](/docs/grafana/latest/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](#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](/docs/grafana/latest/developers/http_api/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](#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](/docs/grafana/latest/developers/http_api/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](#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](#reporting-api) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ------------- | --------------------------------------------------------- |
|
||
| reports:write | reports:\*</br>reports:id:\*</br>reports:1(single report) |
|
||
|
||
### Example request
|
||
|
||
See [JSON body schema](#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](/docs/grafana/latest/developers/http_api/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](#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](/docs/grafana/latest/developers/http_api/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](#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](/docs/grafana/latest/developers/http_api/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](#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](/docs/grafana/latest/developers/http_api/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](#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](/docs/grafana/latest/developers/http_api/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](#reporting-api) for an explanation.
|
||
|
||
| Action | Scope |
|
||
| ------------ | ----- |
|
||
| reports:send | n/a |
|
||
|
||
### Example request
|
||
|
||
See [JSON body schema](#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](/docs/grafana/latest/developers/http_api/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
|