{"generatedAt":"2026-10-03T17:36:11.485Z","product":{"slug":"intouch-telematics","name":"InTouch Telematics","summary":"Live tracking, trips, devices, vehicles, events, geofences, and fleet intelligence.","stateModel":"stateful","platforms":["REST","Android","iOS","React Native","Web","Widgets"],"auth":{"type":"OAuth bearer with project and asset entitlement","guidance":"Generate a time-bound InTouch bearer token from the subscribed project's client credentials. Separate provisioning identities from data-plane tracking tokens and rotate device credentials independently."}},"ownership":{"classification":"provider-stateful","boundary":"InTouch Telematics exposes durable operational resources. Mirror provider identity and lifecycle evidence in an application aggregate; an accepted request is not a completed business outcome.","applicationRule":"The application owns business identity, expected version, command idempotency, evidence receipts, audit, reconciliation, and downstream side effects even when Mappls owns provider resource state."},"coverage":{"slug":"intouch-telematics","name":"InTouch Telematics","stateModel":"stateful","ownership":"provider-stateful","accent":"#e052a0","journeyCount":3,"boundary":"InTouch Telematics exposes durable operational resources. Mirror provider identity and lifecycle evidence in an application aggregate; an accepted request is not a completed business outcome.","aggregates":["trip","geofence case","geofence draft"],"journeySlugs":["connected-fleet-trip","fleet-geofence-exception","ios-geofence-draft"],"sampleSlugs":["delivery-control-tower","fleet-geofence","deep-link-journey-host"],"tutorialSlugs":["delivery-eta","fleet-geofences","a2a-solution-coordination","webhook-reliability","oauth-server-integration","intouch-trip-lifecycle","ios-sdk-production-readiness","ios-direction-geofence-handoffs","react-native-native-parity","widget-host-production"],"useCaseSlugs":["last-mile-delivery","ride-hailing","energy-grid-resilience","hospital-care-logistics","emergency-response","smart-city-operations","connected-vehicle","aviation-ground-operations","agriculture-field-ops","mining-haulage-safety"],"contractSlugs":["intouch-post-trips-this-api-will-create-a-trip","intouch-get-trips-this-api-will-get-all-the-trips-for-a-user","intouch-get-trips-id-gets-the-details-of-a-single-trip","intouch-post-trips-id-close-post-api-to-close-a-trip","intouch-get-devices-gets-the-live-data-of-devices","intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device","intouch-post-geofences-create-a-new-geofence","intouch-get-geofences-id-get-a-single-or-multiple-geofence-s","intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences","intouch-post-geofences-id-update-a-geofence","intouch-delete-geofences-id-delete-a-geofence"],"sourceGuideSlugs":["mappls-intouch-rest-apis","mappls-intouch-android-sdk","mappls-intouch-ios-sdk","mappls-intouch-ios-distribution","mappls-intouch-ios-distribution-base","mapmyindia-intouch-ios-sdk","mappls-react-native-intouch-sdk","mapmyindia-intouch-web-plugins","mappls-geofence-ui-ios-distribution","mappls-geofence-ui-ios-distribution-base"],"totals":{"states":18,"transitions":18,"failurePlans":12,"durableRecords":11,"operationalSignals":19}},"controlLayers":[{"id":"identity","title":"Identity and aggregate boundary","question":"What durable thing is being operated?","implementation":"Use stable business and provider identifiers for trip, geofence case, geofence draft; never infer identity from display text or the latest coordinates.","proof":"Duplicate creation, resource rebinding, tenant isolation, and retirement tests."},{"id":"authority","title":"Actor authority","question":"Who may advance each transition?","implementation":"Authorize every command against the named journey actors: Fleet planner, Driver, Operations controller, Telematics service, Fleet administrator, Compliance reviewer, Operations author, Host application, MapplsGeofenceUI, Geofence reviewer, Rule-publication adapter. Persist the attributable actor, tenant, purpose, and policy decision.","proof":"Role, resource, tenant, purpose, and human-approval denial tests."},{"id":"commands","title":"Commands and concurrency","question":"How are retries and races made safe?","implementation":"Require a command idempotency key and expected aggregate version. Cache the canonical result, reject key reuse with different intent, and reconcile ambiguous timeouts before retry.","proof":"Exact replay, stale-version rejection, concurrent-writer, timeout, and restart tests."},{"id":"evidence","title":"Evidence and durable records","question":"What proves each state?","implementation":"Persist immutable receipts and revisions around these catalog records: Trip aggregate, Telemetry envelope, Exception case, Trip revision, Geofence definition, Source activity, Geofence draft, Geometry revision, Review decision, Publication boundary. Keep event time, receipt time, source identity, hashes, and retention policy separate.","proof":"Missing, malformed, late, duplicate, conflicting, and redacted-evidence tests."},{"id":"events","title":"Events and side effects","question":"How do downstream systems learn what committed?","implementation":"Commit aggregate state, audit, and a transactional outbox together. Sign deliveries, bound retries, dead-letter exhaustions, and preserve delivery attempts without changing business history.","proof":"Atomic commit, signature, retry, lease fencing, dead-letter, replay, and ordering tests."},{"id":"recovery","title":"Recovery and reconciliation","question":"What happens when systems disagree?","implementation":"Treat timeouts as unknown outcomes, poll or consume authoritative evidence, compare versions, append a reconciliation decision, and use compensation instead of destructive history edits.","proof":"Provider timeout, callback-before-response, delayed event, outage, restart, and manual-recovery drills."},{"id":"privacy","title":"Privacy and human control","question":"Which data and decisions are sensitive?","implementation":"Minimize precise location and media, scope retention, redact derived data deliberately, and require attributable approval for dispatch, publication, access, closure, and destructive change where consequential.","proof":"Least-privilege, consent expiry, separation-of-duties, retention, export, revocation, and redaction tests."},{"id":"operations","title":"Operations and release","question":"Can operators see and recover the journey?","implementation":"Expose state age, source freshness, stuck commands, retries, reconciliation lag, outbox depth, terminal outcomes, and per-aggregate audit. Roll out behind explicit acceptance gates.","proof":"SLO alerts, support lookup, bulk reconciliation, rollback, backup restore, regional failover, and incident drills."}],"journeys":[{"slug":"connected-fleet-trip","title":"Connected fleet trip","eyebrow":"InTouch · telemetry-backed operations","productSlug":"intouch-telematics","stateModel":"stateful","summary":"Provision an observable trip, follow live vehicle state, explain exceptions, close deliberately, and retain a replayable operational record.","aggregate":"trip","actors":["Fleet planner","Driver","Operations controller","Telematics service"],"sourceGuideSlugs":["mappls-intouch-rest-apis","mappls-intouch-android-sdk","mappls-intouch-ios-sdk","mappls-intouch-ios-distribution","mappls-intouch-ios-distribution-base","mapmyindia-intouch-ios-sdk","mappls-react-native-intouch-sdk"],"contractSlugs":["intouch-post-trips-this-api-will-create-a-trip","intouch-get-trips-this-api-will-get-all-the-trips-for-a-user","intouch-get-trips-id-gets-the-details-of-a-single-trip","intouch-post-trips-id-close-post-api-to-close-a-trip","intouch-get-devices-gets-the-live-data-of-devices","intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device"],"sampleSlug":"delivery-control-tower","states":[{"id":"planned","label":"Planned","meaning":"Stops, service window, asset, driver, and business identifiers are fixed enough to create the trip.","recovery":"Reconcile by external trip ID after a timeout and update the plan only through versioned commands."},{"id":"ready","label":"Ready","meaning":"The trip and assigned device are provisioned, entitled, and emitting sufficiently fresh location.","recovery":"Block departure or enter a documented degraded mode when device health cannot be established."},{"id":"active","label":"Active","meaning":"Positions, events, progress, ETA, and exception state are continuously observed.","recovery":"Accept delayed telemetry by event time, preserve received time, and rebuild derived state deterministically."},{"id":"exception","label":"Exception","meaning":"A deviation, delay, device gap, geofence, or safety event requires operator attention.","recovery":"Record acknowledgement and resolution as separate attributable actions without deleting the underlying event."},{"id":"closing","label":"Closing","meaning":"Arrival is plausible but late events, final proof, and device state are still being reconciled.","recovery":"Use a bounded grace window and surface unresolved gaps instead of fabricating completion evidence."},{"id":"closed","label":"Closed","meaning":"The provider trip and internal aggregate are closed with a final trace, metrics, and exception record.","recovery":"Apply late telemetry to a derived revision while keeping the original close event immutable.","terminal":true}],"transitions":[{"command":"create_trip","actor":"Fleet planner","from":[],"to":"planned","event":"trip.created","idempotency":"Use the dispatch or order journey ID across retries."},{"command":"confirm_device_ready","actor":"Telematics service","from":["planned"],"to":"ready","event":"trip.ready","idempotency":"Bind the decision to device identity and observed health version."},{"command":"start_trip","actor":"Driver","from":["ready"],"to":"active","event":"trip.started","idempotency":"Persist the driver command ID before the first transmission."},{"command":"raise_exception","actor":"Telematics service","from":["active","exception"],"to":"exception","event":"trip.exception_raised","idempotency":"Derive a stable key from rule, asset, and source-event identity."},{"command":"resolve_exception","actor":"Operations controller","from":["exception"],"to":"active","event":"trip.exception_resolved","idempotency":"Record acknowledgement and resolution command IDs separately."},{"command":"request_close","actor":"Driver","from":["active","exception"],"to":"closing","event":"trip.close_requested","idempotency":"The same close request may be safely replayed while finalization runs."},{"command":"close_trip","actor":"Telematics service","from":["closing"],"to":"closed","event":"trip.closed","idempotency":"Provider close and internal completion must reconcile to one terminal version."}],"invariants":["A device is assigned to at most one active trip in the same operational context.","Raw telemetry is immutable and distinguished by event time and receipt time.","Derived live state can be rebuilt from ordered observations and commands.","Trip closure never discards unresolved exceptions or data gaps.","Every provider identifier is mapped to the internal trip and tenant."],"records":[{"name":"Trip aggregate","purpose":"Current operational state and identity mapping.","keyFields":["tripId","externalId","providerTripId","deviceId","state","version"]},{"name":"Telemetry envelope","purpose":"Immutable position and vehicle observation.","keyFields":["sourceEventId","deviceId","eventTime","receivedTime","position","quality"]},{"name":"Exception case","purpose":"Operator-owned acknowledgement and resolution workflow.","keyFields":["caseId","rule","severity","owner","status","sourceEventIds"]},{"name":"Trip revision","purpose":"Recomputed summary when bounded late data arrives.","keyFields":["tripId","revision","inputWatermark","metrics","generatedAt"]}],"failures":[{"trigger":"Telemetry arrives late or out of order","detection":"Event time is behind the trip watermark or its sequence creates a gap.","recovery":"Store raw input, recompute the bounded affected window, and publish a new derived revision."},{"trigger":"Device stops reporting","detection":"Freshness exceeds the vehicle-specific health threshold.","recovery":"Raise a connection exception, show last-known time explicitly, and avoid extrapolating authoritative position."},{"trigger":"Close succeeds remotely but the response is lost","detection":"Internal trip remains closing while provider detail reports closed.","recovery":"Reconciliation closes the internal aggregate with the original command identity."},{"trigger":"Driver or vehicle assignment changes mid-trip","detection":"A control-plane version differs from the assignment captured at trip start.","recovery":"Use an explicit transfer transition and retain both assignment intervals."}],"observability":["Telemetry freshness, ordering lag, rejection, and quality","Active trips without a healthy assigned device","ETA error and route-deviation duration","Open exception age by severity and owner","Trips stuck in closing and reconciliation outcomes","Raw-to-derived lineage and revision count"],"website":"/journeys/connected-fleet-trip"},{"slug":"fleet-geofence-exception","title":"Fleet geofence exception","eyebrow":"InTouch · rule and case lifecycle","productSlug":"intouch-telematics","stateModel":"stateful","summary":"Create a governed zone, evaluate vehicle activity, suppress noise, raise an actionable case, and retire the rule safely.","aggregate":"geofence case","actors":["Fleet administrator","Telematics service","Operations controller","Compliance reviewer"],"sourceGuideSlugs":["mappls-intouch-rest-apis","mapmyindia-intouch-web-plugins"],"contractSlugs":["intouch-post-geofences-create-a-new-geofence","intouch-get-geofences-id-get-a-single-or-multiple-geofence-s","intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences","intouch-post-geofences-id-update-a-geofence","intouch-delete-geofences-id-delete-a-geofence"],"sampleSlug":"fleet-geofence","states":[{"id":"draft","label":"Draft","meaning":"Geometry, rule semantics, asset scope, schedule, and notification policy are being validated.","recovery":"Keep draft versions separate from the active provider rule."},{"id":"active","label":"Active","meaning":"The versioned zone is deployed and evaluated against an explicit asset and schedule scope.","recovery":"Reconcile provider rule identity and version before treating observations as authoritative."},{"id":"breached","label":"Breached","meaning":"A debounced enter, exit, dwell, or prohibited-presence event created an operational case.","recovery":"Deduplicate by source activity ID and retain all supporting positions."},{"id":"acknowledged","label":"Acknowledged","meaning":"A named operator owns investigation, severity, and response deadline.","recovery":"Reassign through an attributable command if the owner becomes unavailable."},{"id":"resolved","label":"Resolved","meaning":"The outcome and evidence are recorded without erasing the initiating activity.","recovery":"Reopen as a new case version if new facts change the operational decision.","terminal":true},{"id":"retired","label":"Retired","meaning":"The zone no longer generates new cases but historical activities remain queryable.","recovery":"Create a new rule version rather than silently reactivating a retired definition.","terminal":true}],"transitions":[{"command":"publish_geofence","actor":"Fleet administrator","from":["draft"],"to":"active","event":"geofence.published","idempotency":"Key by internal rule ID and definition version."},{"command":"record_breach","actor":"Telematics service","from":["active","breached"],"to":"breached","event":"geofence.breached","idempotency":"Use provider activity identity plus rule version."},{"command":"acknowledge_case","actor":"Operations controller","from":["breached"],"to":"acknowledged","event":"geofence_case.acknowledged","idempotency":"Deduplicate the operator action, not the underlying telemetry."},{"command":"resolve_case","actor":"Operations controller","from":["acknowledged"],"to":"resolved","event":"geofence_case.resolved","idempotency":"Commit outcome, evidence references, and notification outbox atomically."},{"command":"retire_geofence","actor":"Fleet administrator","from":["draft","active"],"to":"retired","event":"geofence.retired","idempotency":"Reconcile provider deletion and internal retirement with one command key."}],"invariants":["Geometry and coordinate reference are validated before publication.","Every activity names the geofence definition version that evaluated it.","Noise suppression never deletes raw source observations.","One provider activity creates at most one operational case per rule version.","Retirement stops new evaluation while preserving case and audit history."],"records":[{"name":"Geofence definition","purpose":"Versioned geometry, schedule, assets, and rule policy.","keyFields":["ruleId","version","providerId","geometryHash","assetScope","status"]},{"name":"Source activity","purpose":"Immutable enter, exit, dwell, or presence evidence.","keyFields":["activityId","ruleVersion","deviceId","eventTime","position"]},{"name":"Exception case","purpose":"Human ownership, SLA, disposition, and notification state.","keyFields":["caseId","activityIds","severity","owner","status","resolution"]}],"failures":[{"trigger":"GPS jitter creates repeated boundary crossings","detection":"Alternating activities occur inside the configured hysteresis time and distance.","recovery":"Debounce into one case while retaining raw activities for review."},{"trigger":"Rule update races with incoming activity","detection":"The activity cites an earlier provider or internal definition version.","recovery":"Evaluate and display it under the cited version; never reinterpret history silently."},{"trigger":"Provider deletion times out","detection":"Internal retirement is pending and provider reconciliation is unknown.","recovery":"Retry the same delete identity and keep the rule visibly retiring until confirmed."},{"trigger":"Notification delivery fails","detection":"The case exists but the notification outbox remains pending.","recovery":"Retry independently and escalate by age; do not create another case."}],"observability":["Activities per device and rule before and after debouncing","Case acknowledgement and resolution time","Rules with provider/internal version drift","Notifications pending, retrying, and dead-lettered","Geometry validation and publication failures","Retired rules still receiving activity"],"website":"/journeys/fleet-geofence-exception"},{"slug":"ios-geofence-draft","title":"iOS geofence draft and publication boundary","eyebrow":"MapplsGeofenceUI · versioned application geometry","productSlug":"intouch-telematics","stateModel":"hybrid","summary":"Present the Mappls geofence editor, normalize circle or polygon output into a versioned application draft, validate geometry and policy, and stop at a review-ready artifact until a separately documented provider publication contract is selected.","aggregate":"geofence draft","actors":["Operations author","Host application","MapplsGeofenceUI","Geofence reviewer","Rule-publication adapter"],"sourceGuideSlugs":["mappls-geofence-ui-ios-distribution","mappls-geofence-ui-ios-distribution-base"],"contractSlugs":[],"sampleSlug":"deep-link-journey-host","tutorialSlugs":["ios-direction-geofence-handoffs"],"states":[{"id":"draft","label":"Draft","meaning":"The host owns name, purpose, subject scope, rule intent, and geometry revision before opening the editor.","recovery":"Restore normalized host fields only; no MapplsGeofenceView, delegate, map source, or layer is durable state."},{"id":"editing","label":"Editing","meaning":"One view and delegate generation owns mode, handles, slider, style, callbacks, dismissal, and cleanup.","recovery":"Dispose exactly once and reopen with a new generation; never accept callbacks from the superseded view."},{"id":"candidate","label":"Candidate","meaning":"Circle or polygon output has been copied into a portable geometry schema but is not yet an operational rule.","recovery":"Reject missing, malformed, self-intersecting, out-of-bounds, or policy-breaking geometry with actionable feedback."},{"id":"review_pending","label":"Review pending","meaning":"Valid geometry, purpose, scope, schedule intent, and policy version await an attributable application review.","recovery":"Reviewer changes create a new immutable geometry revision and reopen validation rather than editing evidence in place."},{"id":"approved_draft","label":"Approved draft","meaning":"The application has a review-approved portable artifact ready for a separately selected and entitled rule-publication contract.","recovery":"Approval does not claim that a Mappls geofence rule exists; publication records belong to the chosen adapter lifecycle.","terminal":true},{"id":"cancelled","label":"Cancelled","meaning":"The author ended editing without approving a new geometry revision and the UI lifecycle is fully disposed.","recovery":"A new edit command may start from the last committed host draft, not transient handles or callbacks.","terminal":true}],"transitions":[{"command":"create_geofence_draft","actor":"Host application","from":[],"to":"draft","event":"geofence_draft.created","idempotency":"One external rule intent maps to one draft aggregate across retries."},{"command":"open_editor","actor":"Operations author","from":["draft","review_pending"],"to":"editing","event":"geofence_draft.editor_opened","idempotency":"One command opens one view/delegate generation tied to the current draft revision."},{"command":"receive_geometry","actor":"MapplsGeofenceUI","from":["editing"],"to":"candidate","event":"geofence_draft.geometry_received","idempotency":"Normalize one terminal geometry result per generation and hash its canonical coordinate order."},{"command":"submit_for_review","actor":"Operations author","from":["candidate"],"to":"review_pending","event":"geofence_draft.review_requested","idempotency":"The geometry hash, purpose, scope, and policy version create at most one review case."},{"command":"approve_draft","actor":"Geofence reviewer","from":["review_pending"],"to":"approved_draft","event":"geofence_draft.approved","idempotency":"Commit reviewer, decision, exact geometry revision, audit event, and outbox atomically."},{"command":"cancel_edit","actor":"Operations author","from":["draft","editing","candidate","review_pending"],"to":"cancelled","event":"geofence_draft.cancelled","idempotency":"Repeated cancellation disposes the editor once and preserves the last committed draft revision."}],"invariants":["Editor output is an application candidate, not evidence of a published provider rule.","Only canonical validated circle or polygon geometry enters review.","Each geometry revision is immutable and linked to the editor generation that produced it.","Purpose, subject scope, schedule intent, and policy version travel with geometry review.","Publishing requires a separately documented, entitled rule contract and creates a separate provider identity mapping.","Provider views, delegates, map layers, credentials, and opaque callback objects are never persisted."],"records":[{"name":"Geofence draft","purpose":"Host-owned intent, current revision, lifecycle state, policy, and optimistic version.","keyFields":["draftId","externalId","purpose","scope","state","geometryRevision","version"]},{"name":"Geometry revision","purpose":"Immutable canonical circle or polygon independent of UI lifetime.","keyFields":["geometryId","mode","coordinates","radiusMeters","canonicalHash","sourceGeneration"]},{"name":"Review decision","purpose":"Attributable approval or rework request for an exact geometry and policy version.","keyFields":["reviewId","geometryId","reviewer","decision","reason","decidedAt"]},{"name":"Publication boundary","purpose":"Selection record for a future provider rule adapter without inventing a rule ID.","keyFields":["draftId","adapterStatus","entitlementReference","requiredContract","selectedAt"]}],"failures":[{"trigger":"Editor returns invalid or unsafe geometry","detection":"Canonical validation finds missing points, self-intersection, invalid radius, excessive area, or policy bounds failure.","recovery":"Keep the candidate uncommitted, explain the exact constraint, and reopen a new editor generation."},{"trigger":"Callback arrives after view disposal","detection":"The delegate generation is inactive or differs from the aggregate's editor generation.","recovery":"Ignore it and clean up provider resources without changing the current draft."},{"trigger":"Two authors edit the same draft","detection":"The submitted geometry references an older aggregate or geometry revision.","recovery":"Return a conflict with the current revision and require an intentional new edit."},{"trigger":"No authoritative publication contract is available","detection":"The selected environment lacks a documented provider command, entitlement, response, or rule identity contract.","recovery":"Keep the artifact approved_draft and route contract selection to an administrator; never fabricate publication success."}],"observability":["Editor open, cancel, and result by component version and geometry mode","Validation failures by bounded reason","Geometry revision count and review turnaround","Stale generation and optimistic version conflicts","Approved drafts awaiting publication-contract selection","Publication adapter outcome only after a separate authoritative contract is configured","Audit and outbox delivery health"],"website":"/journeys/ios-geofence-draft"}],"evidence":{"contracts":[{"slug":"intouch-post-trips-this-api-will-create-a-trip","method":"POST","path":"/trips","summary":"This API will create a trip.","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"command","website":"/api-reference/intouch-post-trips-this-api-will-create-a-trip"},{"slug":"intouch-get-trips-this-api-will-get-all-the-trips-for-a-user","method":"GET","path":"/trips","summary":"This API will get all the trips for a user.","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"observe","website":"/api-reference/intouch-get-trips-this-api-will-get-all-the-trips-for-a-user"},{"slug":"intouch-get-trips-id-gets-the-details-of-a-single-trip","method":"GET","path":"/trips/{id}","summary":"Gets the details of a single trip","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"observe","website":"/api-reference/intouch-get-trips-id-gets-the-details-of-a-single-trip"},{"slug":"intouch-post-trips-id-close-post-api-to-close-a-trip","method":"POST","path":"/trips/{id}/close","summary":"POST API to close a trip.","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"command","website":"/api-reference/intouch-post-trips-id-close-post-api-to-close-a-trip"},{"slug":"intouch-get-devices-gets-the-live-data-of-devices","method":"GET","path":"/devices","summary":"Gets the live data of devices.","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"observe","website":"/api-reference/intouch-get-devices-gets-the-live-data-of-devices"},{"slug":"intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device","method":"GET","path":"/devices/{deviceId}/events","summary":"Gets the historical location events of a device.","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"observe","website":"/api-reference/intouch-get-devices-deviceid-events-gets-the-historical-location-events-of-a-device"},{"slug":"intouch-post-geofences-create-a-new-geofence","method":"POST","path":"/geofences","summary":"Create A New Geofence","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"command","website":"/api-reference/intouch-post-geofences-create-a-new-geofence"},{"slug":"intouch-get-geofences-id-get-a-single-or-multiple-geofence-s","method":"GET","path":"/geofences/{id}","summary":"Get A Single Or Multiple Geofence(s).","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"observe","website":"/api-reference/intouch-get-geofences-id-get-a-single-or-multiple-geofence-s"},{"slug":"intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences","method":"GET","path":"/geofences/activities","summary":"Get all the activities done by devices w.r.t various geofences","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"observe","website":"/api-reference/intouch-get-geofences-activities-get-all-the-activities-done-by-devices-w-r-t-various-geofences"},{"slug":"intouch-post-geofences-id-update-a-geofence","method":"POST","path":"/geofences/{id}","summary":"Update A Geofence.","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"command","website":"/api-reference/intouch-post-geofences-id-update-a-geofence"},{"slug":"intouch-delete-geofences-id-delete-a-geofence","method":"DELETE","path":"/geofences/{id}","summary":"Delete A Geofence.","contractStatus":"legacy-source","stateModel":"stateful","journeyRole":"retire","website":"/api-reference/intouch-delete-geofences-id-delete-a-geofence"}],"guides":[{"slug":"mappls-intouch-rest-apis","title":"Mappls Intouch REST Apis","summary":"A Mappls rest api for routes navigation, tracking telematics, capture feedback, identity platform across REST.","kind":"REST API","maturity":"current","platforms":["REST"],"website":"/reference/mappls-intouch-rest-apis"},{"slug":"mappls-intouch-android-sdk","title":"Mappls Intouch Android SDK","summary":"A Mappls sdk for tracking telematics, workforce, gis analytics, widgets deep links, capture feedback across Android.","kind":"SDK","maturity":"current","platforms":["Android"],"website":"/reference/mappls-intouch-android-sdk"},{"slug":"mappls-intouch-ios-sdk","title":"[Mappls Intouch SDK]()","summary":"A Mappls sdk for tracking telematics, workforce, gis analytics, capture feedback across iOS.","kind":"SDK","maturity":"current","platforms":["iOS"],"website":"/reference/mappls-intouch-ios-sdk"},{"slug":"mappls-intouch-ios-distribution","title":"Mappls Intouch IOS Distribution","summary":"Mappls Intouch iOS Native for iOS distributed via the SPM (Swift Package Manager).","kind":"Distribution","maturity":"distribution","platforms":["iOS"],"website":"/reference/mappls-intouch-ios-distribution"},{"slug":"mappls-intouch-ios-distribution-base","title":"Mappls Intouch IOS Distribution Base","summary":"A versioned iOS distribution package used to integrate tracking telematics into an application.","kind":"Distribution","maturity":"distribution","platforms":["iOS"],"website":"/reference/mappls-intouch-ios-distribution-base"},{"slug":"mapmyindia-intouch-ios-sdk","title":"MapmyIndia Intouch iOS SDK","summary":"A Mappls sdk for maps, tracking telematics, workforce, gis analytics, identity platform across iOS.","kind":"SDK","maturity":"deprecated","platforms":["iOS"],"website":"/reference/mapmyindia-intouch-ios-sdk"},{"slug":"mappls-react-native-intouch-sdk","title":"Mappls Intouch React Native SDK","summary":"This SDK is wrapper for ReactNative on Native SDKs (IntouchCore, IntouchAPI) to support on Android and iOS.","kind":"SDK","maturity":"current","platforms":["React Native"],"website":"/reference/mappls-react-native-intouch-sdk"},{"slug":"mapmyindia-intouch-web-plugins","title":"Mapmyindia Intouch Web Plugins","summary":"A Mappls widget for tracking telematics, widgets deep links, capture feedback across Web, Widgets/Deep links.","kind":"Widget","maturity":"legacy","platforms":["Web","Widgets/Deep links"],"website":"/reference/mapmyindia-intouch-web-plugins"},{"slug":"mappls-geofence-ui-ios-distribution","title":"MapplsGeofenceUI Plugin for iOS","summary":"Mappls Geofence UI Native for iOS distributed via the SPM (Swift Package Manager).","kind":"Distribution","maturity":"distribution","platforms":["iOS"],"website":"/reference/mappls-geofence-ui-ios-distribution"},{"slug":"mappls-geofence-ui-ios-distribution-base","title":"MapplsGeofenceUI Plugin for iOS","summary":"A versioned iOS distribution package used to integrate maps, routes navigation, tracking telematics, widgets deep links, capture feedback, identity platform into an application.","kind":"Distribution","maturity":"distribution","platforms":["iOS"],"website":"/reference/mappls-geofence-ui-ios-distribution-base"}],"samples":[{"slug":"delivery-control-tower","name":"Delivery Control Tower","description":"Track live orders, explain ETA risk, replay a trip, and handle delivery exceptions.","stack":["Node.js","Browser UI","InTouch adapter"],"implementation":"full-stack-reference","verifiedTestCount":7,"downloadPath":"/downloads/delivery-control-tower.zip","website":"/samples/delivery-control-tower"},{"slug":"fleet-geofence","name":"Fleet Geofence Monitor","description":"Design zones and run an actionable live enter/exit event queue.","stack":["Node.js","Browser UI","InTouch adapter"],"implementation":"full-stack-reference","verifiedTestCount":7,"downloadPath":"/downloads/fleet-geofence.zip","website":"/samples/fleet-geofence"},{"slug":"deep-link-journey-host","name":"Deep-link & Native UI Journey Host","description":"Run complete direction-planning and geofence-draft lifecycles around Mappls iOS UI adapters, with an exact documented navigation-link fallback and no invented callback or provider publication claim.","stack":["Node.js","Responsive two-lane journey UI","iOS native fixture adapters","Durable evidence store"],"implementation":"full-stack-reference","verifiedTestCount":11,"downloadPath":"/downloads/deep-link-journey-host.zip","website":"/samples/deep-link-journey-host"}],"tutorials":[{"slug":"delivery-eta","title":"Track a delivery with a trustworthy ETA","outcome":"A stateful live-delivery journey with recovery and replay.","level":"Advanced","duration":"90 min","website":"/tutorials/delivery-eta"},{"slug":"fleet-geofences","title":"Build fleet geofence operations","outcome":"An operations-ready geofence monitor.","level":"Advanced","duration":"75 min","website":"/tutorials/fleet-geofences"},{"slug":"a2a-solution-coordination","title":"Coordinate a complete Mappls A2A journey","outcome":"A restart-safe OAuth-capable host that keeps transport identity, provider-read purpose, protocol completion, human acceptance, entitlement, writes, and production approval separate.","level":"Advanced","duration":"90 min","website":"/tutorials/a2a-solution-coordination"},{"slug":"webhook-reliability","title":"Consume Mappls events exactly once in effect","outcome":"A production webhook ingestion pipeline.","level":"Advanced","duration":"55 min","website":"/tutorials/webhook-reliability"},{"slug":"oauth-server-integration","title":"Call Mappls safely from a trusted server","outcome":"A credential-safe live server boundary with typed errors, timeout, retry, and provider provenance.","level":"Intermediate","duration":"35 min","website":"/tutorials/oauth-server-integration"},{"slug":"intouch-trip-lifecycle","title":"Reconcile a complete InTouch trip lifecycle","outcome":"A restart-safe connected trip with replay, late evidence, and closure reconciliation.","level":"Advanced","duration":"2 hr","website":"/tutorials/intouch-trip-lifecycle"},{"slug":"ios-sdk-production-readiness","title":"Qualify an iOS Mappls release","outcome":"A clean-device iOS qualification record spanning SDK, widget, tracking, and distribution boundaries.","level":"Advanced","duration":"2 hr","website":"/tutorials/ios-sdk-production-readiness"},{"slug":"ios-direction-geofence-handoffs","title":"Build restart-safe iOS direction and geofence handoffs","outcome":"Two tested, durable iOS handoff journeys with explicit provider and application evidence boundaries.","level":"Advanced","duration":"95 min","website":"/tutorials/ios-direction-geofence-handoffs"},{"slug":"react-native-native-parity","title":"Qualify React Native native parity","outcome":"One JavaScript contract backed by independently qualified Android and iOS behavior.","level":"Advanced","duration":"100 min","website":"/tutorials/react-native-native-parity"},{"slug":"widget-host-production","title":"Operate widgets as untrusted lifecycle surfaces","outcome":"A restart-safe host journey with exact-origin validation and a complete non-widget fallback.","level":"Advanced","duration":"85 min","website":"/tutorials/widget-host-production"}],"useCases":[{"slug":"last-mile-delivery","title":"A delivery promise customers can trust","industry":"Logistics","outcome":"Fewer failed deliveries and a live, explainable ETA from checkout to doorstep.","website":"/use-cases/last-mile-delivery"},{"slug":"ride-hailing","title":"A pickup flow that survives the real world","industry":"Mobility","outcome":"Shorter pickup times with fewer calls, cancellations, and unsafe rendezvous points.","website":"/use-cases/ride-hailing"},{"slug":"energy-grid-resilience","title":"Restore the grid from alarm to verified service","industry":"Energy","outcome":"Faster, safer restoration with an explainable view of affected assets, customers, crews, and residual risk.","website":"/use-cases/energy-grid-resilience"},{"slug":"hospital-care-logistics","title":"Coordinate time-critical care without losing custody","industry":"Healthcare","outcome":"Shorter transfer and specimen journeys with fewer missed hand-offs and a complete chain of operational custody.","website":"/use-cases/hospital-care-logistics"},{"slug":"emergency-response","title":"Route coordinated response under pressure","industry":"Public safety","outcome":"Reduced time to scene and safer decisions across dispatch, responders, and command.","website":"/use-cases/emergency-response"},{"slug":"smart-city-operations","title":"A living operations map for the city","industry":"Government","outcome":"One governed view from daily operations to infrastructure investment planning.","website":"/use-cases/smart-city-operations"},{"slug":"connected-vehicle","title":"Navigation built for intermittent connectivity","industry":"Automotive","outcome":"Reliable guidance across coverage gaps without giving up traffic, search freshness, or safety.","website":"/use-cases/connected-vehicle"},{"slug":"aviation-ground-operations","title":"Run a safe, punctual airport turnaround","industry":"Aviation","outcome":"More predictable departures with safer vehicle movement and attributable hand-offs across airport and airline teams.","website":"/use-cases/aviation-ground-operations"},{"slug":"agriculture-field-ops","title":"Coordinate field operations across every plot","industry":"Agriculture","outcome":"Less travel and better traceability for inspection, inputs, harvest, and compliance.","website":"/use-cases/agriculture-field-ops"},{"slug":"mining-haulage-safety","title":"Move material safely across a changing mine","industry":"Mining","outcome":"Higher productive haulage with fewer route conflicts, stale-map movements, and unexplained cycle losses.","website":"/use-cases/mining-haulage-safety"}]},"releaseGates":["Every command has tenant, actor, purpose, idempotency, expected-version, and authorization evidence.","Every state transition has an objective evidence rule and an explicit recovery path.","Provider and business identities remain distinct, versioned, and reconcilable.","Timeout, retry, duplicate, late, out-of-order, conflict, restart, and outage paths are tested.","Sensitive location, media, identity, and operational evidence has consent, access, retention, and redaction policy.","Audit and outbox commit atomically; signing, delivery, dead-letter, replay, and lease fencing are verified.","Operators can find one aggregate, explain its state, repair safely, and prove who acted.","Live Mappls entitlement, quota, regional behavior, callbacks, and exact provider contracts are validated before production."],"handoffs":{"website":"https://developer.mappls.com/tools/stateful?product=intouch-telematics","api":"https://developer.mappls.com/api/stateful-plan?product=intouch-telematics","console":"https://developer.mappls.com/console/apps","resource":"mappls://catalog/stateful","tool":"mappls_plan_stateful_integration"},"credentialRule":"The planner accepts no credential, token, secret, precise location, media, or provider resource identifier."}