Skip to content
Dignita

Integration guide

Version 1.0 · 1 October 2026

Receive alarms in your own systems

Dignita sends selected alarms and events as webhooks to your HTTPS endpoint. Each POST request contains one UTF-8 JSON object.

Agree your receiver URL, token and the events you want to receive with Dignita.

Connection and endpoint

Connecting

Give Dignita a complete receiver URL, such as https://receiver.example.com/dignita/alarms. Agree which events you want to receive. Dignita provides your token separately. Run a joint connection test with Dignita before activating the integration.

URL requirements

The URL must use HTTPS with a valid certificate, matching hostname and trusted certificate chain. Self-signed certificates are not accepted by default. The URL may contain at most 500 UTF-8 bytes and must not include a username, password or fragment (#).

The endpoint must be publicly reachable. DNS is checked on each delivery and must resolve to allowed public IP addresses. Private, local, reserved and loopback addresses are rejected. The endpoint must respond directly; redirects are not followed.

Authentication

Verify the token

Each request includes Authorization: Bearer <TOKEN>. Verify the token on every request. Reject missing or incorrect tokens, for example with 401, without starting any business action. Store the token in secret configuration and mask it in logs.

Dignita provides your token separately. Check the complete agreed value on every request.

Configuration and token changes

Contact Dignita to change your token. Coordinate the change with your receiver.

Requests have no HMAC signature or separate signature header.

JSON and fields

The message contains the device and notification objects. Position information is in notification.position. The example shows a failed AL-100 test with a position and alcohol value.

Event IDs, times, names and position values may be absent or null. Accept additional JSON fields for future extensions. The table defines the minimum validation requirements; optional fields must not become receiver requirements.

Interpret the event using notification.type. Bind each customer configuration to the agreed endpoint and token.

Message fields

device
objectRequired
Device information.
device.id
number | stringOptional / may be absent
Device ID. Treat as an identifier.
device.uniqueId
stringRequired
Non-empty string, normally an IMEI. Preserve leading zeros.
device.name
string | nullOptional / may be absent
Current device name; not a unique identifier. May be null.
notification
objectRequired
Event information.
notification.id
number | stringOptional / may be absent
Source event ID. Not globally unique; may be absent or null.
notification.type
stringRequired
Non-empty, exact, case-sensitive event type.
notification.eventTime
Source formatOptional / may be absent
Time of the event. May be absent or null; the format may vary.
notification.serverTime
numberRequired
Finite number. Forwarding time as Unix time in milliseconds.
notification.position
objectOptional / may be absent
Position information for the event. Position fields may be absent or null.
notification.position.id
number | stringOptional / may be absent
Source position ID. May be absent or null.
notification.position.time
Source formatOptional / may be absent
Time of the position measurement. May be absent or null; the format may vary.
notification.position.latitude
numberOptional / may be absent
Latitude. May be absent or null.
notification.position.longitude
numberOptional / may be absent
Longitude. May be absent or null.
notification.additionalInfo
objectOptional / may be absent
Only the four AL-100 test types. May be omitted.
notification.additionalInfo.bac
numberOptional / may be absent
Numeric alcohol value. Use perMille for the per-mille value.
notification.additionalInfo.perMille
numberOptional / may be absent
Per-mille value: bac × 10, at most four decimal places.

Times, position and alcohol values

Time formats

notification.serverTime is the forwarding time as Unix time in milliseconds. notification.eventTime is the event time, and notification.position.time is the time of the position measurement. Event and position times may be absent or use varying formats. ISO 8601 UTC/Z in the examples is not a format guarantee. Check actual formats in the connection test and preserve the original values. Handle missing or unparseable times, and do not interpret times without a timezone as local time without agreement.

Missing positions

The position may be older than the event; check notification.position.time. When no position is available, all four position fields are null. Individual position fields may also be omitted. A missing position is not the coordinate 0, 0.

Alcohol values and test results

additionalInfo with numeric bac and perMille is supplied only for al_test_passed, al_test_failed, al_retest_passed and al_retest_failed. Use perMille for the per-mille value: perMille = bac × 10, rounded to at most four decimal places. bac 0.08 corresponds to perMille 0.8.

Determine the test result from notification.type, not from a threshold you calculate yourself. An alcohol value of zero provides no separate quality guarantee. Missing additionalInfo means no alcohol value was supplied. This also applies to alco_test_failed.

Acknowledgement and delivery errors

Persist before acknowledging

Save the original payload and receipt time in a durable queue or database before returning 204 No Content. Run business logic in the background after responding. A confirmed duplicate already saved may also be acknowledged with 204. If storage fails, return 500 or 503 rather than 2xx.

Accept POST on the agreed path and verify the token first. Then validate JSON: device and notification must be objects, device.uniqueId and notification.type must be non-empty strings, and notification.serverTime a finite number. Invalid JSON or core fields are normally rejected with 400. Do not require position, alcohol values, name, source ID or source time.

Complete the HTTP response

Any HTTP response with status 200–299 counts as successful once the entire response completes, even if your background processing later fails. 204 is recommended; 200 and 202 also work. The response body is not parsed and needs no particular JSON format. Finish the response immediately: an open or streaming response can time out even after 2xx headers.

Timeouts and response size

The entire HTTPS request has a 10-second limit, including connection, TLS, sending and the complete response. DNS has a separate 5-second limit. The response body may be at most 64 KiB (65,536 bytes). Aim to persist and acknowledge within about one second in normal operation. This is not a guarantee of elapsed time from the vehicle event to receipt.

Failed deliveries

Network errors, timeouts and error statuses count as failed deliveries. On timeout, your receiver may already have saved the message even though Dignita did not receive an acknowledgement.

Duplicates and ordering

Requests may arrive concurrently and ordering is not guaranteed. A source event may appear more than once. notification.id is not globally unique and no idempotency-key header is sent.

When enough source fields exist, combine customer configuration, device.uniqueId, notification.id, notification.type and notification.eventTime for duplicate detection. Verify the key against real data. Do not include serverTime; it may change between attempts. If IDs and times are insufficient, preserve events without automatically merging similar messages.

How your HTTP response is handled

2xx
Successful delivery once the complete response ends. 204 recommended.
3xx
Failed delivery. Redirects are not followed.
4xx
Failed delivery, including 400, 401 and 403. No automatic retry.
429
Failed delivery. Retry-After does not trigger a retry.
5xx
Failed delivery. No automatic retry.

AL-100 events

The table shows the exact notification.type values. Only events enabled for your integration are sent. Names are case-sensitive.

The list contains 46 event types. Which occur depends on device capabilities. HS means handset and CB means control box. Use the exact received name, such as al_engine_blocked or al_engine_unblocked.

Save and acknowledge valid messages with new or unknown event types. Flag them for business mapping rather than dropping them.

46 of 46 event types

AL-100 events
Received notification.typeDescription
al_test_passedBreath test passed.
al_test_failedBreath test failed.
al_retest_passedRetest passed.
al_retest_failedRetest failed.
al_hs_connected_cb_after_calibrationHandset connected after calibration.
al_memory_fullMemory full.
al_handset_disconnectedHandset disconnected.
al_handset_reconnectedHandset reconnected.
al_invalid_breath_sampleInvalid breath sample.
al_out_of_working_temperature_hsHandset temperature outside operating range.
al_out_of_working_temperature_cbControl box temperature outside operating range.
al_main_power_on_cb_turned_onControl box power switched on.
al_low_battery_detectedLow battery detected.
al_ignition_turned_offIgnition switched off.
al_ignition_turned_onIgnition switched on.
al_main_power_on_cb_turned_offControl box power switched off.
al_start_of_engineEngine start.
al_starter_relay_openedStarter relay opened.
al_starter_relay_closedStarter relay closed.
al_vehicle_movement_detectedVehicle movement detected.
al_hs_cb_connected_with_new_timestampHandset and control box connected with a new timestamp.
al_device_errorDevice error.
al_hs_exchangedHandset replaced.
al_cb_connected_with_computerControl box connected to a computer.
al_serialnumber_not_matched_between_cb_and_hsHandset and control box serial numbers do not match.
al_retest_requestedRetest requested.
al_retest_not_deliveredRequested retest not delivered.
al_vehicle_movement_detected_without_breath_testVehicle movement without a breath test.
al_early_service_is_occurredEarly service occurred.
al_remainingtime_for_service_due_is_less_than_24_hoursLess than 24 hours until service is due.
al_grace_period_started_after_expiry_of_service_dateGrace period after the service date started.
al_service_date_including_grace_period_expiredService date including grace period expired.
al_hs_cb_connected_with_new_setting_valuesHandset and control box connected with new settings.
al_service_date_reset_by_new_timestampService date reset with a new timestamp.
al_calibration_done_with_new_timestampCalibration completed with a new timestamp.
al_serialnumber_of_hs_changed_with_new_pairHandset serial number changed on new pairing.
al_serialnumber_of_cb_changed_with_new_pairControl box serial number changed on new pairing.
al_log_data_deletedLog data deleted.
al_forced_override_activatedForced override activated.
al_forced_override_expiredForced override expired.
al_handset_disconnected_during_engine_run_movementHandset disconnected during engine operation and movement.
al_handset_disconnected_during_engine_run_accHandset disconnected during engine operation with ACC on.
al_engine_unblockedEngine blocking deactivated.
al_engine_blockedEngine blocking activated.
al_temporary_override_activatedTemporary override activated.
al_temporary_override_endedTemporary override ended.

Other alarms and models

The alarms you can receive depend on the device model and what is enabled for your integration. Most require tracking to be enabled. Not every device supports every alarm.

For a failed test, AL-100 sends al_test_failed. Some other models send alco_test_failed, without additionalInfo containing alcohol values.

For AL-100, you can receive al_ignition_turned_on when the ignition is switched on and al_ignition_turned_off when it is switched off. These events are sent when enabled for your integration.

Geofence and speed alarms contain the event type and an optional position. JSON does not include a geofence ID, measured speed or threshold.

Other alarms and models
Received notification.typeDescription
deviceOfflinedeviceSleepOnOffline or sleep mode.
deviceOnlineOnline or awake.
vibrationMovement or vibration.
lowBatteryLow internal battery.
powerOnpowerOffdeviceChargeOndeviceChargeOffExternal power or charging on/off.
geofenceEntergeofenceExitGeofence entry or exit.
deviceOverspeedOverspeed.
alco_test_failedFailed test on some other models.
alco_physical_bypassPhysical bypass on supported models.

Test and go live

Test your receiver

Save the JSON example as alarm-example.json. Set ALARM_ENDPOINT to your test endpoint and ALARM_FORWARDING_TOKEN to the correct token. Never put real tokens in source code or documentation. The command tests your receiver; the expected response is 204 with an empty body.

Joint connection test

A curl test does not replace the joint delivery test from Dignita, including DNS and TLS. Test with the exact URL, a valid certificate, the correct token, a real device linked to the enterprise and at least one intended alarm. Confirm both that you saved the event and that the sender received a complete 2xx response within 10 seconds.

Select only the events you need and check model support and any tracking requirements. A delivery that has already started may use the previous settings.

Check before going live

  • Valid token and AL-100 test: save the correct type, identifiers and alcohol values, return 2xx.

  • Without a position: save null, not 0, 0.

  • Missing ID, name, source time or position fields: accept when core fields are valid.

  • Incorrect or missing token: reject without business actions.

  • Invalid JSON or core fields: reject, normally with 400.

  • Extra JSON fields or unknown type: save, acknowledge and flag for business mapping.

  • The same source event twice: avoid duplicate business actions when it can be reliably identified.

  • Concurrent and delayed events: preserve all without assuming an order.

  • Durable storage failure: do not return a successful 2xx and verify error monitoring.

Operations and troubleshooting

Log receipt time, device.uniqueId, notification.type, source event ID when available and processing results. Mask the token. Monitor storage failures, HTTP errors, response times and background processing errors.

There is no heartbeat. The absence of events does not prove that the connection works. Errors and timeouts do not trigger automatic retries.

When an alarm is missing

Contact Dignita if an alarm is missing. Dignita checks that the device belongs to your integration, which events are enabled and the delivery status. At your receiver, check availability, the token, certificates and durable storage.