OpenObserve Docs
ReferenceApi

Reports API

The Reports v2 API lets you manage automated dashboard reports that are organized into folders. Every report belongs to a folder; if you do not specify one, the report is placed in the default folder.

These endpoints are served under the /api/v2/{org_id}/reports prefix and identify reports by their report_id (a KSUID). Folder placement is controlled with the folder query parameter. In OpenObserve Enterprise, this parameter is also used for RBAC permission checks and should be sent on every request that targets a report (see Permissions).

All requests require an authorization header. See the API Reference for how to build the HTTP basic-auth header.

Permissions

Report access is scoped by folder. In RBAC, permissions are evaluated against the rfolder (report folder) resource for the folder a report lives in, rather than against individual reports. To list, view, or modify reports in a folder, a user must hold the corresponding permission on that report folder.

Enterprise: pass the folder parameter for RBAC. In OpenObserve Enterprise, the permission check is evaluated against the report's folder (rfolder). For any request that targets a specific report (create, get, update, delete, enable, and trigger), include the folder query parameter set to the report's folder ID so the check resolves against the correct folder. Omitting it can cause the request to be denied or evaluated against the wrong folder. In Open Source (no RBAC), folder is optional and defaults to default.

Endpoints

MethodPathDescription
GET/api/v2/{org_id}/reportsList reports, optionally scoped to a folder
POST/api/v2/{org_id}/reportsCreate a report in a folder
GET/api/v2/{org_id}/reports/{report_id}Get a report by ID
PUT/api/v2/{org_id}/reports/{report_id}Update a report (and optionally move it)
DELETE/api/v2/{org_id}/reports/{report_id}Delete a report by ID
DELETE/api/v2/{org_id}/reports/bulkDelete multiple reports by ID
PATCH/api/v2/{org_id}/reports/moveMove reports between folders
PATCH/api/v2/{org_id}/reports/{report_id}/enableEnable or disable a report
PUT/api/v2/{org_id}/reports/{report_id}/triggerManually trigger a report

Common path parameters

ParameterTypeDescription
org_idstringOrganization name.
report_idstringReport identifier (KSUID).

List Reports

Lists reports for the organization. Use the query parameters to scope the result to a folder or a specific dashboard.

Endpoint

GET /api/v2/{org_id}/reports

Query parameters

ParameterTypeRequiredDescription
folderstringNoFolder ID to filter by. When omitted, reports across folders are returned (in Enterprise, limited to the folders you have permission on).
dashboard_idstringNoReturn only reports that target this dashboard.
cachebooleanNoWhen true, return only destination-less (cache) reports.

Example request

GET /api/v2/default/reports?folder=f_2abcDEF

Response

[
  {
    "report_id": "2cP9kZ7yQx1rT3wVnLm0",
    "name": "weekly-overview",
    "title": "Weekly Overview",
    "folder_id": "f_2abcDEF",
    "dashboards": ["3hQ8..."],
    "frequency": {
      "type": "weeks",
      "interval": 1,
      "cron": "",
      "align_time": false
    },
    "enabled": true,
    "owner": "admin@example.com",
    "last_triggered_at": 1717400000000000
  }
]

Create Report

Creates a new report in the folder named by the folder query parameter, or in the default folder when omitted.

Endpoint

POST /api/v2/{org_id}/reports

Query parameters

ParameterTypeRequiredDescription
folderstringEnterpriseFolder ID to create the report in. Defaults to default. Required in Enterprise so the RBAC create check resolves against the target folder.

Request Body

Use the Report schema. The org_id, dashboards, and destinations fields are required.

{
  "name": "weekly-overview",
  "title": "Weekly Overview",
  "org_id": "default",
  "description": "Weekly summary delivered every Monday",
  "message": "Please find the weekly overview attached.",
  "enabled": true,
  "frequency": {
    "type": "weeks",
    "interval": 1,
    "cron": "",
    "align_time": false
  },
  "start": 1717400000000000,
  "timezone": "UTC",
  "timezoneOffset": 0,
  "dashboards": [
    {
      "dashboard": "3hQ8...",
      "folder": "default",
      "tabs": ["default"],
      "variables": [],
      "timerange": {
        "type": "relative",
        "period": "1w",
        "from": 0,
        "to": 0
      }
    }
  ],
  "destinations": [
    { "email": "team@example.com" }
  ]
}

Field reference (Report)

FieldTypeDescription
namestringUnique report name within the organization.
titlestringDisplay title used in the report email.
org_idstringOrganization name. Required.
descriptionstringOptional description.
messagestringMessage body included in the report email.
enabledbooleanWhether the report schedule is active.
frequencyobjectSchedule definition. type is one of once, hours, days, weeks, months, cron. Use interval for periodic types and cron for a cron expression.
startintegerStart time of report generation, in UNIX microseconds.
timezonestringTimezone name used to evaluate the schedule.
timezoneOffsetintegerFixed timezone offset in minutes.
dashboardsarrayDashboards to render. Each entry references a dashboard ID, its folder, tabs, optional variables, and a timerange.
destinationsarrayWhere to deliver the report, e.g. { "email": "user@example.com" }.
ownerstringReport owner. Defaults to the requesting user when empty.

Response

{
  "code": 200,
  "message": "Report saved"
}

Get Report

Returns a single report by ID.

Endpoint

GET /api/v2/{org_id}/reports/{report_id}

Query parameters

ParameterTypeRequiredDescription
folderstringEnterpriseThe report's folder ID. Required in Enterprise so the RBAC permission check resolves against the correct folder; optional in Open Source.

Response

Returns the full Report object. Returns 404 Not Found if the report does not exist.

Update Report

Updates an existing report. Provide the full Report body. To move the report to a different folder in the same request, include the folder query parameter; when omitted, the report stays in its current folder.

Endpoint

PUT /api/v2/{org_id}/reports/{report_id}

Query parameters

ParameterTypeRequiredDescription
folderstringEnterpriseMove the report to this folder ID. When omitted, the folder is unchanged. In Enterprise, the report's folder is also used for the RBAC permission check.

Example request

PUT /api/v2/default/reports/2cP9kZ7yQx1rT3wVnLm0?folder=f_archive

Response

{
  "code": 200,
  "message": "Report updated"
}

Delete Report

Deletes a single report by ID.

Endpoint

DELETE /api/v2/{org_id}/reports/{report_id}

Query parameters

ParameterTypeRequiredDescription
folderstringEnterpriseThe report's folder ID. Required in Enterprise so the RBAC permission check resolves against the correct folder; optional in Open Source.

Response

{
  "code": 200,
  "message": "Report deleted"
}

Bulk Delete Reports

Deletes multiple reports by ID in a single request. Deletion is idempotent: IDs that do not exist are reported as successful.

Endpoint

DELETE /api/v2/{org_id}/reports/bulk

Request Body

{
  "ids": [
    "2cP9kZ7yQx1rT3wVnLm0",
    "2cQ0aB1cD2eF3gH4iJ5k"
  ]
}

Response

{
  "successful": ["2cP9kZ7yQx1rT3wVnLm0", "2cQ0aB1cD2eF3gH4iJ5k"],
  "unsuccessful": [],
  "err": null
}

Move Reports

Moves one or more reports to a destination folder.

Endpoint

PATCH /api/v2/{org_id}/reports/move

Request Body

FieldTypeDescription
report_idsstring[]IDs of the reports to move.
dst_folder_idstringDestination folder ID.
{
  "report_ids": ["2cP9kZ7yQx1rT3wVnLm0"],
  "dst_folder_id": "f_archive"
}

Response

{
  "code": 200,
  "message": "Report moved"
}

Enable or Disable a Report

Enables or disables a report's schedule.

Endpoint

PATCH /api/v2/{org_id}/reports/{report_id}/enable

Query parameters

ParameterTypeRequiredDescription
folderstringEnterpriseThe report's folder ID. Required in Enterprise so the RBAC permission check resolves against the correct folder; optional in Open Source.
valuebooleanNotrue to enable, false to disable. Defaults to false.

Example request

PATCH /api/v2/default/reports/2cP9kZ7yQx1rT3wVnLm0/enable?value=true

Response

{
  "enabled": true
}

Trigger a Report

Manually triggers report generation and delivery, independent of its schedule.

Endpoint

PUT /api/v2/{org_id}/reports/{report_id}/trigger

Query parameters

ParameterTypeRequiredDescription
folderstringEnterpriseThe report's folder ID. Required in Enterprise so the RBAC permission check resolves against the correct folder; optional in Open Source.

Response

{
  "code": 200,
  "message": "Report triggered"
}

Next steps

  • API Reference: Overview of the OpenObserve REST API and how to build the authorization header.
  • Reports: Create and schedule dashboard reports from the UI.
  • Stream Settings API: Manage stream-level settings via the API.

Need some help?

Was this page helpful?

Last updated on

On this page