Grafana Reports API

This API allows you to interact programmatically with the Reporting feature. Reporting is only available in Grafana Enterprise. Read more about Grafana Enterprise. If you have Fine-grained access Control enabled, for some endpoints you would need to have relevant permissions. Refer to specific resources to understand what permissions are required.

Operations 3

POST /reports/email Grafana Send Report #
POST /reports/settings Grafana Save Report Settings #
PUT /reports/{id} Grafana Update Report #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/grafana-reports-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

grafana-reports-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Grafana Reports API
  description: 'Grafana is an open-source analytics and visualization platform that helps you monitor and analyze data from various sources. It lets you create customizable dashboards with charts, graphs, and alerts to visualize metrics and logs in real-time. Commonly used for monitoring infrastructure, applications, and business metrics, Grafana connects to dozens of data sources like Prometheus, Elasticsearch, and cloud platforms, making it easier to understand system performance, troubleshoot issues, and track key indicators all in one place. '
  contact:
    name: Grafana Labs
    url: https://grafana.com
    email: hello@grafana.com
  version: 0.0.1
servers:
- url: http://{defaultHost}
  variables:
    defaultHost:
      default: www.example.com/api
- url: https://{defaultHost}
  variables:
    defaultHost:
      default: www.example.com/api
security:
- basic: []
- api_key: []
tags:
- name: Reports
  description: 'This API allows you to interact programmatically with the Reporting feature.

    Reporting is only available in Grafana Enterprise. Read more about Grafana Enterprise.

    If you have Fine-grained access Control enabled, for some endpoints you would need to have relevant permissions. Refer to specific resources to understand what permissions are required.'
paths:
  /reports/email:
    parameters: []
    post:
      tags:
      - Reports
      summary: Grafana Send Report
      description: This API operation allows you to send a Grafana report via email by making a POST request to the /reports/email endpoint. When invoked, it triggers the generation and delivery of a specified report to one or more email recipients. The operation typically requires authentication and accepts parameters such as report ID, recipient email addresses, and optional customization settings like date ranges or dashboard variables. This is particularly useful for automating report distribution, scheduling periodic updates to stakeholders, or manually triggering ad-hoc report deliveries without accessing the Grafana UI directly.
      operationId: sendReport
      parameters: []
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportEmail'
        required: true
      responses:
        '200':
          description: An OKResponse is returned if the request was successful.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseBody'
        '400':
          description: BadRequestError is returned when the request is invalid and it cannot be processed.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '401':
          description: UnauthorizedError is returned when the request is not authenticated.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '403':
          description: ForbiddenError is returned if the user/token has insufficient permissions to access the requested resource.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '404':
          description: NotFoundError is returned when the requested resource was not found.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '500':
          description: InternalServerError is a general error indicating something went wrong internally.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
      deprecated: false
      x-api-evangelist-processing:
        SplitPascalCaseOperationSummaries: true
        CaselCaseOperationIds: true
        WriteDescription: true
        ChooseTags: true
  /reports/settings:
    parameters: []
    post:
      tags:
      - Reports
      summary: Grafana Save Report Settings
      description: Saves the configuration settings for the Grafana reporting feature, allowing administrators to define parameters such as email delivery options, branding preferences, report generation schedules, and output formats. This POST endpoint updates the global report settings that will be applied across all generated reports in the Grafana instance, enabling customization of how reports are created, formatted, and distributed to users.
      operationId: saveReportSettings
      parameters: []
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportSettings'
        required: true
      responses:
        '200':
          description: An OKResponse is returned if the request was successful.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseBody'
        '400':
          description: BadRequestError is returned when the request is invalid and it cannot be processed.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '401':
          description: UnauthorizedError is returned when the request is not authenticated.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '403':
          description: ForbiddenError is returned if the user/token has insufficient permissions to access the requested resource.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '500':
          description: InternalServerError is a general error indicating something went wrong internally.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
      deprecated: false
      x-api-evangelist-processing:
        SplitPascalCaseOperationSummaries: true
        CaselCaseOperationIds: true
        WriteDescription: true
        ChooseTags: true
  /reports/{id}:
    parameters: []
    put:
      tags:
      - Reports
      summary: Grafana Update Report
      description: Updates an existing report in Grafana by its unique identifier. This operation allows you to modify the configuration of a scheduled report, including parameters such as the report name, dashboard source, recipient list, schedule frequency, time range, and format options. The request requires the report ID in the URL path and accepts a JSON payload containing the updated report properties. Upon successful execution, it returns the modified report object with all current settings. This endpoint is typically used when you need to adjust report recipients, change the reporting schedule, update the associated dashboard, or modify any other report settings after initial creation.
      operationId: updateReport
      parameters:
      - name: id
        in: path
        description: ''
        required: true
        schema:
          type: integer
          contentEncoding: int64
      requestBody:
        description: ''
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrUpdateReport'
        required: true
      responses:
        '200':
          description: An OKResponse is returned if the request was successful.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseBody'
        '400':
          description: BadRequestError is returned when the request is invalid and it cannot be processed.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '401':
          description: UnauthorizedError is returned when the request is not authenticated.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '403':
          description: ForbiddenError is returned if the user/token has insufficient permissions to access the requested resource.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '404':
          description: NotFoundError is returned when the requested resource was not found.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
        '500':
          description: InternalServerError is a general error indicating something went wrong internally.
          headers: {}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody'
      deprecated: true
      x-api-evangelist-processing:
        SplitPascalCaseOperationSummaries: true
        CaselCaseOperationIds: true
        WriteDescription: true
        ChooseTags: true
components:
  schemas:
    ReportEmail:
      title: ReportEmail
      type: object
      properties:
        emails:
          type: string
          description: Comma-separated list of emails to which to send the report to.
        id:
          type: string
          description: Send the report to the emails specified in the report. Required if emails is not present.
        useEmailsFromReport:
          type: boolean
          description: Send the report to the emails specified in the report. Required if emails is not present.
    ReportDashboardID:
      title: ReportDashboardID
      type: object
      properties:
        id:
          type: integer
          contentEncoding: int64
        name:
          type: string
        uid:
          type: string
    ErrorResponseBody:
      title: ErrorResponseBody
      required:
      - message
      type: object
      properties:
        error:
          type: string
          description: Error An optional detailed description of the actual error. Only included if running in developer mode.
        message:
          type: string
          description: a human readable version of the error
        status:
          type: string
          description: 'Status An optional status to denote the cause of the error.


            For example, a 412 Precondition Failed error may include additional information of why that error happened.'
    ReportDashboard:
      title: ReportDashboard
      type: object
      properties:
        dashboard:
          $ref: '#/components/schemas/ReportDashboardID'
        reportVariables:
          type: object
        timeRange:
          $ref: '#/components/schemas/ReportTimeRange'
    ReportSettings:
      title: ReportSettings
      type: object
      properties:
        branding:
          $ref: '#/components/schemas/ReportBrandingOptions'
        embeddedImageTheme:
          type: string
        id:
          type: integer
          contentEncoding: int64
        orgId:
          type: integer
          contentEncoding: int64
        pdfTheme:
          type: string
        userId:
          type: integer
          contentEncoding: int64
    ReportOptions:
      title: ReportOptions
      type: object
      properties:
        layout:
          type: string
        orientation:
          type: string
        pdfCombineOneFile:
          type: boolean
        pdfShowTemplateVariables:
          type: boolean
        timeRange:
          $ref: '#/components/schemas/ReportTimeRange'
    SuccessResponseBody:
      title: SuccessResponseBody
      type: object
      properties:
        message:
          type: string
    ReportSchedule:
      title: ReportSchedule
      type: object
      properties:
        dayOfMonth:
          type: string
        endDate:
          type: string
          contentEncoding: date-time
        frequency:
          type: string
        intervalAmount:
          type: integer
          contentEncoding: int64
        intervalFrequency:
          type: string
        startDate:
          type: string
          contentEncoding: date-time
        timeZone:
          type: string
        workdaysOnly:
          type: boolean
    ReportBrandingOptions:
      title: ReportBrandingOptions
      type: object
      properties:
        emailFooterLink:
          type: string
        emailFooterMode:
          type: string
        emailFooterText:
          type: string
        emailLogoUrl:
          type: string
        reportLogoUrl:
          type: string
    ReportTimeRange:
      title: ReportTimeRange
      type: object
      properties:
        from:
          type: string
        to:
          type: string
    CreateOrUpdateReport:
      title: CreateOrUpdateReport
      type: object
      properties:
        dashboards:
          type: array
          items:
            $ref: '#/components/schemas/ReportDashboard'
          description: ''
        enableCsv:
          type: boolean
        enableDashboardUrl:
          type: boolean
        formats:
          type: array
          items:
            type: string
          description: ''
        message:
          type: string
        name:
          type: string
        options:
          $ref: '#/components/schemas/ReportOptions'
        recipients:
          type: string
        replyTo:
          type: string
        scaleFactor:
          type: integer
          contentEncoding: int64
        schedule:
          $ref: '#/components/schemas/ReportSchedule'
        state:
          type: string
          description: +enum
        subject:
          type: string
  securitySchemes:
    api_key:
      type: apiKey
      name: Authorization
      in: header
    basic:
      type: http
      scheme: basic