Skip to content

Reports API

Base path for all endpoints below:

/api/v1/org/{orgId}/proj/{projId}

Reports are nested under a project. A report has pages; each page has sections (layout tiles). Sections may include reportSectionContents (text or linked resources) and reportSectionSensors (linked sensors).


Endpoints

Reports

Method Path Description
GET /reports List all reports in the project
GET /reports/{id} Get a single report (pages, sections, recipients)
POST /reports Create a report
PUT /reports/{id} Update report settings and recipients
DELETE /reports/{id} Delete a report

Report pages

Method Path Description
GET /report-pages/{id} Get a page and its sections
POST /report-pages Create a page
PUT /report-pages/{id} Update page order
DELETE /report-pages/{id} Delete a page

Report sections

Method Path Description
GET /report-sections/{id} Get a section
POST /report-sections Create a section
PUT /report-sections/{id} Update section layout / type
DELETE /report-sections/{id} Delete a section

Report section contents

Method Path Description
GET /report-section-contents/{id} Get a content row
POST /report-section-contents Create a content row
PUT /report-section-contents/{id} Update a content row (e.g. TextBox HTML)
DELETE /report-section-contents/{id} Delete a content row

Report section sensors

Method Path Description
GET /report-section-sensors/{id} Get a sensor link
POST /report-section-sensors Link a sensor to a section
PUT /report-section-sensors/{id} Update a sensor link
DELETE /report-section-sensors/{id} Remove a sensor link

Resource shapes

Report

{
  "id": 5,
  "name": "Weekly Report",
  "period": "7 Days",
  "periodStartTime": "",
  "customPeriodDays": null,
  "scheduled": true,
  "startDay": "Friday",
  "startTime": "11:01",
  "frequency": "Weekly",
  "header": true,
  "footer": true,
  "projectId": 22,
  "reportPages": [],
  "recipients": [],
  "createdAt": "2023-12-18T01:27:13.366651Z",
  "updatedAt": "2026-04-14T07:09:13.437005Z"
}
Field Type Notes
id number
name string
period string | null Reporting period label (e.g. "7 Days")
periodStartTime string
customPeriodDays number | null
scheduled boolean
startDay string | null e.g. "Friday"
startTime string | null e.g. "11:01"
frequency string | null e.g. "Weekly"
header boolean | null
footer boolean | null
projectId number
reportPages ReportPage[] Nested pages and sections
recipients User[] Users who receive the report
createdAt string ISO 8601
updatedAt string ISO 8601

Report page

{
  "id": 13,
  "reportId": 5,
  "order": 1,
  "reportSections": [],
  "createdAt": "2023-12-18T01:31:07.064586Z",
  "updatedAt": "2026-07-30T00:52:23.919426Z"
}

Report section

{
  "id": 1857,
  "x": 0,
  "y": 9,
  "w": 12,
  "h": 7,
  "content": "",
  "contentType": "TextBox",
  "reportSectionContents": [],
  "reportSectionSensors": [],
  "reportPageId": 13,
  "createdAt": "2025-02-20T06:23:04.66634Z",
  "updatedAt": "2026-05-28T04:42:16.891698Z"
}

x / y are grid position; w / h are grid size.

contentType values:

  • CoverPage
  • TextBox
  • Chart
  • XYChart
  • WindRoseChart
  • CustomChart
  • ReadingsTable
  • AlarmTable
  • Location
  • LocationSatellite
  • MapImage
  • SensorImage
  • Image
  • SensorField

Report section content

{
  "id": 2051,
  "content": "<p>Commentary for this reporting period.</p>",
  "contentId": 0,
  "reportSectionId": 1857,
  "createdAt": "2025-02-20T06:23:04.667686Z",
  "updatedAt": "2026-05-28T04:42:16.997865Z"
}
Field Notes
content For TextBox, an HTML string. For other types, often unused or secondary.
contentId For TextBox, typically 0. For charts/dashboards, the linked resource id.

Report section sensor

{
  "id": 4575,
  "sensorId": 103,
  "reportSectionId": 3203,
  "createdAt": "2025-10-27T11:06:49.437482Z",
  "updatedAt": "2025-10-27T11:06:49.437482Z"
}

Example: list reports

GET /api/v1/org/7/proj/22/reports

Returns an array of reports. Each report includes schedule settings, recipients, and nested reportPagesreportSectionsreportSectionContents/reportSectionSensors.

[
  {
    "id": 5,
    "name": "Weekly Report",
    "period": "7 Days",
    "periodStartTime": "",
    "customPeriodDays": null,
    "scheduled": true,
    "startDay": "Friday",
    "startTime": "11:01",
    "frequency": "Weekly",
    "header": true,
    "footer": true,
    "projectId": 22,
    "reportPages": [
      {
        "id": 14,
        "reportId": 5,
        "order": 0,
        "reportSections": [
          {
            "id": 21,
            "x": 0,
            "y": 0,
            "w": 12,
            "h": 16,
            "content": "",
            "contentType": "CoverPage",
            "reportSectionContents": [],
            "reportSectionSensors": [],
            "reportPageId": 14,
            "createdAt": "2023-12-18T01:31:07.07955Z",
            "updatedAt": "2026-05-28T04:42:16.891077Z"
          }
        ],
        "createdAt": "2023-12-18T01:31:07.07889Z",
        "updatedAt": "2026-07-30T00:52:23.916805Z"
      },
      {
        "id": 13,
        "reportId": 5,
        "order": 1,
        "reportSections": [
          {
            "id": 1857,
            "x": 0,
            "y": 9,
            "w": 12,
            "h": 7,
            "content": "",
            "contentType": "TextBox",
            "reportSectionContents": [
              {
                "id": 2051,
                "content": "<h1><u>Introduction</u></h1><p>Lorem ipsum dolor sit amet...</p>",
                "contentId": 0,
                "reportSectionId": 1857,
                "createdAt": "2025-02-20T06:23:04.667686Z",
                "updatedAt": "2026-05-28T04:42:16.997865Z"
              }
            ],
            "reportSectionSensors": [],
            "reportPageId": 13,
            "createdAt": "2025-02-20T06:23:04.66634Z",
            "updatedAt": "2026-05-28T04:42:16.891698Z"
          },
          {
            "id": 3203,
            "x": 0,
            "y": 0,
            "w": 12,
            "h": 9,
            "content": "",
            "contentType": "LocationSatellite",
            "reportSectionContents": [],
            "reportSectionSensors": [
              {
                "id": 4575,
                "sensorId": 103,
                "reportSectionId": 3203,
                "createdAt": "2025-10-27T11:06:49.437482Z",
                "updatedAt": "2025-10-27T11:06:49.437482Z"
              }
            ],
            "reportPageId": 13,
            "createdAt": "2025-10-27T11:06:49.430849Z",
            "updatedAt": "2026-05-28T04:42:16.879213Z"
          }
        ],
        "createdAt": "2023-12-18T01:31:07.064586Z",
        "updatedAt": "2026-07-30T00:52:23.919426Z"
      }
    ],
    "recipients": [
      {
        "id": 1061,
        "name": "Luka Peric",
        "email": "luka@sensly.io",
        "phoneNumber": "+61400939574",
        "lastLogin": "2025-12-10T07:08:57.721439Z",
        "projectUsers": null,
        "organizationUsers": null,
        "createdAt": "2025-07-27T14:36:03.702622Z",
        "updatedAt": "2025-12-10T07:08:57.722012Z"
      }
    ],
    "createdAt": "2023-12-18T01:27:13.366651Z",
    "updatedAt": "2026-04-14T07:09:13.437005Z"
  }
]

Create a report

POST /api/v1/org/7/proj/22/reports

{
  "name": "Weekly Report",
  "period": "7 Days",
  "periodStartTime": "",
  "customPeriodDays": null,
  "scheduled": true,
  "startDay": "Friday",
  "startTime": "11:01",
  "frequency": "Weekly",
  "header": true,
  "footer": true,
  "projectId": 22
}

name and projectId are required.


Update a report

PUT /api/v1/org/7/proj/22/reports/5

{
  "name": "Weekly Report",
  "period": "7 Days",
  "periodStartTime": "",
  "customPeriodDays": null,
  "scheduled": true,
  "startDay": "Friday",
  "startTime": "11:01",
  "frequency": "Weekly",
  "header": true,
  "footer": true,
  "recipients": [1061, 1062]
}

name is required. recipients is an array of user ids (not full user objects).


Update page order

PUT /api/v1/org/7/proj/22/report-pages/13

Page update only accepts order — not sections or content.

{
  "order": 1
}

To change section layout or text, use the report-sections / report-section-contents / report-section-sensors endpoints below.


Update a section

PUT /api/v1/org/7/proj/22/report-sections/1857

{
  "x": 0,
  "y": 9,
  "w": 12,
  "h": 7,
  "content": "",
  "contentType": "TextBox",
  "reportSectionContents": [],
  "reportSectionSensors": [],
  "reportPageId": 13
}

w, h, contentType, and reportPageId are required. Nested reportSectionContents / reportSectionSensors on this request are not applied as nested updates — change those via their own endpoints.


Updating TextBox content

Text boxes are the usual target when changing report commentary via the API.

  1. GET the report (/reports/{id}) and find the section where contentType is "TextBox".
{
    "id": 191,
    "x": 0,
    "y": 0,
    "w": 4,
    "h": 2,
    "content": "",
    "contentType": "TextBox",
    "reportSectionContents": [
        {
            "id": 323,
            "content": "<p>This is a text box.</p>",
            "contentId": 0,
            "reportSectionId": 191,
            "createdAt": "2026-07-31T12:14:46.808198+08:00",
            "updatedAt": "2026-07-31T12:14:46.808198+08:00"
        }
    ],
    "reportSectionSensors": [],
    "reportPageId": 75,
    "createdAt": "2026-07-31T12:14:46.806562+08:00",
    "updatedAt": "2026-07-31T12:14:46.806562+08:00"
}
  1. Keep note of reportSectionContents[0].id and reportSectionId. In the above example reportSectionId is 191 and reportSectionContents[0].id is 323.
  2. PUT that content on /report-section-contents/{id}.

PUT /api/v1/org/7/proj/22/report-section-contents/323

{
  "content": "<p>The piezometers within this group continue to provide stable and consistent groundwater level data.</p>",
  "reportSectionId": 191
}

Notes:

  • content is HTML (e.g. <p>...</p>, headings, inline styles), not plain text.
  • reportSectionId is required.

Last update: July 31, 2026