Events API
Record what happened and when - duty start, duty end, check-in, check-out - as a queryable operational timeline.
Overview & Solution
A GPS track tells you where someone was. It does not tell you what they were doing, or what the business considers a completed action.
The Events API captures those moments explicitly. A field app raises an event when a shift starts, when a technician checks in at a site, when a form is submitted. Each event carries a type and action code, and can be tied to a specific record in your data layers - so the timeline links back to the customer, asset or job it belongs to.
Key Value Propositions
- Structured, not free text -
typeCode/actionCodepairs mean events can be counted, filtered and reported on, not just read. - Linked to your data - attach an event to a record so "checked in" means "checked in at this customer".
- One timeline - attendance, visits and custom milestones sit in the same queryable stream.
Industry Use Cases
1. Workforce Attendance & Shift Management
- Duty accounting - derive worked hours from on-duty and off-duty events instead of a separate attendance system.
- Shift compliance - surface late starts and early finishes without a manager reviewing tracks by hand.
2. Field Service & Inspections
- Check-in / check-out at site - establish time on site per job, and flag visits that were too short to be plausible.
- Milestone capture - record job stages as they happen rather than reconstructing them from a closing report.
3. Audit & Dispute Resolution
- Event trail - answer "when did this actually happen" with a timestamped record rather than a recollection.
- Operational reporting - count events by type, user or period to see throughput and where it drops.
This API records and queries events. It does not push outbound webhooks to your systems - if you need Sovereign to call your endpoint when something happens, talk to us about your requirements.
Works well with
| Pair it with | To get |
|---|---|
| Tracking API | The route between two check-ins |
| PJP API | Planned visits alongside what actually occurred |
| Employee Management API | Events attributed to a known workforce record |
| Custom Data Layers API | Events linked to your own customer or asset records |
API reference
Field Force Mobility Execution APIs · Requires Intelomatic tenant
Endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/ndms2/events | Record an event |
POST | /api/ndms2/events/search | Search events |
All requests require a bearer token and the api-key query parameter:
Authorization: Bearer <access_token>
?api-key=<apiKey>
Record an event
POST /api/ndms2/events
Request Parameters
| Parameter | In | Type | Required | Description | Example |
|---|---|---|---|---|---|
typeCode | body | string | No | ||
actionCode | body | string | No | ||
layerCode | body | string | No | ||
recordNodeId | body | string | No |
Request body
{
"typeCode": "DUTY",
"actionCode": "on_duty",
"layerCode": "<optional layer>",
"recordNodeId": "<optional record id>"
}
Search events
POST /api/ndms2/events/search
Request Parameters
| Parameter | In | Type | Required | Description | Example |
|---|---|---|---|---|---|
filter | body | object | No | ||
filter.createUser | body | string | No |
Request body
{
"filter": {
"createUser": "<username>"
}
}
Example
curl -X POST '$BASE_URL/api/ndms2/events?api-key=$API_KEY' \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{"typeCode": "DUTY", "actionCode": "on_duty", "layerCode": "<optional layer>", "recordNodeId": "<optional record id>"}'
Notes
Observed typeCode/actionCode pairs: DUTY/on_duty, DUTY/off_duty.
This is an event ingestion endpoint: your devices and apps push events here. Outbound delivery (webhooks to your own systems) is a separate integration to design with the team if you need it.
Accepted events:
| No. | Action | Type ID | Type Code | Action Code |
|---|---|---|---|---|
| 1 | Turn off duty to on duty | 1 | DUTY | on_duty |
| 2 | Turn on duty to off duty | 1 | DUTY | off_duty |
| 3 | Login | 4 | AUTHENTICATION | login |
| 4 | Log out | 4 | AUTHENTICATION | logout |
| 5 | Create a local record | 2 | COLLECTOR | create_local_record |
| 6 | Edit a local record | 2 | COLLECTOR | edit_local_record |
| 7 | Remove local record | 2 | COLLECTOR | remove_local_record |
| 8 | Publish a new record | 2 | COLLECTOR | publish_new_record |
| 9 | Edit an online record | 2 | COLLECTOR | edit_online_record |
| 10 | Publish an edited version of an online record | 2 | COLLECTOR | publish_replacement_record |
| 11 | Remove an online record | 2 | COLLECTOR | remove_online_record |
| 12 | Launch app | 3 | APP_EVENT | launch_app |
| 13 | Resume app | 3 | APP_EVENT | resume_app |
| 14 | Have bad app setting | 6 | APP_SETTING | bad_setting |
| 15 | Submit evidence when setting up the app | 7 | EVIDENCE | initial_setup |
| 16 | Submit evidence when providing missing permission | 7 | EVIDENCE | missing_permissions |
| 17 | Check in a visit | 9 | VISIT | check_in |
| 18 | Check out a visit | 9 | VISIT | check_out |
| 19 | Cancel a visit | 9 | VISIT | cancel |
| 20 | Create order | 10 | ORDER | create_order |
| 21 | Create customer | 11 | CUSTOMER | create_customer |
| 22 | Expense submitted | 12 | EXPENSE | submitted_expense |
This list is not fixed - new event types and action codes can be declared through the Intelomatic User interface.