Create an API key
Generate the organization key in Sepolo and grant the scopes your integration needs.
Sepolo developer platform
A versioned REST API for organization-scoped assets, devices, telemetry, service visits, customers, vendors, inventory and operational reporting.
curl https://api.sepolo.app/api/v1/service-visits \
-H "X-Sepolo-Api-Key: sep_live_your_api_key" \
-G \
--data-urlencode "fromUtc=2026-06-01T00:00:00Z" \
--data-urlencode "toUtc=2026-06-30T23:59:59Z"Base URL
https://api.sepolo.app
Current version
v1
Format
JSON over HTTPS
Authentication
API key or bearer token
Generate the organization key in Sepolo and grant the scopes your integration needs.
Use the ready collection to test authentication, date filters and paging before writing code.
Start with service visits, assets or reporting endpoints depending on the customer use case.
Create the organization API key inside Sepolo under Profile, Configuration, API Key. Send it on every request.
X-Sepolo-Api-Key: sep_live_your_api_keyAuthorization: Bearer sep_live_your_api_keyList endpoints use the same envelope, so Power BI, customer portals and partner applications can handle paging consistently.
{
"data": [],
"nextCursor": null,
"hasMore": false
}Errors use normal HTTP status codes. Authentication problems return 401, missing scopes return 403, validation errors return 400 and unexpected failures return 500.
{
"error": "forbidden",
"message": "The API key does not include the appointments.read scope."
}Endpoints are grouped by the operational workflow they support. Every request is scoped to the organization that owns the API key.
Start here
Confirm which organization, scopes and API boundaries the current key can access.
/api/v1/meReturns the integration identity, organization id, granted scopes, version metadata and allowed data boundaries.
Return type
PublicApiMeResponse
Required scopes
public_api.readcurl https://api.sepolo.app/api/v1/me \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"organizationId": "7f2d3f0a-7c51-42cf-a06d-2c2df5f0c20b",
"clientId": "sep_live_...",
"clientName": "Partner API",
"scopes": ["assets.read", "devices.read", "service_visits.read"],
"version": "v1",
"rateLimit": { "requestsPerMinute": null, "requestsPerDay": null },
"allowedGroupIds": [],
"allowedCustomerIds": []
}Customer and asset context
Read customer equipment, asset hierarchy and operational context for reporting and portals.
/api/v1/assetsLists organization assets for reporting, customer portals and integration sync jobs.
Return type
PublicApiPage<PublicApiAssetDto>
Required scopes
assets.readupdatedSincedate-timeOnly assets updated after this timestamp.groupIdintegerOptional asset group filter.customerIdstringOptional external customer id filter.statusstringactive, inactive or all.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/assets \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/assets/{assetId}Returns one asset if it belongs to the API key organization.
Return type
PublicApiAssetDto
Required scopes
assets.readcurl https://api.sepolo.app/api/v1/assets/{assetId} \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"assetId": "a33b5a5d-e55a-423d-9bdf-0bc2c61f7e63",
"name": "Cooling line 4",
"deviceId": "SEP-DEVICE-001",
"isActive": true
}/api/v1/assets/{assetId}/childrenReturns child assets for a parent asset.
Return type
PublicApiPage<PublicApiAssetDto>
Required scopes
assets.readpageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/assets/{assetId}/children \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/reporting/assets-summaryReturns asset counts and maintenance cost totals for dashboards.
Return type
PublicApiAssetsSummaryDto
Required scopes
reporting.readcurl https://api.sepolo.app/api/v1/reporting/assets-summary \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"totalAssets": 120,
"activeAssets": 112,
"inactiveAssets": 8,
"withDevices": 98,
"overdueService": 7,
"totalMaintenanceCost": 420000
}IoT and PointGuard data
Read devices, telemetry, movement windows and PointGuard cycle data for operational analytics.
/api/v1/devicesLists devices owned by the organization.
Return type
PublicApiPage<PublicApiDeviceDto>
Required scopes
devices.readupdatedSincedate-timeOnly devices updated after this timestamp.groupIdintegerOptional group filter.statusstringOptional numeric device status filter.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/devices \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/devices/{deviceId}Returns one device if it belongs to the API key organization.
Return type
PublicApiDeviceDto
Required scopes
devices.readcurl https://api.sepolo.app/api/v1/devices/{deviceId} \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"deviceId": "SEP-DEVICE-001",
"deviceName": "Cooling line sensor",
"groupId": 12,
"batteryPercentage": 92
}/api/v1/devices/{deviceId}/telemetryReturns enriched raw telemetry samples for a device, including PointGuard cycle metadata when present.
Return type
PublicApiPage<PublicApiTelemetryDto>
Required scopes
telemetry.readfromdate-timeRequired start timestamp. fromUtc is also accepted.todate-timeRequired end timestamp. toUtc is also accepted. Maximum window is 31 days.metricsstringOptional comma-separated metric hint.telemetryTypeintegerOptional telemetry type filter. Use 1 for PointGuard movement/current samples.cycleIdstringOptional PointGuard cycle id filter.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/devices/{deviceId}/telemetry \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [
{
"deviceId": "SEP-DEVICE-001",
"stamp": "2026-05-27T12:00:00Z",
"current": 8.4,
"telemetryType": 1,
"cycleId": "cyc_20260527_120000",
"cycleSampleIndex": 42,
"cycleSampleOffsetMs": 420,
"cycleDurationMs": 1420,
"cycleSampleCount": 142
}
],
"nextCursor": null,
"hasMore": false
}/api/v1/devices/{deviceId}/pointguard/cyclesReturns compact PointGuard cycle summaries calculated from DeviceTelemetry cycle metadata.
Return type
PublicApiPage<PublicApiPointGuardCycleDto>
Required scopes
telemetry.readfromdate-timeRequired start timestamp. fromUtc is also accepted.todate-timeRequired end timestamp. toUtc is also accepted. Maximum window is 31 days.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/devices/{deviceId}/pointguard/cycles \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [
{
"deviceId": "SEP-DEVICE-001",
"cycleId": "cyc_20260527_120000",
"start": "2026-05-27T12:00:00Z",
"stop": "2026-05-27T12:00:01.420Z",
"samples": 142,
"averageCurrent": 8.1,
"peakCurrent": 15.7
}
],
"nextCursor": null,
"hasMore": false
}/api/v1/devices/{deviceId}/pointguard/cycles/{cycleId}/samplesReturns every raw telemetry sample for one PointGuard cycle, ordered by sample index.
Return type
PublicApiPage<PublicApiTelemetryDto>
Required scopes
telemetry.readpageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/devices/{deviceId}/pointguard/cycles/{cycleId}/samples \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/devices/{deviceId}/movementsReturns calculated movement windows, current signature values, suggested anomalies and anomaly decision metadata.
Return type
PublicApiPage<PublicApiMovementDto>
Required scopes
movements.readfromdate-timeRequired start timestamp. fromUtc is also accepted.todate-timeRequired end timestamp. toUtc is also accepted.minDurationSecondsintegerOptional minimum movement duration.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/devices/{deviceId}/movements \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [
{
"id": "5c722f76-5f0b-4c1b-875d-05a1d8cd47b5",
"deviceId": "SEP-DEVICE-001",
"duration": 6.42,
"averageCurrent": 8.1,
"peakCurrent": 15.7,
"isAnomalySuggested": true,
"anomalyScore": 3.4,
"anomalyDecisionAction": "Classify",
"currentSignature": {
"sampleCount": 142,
"currentRms": 8.8,
"currentP90": 13.2
}
}
],
"nextCursor": null,
"hasMore": false
}/api/v1/devices/{deviceId}/movements/{movementId}/signatureReturns the calculated PointGuard current signature and shape JSON for one movement.
Return type
PublicApiMovementSignatureDto
Required scopes
movements.readcurl https://api.sepolo.app/api/v1/devices/{deviceId}/movements/{movementId}/signature \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"movementId": "5c722f76-5f0b-4c1b-875d-05a1d8cd47b5",
"deviceId": "SEP-DEVICE-001",
"sampleCount": 142,
"currentRms": 8.8,
"currentP50": 7.9,
"currentP90": 13.2,
"shapeJson": "{...}"
}/api/v1/incidentsLists incidents for the organization.
Return type
PublicApiPage<PublicApiIncidentDto>
Required scopes
incidents.readfromUtcdate-timeOptional start timestamp.toUtcdate-timeOptional end timestamp.deviceIdstringOptional device id filter.stateintegerOptional incident state filter.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/incidents \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}Visits, reports and appointments
Connect service visits, appointments and service reports into BI, partner systems and customer portals.
/api/v1/service-reportsLists service reports for reporting and partner applications.
Return type
PublicApiPage<PublicApiServiceReportDto>
Required scopes
service_reports.readfromUtcdate-timeOptional created-on start timestamp.toUtcdate-timeOptional created-on end timestamp.assetIduuidOptional asset filter.deviceIdstringOptional device filter.stateintegerOptional report state filter.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/service-reports \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/service-reports/{serviceReportId}Returns one service report if it belongs to the API key organization.
Return type
PublicApiServiceReportDto
Required scopes
service_reports.readcurl https://api.sepolo.app/api/v1/service-reports/{serviceReportId} \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"serviceReportId": "5c722f76-5f0b-4c1b-875d-05a1d8cd47b5",
"assetId": "a33b5a5d-e55a-423d-9bdf-0bc2c61f7e63",
"stateText": "Completed"
}/api/v1/service-reportsCreates a service report for trusted integrations. This is not granted to normal read-only API keys.
Return type
PublicApiCreatedServiceReportResponse
Required scopes
service_reports.writecurl https://api.sepolo.app/api/v1/service-reports \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"serviceReportId": "5c722f76-5f0b-4c1b-875d-05a1d8cd47b5"
}/api/v1/service-visitsReturns service visit data for BI, partner portals and operational reporting.
Return type
PublicApiPage<PublicApiServiceVisitDto>
Required scopes
service_visits.readfromUtcdate-timeOptional start of the service visit window.toUtcdate-timeOptional end of the service visit window. Maximum window is 366 days.curl https://api.sepolo.app/api/v1/service-visits \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/appointmentsReturns planned service appointments for calendars, reporting tools and planning integrations.
Return type
PublicApiPage<PublicApiAppointmentDto>
Required scopes
appointments.readfromUtcdate-timeOptional start of the appointment window.toUtcdate-timeOptional end of the appointment window. Maximum window is 366 days.userIduuidOptional Sepolo user id filter.curl https://api.sepolo.app/api/v1/appointments \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/reporting/service-performanceReturns visit counts and cost totals for a reporting window.
Return type
PublicApiServicePerformanceDto
Required scopes
reporting.readfromUtcdate-timeOptional start timestamp.toUtcdate-timeOptional end timestamp. Maximum window is 366 days.curl https://api.sepolo.app/api/v1/reporting/service-performance \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"totalVisits": 42,
"completedVisits": 35,
"openVisits": 7,
"estimatedCost": 91000,
"actualCost": 97250
}Customers, vendors and parts
Read the commercial records that connect Sepolo service execution to ERP-owned data.
/api/v1/customersLists customer directory records available to the organization.
Return type
PublicApiPage<PublicApiCustomerDto>
Required scopes
customers.readexternalSystemstringOptional ERP/source system filter.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/customers \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/vendorsLists all vendors available to the organization.
Return type
PublicApiPage<PublicApiVendorDto>
Required scopes
vendors.readcurl https://api.sepolo.app/api/v1/vendors \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}/api/v1/inventory/partsLists machine parts and inventory items.
Return type
PublicApiPage<PublicApiInventoryPartDto>
Required scopes
inventory.readvendorIduuidOptional vendor filter.statusstringactive, inactive or all.pageSizeintegerPage size, maximum 500.cursorstringCursor returned by the previous page.curl https://api.sepolo.app/api/v1/inventory/parts \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"{
"data": [],
"nextCursor": null,
"hasMore": false
}Ready-made aggregates
Use summary endpoints when dashboards need totals without rebuilding every calculation client-side.
/api/v1/reporting/telemetry-dailyReturns daily telemetry aggregates for BI and reporting.
Return type
IReadOnlyList<PublicApiTelemetryDailyDto>
Required scopes
reporting.readfromUtcdate-timeOptional start timestamp.toUtcdate-timeOptional end timestamp. Maximum window is 366 days.deviceIdstringOptional device id filter.curl https://api.sepolo.app/api/v1/reporting/telemetry-daily \
-H "X-Sepolo-Api-Key: sep_live_your_api_key"[
{
"deviceId": "SEP-DEVICE-001",
"date": "2026-05-13T00:00:00Z",
"samples": 288,
"averageTemperature": 18.4
}
]