Sepolo developer platform

Build reporting, partner portals and integrations on trusted Sepolo service data.

A versioned REST API for organization-scoped assets, devices, telemetry, service visits, customers, vendors, inventory and operational reporting.

Example request
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

Quick start

1

Create an API key

Generate the organization key in Sepolo and grant the scopes your integration needs.

2

Import Postman

Use the ready collection to test authentication, date filters and paging before writing code.

3

Sync by workflow

Start with service visits, assets or reporting endpoints depending on the customer use case.

Authentication

Create the organization API key inside Sepolo under Profile, Configuration, API Key. Send it on every request.

Preferred header

X-Sepolo-Api-Key: sep_live_your_api_key

Bearer fallback

Authorization: Bearer sep_live_your_api_key

Response model

List endpoints use the same envelope, so Power BI, customer portals and partner applications can handle paging consistently.

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}

Errors

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

Endpoints are grouped by the operational workflow they support. Every request is scoped to the organization that owns the API key.

Start here

Access and identity

Confirm which organization, scopes and API boundaries the current key can access.

GET/api/v1/me

Current integration

Returns the integration identity, organization id, granted scopes, version metadata and allowed data boundaries.

Return type

PublicApiMeResponse

Required scopes

public_api.read

Example request

curl https://api.sepolo.app/api/v1/me \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "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

Assets

Read customer equipment, asset hierarchy and operational context for reporting and portals.

GET/api/v1/assets

Assets

Lists organization assets for reporting, customer portals and integration sync jobs.

Return type

PublicApiPage<PublicApiAssetDto>

Required scopes

assets.read
Query parameters
updatedSincedate-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.

Example request

curl https://api.sepolo.app/api/v1/assets \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/assets/{assetId}

Asset by id

Returns one asset if it belongs to the API key organization.

Return type

PublicApiAssetDto

Required scopes

assets.read

Example request

curl https://api.sepolo.app/api/v1/assets/{assetId} \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "assetId": "a33b5a5d-e55a-423d-9bdf-0bc2c61f7e63",
  "name": "Cooling line 4",
  "deviceId": "SEP-DEVICE-001",
  "isActive": true
}
GET/api/v1/assets/{assetId}/children

Asset children

Returns child assets for a parent asset.

Return type

PublicApiPage<PublicApiAssetDto>

Required scopes

assets.read
Query parameters
pageSizeintegerPage size, maximum 500.
cursorstringCursor returned by the previous page.

Example request

curl https://api.sepolo.app/api/v1/assets/{assetId}/children \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/reporting/assets-summary

Assets summary

Returns asset counts and maintenance cost totals for dashboards.

Return type

PublicApiAssetsSummaryDto

Required scopes

reporting.read

Example request

curl https://api.sepolo.app/api/v1/reporting/assets-summary \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "totalAssets": 120,
  "activeAssets": 112,
  "inactiveAssets": 8,
  "withDevices": 98,
  "overdueService": 7,
  "totalMaintenanceCost": 420000
}

IoT and PointGuard data

Devices and telemetry

Read devices, telemetry, movement windows and PointGuard cycle data for operational analytics.

GET/api/v1/devices

Devices

Lists devices owned by the organization.

Return type

PublicApiPage<PublicApiDeviceDto>

Required scopes

devices.read
Query parameters
updatedSincedate-timeOnly devices updated after this timestamp.
groupIdintegerOptional group filter.
statusstringOptional numeric device status filter.
pageSizeintegerPage size, maximum 500.
cursorstringCursor returned by the previous page.

Example request

curl https://api.sepolo.app/api/v1/devices \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/devices/{deviceId}

Device by id

Returns one device if it belongs to the API key organization.

Return type

PublicApiDeviceDto

Required scopes

devices.read

Example request

curl https://api.sepolo.app/api/v1/devices/{deviceId} \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "deviceId": "SEP-DEVICE-001",
  "deviceName": "Cooling line sensor",
  "groupId": 12,
  "batteryPercentage": 92
}
GET/api/v1/devices/{deviceId}/telemetry

Device telemetry

Returns enriched raw telemetry samples for a device, including PointGuard cycle metadata when present.

Return type

PublicApiPage<PublicApiTelemetryDto>

Required scopes

telemetry.read
Query parameters
fromdate-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.

Example request

curl https://api.sepolo.app/api/v1/devices/{deviceId}/telemetry \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "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
}
GET/api/v1/devices/{deviceId}/pointguard/cycles

PointGuard cycles

Returns compact PointGuard cycle summaries calculated from DeviceTelemetry cycle metadata.

Return type

PublicApiPage<PublicApiPointGuardCycleDto>

Required scopes

telemetry.read
Query parameters
fromdate-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.

Example request

curl https://api.sepolo.app/api/v1/devices/{deviceId}/pointguard/cycles \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "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
}
GET/api/v1/devices/{deviceId}/pointguard/cycles/{cycleId}/samples

PointGuard cycle samples

Returns every raw telemetry sample for one PointGuard cycle, ordered by sample index.

Return type

PublicApiPage<PublicApiTelemetryDto>

Required scopes

telemetry.read
Query parameters
pageSizeintegerPage size, maximum 500.
cursorstringCursor returned by the previous page.

Example request

curl https://api.sepolo.app/api/v1/devices/{deviceId}/pointguard/cycles/{cycleId}/samples \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/devices/{deviceId}/movements

Device movements

Returns calculated movement windows, current signature values, suggested anomalies and anomaly decision metadata.

Return type

PublicApiPage<PublicApiMovementDto>

Required scopes

movements.read
Query parameters
fromdate-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.

Example request

curl https://api.sepolo.app/api/v1/devices/{deviceId}/movements \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "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
}
GET/api/v1/devices/{deviceId}/movements/{movementId}/signature

Movement current signature

Returns the calculated PointGuard current signature and shape JSON for one movement.

Return type

PublicApiMovementSignatureDto

Required scopes

movements.read

Example request

curl https://api.sepolo.app/api/v1/devices/{deviceId}/movements/{movementId}/signature \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "movementId": "5c722f76-5f0b-4c1b-875d-05a1d8cd47b5",
  "deviceId": "SEP-DEVICE-001",
  "sampleCount": 142,
  "currentRms": 8.8,
  "currentP50": 7.9,
  "currentP90": 13.2,
  "shapeJson": "{...}"
}
GET/api/v1/incidents

Incidents

Lists incidents for the organization.

Return type

PublicApiPage<PublicApiIncidentDto>

Required scopes

incidents.read
Query parameters
fromUtcdate-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.

Example request

curl https://api.sepolo.app/api/v1/incidents \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}

Visits, reports and appointments

Service operations

Connect service visits, appointments and service reports into BI, partner systems and customer portals.

GET/api/v1/service-reports

Service reports

Lists service reports for reporting and partner applications.

Return type

PublicApiPage<PublicApiServiceReportDto>

Required scopes

service_reports.read
Query parameters
fromUtcdate-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.

Example request

curl https://api.sepolo.app/api/v1/service-reports \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/service-reports/{serviceReportId}

Service report by id

Returns one service report if it belongs to the API key organization.

Return type

PublicApiServiceReportDto

Required scopes

service_reports.read

Example request

curl https://api.sepolo.app/api/v1/service-reports/{serviceReportId} \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "serviceReportId": "5c722f76-5f0b-4c1b-875d-05a1d8cd47b5",
  "assetId": "a33b5a5d-e55a-423d-9bdf-0bc2c61f7e63",
  "stateText": "Completed"
}
POST/api/v1/service-reports

Create service report

Creates a service report for trusted integrations. This is not granted to normal read-only API keys.

Return type

PublicApiCreatedServiceReportResponse

Required scopes

service_reports.write

Example request

curl https://api.sepolo.app/api/v1/service-reports \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "serviceReportId": "5c722f76-5f0b-4c1b-875d-05a1d8cd47b5"
}
GET/api/v1/service-visits

Service visits

Returns service visit data for BI, partner portals and operational reporting.

Return type

PublicApiPage<PublicApiServiceVisitDto>

Required scopes

service_visits.read
Query parameters
fromUtcdate-timeOptional start of the service visit window.
toUtcdate-timeOptional end of the service visit window. Maximum window is 366 days.

Example request

curl https://api.sepolo.app/api/v1/service-visits \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/appointments

Appointments

Returns planned service appointments for calendars, reporting tools and planning integrations.

Return type

PublicApiPage<PublicApiAppointmentDto>

Required scopes

appointments.read
Query parameters
fromUtcdate-timeOptional start of the appointment window.
toUtcdate-timeOptional end of the appointment window. Maximum window is 366 days.
userIduuidOptional Sepolo user id filter.

Example request

curl https://api.sepolo.app/api/v1/appointments \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/reporting/service-performance

Service performance

Returns visit counts and cost totals for a reporting window.

Return type

PublicApiServicePerformanceDto

Required scopes

reporting.read
Query parameters
fromUtcdate-timeOptional start timestamp.
toUtcdate-timeOptional end timestamp. Maximum window is 366 days.

Example request

curl https://api.sepolo.app/api/v1/reporting/service-performance \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "totalVisits": 42,
  "completedVisits": 35,
  "openVisits": 7,
  "estimatedCost": 91000,
  "actualCost": 97250
}

Customers, vendors and parts

ERP master data

Read the commercial records that connect Sepolo service execution to ERP-owned data.

GET/api/v1/customers

Customers

Lists customer directory records available to the organization.

Return type

PublicApiPage<PublicApiCustomerDto>

Required scopes

customers.read
Query parameters
externalSystemstringOptional ERP/source system filter.
pageSizeintegerPage size, maximum 500.
cursorstringCursor returned by the previous page.

Example request

curl https://api.sepolo.app/api/v1/customers \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/vendors

Vendors

Lists all vendors available to the organization.

Return type

PublicApiPage<PublicApiVendorDto>

Required scopes

vendors.read

Example request

curl https://api.sepolo.app/api/v1/vendors \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}
GET/api/v1/inventory/parts

Inventory parts

Lists machine parts and inventory items.

Return type

PublicApiPage<PublicApiInventoryPartDto>

Required scopes

inventory.read
Query parameters
vendorIduuidOptional vendor filter.
statusstringactive, inactive or all.
pageSizeintegerPage size, maximum 500.
cursorstringCursor returned by the previous page.

Example request

curl https://api.sepolo.app/api/v1/inventory/parts \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

{
  "data": [],
  "nextCursor": null,
  "hasMore": false
}

Ready-made aggregates

Reporting

Use summary endpoints when dashboards need totals without rebuilding every calculation client-side.

GET/api/v1/reporting/telemetry-daily

Telemetry daily

Returns daily telemetry aggregates for BI and reporting.

Return type

IReadOnlyList<PublicApiTelemetryDailyDto>

Required scopes

reporting.read
Query parameters
fromUtcdate-timeOptional start timestamp.
toUtcdate-timeOptional end timestamp. Maximum window is 366 days.
deviceIdstringOptional device id filter.

Example request

curl https://api.sepolo.app/api/v1/reporting/telemetry-daily \
  -H "X-Sepolo-Api-Key: sep_live_your_api_key"

Example response

[
  {
    "deviceId": "SEP-DEVICE-001",
    "date": "2026-05-13T00:00:00Z",
    "samples": 288,
    "averageTemperature": 18.4
  }
]
Sepolo API documentation | Sepolo