mirror of
https://github.com/grafana/grafana.git
synced 2025-07-28 05:12:17 +08:00

* Fix reference to Grafana CLI - Make relref for relative permalink - Use relative path for unambiguous resolution Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Fix alerting relref anchor format Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Avoid ambiguous relref lookups by forcing relative resolution Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Remove reference to non-existent shared page Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Fix links broken in Grafana Cloud using absolute relrefs By resolving the relref absolutely, it refers to the same location regardless of mounted directory. Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Remove trailing slash for bundle independent resolution Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Fix typo Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * For now, avoid Hugo checking cross repository /docs/grafana-cloud link The path is unlikely to change in the short term and this makes CI completely green for now. Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * No need to specify path for in page anchors Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * Fix prose Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com> --------- Signed-off-by: Jack Baldry <jack.baldry@grafana.com> Co-authored-by: Christopher Moyer <35463610+chri2547@users.noreply.github.com>
676 lines
28 KiB
Markdown
676 lines
28 KiB
Markdown
---
|
||
aliases:
|
||
- ../../http_api/reporting/
|
||
canonical: /docs/grafana/latest/developers/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 "/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]({{< relref "/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]({{< relref "/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]({{< relref "#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 "/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]({{< relref "#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 "/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]({{< 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 "/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]({{< 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 "/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]({{< 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 "/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]({{< 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 "/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]({{< 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 "/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]({{< 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 "/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
|