Skip to content
English
  • There are no suggestions because the search field is empty.

Senturo Reporting API: Example Reports and Use Cases

Ready-to-Use Requests for Fleet Audits, Device Recovery, and Compliance Reporting

Overview

This article contains ready-made requests for the reports organizations ask for most often: knowing which devices have stopped checking in, assembling a register of missing devices, reconstructing where a device has been, exporting notes for an audit, and reviewing geofence activity across a period.

Each example explains what question it answers, gives the request, describes what comes back, and suggests how to adapt it. You can run them as they are with a command-line tool, paste them into a reporting tool that accepts a URL and a header, or use them as the basis for a scheduled script.

Every example uses explicit date values you will want to change. Where a report combines more than one endpoint, the steps are shown in order with a note on how many requests it takes.

Before you start, you need a ReportToken and the base URL. See Getting Started with the Senturo Reporting API if you have not set that up yet. For the full detail of any parameter used below, see the Senturo Reporting API Endpoint Reference.


Conventions Used in These Examples

Every request needs your token in the Authorization header, and every path ends with a trailing slash:

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?page_size=100"

Dates are written in ISO 8601 with an explicit UTC offset. The examples use -04:00; replace it with the offset for your account's timezone.

Two habits worth adopting. Always include the UTC offset on date values, and always supply date filters when querying location history or geofence activity. Without a date filter, location history returns only the most recent 30 days and geofence evaluation only the most recent 7 — with no indication in the response that anything older exists.


Fleet Inventory and Audits

Export your full device inventory

Answers: what devices do we have, who are they assigned to, and when did each last check in?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?page_size=100"

What comes back: up to 100 devices per page, each with serial, name, platform, device_status, assignee_name, assignee_email, created_on, last_seen, and the last known location as postal_code and location_link.

For fleets larger than 100, follow the next URL in each response until it returns null. A 1,000-device fleet takes ten requests.

Adapting it: add platform=windows for a single platform, or created_after to limit the export to recently enrolled devices.

Find devices that have stopped checking in

Answers: which devices have not contacted Senturo recently and may need following up?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?last_seen_before=2026-08-30T00:00:00-04:00&page_size=100"

What comes back: every device whose last check-in was before the date you supply. Set the date to the cut-off you care about — two weeks ago for a routine sweep, or the start of term or quarter for a wider audit.

This is the backbone of end-of-year collection reporting in schools and asset reconciliation in commercial fleets: any device on this list is one nobody has heard from.

Adapting it: combine with last_seen_after to look at a specific window, for example devices last seen during a particular month. Add device_status=monitored to exclude devices already flagged as missing.

Calculating the date: most reporting tools can generate a timestamp relative to today. In a shell script, date -v-14d '+%Y-%m-%dT00:00:00-04:00' on macOS or date -d '14 days ago' '+%Y-%m-%dT00:00:00-04:00' on Linux produces a cut-off fourteen days back.

List devices awaiting activation

Answers: which devices have been enrolled but have not yet been activated?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?device_status=unverified&page_size=100"

What comes back: devices in the unverified state. A device stays unverified until it has been activated, so a long list here usually means a deployment that has stalled somewhere between enrollment and rollout.

If no devices are in that state, the response is a 200 with count of 0 and record_exists set to false.

Review recent enrollments

Answers: what has been added to the fleet since a given date?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?created_after=2026-08-14T00:00:00-04:00&page_size=100"

What comes back: devices enrolled on or after that date, newest enrollments included. Useful for monthly reporting, for reconciling a purchase order against what actually reached Senturo, or for confirming that a summer deployment completed.

Break down the fleet by platform

Answers: how many of each device type do we manage?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?platform=windows&page_size=1"

What comes back: the count field gives you the total immediately. Because page_size=1 returns a single record, this is a cheap way to get a number without retrieving the whole list. Repeat for macos, chromeos, ios, and android — five requests for a complete breakdown.

Be careful with partial matches. The platform filter matches partially, so a short value can match more than you intend — n matches both windows and android. Use the full platform name.


Device Recovery and Investigations

Build a missing device register

Answers: which devices are currently flagged as missing, and where was each one last seen?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?device_status=missing&page_size=100"

What comes back: every device in missing status. Each record already includes last_seen, postal_code, and location_link, which opens the last known position in Google Maps — enough for a register or an insurance schedule without any further requests.

Adapting it: for a fuller picture of any single device on that list, follow up with its location history and notes, as in the next two examples.

Reconstruct where a device has been

Answers: where was this device during a specific period?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/ABC1234XYZ/location-history/?received_after=2026-09-01T00:00:00-04:00&received_before=2026-09-08T00:00:00-04:00&page_size=100"

What comes back: every recorded location in that window, newest first, with latitude, longitude, accuracy, and received_on. Devices can record locations frequently, so a week of history may run to thousands of records across many pages — check count before deciding how many pages to retrieve.

The date filter is doing more than narrowing your results. Without it, this endpoint returns only the most recent 30 days. Supplying received_after is what makes older history available at all, so include it even when you want everything.

Adapting it: address fields such as city and formatted_address are populated on a best-effort basis and are often empty. Use latitude and longitude as the reliable values, and treat address data as a bonus when it is present.

Pull a device's notes for a case file

Answers: what has been recorded about this device by our team?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/ABC1234XYZ/notes/?page_size=100"

What comes back: every note on that device, each with note_type, author_name, created, edited, and the note body as plain text.

Together with the device record and its location history, this gives you the three pieces most investigations need: the device's details, where it has been, and what your team has recorded about it.

Check a device's network history

Answers: what networks and external IP addresses has this device connected from?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/ABC1234XYZ/network-info/?page_size=100"

What comes back: recorded connections with received_on and external_ip, newest first. Useful for confirming that a device is connecting from an expected location, or for corroborating location data during an investigation.


Compliance and Records

Export notes by type for an audit

Answers: what security or compliance notes has our team recorded across the fleet?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/notes/?note_type=Security&page_size=100"

What comes back: every note of that type across all devices, each identifying its device by device_serial and device_name.

Note types are General, Security, Hardware, Compliance, User Request, and Assignment. Matching ignores case, so security works as well as Security.

Report on note activity since a date

Answers: what has our team recorded or changed since the last report?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/notes/?updated_since=2026-09-06T00:00:00-04:00&page_size=100"

What comes back: notes created or edited since that date. Run it weekly with the date set to your last run and you have a rolling activity log without re-reading everything each time.


Geofence Activity

Find devices that left a site during a period

Answers: which devices were outside their geofence at any point during this window?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/geofence/devices/?options=outside&serials=ABC1234XYZ,DEF5678UVW&timestamp_start=2026-09-01T08:00:00-04:00&timestamp_end=2026-09-08T16:00:00-04:00"

What comes back: for each device, an evaluation for every geofence assigned to it. Where location_found is true, the device was outside that geofence at some point in the window, and matched_location shows the earliest record where that was the case — in other words, when it first went outside.

Devices that could not be evaluated appear in an errors array alongside the successful results, and the request still returns a 200. The success field is a count of devices evaluated, not a true or false flag.

Both timestamps are required together. Supplying only one has no effect, and the default 7-day window applies instead. Up to 100 serials can be passed in a single request.

Adapting it: switch options to inside to ask the opposite question — when a device was first seen inside a geofence during the window. This is how you confirm that devices were present on site during collection week or an audit period.

See which devices are off site right now

Answers: at this moment, which devices are outside their geofences?

curl -H "Authorization: ReportToken your_token_here" "https://api.senturo.com/api/report/v1/devices/?page_size=100"

What comes back: each device record includes a geofence_status array with one entry per assigned geofence:

json
"geofence_status": [   { "name": "Main Campus", "inside": true },   { "name": "District Office", "inside": false } ]

A device with inside set to false for every entry is currently outside all of its geofences. A device with an empty array has no geofences assigned.

Present versus past. Use geofence_status for where devices are now, and the geofence evaluation endpoint for what happened during a past period. They answer different questions.


Putting It Together: A Stale Device Report

This script combines two endpoints to produce a CSV of devices that have not checked in recently, each with its last known location. It is the report most organizations want first.

python
import urllib.request, urllib.parse, json, csv  TOKEN = "your_token_here" BASE = "https://api.senturo.com/api/report/v1" CUTOFF = "2026-08-30T00:00:00-04:00"  headers = {"Authorization": f"ReportToken {TOKEN}"}  def get(path, params=None):     url = BASE + path     if params:         url += "?" + urllib.parse.urlencode(params)     request = urllib.request.Request(url, headers=headers)     with urllib.request.urlopen(request, timeout=60) as response:         return json.load(response)  # Step 1: every device that has not checked in since the cut-off devices, url_params = [], {"last_seen_before": CUTOFF, "page_size": 100} page = get("/devices/", url_params) devices.extend(page["results"]) while page["next"]:     request = urllib.request.Request(page["next"], headers=headers)     with urllib.request.urlopen(request, timeout=60) as response:         page = json.load(response)     devices.extend(page["results"])  # Step 2: write the report with open("stale-devices.csv", "w", newline="") as handle:     writer = csv.writer(handle)     writer.writerow(["Serial", "Name", "Platform", "Assigned to",                      "Last seen", "Last known area", "Map link"])     for device in devices:         writer.writerow([             device["serial"],             device["name"],             device["platform"],             device.get("assignee_name") or "Unassigned",             device["last_seen"],             device.get("postal_code") or "Unknown",             device.get("location_link") or "",         ])  print(f"Wrote {len(devices)} devices to stale-devices.csv")

The whole report is one request per 100 stale devices, so it runs comfortably inside the limit of 120 requests per minute.

Adapting it: change CUTOFF to the date you care about. To add each device's most recent coordinates, request /devices/{serial}/location-history/?page_size=1 for each one — but that is one additional request per device, so for large fleets either space the requests out or use postal_code and location_link from the device record, which need no extra calls.


Troubleshooting

A report returns no records at all: Check record_exists in the response. If it is false, the request succeeded and nothing matched. Confirm your date values include a UTC offset and point at the period you intended, and check filter spellings — an unrecognised parameter is ignored rather than rejected, which can look like a filter that matched nothing.

Location history returns far fewer records than expected: Without a date filter this endpoint returns only the most recent 30 days. Add received_after with your intended start date.

A geofence report covers a shorter period than requested: Both timestamp_start and timestamp_end must be present. If only one is supplied it is ignored and the 7-day default applies.

A request returns a 404 that should succeed: Confirm the path ends with a trailing slash. Paths without one return a 404 and are not redirected.

A script stops partway through with a 429: You have exceeded 120 requests per minute. The response includes a Retry-After header giving the seconds to wait. Pause for that period before continuing rather than retrying immediately.


Conclusion

These examples cover the reports most organizations need from their fleet data: knowing what they have, what has gone quiet, what is missing, where it has been, and what their team has recorded. Each one is a single request or a short loop, and all of them can be scheduled to run on their own.

The two habits that keep results accurate are including a UTC offset on every date value and always supplying date filters on location history and geofence activity. For the full parameter and field detail behind any example here, see the Senturo Reporting API Endpoint Reference. To request a token or ask about a report not covered here, contact support at support@senturo.com.


FAQs

Q: Can I schedule these reports to run automatically? A: Yes. The requests are ordinary HTTP calls, so any scheduler works — a cron job, a scheduled task, a Power Automate flow, or the refresh schedule in your reporting tool. Keep the total under 120 requests per minute.

Q: How do I calculate a date like "fourteen days ago" in a scheduled report? A: Most tools can generate it. In a shell script, use date -v-14d '+%Y-%m-%dT00:00:00-04:00' on macOS or date -d '14 days ago' '+%Y-%m-%dT00:00:00-04:00' on Linux. In Python, subtract a timedelta from datetime.now() and format with the offset appended.

Q: Can I get all of this in one request? A: No. Each endpoint covers one kind of data, so a report that combines devices with their location history or notes needs one request per device for the additional data. The device record already includes the last known location, which covers many reporting needs without extra requests.

Q: Why do some location records have an address and others do not? A: Address fields are populated on a best-effort basis, so many records carry only coordinates. Use latitude and longitude as the reliable values and treat address data as supplementary when present.

Q: Can I use these examples in Excel or Power BI? A: Yes. Both accept a URL and a custom header, so the same request works there. In Power Query, add the Authorization header with the value ReportToken your_token_here, and handle pagination by following the next URL returned in each response.